1、自我介绍环节
这个环节很显然是避免不了的,这个环节候选人应该注意不要平铺直述自己的简历,而是应该尽量做到熟练清晰的介绍自己的教育背景,工作履历,及自己参与过的几个重大的项目,在里面分别承担了什么样的角色,使用什么技术解决了什么样的问题,以及取得了哪些成绩。如果你这部分说的比较刘畅,有底气,不卑不亢,会给面试官一个很好的第一印象,最起码的,会觉得你思维清晰,能够清晰的认识自己的优缺点,简历上提到的一些点大概率都是你自己的产出。
2、前端基础知识考查
这个环节通常所谓的一些点包括:
- javascript基础
- 闭包
- this指向,bind,call
- 原型链
- 面向对象,如何实现继承
- 作用域,var,let区别
- 浏览器兼容
- 数组、字符串对象考查,例如数组哪些操作可以改变原数组、正则表达式匹配等(一般比较基础,不会太复杂)
- cookie,跨域发送cookie等。
- session
- 网络相关
- TCP链接及断开过程,http状态码,304,302,401,20x
- Https原理,加密过程
- Http2,多路复用,头部压缩
- 跨域,如何解决等
- 前端缓存
- LocalStorage
- SessionStorage
- 前端安全
- xss
- csrf
- 性能调优
- 内存泄漏
- ANR
3、编码能力
面试官其实也很care这个环节,如果前面的环节回答的不错,这个环节一般来说,能写出思路基本也可以算过了,但好像某条不是的,某条必须让代码运行通过,各厂要求不一样,既然人家定那种规则就按照哪个规则去办就是哪,对于某条,没有其他办法,面试前,所刷刷leetcode中等难度吧。
如果说前面环节比如基础知识考查回答的不是太理想,这个环节就要注意了,这时候面试官可能会对于你这个环节的期望会高一些,尽量从以下几个方面注意:
- 避免随意命名,因为随意命名面试官会认为你代码风格不佳,尽量命名有意义一些。
- 尽量不要拿到题目就写,给人一种没有思考就草草入手的感觉,试着想一想,你平常工作是这样的么,拿到一个需求不考虑下各种边界逻辑吗?所以,比较好的做法是:
- 先写一下伪代码
- 考虑下可能存在的边界条件
- 如果是递归实现,看看考虑是否可以转为非递归,(借助stack)
- 尽量可以保证代码跑起来,因为前面环节表现不佳,至少这个环节,让面试觉得你可能是一个实战型的选手。
在这个环节,通常会考查一些基本算法,或者前端常用的一些算法,比如:
- 排序,二分查找
- 输出数组的全排列
- 动态规划问题,最长公共子序列、最长上升子序列
- 字符串,正则表达式,数组的一些操作
- 手写
防抖
、节流
- 手写一个
promise
的实现 - 深度克隆一个对象(注意对象属性指向自己,利用map保存中间结果),大数相加(数组 进位)
- 实现
bind
方法 - 实现
Object.create
方法
4、架构设计、工程化
如webpack常见的一些配置项,webpack插件原理,webpack插件开发等,持续构建CI,CD等等。
5、意向素质
这个环节,面试官会评估一下你在同事中的印象是怎么样的,人缘如何,近期你为啥要换工作,稳定性等等因素。
或许还会问问你的学习能力如何,解决问题的能力如何:
- 工作中遇到的印象最深的一个技术难点是什么,讲一下怎么分析这个问题,最后怎么解决这个问题,以及前后对比的结果,避免说的空泛,也不要避免假设,最好是拿你真实案例来说。
- 你平常有没有看一些开源的库,印象比较深刻的是哪个库,谈一谈他的架构设计。
- 产品发布上线,遇到bug,用户访问除了问题,你是怎么处理的,主要考查应变能力。