03 2022 档案
摘要:注解基本语法如下 @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ParA { String name(); Str
阅读全文
摘要:方法一: 单个接口实现跨域 在controller 方法上加 @CrossOrigin 注解 方法二 全局跨域处理 自定义 WebMvcConfigurer 注册到容器里,可以执行访问的路径 import org.springframework.context.annotation.Bean; im
阅读全文
摘要:业务发生异常时,避免让用户看到错误信息影响体验 SpringBoot 提供了全局异常处理,可以自定义状态码和错误信息等 官网介绍如下 可以实现 ErrorController 来指定错误路径的跳转 通过使用 ControllerAdvice 注解 也可以通过response 进行回写错误响应信息 样
阅读全文
摘要:代码 @Configuration public class AppConfig { @Bean public Bean1 bean1() { return new Bean1(); } @Bean public Bean2 bean2() { return new Bean2(); } } @Co
阅读全文
摘要:事务的特性:原子性,一致性,持久性,隔离性。 MySQL中 原子性,一致性,持久性 基于 redo log和 undo log,隔离性基于锁和MVCC redo log 分为两个部分:日志缓冲(内存中),日志文件(磁盘中) 记录事务提交数据页的物理修改,用于刷新脏页到磁盘发生错误时,进行数据恢复使用
阅读全文
摘要:insert 使用批量插入 当有多个insert语句时 使用批量插入,如果insert语句太多(例如超过一万条)建议分批插入(例如一次插入一千条,具体看情况) 手动事务提交 主键顺序插入 手动一次性插入大批量数据时,使用insert插入新能比较低。建议使用load命令进行插入 主键 页分裂 Inno
阅读全文
摘要:MySQL执行流程 MySQL 缓存 将sql语句 和 对应的结果集进行存储 存储结构类似于map(sql 作为key的校验比较严格,即使是相同的sql但是格式不一样(例如其中一个包含空格)也会被视为不同的key) mysql 缓存命中比较低,在8.0中已经删除了缓存,低版本中也可以选择关闭 MyS
阅读全文
摘要:等待线程将结果执行完才能向下继续运行,类似于一个程序计数器,只有当计数器为0时代码才能向下运行 使用效果和join 一样但是比join更加灵活,例如可以用于线程池。 只适用于结果没有返回值的,如果结果有返回值还是用Future去获取。 future.get 是阻塞的 ,如果要设置任务超时时间则需要用
阅读全文
摘要:ReentrantLock 支持公平锁和非公平锁(通过构造函数设置),默认情况下为非公平锁 ReentrantLock 内部维护了两个同步器类 NonfairSync(非公平锁) 和 FairSync(公平锁) Sync 继承子AQS(AbstractQueuedSynchronizer) 非公平锁
阅读全文
摘要:volatile主要用途 1、保证可见性 对volatile变量的写指令后会加入写屏障 写屏障:在屏障之前的对共享变量的改动都同步到主存 对volatile变量的读指令前会加入读屏障 读屏障:在该屏障之后对共享变量的读取加载的都是主存中的新数据 2、保证有序性 写屏障保证指令重排序时,不会讲写屏障之
阅读全文
摘要:LongAdder 源码如下 cell的代码 其中Contended注解主要是为了解决不同缓存行数据失效的问题 由于cpu的速度和内存的速度差距太大,在cpu从内存读取数据到寄存器之间有三级缓存(l1,l2,l3),可以提升读取效率(详细可见操作系统)假设cpu1(核心1),cpu2(核心2)同时从
阅读全文
摘要:java对象头结构 Mark Word 数据结构 synchronized 锁升级流程 偏向锁-->轻量级锁-->重量级锁 样例代码: public void test() { synchronized (object) { // 省略 } } 偏向锁过程 当Thread-A 进入 synchron
阅读全文