一面

问:自我介绍

问:说一下你的项目中遇到的难题和怎么解决的

我:(其实我的项目也没什么特别高级的东西,就说了下项目里遇到的bug的解决以及一些功能的实现,其实都是很简单的东西。个人觉得不一定要用多么高级的技术,就算是解决一个小bug或实现一个小功能,把遇到bug时的现象以及怎么去思考并一步步排除仔细说清除,以及自己为什么这么设计,对这么设计的一些理解,面试官应该还是认可的……)

(讲项目的时候,语速比较快,有点舌头打结,后来听内推人说面试官给我评语是紧张,其实我也没怎么紧张……)

问:XX 这个项目主要业务是什么?有实际应用吗?

我:(大概讲了项目的业务,项目没有实际用过,只是去参加学校的创新项目比赛,所以就说实话了)

问:是去参加创新比赛,那你觉得这个项目的主要创意在哪?

我:其实我觉得没什么创意……

面试官:(笑)

我:(笑)

问:你在项目里负责什么?整个项目的设计是你做的吗?那对项目整个架构设计什么的能讲一下吗?我:这是我第一次作为项目技术负责人。对。(其实也就是一个 WEB 的 APP 项目,ssm 的 Controller 、Service 、DAO 分层,然后说了下自己负责模块的一些设计什么的……)问:你刚刚说你这个项目都是 http 请求应答模式,那你有没有考虑其他模式?

我:(这里说了下 socket 长连接模式,然后说了下自己对请求应答模式以及长连接的优劣和适用场景的理解,扯到了 http 报文头部、nagle 算法、心跳机制什么的,然后又开始个人对心跳机制的理解……)

问:(大概是觉得我再扯就扯到印度去了,打断了我……)嗯嗯好,但是现在你去实现长连接的话,会这样从头开始写吗?

我:(提到 Netty ,之后面试官也没有问 Netty)

问:http 有什么特点?

我:明文传输……(然后还没来得及说无状态什么的)

问:那你的项目有没有考虑 http 安全问题?

我:(提到 https ,然后说了下原理,怎么保证消息不泄露、不被篡改)不被篡改的实现就是,先把要发送的消息进行消息散列,比如 MD5 ……

问:MD5 ?

我:不是,我只是举个消息散列的例子,……

问:MD5 已经不建议使用了好吗

我:(吞吞吐吐)emmm对我知道 MD5 可以通过碰撞破解,不安全……但是其实一般的项目(正准备说是否安全取决于破解难度与破解收益的理解,加盐什么的……)

问:不建议使用啦,不建议啦(宛如撒娇般的语气,这谁顶得住……)

我:emmmmm好吧(好的,你说什么都对)

(然后好像还问了一些项目相关的其他问题……)

问:说说 JVM 垃圾回收是怎么实现的?可达性分析是怎样的?什么是GCRoot?

我:可达性分析。从 GCRoot 开始遍历,如果某个对象不可达,则认定为垃圾,可以回收。方法区的引用、函数局部遍历、类成员变量什么的……

问:有关 JVM 的 STW

我:主要是说了一下对 STW 的了解,然后提到了并发垃圾回收器

问:说一下了解垃圾回收器,了解最近的垃圾回收器吗?

我:(当时我好像是说,知道最新出来了一个 ZGC ,可以在几 ms 内回收上 T 级别的垃圾,停顿很短什么的,然后说了下 CMS 、G1 ,说了下 G1 回收器替换 CMS 的目标,以及 Region 什么的。但是也没深入地了解过 G1 ,不然还可以说更多,不过面试官也没继续问……)

问:读过什么的源码吗?读过哪些?那你说下 Spring 的 Bean 是怎么管理的吧

我:读过。Spring 、Spring MVC 什么的(好了,接下来要问 Spring AOP 怎么实现的了吧)。(这不科学啊,不是应该问 AOP 怎么实现吗……大概说了下 xml 读取和解析,然后 BeanFactory ,Resource 、 Registry 什么的,Map 保存 beanName、class类型与 Bean 的映射关系什么的)

问:HashMap、HashTable、CurrentHashMap 套餐吃不吃

我:(谢谢招待)

问:TCP 三次握手、状态转移,为什么要三次握手?

我:(具体描述了一下三次握手的过程和状态转移)需要三次握手,不能两次是因为, A 向 B 主动连接时,若第二次握手的消息丢了,B 以为连接已经建立,A 则以为 B 没有收到自己的连接请求,A 会重发连接请求,B 发现序号不对,只能丢弃,B 发送消息给 A ,A 认为连接还没建立,只能丢弃……,不需要四次时因为 B 对 A 的 ack 以及自己的序号可以一起回复给 A(好像叫捎带回复什么的),而(然后也说了下四次挥手过程和状态转移)

问:那为什么要四次分手呢?(笑)

我:(糟了,是心动的感觉……这谁顶得住……我也不想说“分手”啊,是你要我说“分手”我才说"分手“的啊,我也不想跟你分手的嘛……不好意思,我加戏有点多……)关闭连接的时候,A 主动关闭的话,是因为 A 不再需要发送数据,但这个时候 B 可能还有要发送,只能先回复 ack ,等自己发送完数据,再发送关闭连接的请求,也就是第三次挥手……(然后好像顺便说了 close_wait 和 time_wait )

问:你这里说得有点不太清楚,之后最好自己再看看

我:(单身太久,谅解一下)

问:设计模式了解嘛。问问你设计模式吧

我:(具体谈了一下对 模板方法 的理解以及它在 Spring 什么的框架里面的使用,择其好处而吹之)(又谈了下监听者模式以及它在 swing 和 C#、托管C++ 窗体里面的使用,复择其好处而吹之)

之后一些问题时间太久,记不太清了……

二面

这一隔就是 20 天,这谁遭得住……

清明后两天的样子,一个晚上接到电话

问:项目

问:简单算法题,判断数组里是否有和为指定值的两个数

我:(好像是剑指 offer 还是什么的原题?)

问:在学校实验室当部长的事

我:(稍微讲了下经历)

问:学习方式

问:你班上有比你技术厉害的吗?

我:(????)

问:优点和缺点?技术上的优点?问:你说对 WEB 比较熟悉对吧,详细说下跨站脚本攻击XSS

我:(说了下 cookie 、session 、js 注入什么的)

问:你说对 JVM 比较熟悉,说下垃圾回收算法吧

我:(说了下标记清除、复制、标记整理算法,然后详细说了下内存碎片、分代收集什么的的思想)

问:对菜鸟的了解

我:emmmm我知道是跟物流相关的,就是,就是供应链……就是……其实我不是很了解(当场去世……)

问:有什么问题问我

只记得这么多了……问他问题的时候才知道他是 leader ,emmm我这不是二面吗……

三面

面完二面后,内推学长告诉我,接下来有个 P10 要面我……这谁顶得住……

大概两天后接到电话,面试官好像有点忙,面试时间比较短,问得也比较简单……

问:学校上的课

问:项目

问:自学学到了什么?

问:SpringBoot

我:(说了下约定优于配置,@Condition 注解什么的)

也只记得这么多了,不过本来也只有 10 多分钟……估计大佬是真的比较忙……

四面(hr 面)

16号接到电话,要我 18 号去武汉现场面试……这谁顶得住……

自我介绍

实验室经历(这里聊了挺久)

家里情况、意向城市

对菜鸟的了解(咋又是这个问题……物流、就是物流,emmm物流……当场去世……)

有什么问题

五面

面完hr面打算去看看武昌起义纪念馆……

一小时后刚下地铁,接到电话说要我回去再加一轮技术面……

有一种刚高考完后被告知要再加一次高考的感觉……这谁顶得住……

自我介绍

项目

类加载

Class.forName 是否会初始化类(这里我智障了,振振有词地说说不会初始化……感觉要凉。。)

static 块会执行几次?怎么让它执行第二次?(我说用另一个 ClassLoader 来加载……好像不是他要的答案,难道有其他方法吗。。?)

Full GC 发生的条件、怎么设置永久代和堆的大小、怎么减少 Full GC 、JVM 调优

比较熟悉的技术,是否有去了解底层

经过一个星期的漫长等待最终还是拿下了Offer,成功入职阿里菜鸟驿站架构师!我认为现在面试除了需要你自己掌握丰富的技术栈之外,也需要时时刻刻去勤刷面试题,分享一下自刷的面试题库和补充技术栈的PDF吧,祝大家Offer多多哈!

需要全部免费领取全部的学习资料的朋友麻烦帮忙点赞+评论+收藏这篇文章+关注我,然后加小助理VX:wjj2632646免费领取!