近期出现的一些比较难的面试题

最近在看牛油的面经,整理了一些比较难的面试题,只给出最简单的回答思路,希望对大家有些帮助

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唤醒主线程。

避免死锁的四个充分必要条件中哪一个最重要?

破坏循环等待(如统一资源申请顺序),实践中最易实现且效果显著。

全部评论
事务隔离级别读已提交就行,主要是可重复读导致的数据不一致太少见了。大部分数据不一致还是因为异步和分布式场景导致的。 Oracle 和 pg 默认都是读已提交,用来存钱都没啥问题,订单更没啥问题。为了极少数的数据不一致的场景牺牲大部分场景下的性能,不划算
1 回复 分享
发布于 09-26 09:35 北京

相关推荐

看起来名字可以很长:笑死 我暑期实习阿里云的意向也被 qq 邮箱放在垃圾箱了
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务