乐趣区

面试了15位来自985211高校的2020届研究生之后的思考

本文首发于公众号【why 技术】, 关注文末公众号阅读体验更佳。
这是个人第 7 篇原创文章

上周,我面试了 15 位 2020 年毕业的计算机相关专业的研究生,他们都是来自四川地区 985、211 高校,校名如雷贯耳。

因为我有参与到设计校招题的工作中。所以我是技术一面的面试官之一。

这篇文章我本来想面试完后就可以马上输出,但是面试结束后,我有了很多思考。

这篇文章不好写,但是我是一个 ” 独立的自由撰稿人 ”,所以我还是想谈谈我的感受。仅仅代表我个人观点。

关于校招: 普通二本 VS 一流高校

正如之前的文章《普通二本,毕业三年,北漂之后,我是怎么成为程序猿的》说的。

我是一个本科生,我读的大学是一个普通二本,我报考的那一年,学校刚刚从专科院校升级为二本院校。所以我是学校的第一届本科生。

可能因为是第一届本科生,在校招的时候,来我们学校招人的科技公司一只手都能数过来。而且,每一家公司我都没有听过。我没有去,所以我没有经历过校招。

但是我经历过招聘会,类似于人才市场,当时的场景是这样的:

你以为这是我在网上找的图?

不是的,这是 2014 年 11 月 16 日,我去参加《2014 年成都冬季特大型人才招聘会暨高校毕业生供需洽谈会》,我拍的。

这个人才招聘会,展厅非常的大,里面有很多的岗位,龙蛇混杂,其中不乏计算机行业相关的工作。比如下面这个来自 2014 年的招聘:

当年的我丝毫不觉得这个招聘有任何的问题,甚至还挺想去。但是我现在再读一次后发现: 这 TM 不就是培训机构吗?!整的还挺委婉啊!

你在网上海投简历,竞争可能更大,但是人才市场给你带来的视觉冲击,是直观且绝望的。

我们这个专业,毕业后,大方向分为了五类人:

  • 第一类: 积极备战,准备考研党。
  • 第二类: 实力傍身,开始工作党。
  • 第三类: 随缘佛系,寻找工作党。
  • 第四类: 四处碰壁,报名培训党。
  • 第五类: 告别行业,另谋生路党。

除了少部分的第二类人,他们在毕业之前就已经找好了工作。大多数人,包括我,是毕业之后才去找的工作,那时候,我们身上的标签是这样的

  • 应届生、普通二本、0 年工作经验、社会招聘

每一个标签都很难找工作,当它们都指向同一个人的时候,就真的很难找工作。

所以就有人四处碰壁,无奈之下报名了培训班,几个月后包装简历,进入职场。也有人就此告别了这个行业,另谋生路。

而我问了我身边的研究生朋友。

他们毕业之前的一年有两次找工作的机会,秋招和春招。其中最好的时机是秋招,很多的叫得上名的科技公司你不需要专门去找他们,他们会去学校开专场招聘会。然后经过一次网络或者现场筛选,如果过了,就能进入到接下来的面试环节。大多数时候面临的问题是:

  • 哎,这家公司怎么叫我去面试呢?我当时就是顺便一投!
  • 哎,这家公司的面试地点好远啊!不想去了!
  • 哎,这几家公司的面试时间好接近啊!我该去哪个呢?
  • ……

然后秋招或者春招结束后,就去各大论坛发帖,发出幸福的疑问:

  • 好烦啊,手上好几个 offer,到底去哪个呀?

写到这里,我想表达的一个观点就呼之欲出了。

  • 其他行业不了解,不发表意见。但是在计算机行业,我认为,在大概率,正常的情况下:
  • 无数的和我一样的普通高校的本科学生,可能要经历人才市场,海投简历,找到一家不知名的小公司,提心吊胆的担心自己是否能转正。
  • 一流大学的本科生或者研究生,可能是走专场招聘会,直接进入到中大型公司,进入管培生计划,可以长期干下去。
  • 读到这篇文章的人,
  • 如果你是非一流院校的在校大学生,立志要在这个行业发展下去;如果,你还有机会的话,我个人建议:
  • 考研吧,考知名院校。
  • 如果你已经是一流院校的大学生,你可以争取更好的公司和职位,就看你愿不愿意力争上游了。

啥?你说研究生多读了三年书还不如三年的工作经验?

如果你是一般大学的研究生,我理解你这样说。

但是,如果你是排名靠前的一流院校的研究生,你还这样说,我可能是要打你了哦。

假设你工作了三年,勤勤恳恳,热爱学习。终于鼓起勇气向大公司投了简历,结果有可能因为学历的问题直接被 HR 刷掉简历,如果有幸进入面试环节,一轮又一轮的技术面试反复轰炸你,而且面试有难度也有深度,面试你的目的是看你这个人是不是加入公司就马上能投入工作,输出价值。这就是完全靠实力加一点点运气的时候。

当然,你说你身边有人就谱写了一个十分漂亮的绝地反击的故事呀。这样的故事有,但是更多的是你没有听到的 ” 名落孙山 ”。

假设你是一个校招研究生,面试时候考察的方面是不一样的,面试你的目的是看你这个人是不是可以加以培养,作为公司的储备力量,所以最后进入公司的几率大了很多。

我没考过研,所以我没有话语权说应该怎么去考研。

但是我建议有能力的话可以考研。

多的不能再说了,放一张图吧。仅供参考。

但是很不幸,你可能和我一样,没有机会考研了,和同事之间有一道不可逾越的学历带来的鸿沟。那么你只有拼命的学习,疯狂的汲取知识,对技术保持求真的敬畏之心,学历干不过别人已成定局,但是你技术牛逼,那就能让鸿沟变窄。

现在学习的渠道这么多,知识全在网上,触手可及。

就看你愿不愿意把自己的手,从追剧、游戏、综艺、发呆中抽出来。毕竟一个人最多只有 2 只手。

好了,到这里,以上表达的全是个人观点,带有强烈的个人主观色彩,你觉得有道理,那谢谢你。你觉得我在扯淡,也请不要攻击我。

关于面试表现一般的人

关于面试,有人表现的很优秀,他们都优秀的比较一致。但也有人表现的很一般,他们的一般是千姿百态的。所以我想聊聊那些表现很一般的人。

我在北京的时候,也当过一面面试官。当时我们小组在发展中,有几个空缺的职位。要求是 3 年以上工作经验。

我前后大概面试了有 50 多人吧。

其中有工作经验长达 9 年的从业者,也有刚刚结束培训的培训生。再加上这次的应届生校招面试。

我想分享一下我遇到的这三类人中表现一般的人,所带给我的思考。

  • 第一类: 专业技能与工作年限不匹配
  • 第二类: 刚刚结束培训的培训生
  • 第三类: 应届生

专业技能与工作年限不匹配

对于那个工作了 9 年的面试者,我印象很深刻,因为最开始拿到简历的时候,我一摸:” 这简历,好厚啊!” 再一看,工作 9 年。

于是我去找了我的领导,我说:” 这人我应该没法面试,我工作经验都才 3 年,这哥们是我的 3 倍啊。咋面?”

领导说:” 没事,你先去聊聊,怕什么,就当是技术交流,别当成面试。”

面试的过程中我们聊的技术问题,他都没有回答的很好,他的技能就像一块大平板,一眼望去,什么都会一点,但是稍微一深入探讨,就两眼一抹黑了。

面试的最后,我直接给他说:” 在整个面试的过程中,其实你有些问题回答的是不太好的,可能今天我们的面试就到这里了,但是我还想请问你一个问题,你可以不回答。你工作了 9 年了,应该有很多行业内的朋友呀,为什么没有内推呢?而且你的技术能力和你的工作年限有点不太匹配。”

他回答了我,大概的意思是这样的:

  • 我刚参加工作的时候,计算机行业还没那么火,大多数都是传统公司,所以我一直就在传统行业里面,属于比较内向的人,也没有刻意的去积累人脉。
  • 期间换了几家公司,没有一家是真正意义上的互联网科技公司,我也一直是做开发工作。
  • 最后的这家公司是把我辞退了,辞退之前,我还是一个底层的老员工。
  • 但是我努力想往管理岗发展,但是最终不得人意。
  • 由于最近几年一直想往管理方向发展,更多的是注重业务了,家庭方面的事情也越来越多,有时会影响工作。
  • 技术方面就有点停滞不前了。最终导致这样的局面。

听了之后,我说:

  • 你是我的前辈,我很尊重你,但是我从我从业三年的角度再加上你刚刚的面试表现来说,你说的这是一部分原因,而且不是主要原因。
  • 我觉得主要原因是,对于技术你失去了追寻的态度。在过去的这几年里面,你只要对于每次碰到的问题,稍微深入地研究一下,思考一下,整理一下,然后再找一项技能深挖下去,日积月累下来,今天的结果应该会大不一样。
  • 我理解你,也许是在家庭和工作的双重压力下,迷失了方向。

后来,我把他送到公司门口,他已经走出去了,又转过身来和我握了一下手,他握的很用力,说:” 谢谢!”

我在面试结果描述那一栏写的是:

  • 此人专业技能与工作年限不匹配。不建议进入下一轮面试。

面试结束之后,我把面试结果反馈给我的领导,领导看到我写的评语,意味深长的一笑,对我说:” 和我预想的一样,年龄大,工作年限长,但是技术一般 ”。

之后,他用力握我手的场景有时候会不由自主的在我脑海里面浮现。

仿佛在鞭策我:前车之鉴,要警惕啊。

刚刚结束培训的培训生

对于培训生,不管你是因为热爱编程还是追求高薪而进入这个行业, 我理解你们。面试时你也不需要特别的谦卑,技术面前人人平等。

有一部分培训生包装简历是为了过简历筛选关,因为有可能 HR 不懂技术,所以我非常理解,不包装简历,就没有面试机会,这样对于那些真正学到的知识的人就很不公平。

面试的时候我遇到他们,我都一视同仁,只要你学到了真本事,我聊了之后觉得还行,能达到我们的用人标准,都可以进入下一轮面试。

通过参加培训进入行业,我觉得没有问题。甚至你有真才实学,为了面试机会而包装简历,只要最后你坦诚相待,我也觉得没有问题。但是你包装了简历,自己又没有真材实料,态度还不端正,这就是有问题的了。当然属于培训中的一小波人,但是这一小波人的表现打上的标签,也会影响到另外的一下波人。

我身边就有几个通过培训进入行业的朋友,他们自己也非常刻苦努力,有热情,现在工作也还挺不错的。

但是我面试的时候遇到过一个培训生,说真的,就他包装的那个简历,很多技术没有实际操练过,真的经不住几个连环问的,几问之后,就原型毕露了。没有真才实学,期望工资还要的贼高。

你骗过了 HR,你还要把技术面试官一起骗过去?都到技术面试了,一轮又一轮,你还能骗过去?

那你别干程序猿了,你去当演员吧。

所以,先把态度放端正了,我们再好好的聊技术吧。

你问我什么叫态度不端正?

你就参加了几个月的培训,找工作的时候听周围的人传说:” 谁谁谁,今天拿了一个 15k 的 offer。三个月前,刚来的时候连开发环境都是我帮他配置的呢!” 然后你就感觉自己牛逼的不行了,甚至觉得 15k 是不是有点低了呀。

所以你面试的时候技术问题回答的一般般,没有什么亮点,但是一问期望工资,张口就是:” 不低于 18k 吧!”。

这叫做态度不端正,而我还真的遇见过。

我当时告诉他:让唐僧成为唐僧的是那一坨经书吗?不是的,是取经的路啊。15K 就相当于别人的经书,你别只盯着别人的经书看,你看看他在这一路上的八十一难。你经历了吗?

下面这图,当段子可以,别当真。

应届生

上周来面试全是 2020 年毕业的研究生。我面试的 15 个,大多数都十分优秀。

但是我想聊的是那些表现一般的人。

由于他们都来自名校,所以我怕问的一些问题没有 cue 到他们的点,不合他们的胃口(社招面试的时候我才不会这么想),在进行了几个常规基础面试题预热后,我每一个面试者都问:” 请问你觉得你对 Java 哪一块比较熟悉?基础、框架、中间件的都行,我们可以聊聊。”

很奇怪,大部分都说自己对 Java 集合这块比较熟悉。可能是集合这块的面试题很多,大家都看过相关的视频或者文章。

基础不牢,地动山摇 — 集合

有一个面试者也说他熟悉集合,我问他:

  • 为什么我们建议在定义 HashMap 的时候,就指定它的初始化大小呢?
  • 正确的回答是:

在当我们对 HashMap 初始化时没有设置初始化容量,系统会默认创建一个容量为 16 的大小的集合。当 HashMap 的容量值超过了临界值 (默认 16*0.75=12) 时,HashMap 将会重新扩容到下一个 2 的指数幂(16->32)。HashMap 扩容将要进行 resize 的操作,频繁 resize,会导致降低性能。

  • 你要是能补充一句:

HashMap 是线程不安全的,它的不安全就体现在 resize 的时候,多线程的情况下,可能会形成环形链表,导致下一次读取的时候可能会出现死循环。

  • 要能再说说画画,具体是怎么死循环的,那就很不不错了。

然而他说:” 这个我不太清楚,我用的时候没有指定过大小,但是我知道默认大小是 16。”

当他这样回答的时候,我大概就判断他可能只是看过几个集合相关的面试题,并没有进行过深入的研究,远达不到熟悉的标准。

  • 我说的熟悉是禁得住比较深入的探讨。
  • 可能他理解的熟悉是熟悉的使用吧。

我准备引导他,看看他自己通过几个题,能不能联系起来,然后回答这个问题, 所以我接着问:

  • 1. 那 HashMap 什么时候扩容呢?
  • 2. 扩容到多少?
  • 3. 怎么扩容呢?
  • 参考答案:

1. 添加元素的时候会检查容器当前元素个数。当 HashMap 的容量值超过了临界值 (默认 16*0.75=12) 时扩容。
2.HashMap 将会重新扩容到下一个 2 的指数幂(16->32)。
3. 调用 resize 方法,定义长度为新长度 (32) 的数组,然后对原数组数据进行再 Hash。这个过程是一个性能损耗点。

  • 我是想先问扩容,再问扩容带来的问题。

因为会带来问题,所以我们就尽量减少扩容。
为了减少扩容,在我们已经知道集合具体多大,或者有个预估值的情况下
就设置一个初始化大小就好了。

  • 我想这样引导他,但是他 …

结果他说:” 当集合大小大于默认大小 16 的时候,会扩容,扩容的大小是原来的 1.5 倍。具体这么扩容的我不太清楚,我记得好像是会新建一个集合,把原集合拷贝过去 ”。(注意这是个错误回答!!!)

当他说完之后,气氛突然尴尬了起来。很明显,他把 ArrayList 和 HashMap 的扩容记错了,基础不牢的表现。

当时我内心就有一个大大的问号: 你不是说你熟悉集合吗?

基础不牢,地动山摇 — 线程
多线程编程,这是基础且关键的技术吧?

因为是应届生,在学校里面学了各种各样的语言。所以面试的时候我会问面试者:你的主要开发语言是什么?

只要面试者说,他的主要开发语言是 java。那我就会问线程池:

  • 了解 JDK Executors 线程池吗?
  • 知道 JDK 提供了哪些默认的实现吗?
  • 看过阿里巴巴 java 开发手册吗?知道为啥不允许使用默认的实现吗?
  • 你们没有用默认的吧? 那来介绍一下你们自定义线程池的几个常用参数呗?
  • 你这个几个参数的值是怎么得来的呀?算出来的?怎么算出来的?
  • 好,现在我们有一个自定义线程池了,来说一下你这个线程池的工作流程呗?
  • 那你这个线程池满了怎么办呀?拒绝?咋拒绝?有哪些拒绝策略呢?
  • 别紧张, 随便说两个就行。
  • ……
  • (这里不作回答,如果你不太清楚的话。建议去了解一下。)

大多数面试者,在我问到有哪些默认实现的时候,他们就能自动的把下面的问题都回答的差不多。

但是有几个面试者,他们的回答是: 仅仅是用过默认实现,具体内部细节没有了解。

那我就会觉得,额,怎么说呢,这感觉不好说,你自己的体会吧。

我问的另外一个关于线程池的问题,我面试的 15 位,没有一位回答正确,但是我都告诉他们:没关系的,这个回答不上来的话,不减分,下去可以了解一下。

我问的是:

  • 一个线程池中的线程异常了,那么线程池会怎么处理这个线程?

之前写过一篇文章《有的线程它死了,于是它变成一道面试题》,进行了比较详细的回答,可以了解一下。

然后,关于线程这块,我还会问一个题,这题是我们的宣讲会的初选题,他们都做过:

大多数面试者,看了十几秒就说选 C,并且告诉我理由。

有个面试者他看了一分钟,思考的很认真的样子,然后说他选择 D 选项,因为选项内容说反了。

我说,你确定吗?
他说:我很确定。
我说:下去之后再了解一下吧。

有的面试者看了一分多钟后,没给出答案,由于面试时间宝贵,我就说: 这样吧,这题选 C。你告诉我 C 为什么错了呢?

这个时候,大多数面试者都会给出一个正确的答案:

  • wait()方法会导致线程放弃对象锁,进入等待此对象的等待锁定池,

只有针对此对象调用 notify()方法或者 notifyAll()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

注意是准备获取对象锁进入运行状态,而不是立即获得。
再看一下《Java 并发编程的艺术》里面是怎么说的,有这样一段话:

但是有的面试者,对于 C 为什么错了,还是给不出详细分析。

这里反映出了两个问题:

  • 第一个问题是:基础不牢,地动山摇。
  • 第二个问题是:这题他们都做过,但是做完了就做完了,甚至不知道自己哪些题对,哪些题错。没有加以总结。这是不好的表现。

概念模糊,似是而非

另外一个面试者回答说他对 Redis 了解的比较多一点,项目里面用过。

我问了他:”Redis 你是拿来做缓存吗? 有没有考虑过缓存击穿、缓存穿透、缓存雪崩的情况呢?”。

这里我就不作答了,我之前写过一篇文章《当周杰伦把 QQ 音乐干翻的时候,作为程序猿我看到了什么?》介绍过,不了解的朋友可以去看看。

他说:”Redis 在我的这个项目里面,就是拿来做缓存的。你刚刚说的那几个概念,我有听说过。但是我们的项目还没遇到这样的问题。”。

我说:” 明白,没有关系,你给我介绍一下相关概念和对应的解决方案吧 ”。

他说:” 这个不太清楚。”

好的,我想可能是关于 Redis 的理论知识比较强吧。我接着问:” 那你给我介绍一下 Redis 的两种持久化策略呗?”

他倒是说了一些上来,但是整个回答听起来,概念模糊,似是而非。需要我主动去找他回答里面过滤掉一些口水话,提取到几个关键词:AOF,RDB,异步刷盘,可配置,命令追加 …..

而且说着说着卡壳了,有一种背课文的感觉。

我理解,这个程度,不能叫做熟悉。

送分失败,大失所望

面试的最后几分钟,我都会问一个问题:最近在看什么技术相关的书籍或者文章吗?

典型的送分题呀。这题很难回答吗?你甚至可以说,学业繁忙,主要看的还是课堂上的东西。
这题你不回答,不减分。回答的好可以加分,回答的不好会减分。

有一个哥们回答说:我最近在看《深入理解 Java 虚拟机》。

我一听,有点意思,可以探讨一下了。这书我前后加起来看了五次,

我问他:” 你看了这本书后印象最深的点有哪些呢?”

他说:” 我印象最深的是垃圾回收会导致用户线程停止。因为我之前遇见过这样的问题,我的程序经常跑着跑着就停了,我当时不知道为什么。后来了解到,是垃圾回收的时候导致的用户线程暂停。”

我听到他这个描述我想的是:那这个程序有问题呀,为什么会这么频繁且长时间的进行 FullGC 呢。

于是,我问他:” 你是怎么排查这个问题的呢?”

他说:” 不是我解决的,是实验室其他的同学解决的,同学给我说是垃圾回收的时候导致的问题。我最近看《深入理解 Java 虚拟机》的时候也联想到了这个问题。”

听到这里我已经有点失望了,他遇到了问题没有主动去解决问题。同学告诉他原因了,他也没有继续深究下去。

算了,还是回到书上去吧。我问:jvm 在回收哪块区域或者进行什么操作的时候会出现你刚刚说的暂停(Stop The World –> STW)用户线程的情况呢?

其实书上写的很明确了。老年代进行 Full GC 的时候会 STW,而老年代常用的垃圾收集器是 CMS:

更深一层次的原因书上也写了:

而他的回答是: 不太清楚。

失望。

你要说你没看过回答不上来,我还可以理解。但是你说你最近在看,却没有回答上来。那我可以理解为:你仅仅是看了,却没有留下任何的东西吗?

而且我没有问你类似于字节码解读、不常用参数介绍这样的刁钻问题吧。

不是我在难为你,是你在难为你自己。

失望。

其他的表现

除了上面说的这些情况,当然还有其他的一些表现。

比如说简历上写了,熟悉单例模式。我让手写个线程安全的单例。然后他写了一个双重检查锁定。却忘了加 volatile 关键字。

我说你考虑过重排序吗?说到重排序你想到了 java 的哪个关键字呢?

他说想到了 volatile。

我说那你这里为什么没有加 volatile 关键字呢,他说这里不需要加。

简单的解释了几句后我给他说去看看《Java 并发编程的艺术》这本书,里面专门说到了这个问题。

校招面试回顾

通过前面介绍的校招面试出现的一些问题,可以看到,我面试的时候已经尽力把主动权交给面试者了,但是有的面试者没有好好把握。

但是只要能好好把握这个主动权,把自己尽量多的展现出来,让我知道你是有技术且是热情的。语言表达清楚,动作不太浮夸,态度不卑不亢,表情轻松自然。

现在很多人面试之前都喜欢看一些面试技巧相关的东西。这没有问题,我自己也看。

但是面试技巧只是锦上添花,你的真实实力才是锦上添花的对象。

在对象还不够坚固的情况下,应该把花在锦上添花的时间,花到加固对象的时间上。

在绝对的实力面前,任何的锦上添花都会显得苍白无力。

最后说一点

这篇文章是我上周末面试结束之后就在构思并且着手准备了,由于和技术相关的点并不多,我更多的是对于面试这件事的思考,写到这里洋洋洒洒又快接近 1w 字了。大部分内容都是思考于晚上睡觉前的半小时,写于周末和工作日的早上早起的一小时。

还是之前说过的:
其实想到写什么内容并不难,难的是你对内容的把控。关于技术性的语言,我是反复推敲,查阅大量文章来进行证伪,总之慎言慎言再慎言,毕竟做技术,我认为是一件非常严谨的事情,我常常想象自己就是在故宫修文物的工匠,在工匠精神的认知上,目前我可能和他们还差的有点远,但是我时常以工匠精神要求自己。就像我在群里表达的:对于技术文章(因为我偶尔也会荒腔走板的聊一聊生活,写一写书评,影评),我尽量保证周推,全力保证质量。

文中提到的两本书《深入理解 Java 虚拟机》和《Java 并发编程的艺术》是两本非常优秀,值得反复阅读的工具书,可以关注我后,在后台发送 java,即可获得电子书。但是对于这类工具书,强烈建议,买一本实体书。

才疏学浅,难免会有纰漏,如果你发现了错误的地方,还请你留言给我指出来,我对其加以修改。

最后需要说明的是,这篇文章有很多是个人的看法,并不权威。
但是如果你认可我的看法,你的点赞、留言、转发、分享、赞赏就是对我最大的鼓励。

谢谢您的阅读,感谢您的关注。

以上。

扫码关注我呀,在这里我会分享一些技术相关的东西,主攻 java 方向,用匠心敲代码,对每一行代码负责。偶尔也会荒腔走板的聊一聊生活,写一写书评,影评。愿你我共同进步。

欢迎关注公众号【why 技术】。在这里我会分享一些技术相关的东西,主攻 java 方向,用匠心敲代码,对每一行代码负责。偶尔也会荒腔走板的聊一聊生活,写一写书评,影评。愿你我共同进步。

退出移动版