社招快手技术3面面经

924 阅读2分钟

快手面经

一面

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中异常体系结构介绍下
  • 平时遇到过哪些异常
设计题
  1. 设计一个音乐播放器
    1. 能支持播放和暂停

    2. 有一个播放列表,可以支持添加和修改,

    3. 支持多种播放模式,定义一个可扩展的播放模式能够支持日后添加新的播放模式

    4. 有一个展示页面能够过展示当前放映的歌曲的名称和时长

      设计接口、类、方法、参数、返回值,从面向对象的思路完成这个题目

  2. 100G文件,每行是一个长整数,总行数为N,主机内存1G,结果:输出最大的K个数 (K << N)

总结

一面主要以基础和算法为主,二面三面主要考察项目、代码能力和具体需求抽象能力