校招技术面试考察3点:简历、算法、基础。
1. 简历
- 简历的意义:1)进笔试面试 2)面试官提问的窗口
- 非科班的同学,自学了哪些基础课,包括是如何自学的,要放在简历显眼处。(详述见二、)
- 简历还包括项目和实习经历,这一块我觉得是加分项不是基本项。我没有实习过,这方面经验较少。
2. 算法
-
不同公司对算法的考察方式不同,有的公司重视思路的灵活和准确性,有的公司(比如腾讯、美团)可能需要你在共享编辑器上,不借助断点,独立写出bug-free的代码。前者考察对问题的理解,效率较高,后者考察扎实的coding基本功。
-
不同于第1、3点的开放性,算法是一个封闭性的任务,做出来即可,所以首先要保证面试时发挥的下限,这也是大家刷leetcode的动机所在:提升稳定性。
-
但这并不代表在算法上没有发挥的空间,清晰的思路、流畅的沟通、甚至是电光火石间的灵光一闪(即使对本题并不成立),都有可能成为你这次面试的亮点。比如我有一次一线厂的二面,面对一道NOIP的DP题,完全做不出来,但是提出了三种有启发性的思路,面试得到了较高评价。
-
关于是否需要深入研究算法:我的建议是在把1和3做好的前提下才适合深入研究,因为只有当你对1、2、3融汇贯通时,才有机会在1和3的问答之间,联系穿插高级的算法和数据结构,但这个要求对于绝大多数校招的同学来说并不现实。
3. 基础
- 基础主要考察计算机基础课:编程语言(C++、JAVA)、计算机组成原理、操作系统、计算机网络、(数据库)
- 面经的意义:快速复习和突击。如果说计算机的基础是一张网,那么你看面经相当于随机抽取网上的重点浏览,这样的好处在于,如果你已经有了一定的基础,复习效率会很高;即使你基础不牢,面试的时候也有可能抽中你复习到的地方,涉险过关。
- 面经复习法的缺点:有的面试官的风格是先提出一个简单的问题让你说(比如栈堆区别、进程线程区别),然后根据你的回答的信息量,大致判断你的水平,再针对性地进行提问。这种情形下,如果你的基础不牢,没有形成自己的知识体系结构,你会发现很难在无提示的情况下迅速地开枝散叶。当然,这个也可以依赖运气,比如遇到精心准备过的原题(栈堆区别、进程线程区别),但终非长久之计。
- 对于转行的同学来说,基础是重中之重,详述见二、
非科班的同学,尤其是劝退专业的同学,转行的难点是什么?我认为有以下几点:
- 时间被导师占用,没法抽空实习自学
- 计算机基础差
- 难以过简历关,或者面试时被面试官歧视
第一点是客观条件的阻碍,只能依靠人的主观能动性去尝试解决,和导师博弈争取兼顾毕业和实习自习是唯一的一条路,具体我也不了解,这里不详谈。
第二点和第三点是紧密联结的,基础不牢地动山摇,试问哪家企业敢招连数据结构都没学过的同学?如今IT企业的HR和面试官,对哪些专业是劝退专业可谓是了如指掌,所以如果想打动他们,一定要有亮点。
我建议,亮点最好是算法和基础,因为如果你这两点有短板,即使做了再多项目,面试官也有充分的理由怀疑你做的都是水出来的玩具项目,并无价值。
- 算法上的亮点:
- 手撕算法,实力征服面试官。需要投入大量时间,并搭配一定的天赋和运气(比如临场发挥上佳、遇到原题)。我认识一个中科大物理系本科管理学院硕士的朋友@ustcyyw,他付出的努力大致是看了一本600页的算法教材,做了300道leetcode题,每周坚持打周赛,方能勉强达到这个程度。
- 基础上的亮点:
- 自学四大的网课,认真做配套项目,参考 纯自学腾讯ssp的经验、教材和公开课推荐
- 自学了什么,包括是如何自学的,一定要大大方方地写在简历的显眼处。这不仅是提供给面试官一个考察你的通道,也可以打消面试官对你的疑虑。