java
文章平均质量分 74
liaokunxian
记录在学习过程中的一些笔记和总结
展开
-
ElasticsearchRestTemplate entity content is too long 最大字节长度限制修改
依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>报错Caused by: org.apache.http.ContentTooLongException: entity content is to原创 2021-04-20 00:05:56 · 5796 阅读 · 11 评论 -
Collections.synchronizedList和CopyOnWriteArrayList的选择
背景在多线程环境下ArrayList是线程不安全的,所以需要使用线程安全的List,我第一时间使用的是Collections.synchronizedList(new Arraylist<>()),但是在实际使用过程中却发生了安全事件。测试当前存在一个类IntegerList,该类对象在多线程环境中添加元素和获取获取public class IntegerList { final private List<Integer> integerList; pub原创 2021-04-15 17:12:47 · 937 阅读 · 0 评论 -
解析JDK1.7 HashMap 头插法生成的环形链表死循环问题
背景在JDK1.7中HashMap使用头插法来添加同一位置上的节点,但是在并发的情况下使用HashMap,在进行resize()扩容的过程中,链表可能会形成环状,当在读取HashMap元素的时候会出现死循环,CPU占用标高,服务器崩溃的问题。扩容前正常 resize() 后并发 resize() 形成环状在下面我会说明是如何生成该环状正常扩容resize()的过程以下执行的过程是在同一链表元素的key值rehash后落到同一坐标上为基础我们需要关注的是HashMap的resize()方原创 2021-03-25 19:02:04 · 5650 阅读 · 3 评论 -
Spring循环依赖图解
循环依赖的情况如下所示A依赖B,B依赖A,形成了循环的依赖class A { B b; }class B { A a; }在Spring中AOP是很常用的,被AOP切入的Bean,最后生成的是被代理的BeanSpring解决循环依赖的前提Bean是单例的不全是构造器注入Bean循环依赖的三级缓存我们都知道Spring使用了三级缓存来解决了循环依赖,但是他们的具体流程必须要懂获取Bean的过程所有的Bean的获取都是通过BeanFactory中的getBean原创 2021-03-17 17:17:41 · 495 阅读 · 0 评论 -
Srping MVC处理HTTP请求过程
背景首先,我们要知道通过HTTP请求访问Java后端程序,其实就是访问Servlet,我们编写的Servlet程序部署在实现了Servlet规范的Java Web服务器上,比如我们最常用的Tomcat服务器,它会接收浏览器发过来的HTTP请求,然后将请求转发到对应的Servlet中,在Servlet中对请求进行业务逻辑处理后,将结果返回。Servlet的访问过程访问顺序如下: Tomcat->ApplicationFilterChain->Filter-1->Filter-2->原创 2021-01-28 00:00:55 · 157 阅读 · 0 评论 -
Spring事务传播级别REQUIRED和NOT_SUPPORTED测试
背景Spring为了让在同一个方法下处理不同的事务,于是有了事务传播级别REQUIRED当前线程没有事务,会新建一个事务,如果存在事务,则使用该事务NOT_SUPPORTED当前线程存在事务,挂起当前事务,执行完后,恢复挂起的事务事例测试同一个声明式事务下的REQUIRED和NOT_SUPPORTEDTestPropagationpublic class TestPropagation { private UserService userService; /**原创 2021-01-12 18:42:05 · 14055 阅读 · 6 评论 -
Java内存区域
运行时区域程序计数器线程私有,各线程计数器互不影响,独立存储。程序计数器是一块较小的空间,它可以看作是当前线程所执行的字节码的行号指示器(地址)。在虚拟机的概念模型里,字节码解释器工作时是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。如果执行的是native方法,这个计数器的值为空Java虚拟机栈线程私有的,生命周期与线程相同。虚拟机栈描述的是Java方法自行的内存模型:每个方法在执行的同时都会创建一个栈原创 2021-01-06 18:45:36 · 97 阅读 · 0 评论 -
Spring Bean加载过程
加载的时机非懒加载在refresh()的finishBeanFactoryInitialization()进行加载懒加载第一次调用beanFacoty.getBean()进行加载执行getBean()加载getBean()doGetBean()transformedBeanName(beanName)获取真正的BeanName 可能有别名从缓存获取getSingleton(beanName)从缓存中获取getObjectForBeanInstan原创 2021-01-06 18:27:11 · 365 阅读 · 0 评论 -
Spring IoC容器初始化过程
Spring IoC容器概述IoC容器和依赖反转模式如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测试性的降低,这对复杂的面向对象系统的设计是非常不利的。在Spring中,IoC容器是实现这个模式的载体,它可以在对象生成或初始化时直接将数据注入到对象中,也可以通过将对象的引用注入到对象数据域中的方式来注入对方法调用的依赖。这种依赖注入是可以递归的,对象被逐层注入。如何翻转依赖的控制把控制权从业务对象手中转交到平台或者框架中,是降低面向对象系统设计复杂性和提高面向对原创 2021-01-06 15:59:51 · 273 阅读 · 0 评论 -
Spring AOP初始化及执行过程-源码解析
背景当对不同的没有继承关系的对象引入一些公共的行为,比如记录日志,校验安全等,需要编写重复的代码,对一个系统的可维护性来说是非常不友好的,于是,引入了面向切面编程AOP不同于面向对象编程所关注的纵向编程,AOP所关注的是横向编程,为不同的对象方法织入切面切点 Point决定通知作用于哪些连接点通知 Advice决定在连接点做什么,为切面增强提供织入接口通知器 Advisor用于结合Point和AdviceSpring AOP 使用aspectj支持AOP在xml原创 2021-01-05 19:49:21 · 1006 阅读 · 6 评论