2026.4.29 第七篇
集合的分类
单列集合:List(有序重复)、Queue(队列结构)、Set(无序不重复) 键值对集合:HashMap、ConcurrentHashMap
有哪些线程安全的集合
CopyOnWriteArrayList、ConcurrentHashMap、HashTable
说一下CopyOnWriteArrayList
CopyOnWrite遵循写时复制原则,读的时候正常读原数组,写的时候创建新数组,在新数组上完成修改,最后把数组引用指向新数组。
说一下你知道的锁
Synchronized:非公平、可重入、不可中断,使用Moniter对象实现,获取所得时候进入Monitor对象,释放锁的时候退出Monitor CAS:一种乐观锁,默认不会发生所冲突,使用CPU原子指令实现,主要依赖旧值、预期值、新值,如果预期值与旧值相同就执行操作,不相同就被其他线程修改了,不执行操作 ReentrantLock:可以是公平锁也可以是非公平锁,可重入,可中断,依赖AQS实现
final修饰变量与引用对象的区别
final 修饰基本数据类型:变量的值不能被修改。 final 修饰引用类型:引用地址不能变,但是对象内部的属性可以变。
线程池的参数
核心线程数 最大线程数 非核心线程存活时间 时间单位 任务队列 线程工厂 拒绝策略
执行流程
如果核心线程数没满就创建核心线程执行任务
核心线程满了就将任务放入任务队列
任务队列满了就创建非核心线程来执行任务
线程数达到最大线程数执行拒绝策略
拒绝策略有哪几种?
DiscardPolicy:直接拒绝但不报错 AbortPolicy:拒绝并报错 DiscardOldestPolicy:抛弃最老的任务 CallerRunsPolicy: 由调用线程执行,
创建线程池的几种方法
Executors 工具类
常见方法:
- Executors.newFixedThreadPool()
- Executors.newSingleThreadExecutor() 不推荐直接使用 Executors 创建线程池,因为可能导致队列过大或线程数过多,引发 OOM。
直接使用 ThreadPoolExecutor
- 推荐手动创建线程池,明确指定核心线程数、最大线程数、任务队列和拒绝策略。
出现慢SQL怎么优化
SQL语句优化
- 避免 select *
- 避免不必要的子查询
- 小表驱动大表
- 分页深时使用游标分页或延迟关联
索引优化(使用覆盖索引)
- 给 where、join、order by、group by 字段建立合适索引
- 使用联合索引
- 尽量使用覆盖索引 使用缓存
- 对热点数据使用 Redis 缓存
explan主要查看哪几个参数
type:访问类型
- const > eq_ref > ref > range > index > ALL key:实际使用到的索引
rows:预估扫描行数
extra:额外信息,using index(索引覆盖)、using index condition(索引下推)、using filesort(文件排序)
索引失效有哪些
对索引列使用函数、表达式运算
OR连接的数据列有一个不是索引列
隐式的类型转换
前模糊查询
联合索引不符合最左前缀
模糊匹配必然会失效吗
不是的,只有%开头的模糊匹配才会失效,%开头的模糊查询不知道从哪开始检索
索引的分类
按数据结构可以分为:B+树索引、hash索引
按存储结构可以分为:聚簇索引、非聚簇索引
按功能分:主键索引、唯一索引、普通索引、前缀索引
按数据列个数可以分为:联合索引、单列索引
讲一下Spring AOP
把日志、权限校验、事务、异常处理、接口耗时统计等公共逻辑,从业务代码中抽离出来,形成切面,然后在不修改业务代码的情况下,增强目标方法。
AOP支持的两种动态代理是什么
JDK 动态代理
- 基于接口生成代理对象
- 要求目标类实现接口
- 代理的是接口方法
CGLIB 动态代理
- 基于继承生成目标类的子类
- 不要求目标类实现接口
- 不能代理 final 类和 final 方法
Spring Bean的作用域
Spring Bean 常见作用域有:
-
singleton 默认作用域,整个 Spring 容器中只有一个 Bean 实例。
-
prototype 每次获取 Bean 都会创建一个新的对象。
事务失效有哪些情况
方法使用private修饰
原因:Spring AOP 代理只能增强可被代理调用的方法,private 方法不能被代理对象重写或拦截。
解决办法:事务方法尽量使用 public 修饰
显式使用this调用事务
原因:this 调用的是当前对象本身,不是 Spring 代理对象,所以不会走 AOP 代理,事务失效。
解决办法:通过代理对象调用,注入自身代理对象
面经地址
熙牛医疗一面 Java后端_牛客网 都是常见的八股
#面经#记录每天Java和Agent面经学习