当前位置: 首页 > 面试经验 >

土木哥的小红书Java秋招

优质
小牛编辑
91浏览
2023-08-19

土木哥的小红书Java秋招

TimeLine:

  • 8/19 - 16:00一面
  • 8/19 - 17:00二面
  • 集美厂带我走吧

一面(55min)

(1)八股:

  • InnoDB 对 MVCC的实现
  • 读已提交和可重复读中 readView 有什么区别
  • 有联合索引 (a, b, c) 查询条件为 (a, c) 会不会走索引
  • 回表
  • 为什么 InnoDB 会出现死锁
  • 乐观锁 / 悲观锁举例
  • drop / truncate / delete
  • 什么是读扩散
  • 分布式锁除了 SETNX / Redisson / Kafka 还能如何实现
  • 有一个业务非常慢,在执行的过程中分布式锁过期了怎么办
  • RedLock 的加锁机制
  • ConcurrentHashMap 的前身是什么
  • 你所了解的设计模式(不敢说多 怕要求手写)
  • controller 之间如何相互调用
  • ReentrantLock 如何实现可重入
  • 并发量特别高的时候用 Synchronized 还是 ReentrantLock

(2)算法:TOPK

  • 分析时间复杂度从 O(N^2) 到 O(N*K) 到 O(N*logN) 最后到 O(N)
  • 实现 partition + quickSelect

二面(80min)

(1)拷打项目

(2)场景设计

  • RabbitMQ是如何提高吞吐量的(channel 的多路复用,发布确认的异步应答)
  • Redis 中如何确定一个 key 是热点 key(使用一个计数器统计访问频率)
  • 设置热点 key 过期时遍历所有的热点 key 效率太低了如何优化(思路参考WatchDog机制,给热点 key 设置一个自动过期时间,如果一段时间内的访问频率达到阈值则给热点 key 续期)
  • RabbitMQ持久化的时候底层如何存储消息
  • Redis 中热点 key 的吞吐瓶颈100W,但请求 QPS 有200W怎么办(用 MQ 进行削峰)
  • 你使用 MQ 只是保证了可用性,但还是没有提高性能(使用负载均衡策略 将请求路由到集群上 让集群抗并发)
  • 数据库中有千万级数据,该如何筛选(首先要分表,然后用线程池进行异步查询)
  • 线程池核心参数说一下
  • 请求的平均延迟为 3ms,最大延迟为 5ms,则 keepAliveTime 设置为多少合适
  • MQ 中如何实现死信队列
  • 实习的时候分库分表是怎么做的,分库分表后如何查询
  • sharding-jdbc 的原理

(3)算法:生命游戏

  • 引入新的状态 (-1) 濒死表示 [1 -> 0] 和 (-2) 复活表示 [0 - > 1] 防止状态被覆盖

总结:

  • 两面相隔5分钟,而且二面面试官还提前进场了,强度太高了
  • 面完睡了一觉,有的场景题忘记了,后面记起来再更新
  • 面试体验非常棒,二面场景题的时候面试官一直有反馈,还一路教我优化
  • 一面二面面评都挺不错,面试官说进池子了,后面有结果 HR 会通知
 类似资料: