一面(通过)

自我介绍,我的自我介绍比较短,所以直接自己cue项目了。

介绍项目,我分成了三块:网络结构、前端、后端。面试官围绕项目问了一些问题:

  1. 说说你在项目中遇到的难点
  2. 这些都是你自己搭建的吗,可以说说你在搭建frp服务的一些过程吗
  3. 你这个项目大概实施到什么程度了,有上线吗,多少人在用

我介绍的项目后端是基于Python的Flask,所以面试官开始对着另外一个项目问了一些SpringBoot的问题:

  1. 你可以说说你在项目里用过哪些注解吗
  2. (或许还问了别的但我忘记了)

Git:

  1. 用过git吗?处理过冲突吗?

Java:

  1. Java的集合类了解吗?比如HashMap知道他原理吗?
  2. 那HashMap是线程安全的吗?
  3. HashTable了解吗?他的结构是怎样的?
  4. 创建线程/多线程这一些了解吗
  5. 你说你用过线程池,他的好处在于什么?可以说几个创建线程池的参数吗?
  6. synchronized关键词了解吗

计网:

  1. 自顶向下说说每一层的功能吧?

    问面试官OSI吗?还是TCP/IP?

    面试官:笑。你自己定吧。

  2. 数据链路层有哪些功能,那物理层呢?

数据库:

  1. MySQL的索引了解不?知道InnoDB的索引结构吗?
  2. 知道SQL语句的优化吗?
  3. 你知道怎么去查看一张表他的索引是怎样的,某一条SQL的执行时间是多少,SQL的执行顺序是怎样的
  4. (可能还有其他问题,有些记不得了)

代码题:

  1. 给出一张数据表,大致结构如下

    Clazz Name
    A 小甲
    A 小乙
    A 小丙
    B 小丁

    请找出人数最多的五个班级

  2. 手写快排

一面小结:

  1. 面试官的问题比较开放,虽然问题不长数量也不多,但是如果展开讲的话还是能讲很多东西;
  2. 没有预期到会有SQL的代码题,准备的比较少,加上本人的复杂SQL锻炼的比较少,可能表现不太好;
  3. 第一次面试总体太紧张了,有很多小插曲(不过面试官人真的很好)
  4. (PS)初面面试官好帅!真希望有机会能见面!

二面(等待结果)

自我介绍+介绍项目:面试官没有追问项目,直接开始问八股了;

面试题比我整理的多,可能是面试官小姐姐有点凶,我被吓到了,都不太记得她问了啥。

Java:

  1. 设计模式了解哪些?举一些开源项目或者是经典项目里设计模型的应用吧。

    我答的是Spring里设计模式的应用,不过讲到后来思路开了,有些也不是Spring里的了。

  2. 锁机制了解吗?(我讲了一些 synchronized)面试官继续问,那知道 JVM 对 synchronized 做了什么优化吗?(不太了解)

  3. 说说一个线程的生命周期

Mysql:

  1. 了解Mysql的行锁吗?怎么实现一个行锁?

  2. MySQL是怎么实现事务的

    我没太听懂这个问题(也有可能就是单纯不知道)

    和面试官确认是不是MySQL如何处理事务和redo log以及bin log的同步?面试官认可了(但我还是觉得这两个不是一个问题)

    遂讲了MySQL的两段式提交

  3. MySQL的事务隔离级别

    回答的时候顺便也讲了四个隔离级别分别解决了哪些并发访问数据库带来的问题

  4. 知道MySQL的索引失效吗?什么时候会失效?

SpringBoot:

  1. 知道SpringBoot框架内部的执行流程吗?(不是很理解,请求面试官换一个表述方式)比如一个http请求到达,对于SpringBoot框架他是怎么处理的?

    我觉得我答得不好,仅围绕分层讲了讲,问了朋友说觉得应该说servlet这些的。

  2. IoC和AOP了解吗?说说应用场景。

  3. 知道过滤器和拦截器吗?他们分别在什么阶段工作?

代码题:

  1. 找到平均成绩大于60分的同学学号和平均成绩

    学号 姓名 课程名称 课程成绩
    10001 张一 数据结构 88
    10001 张一 Java程序设计 60
    10002 李二 数据结构 90
  2. 之字型打印二叉树 剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode)

二面小结:

  1. 二面的问题相比一面明显深多了,感觉如果只看看市面上的八股虽然大部分能cover住,但还是会有一些没见过的东西

  2. 面试官的要求也更高了,虽然依靠八股cover住了大部分的问题,代码题也过了,但是面试官还是不满意(说明大家太卷了)

  3. 感觉自己的SQL相对还是薄弱,需要加强训练

  4. 面试的代码题相比笔试的更简单一些,考察的更多是代码基本功(据说字节除外)

  5. 在一方面提高对市面上八股的熟悉度上,比如并发编程、JVM还是最好看看相关的书《深入理解Java虚拟机》《Java并发编程的艺术》

  6. 在MySQL方面除了要背八股,最好涉及到的词儿(比如我这次被问的行锁),都去自己用一用,了解一下实现。不然只会理论 不会用就很尴尬。

其他的如果想到还会再补充

希望下一次面试更加进步!(毕竟这是我的第一次面试和第二次面试,暴露问题很正常,要继续进步!)