快手面经
一面
RabbitMQ
- 由于公司业务特性,高度依赖MQ所以问了MQ一致性的问题(生产者、消费者一致性)
- 怎么实现的消息丢失的补偿
- 怎么实现顺序消费
- 怎么实现局部顺序消费
- 有哪些高可用方案
Java基础
- 手写双重检查锁单例,为什么加了volatile
- volatile底层实现
- synchronized 底层实现
- 锁对象头里有哪些信息
- CMS和G1的区别和底层回收过程分析
- G1对比CMS有哪些优点和缺点
- 什么样的对象能被当作垃圾,这是采用了什么算法
- 什么样的可以作为GCRoot
- double精度问题
- 线程有哪些状态?状态是怎么流转的
- 有哪些并发安全的Collection
- CopyOnWriteArrayList 底层原理、适用场景
- StringBuffer的原理
- String里面的intern()了解过吗
MySQL
- redo log和bin log的区别
- 事务是怎么实现回滚的
- 索引的底层实现
- 了解过意向锁吗
- MySQL是怎么实现幻读的,从快照读到临间锁
Dubbo
- 读过源码吗?(讲解了底层的生产者、消费者和调用的过程)
分布式原理
- CAP了解过吗,CAP分别都是什么
- CAP能都保证吗?BASE理论
Zookeeper
- Zookeeper是什么
- Zookeeper实现了CAP的哪几个
- 2PC(2阶提交)
算法
- 手写懒加载单例
- 根据一棵树的前序遍历与中序遍历构造二叉树
二面
设计题
- 设计一个红包功能,从功能划分到接口、方法、返回值、到数据库表的设计,进而逐渐优化
- 手写StringBuffer类
三面
Java基础
- Java中异常体系结构介绍下
- 平时遇到过哪些异常
设计题
-
设计一个音乐播放器
-
能支持播放和暂停
-
有一个播放列表,可以支持添加和修改,
-
支持多种播放模式,定义一个可扩展的播放模式能够支持日后添加新的播放模式
-
有一个展示页面能够过展示当前放映的歌曲的名称和时长
设计接口、类、方法、参数、返回值,从面向对象的思路完成这个题目
-
-
100G文件,每行是一个长整数,总行数为N,主机内存1G,结果:输出最大的K个数 (K << N)
总结
一面主要以基础和算法为主,二面三面主要考察项目、代码能力和具体需求抽象能力