<p align="center">
  <a href="https://mp.weixin.qq.com/s/RsdcQ9umo09R6cfnwXZlrQ"><img src="https://img.shields.io/badge/PDF下载-代码随想录-blueviolet" alt=""></a>
  <a href="https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw"><img src="https://img.shields.io/badge/刷题-微信群-green" alt=""></a>
  <a href="https://space.bilibili.com/525438321"><img src="https://img.shields.io/badge/B站-代码随想录-orange" alt=""></a>
  <a href="https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ"><img src="https://img.shields.io/badge/知识星球-代码随想录-blue" alt=""></a>
</p>
<p align="center"><strong>欢迎大家<a href="https://mp.weixin.qq.com/s/tqCxrMEU-ajQumL1i8im9A">参与本项目</a>，贡献其他语言版本的代码，拥抱开源，让更多学习算法的小伙伴们收益！</strong></p>



大型互联网企业一般通过几轮技术面试来考察大家的各项能力，一般流程如下：

* 一面机试：一般会考选择题和编程题
* 二面基础算法面：就是基础的算法都是该专栏要讲的
* 三面综合技术面：会考察编程语言，计算机基础知识 ，以及了解项目经历等等
* 四面技术boss面：会问一些比较范范的内容，考察大家解决问题和快速学习的能力
* 最后hr面：主要了解面试者与企业文化相不相符，面试者的职业发展，offer的选择以及介绍一下企业提供的薪资待遇等等

并不是说一定是这五轮面试，不同的公司情况都不一样，甚至同一个公司不同事业群面试的流程都是不一样的

可能 一面和二面放到一起，可能三面和四面放到一起，这里尽量将各个维度拆开，让同学们了解 技术面试需要做哪方面的准备。

我们来逐一展开分析各个面试环节面试官是从哪些维度来考察大家的


## 一面 机试

一面的话通常是 选择题 + 编程题，还有些公司机试都是编程题。

* 选择题：计算机基础知识涉及计算机网络，操作系统，数据库，编程语言等等
* 编程题：一般是代码量比较大的题目

一面机试，**通常校招生的话，BAT的级别的企业 都会提前发笔试题，发到邮箱里然后指定时间内做完，一定要慎重对待，机试没有过，后面就没有面试机会了**

机试通常是 **选择题 + 编程题，还有些公司机试都是编程题**

选择题则是计算机基础知识涉及计算机网络，操作系统，数据库，编程语言等等，这里如果有些同学对计算机基础心里没有底的话，可以去牛客网上找一找 历年各大公司的机试题目找找感觉。

编程题则一般是代码量比较大的题目，图、复杂数据结构或者一些模拟类的题目，编程题目都是我们这门课程会讲述的重点

所以也给同学们也推荐一个编程学习的网站，也就是leetcode

leetcode是专门针对算法练习的题库，leetcode现在也推出了中文网站，所以更方面中国的算法爱好者在上面刷题。 这门课程也是主要在leetcode上选择经典题目。

牛客网上涉及到程序员面试的各个环节，有很多国内互联网公司历年面试的题目还是很不错的。

**建议学习计算机基础知识可以在牛客网上，刷算法题可以选择leetcode。**

## 二面 基础算法面

### 更注意考察的是思维方式

这一块和机试对算法的考察又不一样，机试仅仅就是要一个结果，对了就是对了不对就是不对，

而二面的算法面试**面试官更想看到同学们的思考过程**，而不仅仅是一个答案。

通常一面机试的题目是代码量比较大的题目，而二面而是一些基础算法

面试官会让面试者在白纸上写代码或者给面试者一台电脑来写代码，

**一般面试官倾向于使用白纸，这样更好看到同学们的思考方式**

### 应该用什么语言写算法题呢？

应该用什么语言写算法题呢？ **用自己最熟悉什么语言，但最好是JAVA或者C++**

如果不会JAVA或C++的话，那更建议通过做算法题，顺便学习一下。

如果想在编程的路上走得更远，掌握一门重语言是十分重要的，学好了C++或者Java在学脚本语言会非常的快，相当于降维打击

反而如果只会脚本语言，工作之后在学习高级语言会很困难，很多东西回不理解。

所以这里建议特别是应届生，大家有时间就要打好语言的基础， 不要太迷信用10行代码调用一个包解决100行代码的事，

因为这样也不会清楚省略掉的90行做了哪些工作。

这里建议大家 **在打基础的时候 最好不要上来就走捷径。**

**简单代码一定要可以手写出来，不要过于依赖IDE的自动补全 。**

例如写一个翻转二叉树的函数， 很多同学在刷了很多leetcode 上面的题目

但是leetcode上一般都把二叉树的结构已经定义好了，所以可以上来直接写函数的实现

但是面试的时候要在白纸上写代码，一些同学一下子不知道二叉树的定义应该如何写，不是结构体定义的不对，就是忘了如何写指针。

总之，错漏百出。 **所以基本结构的定义以及代码一定要训练在白纸上写出来**

后面我在讲解各个知识点的时候 会在给同学们在强调一遍哪些代码是一定要手写出来的

## 三面 综合技术面

综合技术面 一般从如下三点考察大家。

### 编程语言

编程语言，这里是面试官**考察编程语言掌握程度**，如果是C++的话， 会问STL，继承，多态，指针等等 这里还可以问很多问题。

### 计算机基础知识

**考察计算机方面的综合知识**，这里不同方向考察的侧重点不一样，如果是后台开发，Linux , TCP, 进程线程这些是一定要问的。

### 项目经验

在项目经验中 面试官想考察什么呢

项目经验主要从这三方面进行考察 **技术原理、 技术深度、应变能力**

考察技术原理, 做了一个项目，是不是仅仅调一调接口就完事，之后接口背后做了些什么么？ 这些还是要了解的

考察技术深度，如果是后台开发的话，可以从系统的扩容、缓存、数据存储等多方面进行考察

考察应变能力，如果面试官针对项目问同学们一个场景，**最为忌讳的回答是什么？“我没考虑过这种情况”。** 这会让面试官对同学们的印象大打折扣。

这个时候，面试官最欣赏的候选人，就是尽管没考虑过，但也会思考出一个方案，然后跟面试官进行讨论。

最终讨论出一个可行的方案，这个会让面试官对同学们的好感倍增。

通常应届生没有什么项目经验，特备是本科生，其实可以自己做一些的小项目。

例如做一个 可以联机的五子棋游戏，这里就涉及到了网络知识，可以结合着自己网络知识来介绍自己的项目。

已经工作的人，就要找出自己工作项目的亮点，其实一个项目不是每一个人都有机会参与核心的开发。

也不是每个人都有解决难题的机会，这也是我们在工作中 遇到难点，要勇往直前的动力，因为这个就是自己项目经验最值钱的一部分。


## 四面 boss面

技术leader面试主要考察面试者两个能力， **解决问题的能力和快速学习的能力**

### 考察解决问题的能力

面试官最喜欢问的相关问题:
* **在项目中遇到的最大的技术挑战是什么，而你是如果解决的**
* **给出一个项目问题来让面试者分析**

如果你是学生，就会问在你学习中遇到哪些挑战， 这些都是面试官经常问的问题。

面试官可能还会给出一个具体的项目场景，问同学们如何去解决。

例如微信朋友圈的后台设计，如果是你应该怎么设计，这种问题大家也不必惊慌

因为面试官也知道你没有设计过，所以大家只要大胆说出自己的设计方案就好

面试官会在进一步指引你的方案可能那里有问题，最终讨论出一个看似合理的结果。

**这里面试官考察的主要是针对项目问题，同学们是如何思考的，如何解决的。**

### 考察快速学习的能力

面试官最喜欢问的相关问题:
* **快速学习的能力  如果快速学习一门新的技术或者语言?**
* **读研之后发现自己和本科毕业有什么差别？**

在具体一点 面试官会问，如果有个项目这两天就要启动，而这个项目使用了你没有用过的语言或者技术，你将怎么完成这个项目？

换句话说，面试官会问：你如果快速学习一门新的编程语言或技术，这里同学们就要好好总结一下自己学习的技巧

如果你是研究生，面试官还喜欢问： 读研之后发现自己和本科毕业有什么差别？

**这里要体现出自己思维方式和学习方法上的进步，而不是用了两三年的时间有多学了那些技术，因为互联网是不断变化的。**

面试官更喜欢考察是同学们的快速学习的能力。

## 五面 hr面

终于到了HR面了，大家是不是感觉完事万事大吉了，这里万万不可大意，否则到手的offer就飞掉了。

要知道HR那里如果有十个名额，技术面留给通常留给HR的人数是大于十个的，也就是HR有选择权，HR会选择符合公司文化的价值观的候选人。

这里呢给大家列举一些关键问题

### 为什么选择我们公司？

这个大家一定要有所准备，不能被问到了之后一脸茫然，然后说 就是想找个工作，那基本就没戏了

要从技术氛围，职业发展，公司潜力等等方面来说自己为什么选择这家公司

### 有没有职业规划？

其实如果刚刚毕业并没有明确的职业规划，这里建议大家不要说 自己想工作几年想做项目经理，工作几年想做产品经理的

这样会被HR认为 职业规划不清晰，尽量从技术的角度规划自己。

### 是否接受加班？

虽然大家都不喜欢加班，但是这个问题 我还是建议如果手头没有offer的话，大家尽量选择接受了

除非是超级大牛手头N多高新offer，可以直接说不接受，然后起身潇洒离去

### 坚持最长的一件事情是什么？

这里大家最好之前就想好，有一些同学可能印象里自己没有坚持很长的事情，也没有好好想过这个问题，在HR面的时候被问到的时候，一脸茫然

憋了半天说出一个不痛不痒的事情。这就是一个减分项了

### 如果校招，直接会问：期望薪资XXX是否接受？

这里大家如果感觉自己表现的很好 给面试官留下的很好的印象，**可以在这里争取 special offer，或者ssp offer**

这都是可以的，但是要真的对自己信心十足。

### 如果社招，则会了解前一家目前公司薪水多少 ？

**这里大家切记不要虚报工资，因为入职前是要查流水的，这个是比较严肃的问题。**

其实HR也不会只聊很严肃的话题， 也会聊一聊家常之类的，问一问 家在哪里？在介绍一下公司薪酬福利待遇，这些就比较放松了

## 总结

这里面试流程就是这样了， 还是那句话 不是所有公司都按照这个流程来面试，但是如果是一线互联网公司，一般都会从我说的这几方面来考察大家
大家加油！






-----------------------
* 作者微信：[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
* B站视频：[代码随想录](https://space.bilibili.com/525438321)
* 知识星球：[代码随想录](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码.jpg width=450> </img></div>
