目前人在字节,万千字节面试官之一,其他岗位我不太清楚,开发岗位我可以详细聊一聊。
一、对面试官的要求
字节的面试虽然对面试者的要求很高,但对面试官的要求也不少,我们有一份很详细的规定,规定了面试官的面试时长、可以问的和不可以问的问题等诸多细节,尽量做到给面试者良好的面试体验。所以如果有同学来字节面试,一般不会遇到很不靠谱的面试官。我以往一些工作经历中,曾遇到一些面试时漫不经心的、玩手机的、全场接电话的、鄙视求职者过往经验的、嫌弃面试者上家公司业务的、问求职者薪资和个人情感问题的面试官,这些问题你来字节面试都不会遇到。另外,字节的面试要求面试官详细地记录面试中提问的问题和面试者的回答,同时在征得面试者允许的情况下做一些面试录音,以方便后续面试官和 HR 部门对面试结果做参考和评判。面完之后,字节也会邀请面试者对面试体验做评价和反馈。所以,来字节面试,你不用担心在人的方面被坑。这大概也是这几年字节能招募许多优秀的人才、快速发展壮大的原因。
二、对面试者的要求
一般技术面试至少有三轮(不包括 HR 面),当然前提是你得通过前面的一面和二面,春招和秋招在面试前会有笔试题。
无论是 BAT 还是字节这样的大公司,面试七分看实力和背景,三分看运气,运气方面包括你可能在某次面试的时候恰好遇到一个比较赏识你的面试官(下文会提到),那么面试就比较容易过。运气部分大多数人都抓不住,我们来说说可以抓得住的实力部分吧,实力部分包括技术实力和沟通(话术)实力。
三、4 位面试未通过的同学所犯的错误
我们先来看 4 位未通过面试的案例吧,希望给大家一点启发。前 3 位同学都是应届生,最近面的,学历都不错;第 4 位是一个工作七年以上的同志。
3.1 第 1 位同学
第 1 位是北京某大学的同学,这位同学在简历上写的是主要编程语言是 Java,并且在简历上贴了自己的 github 项目地址和博客地址。我面试前看他简历的时候,特地去看了他的博客和 github 代码,代码风格很不错,博客上的文章原创多,且流程图画的非常精致,这给我留下了非常好的印象,为这位同学点赞。
实际面试的时候,我问了一些 Java 方面常用的知识,如 HashMap 的数据结构、扩展因子、算法复杂度、线程的创建、== 和 equals 方法的区别、线程池的设计等等,最后让这位同学写了一道算法题。他也很快在 IDEA 中用 Java 写出来了,并且测试也没问题。于是,一面我就让他过了,并且面试给予不错的评价。
二面是我的同事面的,由于一面我没有问网络方面的问题,二面上来第一个问题是问了三次握手的问题,这位同学直接回答说“这个问题比较复杂,不太清楚”,我在旁边旁听,听到他说这话的时候,我就知道他这场面试已经走远了,面试肯定过不了。果不其然。我看二面的面试评价时,详细地记录了这个问题和他的回答。最终二面给到他的总体评价是:基本功不扎实,计算机网络掌握的差。
个人觉得这位同学就比较冤,正常对于像问三次握手这样的问题,认真准备一下,问题应该不大,无非就是话术问题,他说出的答案感觉出他对这些基本功的轻视,而这类基础问题恰恰是可以适当准备的。
3.2 第 2 位同学
第 2 位同学是合肥某学校的同学。这位同学前期学的是 Java,但是找了一份实习工作做的是 php,然后在简历写上自己熟悉 Java 和 php。
面试开始的时候,我先问了一些 Java 的基础问题,该同学基本上都没答好,接着我问了计算机网络、多线程、数据库、Redis 方面的问题,基本上也没答好。于是我就给了他几道算法题,让他自己选两道题目来做。
他说他用 Java 写一下,我们是线上面试。于是我看到他打开 VSCode 开始写 Java 代码,我就提醒他说,Java 开发一般不是用 IDEA 开发嘛,VSCode 方便吗?他说方便。大概过了15 分钟,他代码写完了,开始编译,但是有编译错误,我看他在那里捣鼓了一会儿仍然没解决编译错误,于是我就给了他一点提示。在他解决了编译错误以后,跑测试用例的时候,跑出来的结果总是不符合预期。于是我就问他,结果非预期有解决思路吗?他又捣鼓了一会儿,最终放弃了。
在这位同学做算法题期间,我又认真看了一遍这位同学的其他面试记录,发现这位同学笔试成绩不合格(分数偏低),后找人内推,参加了两个部门的面试,都没面过,后来又被内推到其他七八个部门,简历筛选均未通过。这次面试我们部门也是内推的。
面试结束了,这位同学自知面试无法通过,当我问他有什么问题想问我的时候,他说希望我告诉给他一些学习的建议。我总结了一下:
- 无论是学习还是找实习,在未学好的情况下,学习内容要做一些收拢
比如这位同学,明明开始是学习 Java 的,找的实习却是 php,当我问及他为什么要找 Java 实习的时候,他说他因为一些事情耽误了找实习的最佳时机,后来 Java 实习找不到,勉强找了一份 php 实习。结果实习的内容仅仅是一些 CRUD 的工作,php 未学好,原来的 Java 也生疏了。但是简历上写的是熟悉 Java 和 php,我看他的之前面试记录,他曾在前面某一场面试时,被问及到 php 的一些问题,答不出来;在前面的某一场和这次的面试,被问及 Java 的基础问题也答不好。不能为了实习而实习,如果基本功未掌握好,不如踏踏实实留在学校夯实基本功。 - 不注重基础知识的学习
该同学在算法数据结构、网络编程、多线程、数据库等方面,都未掌握好。 - 不善于总结和反思,动手能力差,且遇到问题无清晰的解决问题的思路
我在面试的过程中,特地挑了几个在他之前面试被问到的问题,结果这位同学仍然答错或者不得要点;该同学在编写代码时,对编程工具不熟悉,缺乏基本的编译、调试能力,遇到不符合预期的输出结果,也无很好的解决思路。 - 学习知识不注重理解,喜欢机械式地记忆;网上看到的帖子,不加甄别地吸收
我问了这位同学一些关于三次握手的问题,但是我稍微变通一下,问如果连接一个不存在的主机、或者连接一个存在的主机但目标端口号未开启侦听时的握手情形,该同学就不知道如何分析了。当问到 HTTP GET 和 POST 方法的区别时,该同学直接就搬出了一篇网络上有错误的文章中的内容,不假思索地说出 GET 请求底层只发一个包,POST 会发两个包的论断。当然,网上这篇文章误导了很多同学。
3.3 第 3 位同学
第 3 位同学是浙江某高校的一位同学。这位同学学习的 C++ 技术栈,C++ 语言部分掌握的还可以,但是在网络编程、多线程等基础知识上掌握的不好,例如网络分层结构说不清楚、 select 函数用法不清楚、搞不清楚基本的网络模型、epoll 的边缘模式对读写事件的处理理解不清楚、条件变量不知道虚假唤醒、HTTP 协议格式说不清楚。
该同学还存在的一个比较大的问题就是简历上写了过多的未掌握的或者一些不相关的技术栈,如 Redis、Nginx 并不熟悉,还写了 SpringBoot、Vue 等不相关技术。简历中要注意扬长避短,比如你的学历不占优势,那你就不要把学历放在醒目位置,关于如何避免简历中常犯的错误可以参考这里。
3.4 第 4 位同学
第四位同学是社招,工作七年以上,对于这样的同学我们没有安排算法题,而是期望这位同学有扎实的基本功、一定的经验或者有擅长的技术方向。但实际面试下来,在讨论过往项目时,就项目中涉及到的一些关键的技术点说不清道不明,然后我们就分布式、RPC、缓存、数据库、消息队列、CDN、系统优化、架构设计、项目管理、团队管理等方面交流了一下,感觉该同学无一方面熟悉,遂结束面试,当然面试结果肯定也是无法通过。一般面试者哪方面熟悉,我就和他聊哪方面,可惜最后结果不是很满意。
四、一些总结
通过上面几个失败的案例我想说的是:
- 在绝对实力面前,字节的面试并不难;
- 适当掌握一些面试话术技巧,可以增大面试成功的几率,至少不要犯像上文中第一位同学那样的表达错误;
- 面试前要适当准备一下。
五、几个大家比较关心的问题
5.1 关于学历
通常来说,字节对于校招是有一定的学历要求的,基本上一本及一本以上,一本以下的一般在简历筛选阶段被过滤的几率较大;对于社招,简历筛选阶段,某些部门适当放低对学历要求,最后能不能进主要看面试表现。
5.2 关于基本功与项目经验
通常来说,对于校招应届生,一般不对项目经验、实习经验做刻意要求,但对基本功要求高,尤其是算法和数据结构,校招算法题答的不好,基本面试通过几率不大,当然,这也是大厂普遍要求,基本功通常包括算法数据结构、某个编程语言本身的内容、操作系统原理、多线程、网络编程、数据库;校招,对于工作年限不长的同学,也会考察一定的算法和数据结构知识,然后是基本功和一定的项目经验;对于工作年限较长的,期望在某个技术方向有些自己的积累和沉淀。
5.3 关于分布式和高性能高并发项目经验要求
很多社招的同学担心,自己无分布式项目开发经验,或者无高性能高并发项目开发经验,会不会面试通过不了。一般来说,根据我的经验以及和各个其他作为面试官的同事的交流下来,一般对这两块也不作强行要求。一般看以往的工作经验,经验是否丰富、对一些技术是否有自己的沉淀和独到的理解和归纳总结。
5.4 关于内推
通常找人内推要比猎头推荐或者网上自己投简历要快很多,内推的时候可以经常联系内推的同学获取最新的面试结果。以上面第 2 位同学为例,如果不是找的师兄内推,根据他第一次的面试记录,不会有多少部门愿意再次给他提供面试机会。
机会总是给有准备的人,祝各位都能拿到满意的 offer。
六、内推字节(其他 BAT 公司也可以)
内推链接
七、为技术开发的同学准备的福利
计算机必看经典书籍(含下载方式)。