快手日常一面8.27
一、自我介绍 & 项目经历
- 自我介绍(实习时长、技术栈、项目亮点)。
- 项目级别:是学习项目还是实际生产项目?
- 使用 Hutool 的体验?
- 使用 Redis Lua脚本时要考虑哪些问题(性能、阻塞、调试难度、CPU 消耗等)?
- Lua脚本与 Redis 分布式锁相比优劣?为什么选择 Lua?
- 秒杀设计中如何防止超卖?(入口端、消费端、唯一索引等)。
- 唯一索引在逻辑删除场景下的缺陷?
二、Redis 相关
- Redis 存 Lua 脚本的风险点?
- Redis 如何防止超卖?(库存预扣减 + 用户集合去重)。
- Redis 存储结构有哪些?
- 跳表数据结构原理。
- Redis 字符串底层结构(SDS,动态扩容、二进制安全、长度字段)。
- Redis 支持带空字符的 key,底层如何实现?
- 可否用分布式锁替代 Lua?
- 设计一个 可重入的 Redis 分布式锁(手写/伪代码)。
三、计算机网络
- I/O 多路复用原理,整体链路如何串起来?(不会)
- OSI 七层模型:每层作用。
- TCP 拥塞控制:慢启动、拥塞避免、快重传、快恢复
- 为什么丢包时要“窗口减半”
- TCP 丢包如何处理?(超时重传、快速重传、选择确认SACK)
- 浏览器输入
www.baidu.com
整个流程 - HTTP 与 HTTPS 区别:TLS 握手过程、安全性代价
四、MySQL
- MVCC 原理:undo log、read view、可见性判断
- MySQL 锁分类:库锁、表锁、行锁
- 悲观锁 & 乐观锁区别
- 什么时候会命中表锁
- MySQL 5.6 之前 DDL(加字段)会锁全表,MySQL 8.0 如何优化?(在线 DDL,没听过)
- B+ 树索引命中链路:从二级索引到回表
- 数据页 16K、目录槽 + 二分查找机制
五、Spring
- 循环依赖问题,为什么需要三级缓存?
- 为什么二级缓存不足以解决循环依赖?
- 三级缓存工作流程。
- 三级缓存的缺陷(注入的可能是半成品对象)。
六、其他
- 算法题:手写 Redis 分布式锁(没A出来,只说了思路,面试官按我思路写了小20min给我演示)
- 实习时长、可到岗时间、是否有其他 offer。
面试官给的压力非常大,跟之前美团/滴滴的完全不一样,算法题出来人直接傻了,八股和项目拷打也答得很一般,很多点答不出来,以为百分百g了,但是两天后约二面
#日常实习面试##java##后端#