高频知识点

发布时间:2026/8/1 8:58:50
高频知识点 一、MySQL 索引核心1. 聚簇索引 非聚簇索引聚簇索引主键索引叶子节点存整行所有数据。 查主键直接拿到全部数据无需回表速度最快一张表只有一个。非聚簇索引二级索引叶子节点只存索引字段 主键 ID。 查询流程先查二级索引拿主键 →回表查聚簇索引拿整行数据。覆盖索引查询字段全部在二级索引中不需要回表查询速度极快。二、MVCC 事务隔离级别 锁机制1. MVCC多版本并发控制核心undo 日志版本链 readView作用普通 select 走快照读、不加锁、读写不冲突提升并发。2. 四大隔离级别读未提交能读到未提交数据有脏读读已提交 RC每次查询新 readView解决脏读有不可重复读可重复读 RRInnoDB 默认事务全程复用 readView解决脏读、不可重复读串行化全部加锁无并发性能最低3. 行锁、间隙锁、临键锁行锁记录锁锁住已存在的真实数据行作用防止并发修改同一行数据解决脏写间隙锁 Gap Lock最难懂锁住两条数据中间的空白区间不锁已有数据只锁空位作用禁止插入新数据彻底解决幻读临键锁 行锁 间隙锁MySQL RR 级别默认锁范围锁精准主键查询会降级为行锁三、Limit 深分页问题 索引失效1. 深分页慢原因limit 10000,10MySQL先扫描前 10010 条丢弃前 10000 条偏移量越大越慢。2. 优化方案游标分页id 上页最大 id limit 10最优大日志表用ES 检索大表按月水平分表3. 三大索引失效面试必考索引字段做函数运算 / 隐式类型转换like % xx、% xx% 左右模糊匹配联合索引不遵循最左匹配原则四、HashMap 1.7 1.8 区别1. 底层结构JDK1.7数组 单向链表JDK1.8数组 链表 红黑树2. 插入方式1.7头插法→ 并发扩容环形链表、CPU 死循环1.8尾插法→ 解决死循环但依然线程不安全3. 树化阈值链表长度 ≥8 转红黑树节点 ≤6 退化成链表4. 并发问题两个版本都不安全多线程 put 会数据覆盖、丢失数据并发必须用ConcurrentHashMap五、ArrayList LinkedList 选型ArrayList底层动态数组 优点查询快、遍历快、尾部增删快缺点中间、头部增删需要移位性能差 适用查多改少90% 业务首选LinkedList底层双向链表 优点任意位置增删快缺点无随机访问查询慢、占内存大 适用频繁中间增删场景六、线程池七大参数 线程数配置 拒绝策略1. 七大参数corePoolSize核心线程数常驻不回收maximumPoolSize最大线程数keepAliveTime非核心线程空闲超时unit时间单位workQueue阻塞队列threadFactory线程工厂handler拒绝策略2. 线程数配置CPU 密集型N 核IO 密集型短信、接口调用2N13. 四种拒绝策略AbortPolicy 默认直接抛异常DiscardPolicy默默丢任务不报错DiscardOldestPolicy丢弃队列最久任务执行新任务CallerRunsPolicy调用者线程自己执行短信业务常用不丢消息七、Spring IOC AOP Bean 生命周期1. IOC 控制反转对象创建、依赖管理交给 Spring 容器不再手动 new 作用解耦、方便维护、方便扩展2. AOP 面向切面不修改源码对方法横向增强适用日志、事务、权限、耗时统计、统一拦截3. Bean 生命周期实例化 → 属性填充 → 初始化前置后置 → 可用 → 容器关闭销毁4. 项目三个核心组件作用RestControllerAdvice全局统一异常处理统一返回前端格式CorsFilter解决前后端跨域拦截器 Interceptortoken 校验、登录拦截、黑名单拦截八、Spring 事务传播 事务失效1. 事务传播行为带事务的方法调用另一个带事务方法事务合并 / 新建的规则2. 高频事务失效场景必背本类内部方法调用事务不生效try-catch 捕获异常Spring 感知不到异常不会回滚方法不是 public业务后果批量短信部分成功、部分失败 →数据不一致、脏数据九、Redis 缓存三大问题穿透、击穿、雪崩1. 缓存穿透现象Redis 没有、数据库也没有大量请求打 DB 解决空值缓存 布隆过滤器2. 缓存击穿现象单个热点 Key 过期瞬间流量打满 DB 解决热点 key永不过期 / 随机过期时间 / 互斥锁3. 缓存雪崩现象大量 key 同时过期数据库压力爆炸 解决过期时间加随机偏移量、集群、熔断限流十、接口幂等性短信、活动重复提交三种幂等方案Redis Token 幂等前端接口下单、创建活动前拿 Token提交校验并删除防重复点击数据库唯一索引最终兜底手机号 模板 时间 联合唯一索引杜绝重复入库MQ messageId 幂等异步短信消费前判断是否已消费解决 MQ 重复投递问题项目标准组合前端接口Redis 拦截 数据库兜底 异步短信MQ 幂等 数据库兜底十一、项目整套优化总结我在短信营销项目中MySQL 层面合理设计联合索引深分页用游标分页大表结合 ES 检索并发层面IO 密集型线程池配置 2N1搭配安全拒绝策略缓存层面解决穿透、击穿、雪崩保证缓存高可用数据安全三层幂等防止重复发短信、重复建活动事务层面规避事务失效问题保证批量数据一致性知识点一页极简背诵口诀一、MySQL 索引聚簇存全行二级存主键查询覆盖不回表 字段运算模糊查最左断掉索引瞎 深分页弃偏移游标分页、分表加 ES。二、MVCC 与锁MVCC 多版本快照不加锁 行锁改现有间隙锁空位临键合一防幻读。三、HashMap七数组链表头插死循环八链表红黑尾插稳 八树六退化二者皆非线程安并发用 ConcurrentHashMap。 数组查得快链表擅增删。四、线程池七参要记牢IO 二 N 加一 默认抛异常短信选调用执行策略不丢任务。五、Spring 核心IOC 容器管对象解耦AOP 切面横增强 Bean实例、赋值、初始化、销毁 全局异常统一返回过滤器解跨域拦截器校验令牌。六、Spring 事务同类调用、捕获异常、非 public事务必失效 传播看调用共用或新开事务失败批量短信脏数据。七、缓存三大坑穿透空值布隆挡击穿热点永不过期雪崩过期加随机。八、幂等三套方案前端 Redis 令牌拦重复数据库唯一索引兜底MQ 用消息 ID 防重消费。