面试环节一:全程 55 分钟的初次接触

  1. 请先做一下自我介绍。
  2. 你能讲讲 Java 1.8 的新特性吗?特别是 Lambda 表达式的优缺点是什么?
  3. 你是否使用过 Java 8 的 Stream 流?可以分享一下它的特点吗?
  4. 你知道如何创建线程池吗?ThreadPoolExecutor 的参数有哪些?
  5. ArrayListLinkedList 之间有什么区别? QueueDeque 又有什么不同?
  6. 请你解释一下 HashMapTreeMap 的主要区别。
  7. 如果有一个 10W 的数据请求,你会如何实现这些数据的增删改查?
  8. 数据库的三大范式是什么?
  9. 你了解 MyISAM 和 InnoDB 的区别吗?
  10. MySQL 中的主键索引和普通索引有什么不同?在 10W 级数据下,哪个性能更优?
  11. 请介绍一下联合索引。
  12. 以 (a, b, c) 为例,在什么情况下可以仅通过查找 b 来命中联合索引?
  13. 算法题:请手写代码实现单向链表的基本结构体,并完成增删改查。
  14. 反问环节:你对我有什么问题想问?

面试总结

整体来看,面试中提问的难度并不高,但由于基础知识掌握不够扎实,我感到有些力不从心。面试官态度友好,如果有机会,我希望能再次挑战!第二天我接到了新的面试通知,这是否意味着我迎来了传说中的二战呢?

面试环节二:全程 46 分钟的深入交流

  1. 请做一下自我介绍。
  2. 接下来是两道算法题:题 1:统计一串字符中重叠字符的出现次数(如 AAABBBCC,输出 A_3_B_3_C_2);题 2:求两个字符的最长公共子串。
  3. 你使用过哪些数据库?对于 MySQL 的存储引擎,你了解多少?它们各自的特点是什么?
  4. MySQL 的默认存储引擎是什么?为什么选择这个引擎?
  5. InnoDB 和 MyISAM 之间有什么本质区别?与 MEMORY 存储引擎相比呢?
  6. 为什么 InnoDB 要使用 B+树作为索引的数据结构?
  7. Hash 索引的查找速度不是更快吗?那为什么不使用 Hash 索引呢?
  8. 你对网络编程了解吗?请描述一下如何创建一个 Socket 连接。
  9. 你对 C++ 的基本数据结构了解吗?
  10. 反问环节:你有什么问题想问我?

面试环节三:全程 43 分钟的综合评估

今天上午我突然收到了二面的通知,时间安排得很紧凑。

  1. 你参加的比赛中负责了哪些内容?(15 分钟)
  2. 你还开发过哪些应用程序?这些程序中使用了哪些数据存储和 Web 服务器?
  3. 你对 C++ 的理解程度如何?
  4. 软件设计师考试是什么时候考的?
  5. 你有写过多进程和多线程的经验吗?在什么情况下使用过?遇到了哪些困难?
  6. 你有在 Linux 下编程的经验吗?
  7. 你了解哪些 Linux 常用命令?
  8. 网络编程方面的经验如何?使用过 Socket 吗?
  9. 你对 Linux 中的 epoll 和 select 这两种多路复用技术了解吗?
  10. 请谈谈五层网络模型及其对应的协议。
  11. 你有抓过网络包的经历吗?
  12. 如果需要设计一个快速插入和查找的数据结构,你会选择什么结构?如何解决 Hash 冲突?
  13. 有一个容量为 N 的数组,其中存放了 N 个数,每个数的取值范围是 1~N,你能否快速判断是否存在重复元素,哪个元素重复了?要求空间复杂度为 O(1)。
  14. 请描述一下求二叉树深度的算法,并尽量降低时间和空间复杂度。
  15. 你了解设计模式吗?可以简要说明一下吗?
  16. UML 类图的理解如何?能否画一个类图?
  17. 你对云计算的知识有多少了解?使用过容器吗?对大数据套件和 ELK 有了解吗?是否查看过开源架构系统的代码?
  18. 你对分布式存储的理解是什么?
  19. 你知道一个进程的栈大小是多少吗?文件打开的上限是多少?
  20. 你觉得自己擅长的业务领域是什么?
  21. 反问环节,你有什么想问我的?

总结

在整个面试过程中,我感觉自己主动补充的内容较少,导致多次出现尴尬的沉默,最长的一次甚至达到 30 秒以上。未来的面试中,我需要更加努力地扩展我的回答内容。