自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 Spring 注解

@Import开发使用的场景不多,主要功能是导入一个Bean,让spring 容器装载代码说明public @interface Import { /** 导入一个类名称 * {@link Configuration @Configuration}, {@link ImportSelector}, * {@link ImportBeanDefinitionRegistrar}, or regular component classes to import. */ Class<

2022-05-22 23:53:46 157

原创 spring-boot-devtools 热部署

devtools 原理devtools的原理底层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。jar包<dependencies> <depende

2022-05-22 23:46:49 288

原创 @SpringBootApplication 注解源码解析

@SpringBootApplication 定义@SpringBootApplication 是一个组合注解,主要包含三个注解@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}), @Filter( type =

2022-05-22 15:59:48 333

原创 Spring 官方文档概览

Spring 特点spring is everywhere spring受到全世界Java开发人员的信赖Spring 大牌公司都在用 阿里巴巴,亚马逊,谷歌,微软等。Spring is flexible通过IOC 和 DI 实现了其灵活性Spring is productive开发效率高,并且能够提供丰富的功能和基础架构(Spring Boot与Spring Cloud)Spring is fast性能很好,可以支持reactive 的编程模式;以及spring boot

2022-05-21 10:45:40 1144

原创 记一次 java 异常被吃掉,未往外抛出

现象在排查线上问题时候,发现线程无故中断。觉得很奇怪,首先肯定联想到是程序运行异常,中断了线程,未走到方法最后日志部分,但是执行了finally 里面的程序。代码结构 @Test public void testTryCatch(){ try { m1(2); log.info("开始执行完成m1()"); }catch (Exception e){ log.error("程序报错",e);

2022-05-21 06:39:26 1473

原创 Spring WebClient 与 RestTemplate 比较

Spring RestTemplateRestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。长期以来,Spring 一直把 RestTemplate 作为默认 Web 客户端。RestTemplate 使用 Java Servlet API,这种模型在底层会为每个请求分配处理线程。这意味着线程会一

2022-05-19 08:20:53 695

原创 doDispatch流程解析

doService是作为springmvc承接Servlet的入口函数,调用doDispatch实现。doDispatch这个函数核心逻辑如下:1.根据request所含有的路径属性查找handlerMapping2.找到handler后,要根据handler 查找adapter,这里的adpter的作用就是屏蔽handler的实现差别,提供一致的invoke调用。3.找到adapter后就调用handle接口,来进行最核心的业务请求protected void doDispatch(HttpSe.

2022-05-08 13:07:50 539

原创 过滤器,拦截器,aop 比较

Filter过滤器过滤器拦截web访问url地址。 严格意义上讲,filter只是适用于web中,依赖于Servlet容器,利用Java的回调机制进行实现。Filter过滤器:和框架无关,可以控制最初的http请求,但是更细一点的类和方法控制不了。过滤器可以拦截到方法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出像响应的过滤操作,比如设置字符编码,鉴权操作等Interceptor拦截器拦截器拦截以 .action

2022-05-08 12:47:37 774

原创 RequestMappingHandlerMapping详解

我们先理简单梳理一个关系关系梳理spring ioc 是spring的核心,用来管理spring bean的生命周期MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式spring mvc 是spring的一个独立的模块,就像AOP一样在spring mvc中把web框架和spring ioc融合在一起,是通过ContextLoaderListener监听servlet上下文的创建后来加载父容器完成的,然后通过配置一个serv

2022-05-08 12:17:04 5772

原创 Spring MVC异常处理机制

核心接口HandlerExceptionExceptionResolver用于解析请求处理过程中出现的异常;主要功能:给ModelAndView设置内容、设置response相关的属性;对应的子类AbstractHandlerMethodExceptionResolverResponseStatusExceptionResolverAnnotationMethodHandlerExceptionResolverDefaultHandlerExceptionResolverSimpleMa

2022-05-08 11:07:01 233

原创 WebMvcConfigurationSupport 详解

四个MVC配置类的关系WebMvcConfigurerAdapterWebMvcConfigurerWebMvcConfigurationSupportWebMvcAutoConfigurationWebMvcConfigurer 为接口WebMvcConfigurerAdapter 是 WebMvcConfigurer 的实现类大部分为空方法,是 WebMvcConfigurer的子类实现,由于Java8中可以使用default关键字为接口添加默认方法,为在源代码中spring5.0之后就

2022-05-03 19:45:17 15505

转载 java 内存模型

转载于:https://www.cnblogs.com/lifullmoon/p/15376243.html‘为什么要学习并发编程对于 “我们为什么要学习并发编程?” 这个问题,就好比 “我们为什么要学习政治?” 一样,也许你平常很少接触到,然后背了一堆 “正确且伟大无比的废话”,最终沦为八股被快速遗忘。直到我开始去深入了解这块知识而不是盲目背诵的时候,我才明白,它正确且伟大无比,但不是废话。尽管并发编程的各种底层原理以及其庞大的知识体系容易让人心生畏惧,但是 Java 语言和 Java 虚拟机

2022-03-06 15:00:28 88

原创 Spring Bean 生命周期

BeanFactoryPostProcessor接口 只会执行一次BeanPostProcessor接口 有几个自定义的Bean 就会执行几次BeanFactoryPostProcessor(Bean工厂的后置处理器)@Componentpublic class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { public MyBeanFactoryPostProcessor() { Sys.

2022-03-06 10:59:16 150

转载 Spring中的可扩展接口

1.监听器Listener(点此连接,执行流程带源码分析及demo)2.bean定义的后置处理器(BeanDefinitionRegistryPostProcessor)和bean工厂的后置处理器(BeanFactoryPostProcessor):详见Spring IOC(2)----如何注册bean定义(点此连接,带源码分析)的第9点和10点3.Aware接口:主要用于给对象注入某个属性的值。下层有多个扩展接口BeanNameAware 实现setBeanName()方法,注入该bean在容器的n

2022-03-06 09:48:38 254

原创 Spring监听器---ApplicationListener

https://www.cnblogs.com/nijunyang/p/12339757.html

2022-03-06 09:45:13 169

原创 如何获取Spring 容器

方法一@Componentpublic class SpringContextUtils implements ApplicationContextAware { private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext context) throws BeansException {

2022-03-06 09:31:42 1608

转载 Spring中的InitializingBean接口的使用

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。import org.springframework.beans.factory.InitializingBean;public class TestInitializingBean implements InitializingBean{ @Override public void afterPropertie

2022-03-06 09:01:31 126

原创 虚拟机类加载机制

概述Java 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。Java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。类加载时机类加载分为三个步骤:加载,连接,初始化;如下图 , 是一个类从加载到使用及卸载的全部生命周期,图片来自参考资料;加载,验证,准备,初始化和卸载这五个阶段的顺序是确定的,类型的加载必须按照这种顺序按部就班地开始。严格规定有且只有6

2022-01-17 23:18:00 349

原创 Java故障处理工具

如何定位系统问题异常堆栈日志(系统日志,虚拟机日志)线程快照堆转储快照jps 命令查看虚拟机进程状况工具,列出正在运行的虚拟机进程jps [options] [ hostid ]options : -q,-m,-l,-v常用命令 jps -l :输出主类的全名。如果进行执行的是JAR包,则输出JAR路径jstat统计虚拟机信息监视工具,用于监视虚拟机各种运行状态信息的命令行工具。jsat [option vmid [interval] [s|ms] [count] ]opt

2022-01-16 13:11:08 101

原创 排查线程wait的问题

jps -l => 获取对应的 pidjatsck -l pid 获取对应的线程信息jstack -l 52740 | grep -500 “main” 获取对应的线程堆栈

2022-01-11 15:34:17 169

原创 Java垃圾收集器

收集算法是内存回收的方法论,垃圾收集器是内存回收的实践者。《Java虚拟机规范》中对垃圾收集器应该如何实现并没有做出任何规定,因此不同的厂商,不同版本的虚拟机所包含的垃圾是收集器可能会差别很大。新生代Serial标记-复制算法单线程适用于运行在客户端模式下的虚拟机配合的老年代收集器:CMS,Serial Old(MSC)ParNew多线程版本的 Serial标记-复制算法jdk1.7之前首选新生代收集器配合的老年代收集器:CMS,Serial Old(MSC)使用 -XX:+U

2022-01-09 15:21:55 274

原创 各种GC名词解释

Partial GC指目标对象不是完全收集整个Java堆的垃圾收集其中又分为新生代收集(Minor GC / Young GC):指目标只是新生代的垃圾收集老年代收集(Major GC / Old GC):指目标只是老年代的垃圾收集。目前只有CMS 收集器会有单独收集老年代的行为,混合收集(Mixed GC): 指目标收集时整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为整堆收集(Full GC)收集整个Java堆和方法区的垃圾收集...

2022-01-09 14:59:48 406

原创 JVM参数配置

-server -Xms4g -Xmx4g -Xmn2g堆内存最大和最小一样4g,年轻代内存2g-XX:MetaspaceSize=256m-XX:MaxMetaspaceSize=512m元空间区(Matespace)或永久代(Permanent Generation),类比于是方法区https://blog.csdn.net/wangyili002/article/details/105584663MetaspaceSize表示的并非是元空间的大小,它的含义是:主要控制matesac

2022-01-09 12:05:22 202

原创 java.lang.OutOfMemoryError: Java heap space

堆内存溢出怎么排查内存溢出现象模拟内存溢出public class HeadOOM { static class OOMObject { } public static void main(String[] args) { List<OOMObject> list = new ArrayList<>(); while (true){ list.add(new OOMObject());

2021-12-18 00:34:41 357

原创 Java 内存区域

这里写目录标题1:概述2:运行时数据区域3:HotSpot虚拟机4:内存溢出1:概述Java 与C++ 之间有一堵由内存动态和垃圾收集技术所围成的墙,墙外的人想进行,墙里的人想出来。C,C++ 对于开发人员来说,在内存区域他们拥有最高的权利,对于每一个对象的“所有权”,又肩负着每一个对象的生命从开始到结束。对于Java 在虚拟机自动内存管理机制的帮助下,不需要考虑对象的内存管理,但是出现内存泄漏之类的问题,如果不了解虚拟机,修复问题会是一件很艰难的工作2:运行时数据区域3:HotSpot虚拟机

2021-12-08 23:52:40 540

原创 git 忽略 .idea文件

多人开发时,会出现明明在gitignore中忽略了.idea文件夹,但是提交时仍旧会出现.idea内文件变动的情况原因.idea已经被git跟踪,之后再加入.gitignore后是没有作用的解决办法清除.idea的git缓存git rm -r --cached .idea1.gitignore中添加.idea————————————————...

2021-12-03 19:45:03 440

原创 程序员实用快捷键整理(未完待续)

⌘ 对应 Command.⌥ 对应 Option (也称为Alt)⌃ 对应 Control.⇧ 对应 Shift.idea 篇切换窗口:ctrl+alt+[ ctrl+alt+] windowsCommand+` mac搜索shift(双击) windows ;ctrl + shift + F查看方法使用Command + shift + Hchrome 浏览器篇重新打开关闭的浏览器Command + shift + T截图1:F122:ctrl +

2021-12-02 11:02:49 486

原创 brew install node 报错

使用 brew install node 安装 node.js 运行过程中发生报错:Error: Failure while executing; `tar --extract --no-same-owner --file /Users/**/Library/Caches/Homebrew/downloads/504c071160d6c561cd2e85b7a09fb5c8bf5fa071085fd15f1dda042c94378cdf--c-ares-1.17.2.arm64_big_sur.bottl

2021-11-17 12:42:53 1756

原创 两个线程交替打印1-100

两个线程交替打印1-1001:通过synchronized 和 wait(), notify() 进行交替打印package com.jTest.leet;public class AlternatelyPrint { private static final Object lock = new Object(); //表示对象锁 private static volatile int index = 1; private static volatile boolea

2021-06-23 08:59:21 178

原创 阿里拍卖面试题:实现一个重拍序

阿里拍卖面试题:实现一个重排算法:给定一个商品列表,商品上有id、类型和分数三个字段。对不同类型的商品按分数从高到低排序。要求排序前后对应类型在列表中的位置保持不变。1、示例:输入的商品列表如下:[10011,1,70][91011,2,90][20011,2,60][30011,1,50][40011,1,10][15011,2,20][16011,1,30][80011,2,80][90011,1,15]类型为1的商品有5个,排序结果为:[10011,1,70],[30011,1

2021-06-23 08:51:51 319

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除