武汉小药药Java实习一面二面面经
《面试题目》
一面
- Java8 特性在你项目中的运用
- Java 提供的默认线程池有哪些
- 线程池的核心参数
- MySQL 最左匹配原则:
where b=1 and a=1 and c=1会不会走最左匹配 explain关键字,关注哪几个字段- Redis 的几种常见数据结构,Redis 分布式锁使用及缺点(锁超时和续期)
- MyBatis 动态标签说几个
- MyBatis 底层是怎么实现的
- Spring 事务失效场景说几个
- SpEL 表达式了解吗
- 怎么找到软件在电脑里的运行日志
- AI 工具用过吗,怎么用的
- 项目里的 Canal 是什么,你怎么理解的
二面
- 项目介绍,难点以及思路
- 设计模式知道哪些
《参考解析》
- MySQL 最左匹配原则:联合索引遵循最左前缀匹配,查询条件中只要包含索引最左列就能走索引,且 MySQL 优化器会自动调整
and条件的顺序(where b=1 and a=1 and c=1若索引是(a,b,c),仍可以走索引,因为条件里已包含最左列 a)。 - Redis 分布式锁的缺点:单机部署有单点故障风险;主从异步复制场景下,主库宕机可能导致锁丢失(可用 Redlock 算法缓解);锁超时时间不好设置,业务执行时间不确定容易导致锁提前释放,需配合看门狗机制自动续期。
- Spring 事务失效常见场景:同类内部方法调用(自调用绕过了代理对象)、方法非 public、异常被 catch 未重新抛出、数据库引擎不支持事务(如 MyISAM)、事务方法内手动 try-catch 吞掉了异常导致 AOP 无法感知回滚。
- Canal 的作用:Canal 是阿里开源的基于 MySQL binlog 增量订阅&消费组件,模拟 MySQL slave 的交互协议伪装成从库拉取 binlog,常用于缓存与数据库的一致性同步、数据异构、审计等场景。