
## 前言

### 面试分为三部分


- 技术面试：问技术问题。

- 负责人面试：考察综合能力。比如：项目把控能力、项目深度、项目架构、业务等。

-  hr 面试：侧重于性格、沟通、潜力等。

每轮面试在一小时左右。

### 每轮面试的知识点

一面：

> 主要考察基础知识。

- 页面布局

- CSS盒模型、DOM事件

- HTTP 协议、原型链

- 面向对象、通信

- 前端安全、算法

二面：


- 渲染机制

- JS 运行机制

- 页面性能

- 错误监控

三面：

> 不再关注技术层面。

- 业务能力

- 团队协作能力

- 带人能力

终面：

- 职业竞争力

- 职业规划


面试成功需要：技术过关、面试技巧等。

### 校招和社招各自看中的层面

校招：

- 知识：40%

- 能力：59%

- 经验：1%


社招：

- 知识：30%。比如协议、业务的认知程度。

- 能力：50%。比如架构、业务的抽象能力、项目的把控能力。

- 经验：20%。项目的体现。

以上仅供参考。



### 面试准备

面试准备包括以下四个部分：

- 职位描述（JD）的分析

- 业务分析

- 技术栈准备

- 自我介绍

每个公司又有一套成熟的技术栈。比如在构建工具上，百度用 fis3、美团用 Gulp。

你要面哪个公司，要先看看对方要求的技术栈。

上面四个部分，我们接下来详细介绍。

## 职位描述（JD）的分析

### 介绍

概念：

- 职位描述：注重的是工作职责。

- 任职要求：要求的是工作能力。通常描述得很细致。

PS：前端的知识庞大，不可能所有的内容都准备好，但是要向“任职要求”靠拢。

分析职位描述（JD）的目的是：

- 快速识别出这个岗位是否是自己喜欢的、想要的。

- 目前的技能是否能胜任岗位的要求。短期内的准备能否胜任。

### 举例1：京东 web 前端的职位描述


如下：

![](http://img.smyhvae.com/20180304_2132.png)



**职位描述：**

（1）面试时，会同时考虑到 `PC 端和移动端`两个部分。

（2）`App H5开发`指的是两层意思：

- Hybrid 技术栈。

- 纯 H5 开发。和 native 开发没有关系，比如活动、专题。

（3）`调试数据接口`：要学习一下怎么模拟数据。


（4）`前端组件库的建立`：要求较高但非常重要。体现在：

- 基本功要扎实，原生 js、css的理解要到位。

- 之前有没有前端组件库相关的项目经验

- 是否通读过其他的 UI 组件库。


（5）`优化与重构`：难度比第四条更大。

PS：前三条是基本知识，第四条、第五条属于进阶。


**任职要求：**


（1）`3年以上工作经验`：不要太较真工作年限。`精通 H5 特性`：说明公司很看重移动端。了解H5`最新规范`：贵公司希望我对新技术是有追求的，比如`ES6`等。

（2）要求我们对`面向对象`部分有足够的了解。组件化的编程也离不开面向对象。

（3）体现了几点：

- `熟悉 Web 标准`：熟悉最新的标准即可。

- `表现与数据分离`：MVC框架。

- `语义化`：这个词千万不要忽视。不是什么都用 div。

- `实际经验`：利用框架开发的过程中，遇到过哪些问题？没有实际经验的话，也要提前准备几个问题。


（4）以下几点：

- `前端架构分析与设计...`：说明此岗位并不面对初级岗位。因为工作一至两年的人，大部分都是**做业务开发**，缺少**系统的架构能力**。

我们要准备一个项目的架构（比如公司现有的项目）重新梳理，包含：目录结构的设计、复用性设计、模块化设计、自动化测试、上线流是什么。


- `易读、易维护的代码`：面试过程中一定会让你写代码，来体现。要求；每个函数的功能要单一、能抽象尽量抽象。符合这两个原则，基本就满足了“易读、易维护”。

- `高质量、高效率的代码`，短时间内不好准备。



（5）`用户可用性、用户体验、用户研究`：考察的不是技术，而是候选人对于产品体验的理解。不仅仅只是完成功能而已。



（6）`强烈兴趣`等，是公司企业文化的一种要求。多去GitHub上看看别人的项目里用的什么新技术、多看博客。短时间内无法准备。

（7）了解`Sass`和`Less`：这是基本技能。


（8）**熟悉**`web构建工具`：新手推荐学习 Glup，而不是 grunt。当然，你要知道 **Glup 和 grunt 的区别**。

PS：了解、熟悉、精通，是有区别的。


（9）暂时可以忽略。如果 职位描述里没有要求`Node.js`，而你只会一点点 `Node.js`，那不建议你面试的时候把`Node.js`体现出来。否则是给自己挖坑。



### 举例2：艺龙的 web 前端的职位描述

如下：

![](http://img.smyhvae.com/20180304_2226.png)

此方位

**职位描述：**


（1）`系统化设计`：说的比较笼统。其实指的就是模块化设计、前后端分离（**数据渲染**交给前端）。

（2）几点：

- 前半句：并没有说 H5 是放在移动端做，可能同时包含 PC 和移动端。

- 后半句：可以看出公司对 H5 动画的要求很高。动画有三种方式：用DOM写、SVG 的path做动画、canvas。canvas 又分 2D 和 3D。我们要看岗位描述里怎么要求的。既然提到CSS3，那么CSS3里面的animation、tansition也要了解。

（3）微信项目，要准备：

- 小程序：比如看贵公司有小程序吗？我们自己要准备简单的开发和文档、组件化的内容。

- 微信支付。

- 对微信开发中的哪些坑，要了解

（4）和京东的第四条很像，既要会框架，也要会组件化设计。但京东的侧重从零开始，而艺龙侧重于：有的就维护，没有的就开发。


**岗位要求：**

（1）`各种`web前端技术：用词不严谨。

（2）几点：

- `Web`标准：JS的最新标准是ES6。

- `可用性、可访问性`：侧重于网站的性能。 前端要做性能监控、错误监控。JS异常分为两种：**运行异常**、**资源加载错误**。一般人只能说出第一种异常。

（3）`工程化`：**工程化**已经是前端的必备技能。`webpack`是必须的工具，`grunt`已经过时了，如果公司提到，还是要了解。`Gulp`用的很多。

（4）写得比较虚，面试时基本很难考察。面试时，如果写代码，要注意代码风格，该用 class、id、标签时，要注意区分。

（5）要准备一下 Node.js。`至少熟悉一门`：可能要求全栈开发。

（6）`逻辑性强`：能说出123。




## 业务分析

> 业务分析


CSS3 动画是重点准备的内容。

jQuery 要准备事件委托、选择器等。

ES6语法：import、export等。


比如<http://jr.jx.com/>这个网站：


![](http://img.smyhvae.com/20180304_2302.png)



通过简单分析源码，我们初步得知网站的以下几点：

- jQuery

- vue 框架

- ES6

- webpack 打包工具


## 技术栈准备

![](http://img.smyhvae.com/20180310_1040.png)

上图中，左侧是前端技术核心，右侧是前端工程化。

左侧：

- jQuery：要注意看源码。看源码时，要看这几个：核心架构、事件委托是什么、插件机制、兼容性。

- 三大框架：都是mvvm框架，准备一至两个即可，或者精心准备一个。面试时会问得很细。比如阿里会经常问Vue的源码。建议找网上的源码分析的文章。

- Node.js：如果没有相关项目经历，就尽量不要提。

右侧：

- npm：npm的常见命令、npm scripts 怎么用的。

- webpack：有个中文网站，讲的内容比较全。



## 自我介绍

面试问的问题，很大层次上，取决你的简历和自我介绍。


### 简历

简历中最重要的四个信息：

- 基本信息：姓名、年龄、手机、邮箱、籍贯。

- 学历：从大到小写。硕士 -> 本科。

- 工作经历：时间、公司、岗位、职责、技术栈、**业绩**。业绩是大多数人所忽略的。

- 开源项目、Github、说明。


自我评价可以不写。


项目的业绩上，要包括：**技术收益**和**业绩收益**。



### 自我陈述

1、**把握面试的沟通方向。**


如果陈述中谈到项目，面试官可能会问：

- 负责了什么项目，项目是做什么的

- 和前端的结合点是？你的角色是？项目中承担了什么责任？

- 你在项目中的成绩？

如果你说自己是项目`负责人`，会被问到：

- 该项目怎么分配？有几个人参与？

- 作为负责人，你的角色是什么？是项目管理还是技术管理？

- 遇到技术难点，如何解决？



### 提问题

如果在深入问题时，碰到不会的，不要说“我不知道”。建议回答：

- **我要回去思考一下**。

- 这方面我没有经验，能不能**指点一下**？

- 有什么建议或者参考资料吗？我想把这个东西弄懂。







2、阔达、自信的适度发挥。
































