近期出现的一些比较难的面试题
最近在看牛油的面经,整理了一些比较难的面试题,只给出最简单的回答思路,希望对大家有些帮助
SpringBoot中注解是怎么生效的?为什么在方法上加了注解,这个代码就用运行到这个切面里面去了,这是什么原理?
基于Java反射和动态代理。启动时扫描注解,生成代理对象嵌入切面逻辑,方法调用时通过代理机制切入增强代码。
数据库分表可能会带来哪些问题?
- 跨表查询复杂(需合并结果或多次查询)
- 数据分布不均(热点表)
- 事务一致性难保证
- 扩容复杂度高(如数据迁移)
介绍 or 设计一种洗牌算法,使得牌尽可能的分散?
Fisher-Yates算法:从后向前遍历,每次随机选择当前位置之前的牌交换,保证每张牌出现在任意位置概率均等。
数据量大、并发又高的时候,怎么写入数据库?
- 异步批量写入(如攒批提交)
- 分库分表 + 消息队列削峰
- 使用数据库连接池及批量操作API
按相同请求(如同一客户端IP)映射到同一台服务器的负载均衡策略,除了可能导致负载不均衡,在功能实现稳定性方面还有什么可能的问题?
- 服务器宕机导致映射失效(需重新哈希)
- 用户IP变化(如动态IP)导致会话丢失
- 无法灵活调整后端服务器数量(哈希结果剧变)
mysql隔离级别 下单业务选什么隔离级别?
RR或RC,这个地方不太确定,gpt给的是rr
Java伪共享问题?(cpu缓存频繁失效)
多线程修改同一缓存行中的不同变量,导致CPU缓存频繁失效。解决方案:填充字节使变量独占缓存行(如@Contended注解)。
Java的join关键字是干什么,是怎么做到这个效果的呢,从原理角度讲讲
底层调用wait/notify机制:主线程在子线程对象上wait,子线程结束时JVM自动调用notifyAll唤醒主线程。
避免死锁的四个充分必要条件中哪一个最重要?
破坏循环等待(如统一资源申请顺序),实践中最易实现且效果显著。
查看29道真题和解析