02 2023 档案
摘要:问题复现: 使用Java的steam().paralleStream(),foreach()方法向ArrayList添加数据,导致ArrayList中出现空值,代码如下: public static void main(String[] args) { List<Integer> a = new A
阅读全文
摘要:JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈。 测试代码1如下: @Test public void test01() { String str2 = new StringBuilder("12").ap
阅读全文
摘要:程序计数器 用于标识线程执行到了字节码文件(class文件)的哪一行,当执行native方法时,值为undefined,各个线程私有 Java虚拟机栈 每个线程独有,每个方法执行时会创建一个栈帧,用于存储局部变量表等方法信息,即方法的执行会伴随着一个栈帧的入栈出栈。 栈帧的组成 如果线程请求的栈深度
阅读全文
摘要:问题复现: 明明在拦截器里配置了跨域,就是不生效,使用PostMan等后端调试工具调试,均正常,Response中有Access-Control-Allow-Origin: *,这个Header,但是前端一直反馈,通过浏览器js代码fetch报跨域问题。如图: 嗯,,,看看浏览器请求: 确实在报CO
阅读全文
摘要:事务特性 ACID: (1)原子性(Atomicity) 一个事务由一系列操作组成,要么全部生效,要么全不生效,不存在部分生效的情况 (2)一致性(Consistency) 事务执行完成后,需要保证数据一致性,满足业务规则,比如余额不能是负的 (3)隔离性(Isolation) 多个事务对同一数据的
阅读全文
摘要:默认注入类型 多个同类型Bean 注入失败 依赖 使用目标(@Target) @AutoWired 通过type 默认首先安装属性名称进行注入 结合@Qualifier注解(value属性)设置注入的Bean 或通过@Primary注解优先选择某个Bean,优先级低于@Qualifier 可以通过r
阅读全文
摘要:@Configuration 同@Component,将标注的类作为一个组件,区别是会使用Cglib动态代理,因此使用该注解的类不能是final的 与@Component的区别可见:Configuration和@Component的区别 Cglib动态代理和JDK动态代理区别可见:Cglib动态代理
阅读全文
摘要:首先一句话: @Configuration修饰的类会被Cglib动态代理,@Component不会。 详细: Cglib动态代理生成当前对象的子类Class,并对方法拦截,多次调用@Bean方法时直接从BeanFactory之中获取,得到同一个对象。 实际是因为 注解下有个proxyBeanMeth
阅读全文
摘要:Http常用请求方法对比 请求方法 常见参数传递方式 是否幂等 说明 API举例 GET URL,注意:Http协议对URL长度没有限制,所谓的限制是浏览器和处理服务器的 幂等 用于查询 批量查询:/shapes 单个查询:/shapes/1 POST RequestBody 不幂等 一般用于创建
阅读全文
摘要:问题复现: 单测中@PostConstruct修饰的方法被多次执行 原因: @PostConstruct在Spring中常用于在构造函数后初始化对象,执行顺序如下: 构造方法->成员变量注入->PostConstruct方法 单测中由于某些原因,只希望初始化执行一次(当然一般是使用@BeforeCl
阅读全文
摘要:@Transactional属于是Spring的常用事务处理注解了,最近在开发时偶然发现这个东西竟然不是100%生效的。 问题重现: 测试一个批处理方法,方法上加了@Transactional后执行,因为加了事务处理注解,没怎么关注SQL执行顺序(反正对事务来说都是原子性的),debug过程发现Mo
阅读全文