# 被字节捞了六七次,终于拿到 offer 了!
大家好,我是小林哥。
前段时间,有位读者激动地跑来跟我说,进字节了。
经过和他一番的交流后,发现他的校招经历也是比较坎坷的,去年秋招不理想,面试屡屡受挫。
但是,经历完后秋招后,他就开始立马反思面试的过程,以第三人称视角去审视当时的自己,从中发现自己的不足,然后制定好计划逐个突破。
最终,在今年春招终于拿下字节的 offer。
别看我说的简单,其实他中途被字节捞了六七次,这非常考验面试者的心态。
所以,今天就由这位读者来分享他的校招心得。
希望这篇诚意之作,能对未来找工作的人或者正在找工作路上的人一些帮助和指引,也是希望能使你们少走一些弯路。
# 基本情况
先来说一下我的基本情况,我是西安某211高校电子科学与技术专业的研究生(非科班)。
本科学过计算机相关的一些课程,如计算机网络,操作系统。编程语言方面本科除了学过开设的 C 语言外,自学了 Python 和 C++。
研一抽空才开始对数据结构和算法进行了学习,所以我觉得自己一开始就是个小白,一点点成长起来的。
另外,因为顾及到女朋友,找工作比较考虑地域,可能有一些小伙伴与我有相同的经历。
我在秋招的时候签了深圳的 Shopee,但是当时为了和女朋友在一个地方,春招又开始找工作,最后经历了一个月的努力,杭州字节上岸。
有小伙伴可能会问我,为什么秋招没有直接找杭州的。
其实,我在秋招的时候也找了杭州的,但是当时杭州比较好的公司我都没过。。。
这里我来说一下为什么我秋招如此的失利(菜是原罪/(ㄒoㄒ)/~~)。
在秋招一开始,也陆陆续续投了一些公司,有大厂提前批,也有二线厂。
但是,当时怪自己复习不充分,有时候因为代码问题没过,有时候因为基础答得不好导致与后续面试无缘。
后来经过多次得复盘,在基础和代码题下了很多功夫,但是还是面试失利。
后来在复盘时,我发现我与面试官交流比较少,比如当面试官问我一个比较偏实际业务的问题时,我基本都是在那思考好久,中途也很少和面试官交流。
这就会显得很尴尬,就好像你和一个人在聊天,另一个人突然掉线一样。
即使你最后回答出来了,但是给面试官的体验不太好。毕竟如果有幸进了公司,就成了一起共事的同事,肯定会一起交流业务, 技术问题。
如果面试官觉得你在面试中与他交流甚少,那么会给他一个暗示,就是你不想和他交流(也许这不是你的本意),最终 pass 你。
# 你要找什么工作?
可能这一点上你会考虑很多,比如岗位,地域,平台,收入等。这些都是秋招前可能就要考虑的问题,特别是岗位,更是决定了备战复习的方向。
作为过来人,我会给一些自己的看法,但是最终靠你自己决定。
岗位是我最先想聊的。
一般大部分人都会选择找的岗位是算法、后端开发、测试开发岗位。而像前端、客户端开发(IOS/Android)也有一些人会去做。
个人感受每年这两种岗位投递的人数不如上述三个岗位多,尤其是今年的算法岗位和后端开发可以说是一片红海。
这些岗位在校招过程中的难度系数是:算法 > 开发 > 测试开发 > 前端 = 客户端开发。
其中算法主要分三个方向,难度如下:计算机视觉 > 推荐系统(机器学习、大数据)> 自然语言处理。
以上提到的难度不是指技术难度,而是获得心仪 offer 的难度。
大厂的 cv 岗神仙打架,算法今年诸神黄昏,更加上疫情影响,许多海归学子也加入其中,可以说今年是找工作最难的一年。
所以,在这里我的建议就是,心中要先有一个目标岗位,然后去针对目标岗位的一些技术栈进行准备。
如果要找开发岗位的,扎实的学习完计算机基础、数据库、算法和数据结构、设计模式以及 C++ 或 Java 等编程语言相关的知识,准备一两个项目,并且熟悉项目中所用技术的原理细节。
如果有小伙伴要找算法岗位的话,那么要把自己研究的领域吃透,并且在其他领域也要有所涉及一些。
# 简历篇
作为一名在校生,在进入校园的那一刻起就要想着怎么充实自己的简历,因为大家不可能用半年的时间来填满自己的简历。
简历上的各项荣誉都是你在校期间的积累。简历里内容主要有:个人基本信息、联系方式、教育经历、成绩、 掌握的技术栈、 科研项目经历、比赛经历、获奖经历、发表论文、其它等。
一般简历上可手写意向岗位,因为不同公司对岗位的叫法差距蛮大,不能每一个都打印意向岗位。此外简历打印最好是彩印,让面试官看着舒服。
对于在校生,简历内容最好在两页以内(也即双面彩印时,一张纸可完成)。
纸质版简历一般在现场面试要携带,但在网上投递公司时,通常是按照公司要求填写个人简历,这个过程会十分繁琐,一个公司可能要填半小时,着实费心。
在这里推荐大家使用牛客简历助手插件,可以帮助你快速填写电子简历。
下面主要说简历里的技术体现。
面试官看重简历里的什么?
这个问题你可以换位一下,如果你是面试官,你觉得哪些内容能体现一个人的水平?
emmm 据个人面试经验,简历上的闪光点排名及说明如下表:
希望上述表格对大家有导向作用,另外说一下简历上的一下注意点:
第一点,每个闪光点的描述上要包含:这个项目或比赛是什么、你负责了什么、用了什么技术栈、最终排名如何。
项目、比赛、论文每个里面要有至少有一个自己非常熟悉。据个人经验,面试官通常会这样提问“你挑一个印象最深的项目/比赛讲一下吧”。
所以你们自己要提前预演怎么回答这个问题,一定要预演一遍。
第二点,简历上写的任何技术,你都要会。不会的千万千万不要写,被问到就死翘翘了。
拿捏好用词,比如「熟悉 C++」和「熟练掌握 C++」 程度上是不一样的,只是刚入门的技术,我建议就不要写了。
简历上你写的任何技术栈,只要面试官熟悉,他基本上都会问你。
比如,你写你懂 Docker,恰巧面试官会,那他不出意外肯定会问一些相关问题。
# 项目篇
各位找工作的小伙伴一定很在意找工作时面试官是不是特别看重项目经验,这里请小伙伴听我娓娓道来。
以我个人的面试经历,我其实简历上是没有什么和研发类岗位相关的一些项目的,我简历上的项目基本都是在校期间做的科研项目以及一些比赛(计算机视觉相关比赛)。
我在一开始面试的时候屡次失利,以为我是没有相关的项目经历。
但是后来通过听自己的面试录音(因为我们由于疫情是线上面试)进行复盘,发现自己在回答一些技术问题时回答的也不是很好(这里的不好指的不是回答有误,而是对于某一个问题,基本上都是两三句话就讲完了,个人感觉给面试官的感觉就是你懂得很浅)。
那么这里的项目经验到底重不重要呢?
其实对于国内的一些互联网大厂来讲,像阿里、字节,这些公司其实对于项目经验看的不是很重,更看重的是你的基础(对于大厂来讲一个基础扎实的应届生可塑性是很强的)和代码能力。
但是不看重,不代表不用准备项目,如果你像我一样是后期转岗,没有时间准备,那么就把自己简历上的项目都搞明白,给面试官讲清楚,面试官可能不懂你做的是什么,但是多年的工作经验,他们对于你做的东西,一听就能洞察其中的要点,可能还会深挖一下细节。
反之,如果你讲的不好(不是你不懂,而是表达交流能力的问题),面试官可能听的云里雾里,会大大减分的,毕竟以后你进了公司都是同事,交流肯定很多,他们更喜欢和交流起来舒服的人一起共事。
但是如果一开始就打算找研发类岗位的小伙伴,时间充裕的话,还是准备一下相关的项目,这里准备的时候一定要吃透,具体分为以下几个部分:
- 项目整体的实现流程(最好自己画一个图出来,方便自己理解,以及面试过程中可以展示给面试官,清楚明了);
- 你在做这个项目的时候遇到了哪些难点,是怎么解决的(重点,面试官肯定会问的);
- 在这个项目中用到的一些知识点,技术栈一定要清楚细节,搞明白为什么这么用,有没有可以替代的,有的话为什么不用替代的,用了效果怎么样(凡事要多考虑一下,毕竟你不知道面试官会不会问,准备全面一点不会有坏处)。
以上几点最好自己用电子文章整理总结,方便复习。
最后在多说一句,其实面试官都知道对于应届生生来讲怎么会有和公司业务贴近的项目经验(除非你去实习过)。
因此,如果没有项目经验,那就准备好当下自己所拥有的以及基础,尽力表现出自己的亮点,如果有项目经验,就准备全面一点,基础也不要落下哦。
# 技术篇
由于我在校招过程中找的大都是测试开发岗位,客户端和算法岗位也找过一些,因此主要说一下对于测试开发岗位考察的技术。
对于测试开发岗位,据我个人面试经验总结如下几个部分:数据结构,计算机基础(包括操作系统,计算机网络等),数据库,设计模式、测试用例设计,测试的方法,代码。
另外,对于算法,我这里也可以给小伙伴一些建议,因为本人在校期间是做计算机视觉算法的,算法岗位需要掌握的总结为 4 个部分:通用知识理论(不管什么岗位都要会的)、深度学习、机器学习、代码。
对于客户端每个公司具体考察什么我也不好说,据我个人面试经验,字节客户端岗位会招 0 经验,但是你的基础和代码要过关(二者不可缺一才能过关斩将)。
# 数据结构
笔试必考内容。
对于数据结构,我是通过看《大话数据结构》这本书进行学习的,并自己通过代码去实现一些常用的数据结构,如二叉树,链表等。
笔试时很多编程题都与数据结构有关,比如堆栈队列二叉树等知识频繁出现在笔试中,还有各种排序的变异程序题。
而面试时,面试官也喜欢提问相关知识,比如他们很热衷提问快排和归并排序,还喜欢提问 Top k、海量数据排序等。
# 编程语言
一般 Python 都要会,鉴于经历有限,C++ 或 Java 二选一。
如果你偏向找 Java 开发,机器学习和大数据的话选 Java 更好。
算法笔试时使用的语言一般就是上述三者之一。
不过这里讲的掌握一门编程语言,不是简单的用它写代码,需要更深层的掌握底层原理。
比如我在面试百度的时候,一个小时的面试,有 30 分钟再问 C++ 的知识,在面试字节等其他公司的时候,经常被问到 Python 的内存管理机制。
如果你想快速概览一门语言的知识点,推荐看菜鸟教程,总结的短小精悍,适合学习和查阅。
由于我主攻C++,这里我说一下我主要在准备秋招时看了哪些资料吧。
首先对于C++的基础学习,我看了《C++ Primer Plus》这本书,看完基本就入门了,看完之后看了《Effective C++》以及侯捷的《STL源码剖析》(由于时间关系没有看完)。看完书之后就是对语言的熟悉了,后期刷题基本上都用 C++ 去刷。
其他常考的 C++ 知识,我可能没有总结资料,需要你们自己搜,比如:
- char a[3], char a[], char*a 的区别;
- 模板template、const和define定义常数用谁更好;
- 宏定义和内联函数的区别;
- 虚函数(常考);
- 虚表(常考);
- sizeof;
- 多态;
- C++内存管理;
- C++11 特性;
- C++编译的 4 个阶段;
- 动态库与静态库;
- C++结构体和类的内存对齐问题;
- 智能指针;
- ….
关于 Python,我没有直接的资料(也是由于在校期间做的科研项目Python 用的比较多,比较熟悉),印象中常考察的点有:
- Python 多线程;
- 全局解释锁;
- Python 数据结构的底层,如索引、元素增删、字典、元组、集合等是怎么实现的;
- 内存管理方式;
- 深拷贝浅拷贝;
- 三元表达式;
- *args 和 **kwargs;
- join 用法、split 用法;
- 类、类中 self;
- 运算符 and,or,not;
- is 和“==”的区别;
- 位运算和C++的不同;
- …
以上我提到的最好看看,但不能作为唯一参考,真实考察的会比我上面提到的多。多搜搜面经和真题,查漏补缺,学会记录,好记性不如烂笔头。
# 计算机基础与数据库
计算机基础包括计算机网络和操作系统.
这里首先推荐的就是小林的图解操作系统和图解计算机网络了,讲解通俗易懂,对于有一点基础的人来说很快就能构建起知识网络,对于 0 基础的人来说可以突击一下面试。
但是建议如果时间充足还是建议先系统学习一下,这里我推荐可以看《计算机网络(第七版)》,看完基本上整体入门,然后再去看小林的图解系列,把整个知识串起来形成知识网络。
数据库,我学习的是 MySQL,是在 b 站找的尚硅谷的视频一整套(包括基础和进阶)学习下来的。
包括操作系统,我也是先在b站系统的学习了(看的是王道考研的操作系统),才去看小林的图解系统对一些常考的问题以及怎么与实际问题结合进行了学习和查漏补缺。
另外,在公司大多都是在 linux 环境下进行开发工作,面试官多多少少会问一些 linux 指令,大家可以熟悉一些常用的指令。
这里我根据我个人的面试经历总结一下上述几个方面常考的一些题。
计算机网络:
- TCP、UDP的区别;
- HTTP 与 HTTPS 的区别;
- 三次握手与四次挥手;
- HTTPS 加密方式与过程;
- 输入一个网址中间发生了哪些过程(如果面试官问道这个问题,那么肯定会连带 DNS 解析过程及三次握手四次挥手一起问);
- 什么是 Cookie,如果 cookie 禁用怎么办;
- Cookie 与 Session 的区别;
- TCP 的长连接怎么实现;
- HTTP 1.x,2.x的特性;
- TCP 的可靠性传输怎么保证(会被问到重传机制,滑动窗口,流量控制);
- Get 和 Post请求方式的区别
- …
大家看小林的图解网络就好了!!!
操作系统:
- 内存管理;
- 进程与线程(每次都考);
- 进程通信的方式;
- 死锁相关知识;
- 页面调度算法等;
数据库:
- 给几个表,写 SQL 语句;
- SQL 语句如何优化;
- SQL 索引;
- 根据给定的表,让你说一下如何创建索引比较好。
Linux命令:
- chmod 指令;
- 查找文件中符合条件的字符串指令 grep;
- sed 指令;
- 查看进程使用情况的指令 top(其实也可以说htop)。这个指令不同面试官不一定考察什么。建议可以看看文件管理类指令和文档编辑指令。
# 笔试和面试的代码题
由于这个十分重要,所以我放到这部分最后单独说明。
在我看来,笔试能力在秋招中要占据 60% 的重要程度。
首先笔试不过,你根本没有面试的展示机会。
其次面试中也会反复让你手写代码,以字节为例,每一轮面试都是 1-2 道编程题,有时候不怎么聊简历;百度每一轮面试有一道编程题。
现在公司的面试模式就是这样,如果代码没搞出来,大概率会被淘汰。
并且最窒息的是这些代码题都不简单,一般都是 leetcode 中等到 hard难度。
刷题主要可从以下三个渠道。
第一个,剑指offer:
https://www.nowcoder.com/ta/coding-interviews
第二个,leetcode:
https://leetcode-cn.com/problemset/algorithms/
第三个,近期面试中常考题:
https://www.nowcoder.com/activity/oj
剑指 offer 作为大经典,是一定要刷两遍以上的,很多题都是面试时的原题,里面包含了很多笔试常用的思想方法,反复看,反复研。
我一开始每天 10 题,过两遍以后,要求自己每天快速过剑指一遍。
leetcode 由于题目十分之多,刷完是不可能的。我的意见是 leetcode 作为你弱项的专项练习。
leetcode 右侧有标签分类,如下图:
另外在巩固完弱项的情况下,建议将 leetcode 前 300 题刷熟练,据我个人面试经历,国内大厂面试出的代码题 80% 都是这个范围内的。
另外,我在刷题的时候看了 labuladong 总结的算法小抄,对算法的理解很有帮助。
最后根据我的面试经历,根据个人感觉,公司常考题有:
- 链表类(链表反转类题目)
- 二叉树类(二叉树的遍历类型题,最大公祖先类题目)
- 字符串操作题目
- dfs/bfs
- 动态规划(这个考的基本都是 leetcode 上的或者是背包问题,对于动态规划问题其实有很多种类,比较见到的就是一维动态和二维动态),另外还有区间调度类型的题目(贪心算法,也属于动态规划的一种特殊情况。
其实也没有什么技巧,多刷题,多理解就好了。
# 心理篇
校招期间要时刻关注自己心理状态, 这可能会起到最重要的作用。
焦虑、彷徨、孤独、自我怀疑,校招期间会时常发生,相当折磨一个人。
像我后期找字节,就被字节捞了六七次(这里提一下,想被捞的话,你的面试评价一定要好),真的很搞人心态,但是我坚持下来了,希望小伙伴在找工作的时候不管发生什么坚持下去。
希望你放下比较,不要因为别人先拿到了 offer 就开始焦虑,有人可以早早结束校招,那他也在后面付出了我们看不到的东西,也可能焦虑彷徨过。
你要做的是掌控自己的节奏,知识打磨的够硬,简历够充实,准备充分就不用担心没有心仪 offer。
另外面试完不要深究面试结果如何,整个校招面试会很多,如果每一场结束后都不能释怀,会很影响你接下来的状态。
面试结束后,会不会被录取不是我们焦虑就能决定的,你可以从面试中总结,但不要从面试中懊悔。
如果你有一起奋战的恋人、朋友,这个过程中互相鼓励和帮助,体验会好很多。
及早准备,如果你有幸在提前批就拿到心仪 offer,那么你后面会过的很称心。
早早准备总不会差,加油~
再说你已经拿到本宝典,还!怕!啥!
最新的图解文章都在公众号首发,别忘记关注哦!!如果你想加入百人技术交流群,扫码下方二维码回复「加群」。