1. 前言

对于软件开发校招而言,不管是应聘前端、后端还是移动端岗位,笔试是大部分同学都无法避免的一个环节,笔试中占据最重要地位的肯定是算法问题,如何高效并且快速的准备校招算法就是本章需要关注的问题。

2. 笔试

2.1 整体流程

我们只需要分析下招聘通知,就不难发现互联网大厂在筛选简历时会优先考虑这几类同学:

  • 学校:大厂青睐公认的名校,例如清华、北大、上交、复旦等,或者是传统计算机强校:浙大、北邮、西安交大等。
  • 竞赛经历:参加ACM-ICPC(国际大学生程序设计竞赛)并且在区域赛或者全国赛获得好名次、CCPC(中国大学生程序设计竞赛),或者蓝桥杯比赛等。
  • 大厂实习经历:最好是BAT(百度、腾讯、阿里)或者TMD(头条、美团、滴滴),或者是一些知名独角兽(例如商汤、猿辅导)等有实习经历。

具备上述学历背景和经历的同学,通过熟人内推的方式,往往能免简历筛选和笔试,直接进入到面试流程。

但是对于大多数参加计算机校招的同学来说,往往都不具备上述几个优势,我们应该关心的是,作为普通条件的学生,如何高效快速的准备校招笔试。

一般来说,一轮完整的技术校招需要经过的流程如下:

图片描述

面试流程

如图,可以看出,如果我们的算法能力不够应付笔试环节,往往都没有面试的机会,简历就被无情筛选掉了。而且对于头部互联网公司来说,很多岗位的投录比(简历投递人数/最终录取人数)过高,只能通过笔试提前筛选。

大部分情况下,候选人在经过了笔试和简历筛选之后,会经历2到3轮现场面试,通过之后就能被顺利录取。

所以除了准备关于计算机基础的面试题目之外,笔试算法也是关注的核心。

2.2 笔试考察内容

目前大部分的互联网公司都支持远程笔试和面试,具体的流程如下:

图片描述

笔试流程

在候选人投递简历之后,企业会提前发送笔试邮件告知候选人。

因为候选人投递简历的时间比较分散,所以互联网企业一般会将候选人分为不同的批次,被分到同一批次的用户参加同一场笔试,

笔试题型一般分为选择题、问答题、编程题,笔试时间一般是一个半小时到两个小时。

因为问答题需要人为改卷,选择题和编程题都可以系统自动判定分数,所以选择题+编程题的出题方式比较常见,其中编程题大多是2到4道,主要都是算法题,完成语言不限制(一般都支持C++、Java、Python、Javascript这几种语言)。

2.3 笔试如何准备

选择题一般是考察候选人的计算机基础知识,包含计算机网络、操作系统、计算机组成等。如果是特定的面试岗位,例如Java后端工程师,也可能会涉及到特定语法,例如考察 Java 的多线程相关知识。

选择题一般靠看书,例如通过阅读《计算机网络:自顶向下方法》等教科书,况且目前网上有诸多已经整理好的开源题库,例如慕课网的相关教程。

算法题则比较特殊,就笔者的观察,大部分的候选人在不做准备的情况下都缺乏解决困难笔试题的能力。

因为即使是计算机专业的同学,所接受的大学编程通识教育,一般只涉及基础的数据结构教程。

在约定的笔试时间内,对于没有经过特定训练的候选人,还可能受到紧张等心理因素的影响,往往会难以编写无误的代码,最终结果只能无缘面试。

笔试考察的算法题难度浮动比较大,涵盖的知识也从基础的数据结构,例如堆栈和二叉树,到比较复杂的算法过程,例如深度优先查找算法、广度优先查找算法、动态规划算法等。但是我们从整体上分析,就不难发现这些题目大部分都具有固定的解题模板以及解题思路。

大厂面试官的笔试题来源,可以肯定90%来自 LeetCode 算法网站以及《剑指offer》这本算法书籍,所以候选人应该将关注的重点放在这两块内容。

本章后续的小节会给出一些经典的数据结构和算法解题模板和思路。

3. 小结

本章节介绍了校招的整体流程以及笔试需要准备的内容,之后的章节会针对数据结构与算法中的典型题目做出分析,题海无涯,候选人需要做到举一反三。