摘要: 问题复现: 使用Java的steam().paralleStream(),foreach()方法向ArrayList添加数据,导致ArrayList中出现空值,代码如下: public static void main(String[] args) { List<Integer> a = new A 阅读全文
posted @ 2023-02-25 08:35 马儿跑 阅读(72) 评论(0) 推荐(0) 编辑
摘要: JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈。 测试代码1如下: @Test public void test01() { String str2 = new StringBuilder("12").ap 阅读全文
posted @ 2023-02-24 13:53 马儿跑 阅读(52) 评论(0) 推荐(0) 编辑
摘要: 程序计数器 用于标识线程执行到了字节码文件(class文件)的哪一行,当执行native方法时,值为undefined,各个线程私有 Java虚拟机栈 每个线程独有,每个方法执行时会创建一个栈帧,用于存储局部变量表等方法信息,即方法的执行会伴随着一个栈帧的入栈出栈。 栈帧的组成 如果线程请求的栈深度 阅读全文
posted @ 2023-02-23 16:44 马儿跑 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 问题复现: 明明在拦截器里配置了跨域,就是不生效,使用PostMan等后端调试工具调试,均正常,Response中有Access-Control-Allow-Origin: *,这个Header,但是前端一直反馈,通过浏览器js代码fetch报跨域问题。如图: 嗯,,,看看浏览器请求: 确实在报CO 阅读全文
posted @ 2023-02-20 14:02 马儿跑 阅读(754) 评论(0) 推荐(0) 编辑
摘要: 事务特性 ACID: (1)原子性(Atomicity) 一个事务由一系列操作组成,要么全部生效,要么全不生效,不存在部分生效的情况 (2)一致性(Consistency) 事务执行完成后,需要保证数据一致性,满足业务规则,比如余额不能是负的 (3)隔离性(Isolation) 多个事务对同一数据的 阅读全文
posted @ 2023-02-15 15:12 马儿跑 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 默认注入类型 多个同类型Bean 注入失败 依赖 使用目标(@Target) @AutoWired 通过type 默认首先安装属性名称进行注入 结合@Qualifier注解(value属性)设置注入的Bean 或通过@Primary注解优先选择某个Bean,优先级低于@Qualifier 可以通过r 阅读全文
posted @ 2023-02-13 14:03 马儿跑 阅读(75) 评论(0) 推荐(0) 编辑
摘要: @Configuration 同@Component,将标注的类作为一个组件,区别是会使用Cglib动态代理,因此使用该注解的类不能是final的 与@Component的区别可见:Configuration和@Component的区别 Cglib动态代理和JDK动态代理区别可见:Cglib动态代理 阅读全文
posted @ 2023-02-10 15:08 马儿跑 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 首先一句话: @Configuration修饰的类会被Cglib动态代理,@Component不会。 详细: Cglib动态代理生成当前对象的子类Class,并对方法拦截,多次调用@Bean方法时直接从BeanFactory之中获取,得到同一个对象。 实际是因为 注解下有个proxyBeanMeth 阅读全文
posted @ 2023-02-09 20:45 马儿跑 阅读(446) 评论(0) 推荐(0) 编辑
摘要: Http常用请求方法对比 请求方法 常见参数传递方式 是否幂等 说明 API举例 GET URL,注意:Http协议对URL长度没有限制,所谓的限制是浏览器和处理服务器的 幂等 用于查询 批量查询:/shapes 单个查询:/shapes/1 POST RequestBody 不幂等 一般用于创建 阅读全文
posted @ 2023-02-09 10:43 马儿跑 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 问题复现: 单测中@PostConstruct修饰的方法被多次执行 原因: @PostConstruct在Spring中常用于在构造函数后初始化对象,执行顺序如下: 构造方法->成员变量注入->PostConstruct方法 单测中由于某些原因,只希望初始化执行一次(当然一般是使用@BeforeCl 阅读全文
posted @ 2023-02-08 14:15 马儿跑 阅读(513) 评论(0) 推荐(0) 编辑
摘要: @Transactional属于是Spring的常用事务处理注解了,最近在开发时偶然发现这个东西竟然不是100%生效的。 问题重现: 测试一个批处理方法,方法上加了@Transactional后执行,因为加了事务处理注解,没怎么关注SQL执行顺序(反正对事务来说都是原子性的),debug过程发现Mo 阅读全文
posted @ 2023-02-07 14:03 马儿跑 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 职责链模式 Client->A->B->C,避免请求发送者与接收者耦合,将接收者对象连接成一条链,直到有对象处理 命令模式 将请求转换为一个包含与请求相关的所有信息的独立对象。 可根据不同的请求将方法参数化或加入队列等待处理 解释器模式 实现一个表达式接口,用于解释一个特定的上下文。例如:Java代 阅读全文
posted @ 2023-01-29 14:19 马儿跑 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 装饰者模式 组合的方式扩展类。符合开闭原则 外观模式 隐藏子系统接口,提供统一对外服务接口。符合迪米特法制(最少知道原则) 代理模式 使用代理对象控制对原对象的访问,降低系统耦合度。例如:A调用B的计算方法。B在计算方法中调用计算器的计算方法,则B为计算器的代理 适配器模式 通过第三方对象使两个接口 阅读全文
posted @ 2023-01-28 13:21 马儿跑 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 创建型设计模式是对类的实例化过程进行抽象。 简单工厂模式 根据传入参数返回不同对象 缺点:当对象具体类型增加时,需要修改工厂代码,添加新的具体类型判断和生成逻辑,违反了开闭原则 工厂方法模式 不仅将具体对象抽象,同时将工厂也抽象,解决新增加具体类型时需要修改工厂代码的问题,但是需要新建工厂 缺点:维 阅读全文
posted @ 2023-01-20 15:06 马儿跑 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 开闭原则 对扩展开放,对修改关闭。 使用抽象类,接口等构建抽象层,通过实现接口(继承抽象类)的方式构建具体实现。当系统修改时,无需对抽象层代码修改,只需编写新的具体实现类达到扩展的目的 里氏替换原则 对方法method(base),那么它必然可以接受一个子类对象sub 依赖倒置原则 通过抽象来搭建框 阅读全文
posted @ 2023-01-20 13:26 马儿跑 阅读(14) 评论(0) 推荐(0) 编辑