Web/14-前端面试/00-准备.md

405 lines
9.0 KiB
Markdown
Raw Normal View History

2018-03-05 19:36:59 +08:00
## 前言
### 面试分为三部分
2018-03-10 11:50:39 +08:00
- 技术面试:问技术问题。
2018-03-05 19:36:59 +08:00
- 负责人面试:考察综合能力。比如:项目把控能力、项目深度、项目架构、业务等。
- hr 面试:侧重于性格、沟通、潜力等。
每轮面试在一小时左右。
### 每轮面试的知识点
一面:
> 主要考察基础知识。
- 页面布局
- CSS盒模型、DOM事件
- HTTP 协议、原型链
- 面向对象、通信
- 前端安全、算法
二面:
- 渲染机制
- JS 运行机制
- 页面性能
- 错误监控
三面:
> 不再关注技术层面。
- 业务能力
- 团队协作能力
- 带人能力
终面:
- 职业竞争力
- 职业规划
面试成功需要:技术过关、面试技巧等。
### 校招和社招各自看中的层面
2018-03-10 11:50:39 +08:00
校招:
2018-03-05 19:36:59 +08:00
- 知识40%
- 能力59%
- 经验1%
社招:
- 知识30%。比如协议、业务的认知程度。
- 能力50%。比如架构、业务的抽象能力、项目的把控能力。
- 经验20%。项目的体现。
以上仅供参考。
### 面试准备
面试准备包括以下四个部分:
- 职位描述JD的分析
- 业务分析
- 技术栈准备
- 自我介绍
每个公司又有一套成熟的技术栈。比如在构建工具上,百度用 fis3、美团用 Gulp。
你要面哪个公司,要先看看对方要求的技术栈。
上面四个部分,我们接下来详细介绍。
## 职位描述JD的分析
### 介绍
概念:
- 职位描述:注重的是工作职责。
- 任职要求:要求的是工作能力。通常描述得很细致。
PS前端的知识庞大不可能所有的内容都准备好但是要向“任职要求”靠拢。
分析职位描述JD的目的是
- 快速识别出这个岗位是否是自己喜欢的、想要的。
- 目前的技能是否能胜任岗位的要求。短期内的准备能否胜任。
### 举例1京东 web 前端的职位描述
如下:
2018-03-10 11:50:39 +08:00
![](http://img.smyhvae.com/20180304_2132.png)
2018-03-05 19:36:59 +08:00
**职位描述:**
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 前端的职位描述
如下:
2018-03-10 11:50:39 +08:00
![](http://img.smyhvae.com/20180304_2226.png)
2018-03-05 19:36:59 +08:00
此方位
**职位描述:**
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异常分为两种**运行异常**、**资源加载错误**。一般人只能说出第一种异常。
2018-04-07 23:00:17 +08:00
3`工程化`**工程化**已经是前端的必备技能。`webpack`是必须的工具,`grunt`已经过时了,如果公司提到,还是要了解。`Gulp`用的很多。
2018-03-05 19:36:59 +08:00
4写得比较虚面试时基本很难考察。面试时如果写代码要注意代码风格该用 class、id、标签时要注意区分。
5要准备一下 Node.js。`至少熟悉一门`:可能要求全栈开发。
6`逻辑性强`能说出123。
## 业务分析
> 业务分析
CSS3 动画是重点准备的内容。
jQuery 要准备事件委托、选择器等。
ES6语法import、export等。
2019-02-27 10:33:16 +08:00
比如<http://jr.jx.com/>这个网站:
2018-03-05 19:36:59 +08:00
2018-03-10 11:50:39 +08:00
![](http://img.smyhvae.com/20180304_2302.png)
2018-03-05 19:36:59 +08:00
通过简单分析源码,我们初步得知网站的以下几点:
- jQuery
- vue 框架
- ES6
- webpack 打包工具
## 技术栈准备
2018-03-10 11:50:39 +08:00
![](http://img.smyhvae.com/20180310_1040.png)
2018-03-05 19:36:59 +08:00
上图中,左侧是前端技术核心,右侧是前端工程化。
左侧:
- jQuery要注意看源码。看源码时要看这几个核心架构、事件委托是什么、插件机制、兼容性。
- 三大框架都是mvvm框架准备一至两个即可或者精心准备一个。面试时会问得很细。比如阿里会经常问Vue的源码。建议找网上的源码分析的文章。
- Node.js如果没有相关项目经历就尽量不要提。
2018-03-10 11:50:39 +08:00
右侧:
2018-03-05 19:36:59 +08:00
- npmnpm的常见命令、npm scripts 怎么用的。
- webpack有个中文网站讲的内容比较全。
## 自我介绍
2018-03-10 11:50:39 +08:00
面试问的问题,很大层次上,取决你的简历和自我介绍。
2018-03-05 19:36:59 +08:00
### 简历
简历中最重要的四个信息:
- 基本信息:姓名、年龄、手机、邮箱、籍贯。
- 学历:从大到小写。硕士 -> 本科。
- 工作经历:时间、公司、岗位、职责、技术栈、**业绩**。业绩是大多数人所忽略的。
- 开源项目、Github、说明。
自我评价可以不写。
项目的业绩上,要包括:**技术收益**和**业绩收益**。
### 自我陈述
1、**把握面试的沟通方向。**
如果陈述中谈到项目,面试官可能会问:
- 负责了什么项目,项目是做什么的
- 和前端的结合点是?你的角色是?项目中承担了什么责任?
- 你在项目中的成绩?
如果你说自己是项目`负责人`,会被问到:
- 该项目怎么分配?有几个人参与?
- 作为负责人,你的角色是什么?是项目管理还是技术管理?
- 遇到技术难点,如何解决?
### 提问题
如果在深入问题时,碰到不会的,不要说“我不知道”。建议回答:
- **我要回去思考一下**。
- 这方面我没有经验,能不能**指点一下**
- 有什么建议或者参考资料吗?我想把这个东西弄懂。
2、阔达、自信的适度发挥。