在这里,我想分享一位网友在字节跳动大数据基础架构部门实习生面试中的经历,内容依旧新鲜,值得参考。

一面面试记录(2月17日)

  1. 自我介绍
  2. 接口与抽象类的区别
  3. 了解过哪些设计模式
  4. 单例模式的定义
  5. 工厂模式的用途,为什么需要工厂模式?
  6. 建造者模式的实现方式
  7. 在设计模式中更倾向使用抽象类还是接口
  8. 熟悉哪些 Java 锁
  9. 死锁的必要条件
  10. 对 MySQL 索引的理解(那时不会直接表明不会)
  11. MySQL 事务隔离级别
  12. 分享使用过的 Java 框架
  13. 项目中如何使用 git 与 maven
  14. 编写快速排序算法:快速排序是否稳定,何时会退化,如何优化,时间复杂度
  15. 编写二分查找算法:复杂度(代码题写得过快,面试官提到时间还没到,接着问了几个问题)
  16. 对分布式系统的理解(不太了解)
  17. Java 基础数据类型的说明
  18. 为什么 int 是 2 的 31 次方
  19. 对 Docker 的了解
  20. Java 中的同步与异步概念

反问环节:

  1. 部门的业务内容
  2. 对我的评价

二面面试记录(2月18日)

  1. 进程间通信方式
  2. 了解的锁的类型
  3. 介绍 synchronized 和 ReentrantLock
  4. 说明 ReentrantLock
  5. 单例模式中变量前的关键字(volatile)
  6. 单例模式在并发情况下的实现方式
  7. 双重检查锁(DCL)的概念
  8. 内部类与枚举类
  9. volatile 的作用
  10. 防止 JVM 指令重排,以及保证变量可见性的重要性
  11. 主动刷新存储的机制
  12. 聚集索引与非聚集索引的区别
  13. MySQL 的三大范式,说明一个
  14. MySQL 的 ACID 特性
  15. Maven 包冲突的解决方法
  16. HashMap 的介绍
  17. HashMap 扩容的理解,扩容因子(loadFactor)
  18. 红黑树的特点
  19. 红黑树为何比二叉树更快
  20. Redis 的高速原因
  21. Redis 缓存机制
  22. LeetCode 25 难度:K 个一组反转链表的改版(最后 n 个不足也反转)

三面面试记录(Leader 面试,2月21日,未通过)

  1. Object 类中的方法
  2. 对 hashCode() 与 equals() 的理解
  3. 使用过 Object 类中相关锁的方法吗
  4. Java 垃圾回收的算法,新生代与老年代的区别
  5. 设计模式中涉及锁的模式
  6. 没有使用两个锁时单例会出现什么问题
  7. 对 MySQL 原理的理解
  8. 项目开发中遇到的问题及解决方案
  9. LeetCode 101 简单:对称二叉树(由于题目刷得不够多,未能写到这题,也没多写二叉树,居然用 BFS 实现)