个人背景

  1. 学历:双非本科 211硕士,非计算机专业;
  2. 实习经历:在一家互联网小公司实习两个月。

时间线

快手的招聘流程没有笔试,而且简历投递后可以无限次复活。因此在简历完善后,我立即申请了快手。

  • 7月28日:投递简历;
  • 8月3日:第一次面试;
  • 8月9日:第二次面试;
  • 8月15日:第三次面试;
  • 8月17日:HR面试;
  • 9月1日:收到意向通知。

面试经历

一面

  1. 自我介绍;
  2. 讲述实习期间的工作内容;
  3. 删除链表的倒数第n个节点的算法;
  4. MySQL事务特性;
  5. MySQL事务的隔离级别;
  6. MySQL的默认隔离级别及其底层实现;
  7. 详细讨论MVCC;
  8. MySQL索引的底层存储结构;
  9. 对Java中的锁的理解,Synchronized的实现原理;
  10. Redis哨兵模式及主节点选举机制;
  11. Redis的持久化方式;
  12. OSI七层模型;
  13. TCP的三次握手及其重要性;
  14. TCP的四次挥手;
  15. 编写一个线程安全的单例模式;
  16. Java的类加载过程;
  17. Spring Bean生命周期。

二面

  1. 自我介绍;
  2. HTTP与HTTPS之间的区别;
  3. HTTPS如何确保传输安全;
  4. HTTPS中证书的作用;
  5. 服务掉线时,线程池中任务的处理方式(考察线程池关闭的不同方法);
  6. 如何解决内存泄漏;
  7. Redis的线程模型介绍;
  8. 单线程Redis如何执行内存淘汰策略;
  9. Redis的全量同步与增量同步;
  10. 当Redis主节点宕机后,如何在从节点中选举出新的主节点;
  11. 介绍G1垃圾收集器及其回收过程,并与CMS对比;
  12. 天平秤劣币的讨论;
  13. 最小覆盖子串的算法。

三面

  1. 自我介绍;
  2. 从两个项目中选择一个复杂度较高的进行介绍;
  3. 当库存为10万且有100万用户抢购时,系统瓶颈及优化方法;
  4. 单体系统中,当用户线程从1增加到1万时,潜在崩溃点及解决方案,思考过程的分享;
  5. 在超卖场景中,如何缓解MySQL的写入压力,并提出解决方案;
  6. 两张表存储在不同数据库时,如何保证事务一致性(仅简介SpringCloud的分布式事务及Seata的使用,没有深入原理);
  7. 毕业时间;
  8. 是否可以提前实习;
  9. 对未来职业发展的规划;
  10. 实习与校园学习最大的不同之处。

HR面

常规的HR面试问题。