前两天北京下雪了,很冷。2022 招聘季,好像也比往年冷一些。
2021 年 K12 的大量裁员,腾讯、快手、字节、滴滴、蘑菇街也在裁员。
- 想要换工作的同学应该准备些什么呢?
- 面试流程是什么样子的?
- 如何应对面试呢?怎么样可以提高成功率?
如果你关心上面的问题,并且你的目标位置不超出我的能力范围(高级工程师、阿里P6、字节2-1)。我会以我经验给你一些建议
面试流程
- 复习、准备
- 投递简历
- 一面
- 二面
- 三面
- HR 面
- 定级、谈薪
- 定入职时间、收 offer
怎么准备面试?
前期准备
个人介绍
每一场面试第一个环节都是「请做一下自我介绍」,所以这个问题一定要提前准备好。
如何准备?个人介绍重点是什么?
我们先从面试官角度来看一下面试官想知道什么?
姓名
- 如果你的姓名中有生僻字、多音字叫错还是比较尴尬的
- 确认你是否和面试官手中简历匹配。我就遇到过异常情况,候选人是面试 java 开发岗位
工作情况、项目概况、技术栈。虽然一般面试官会提前看过简历,但是有时候简历并不能很好的展示所有内容,所以需要一个简短的介绍来告诉面试官
- 比如说上家公司做音视频的、上家公司做 ERP、上家公司做 IM 的、在线协作、协同办公、项目管理、云服务商。如果说你从 YY 直播跳虎牙直播,是比 YY 直播跳金山办公要匹配的多,公司匹配的话成功率更高,业务场景也更了解。比如说腾讯云、阿里云。
- 比如说做移动端活动、做 toB 的服务平台、做电商。你之前做移动端面移动端岗位成功率更高,比如说抖音电商跳快手电商,就要比今日头条跳快手电商好。
- 比如说使用 JQuery、Vue、React、React、threejs。你简历中写了 React、Vue,但是你更擅长 Vue,面试官无法从简历中看到两个技术在你手中的掌握程度
擅长什么?优势是什么?
- 比如说你善于做移动端项目,善于使用 Vue,善于和其他部门沟通
- 比如说你做过一年 Node 开发,可以独立开发,可以独立进行技术研发任务
- 比如说你善于对项目进行优化
- 甚至说你有过项目经理助理工作经验都是你的优势。
- 社区影响力,github 有开源项目,思否、掘金、CSDN 有内容产出
个人介绍案例
接下来我们就可以针对面试官写一份合适的自我介绍
你好,我叫xxx,我在上一家公司做的项目是和 XXX 相关。
一直从事于 web 方面的工作,掌握的前端技术有 xxx。
在上一家公司中,我收获不单单是技术方面,主要还有业务能力,自学能力和同事的沟通能力,这都是我学到的,而且我认为很重要的。
我的性格方面不算外向,也不算内向,跟朋友,同事相处,比较外向,在工作中,代码开发时,我是比较内向的,我喜欢全心全意的投入工作中。我也喜欢交朋友,偶尔跟朋友聚聚,聊聊。对于工作我总是抱着认真负责,有责任心,吃苦耐劳的态度工作。谢谢,以上是我的自我介绍。面试官下午好,我叫XX,今天来应聘贵公司的前端工程师岗位。我从事前端开发两年多,有X年的XXX开发经验,在上家公司主要从事H5页面,后台管理系统,混合App等项目开发。平常喜欢逛一些技术社区丰富自己的技术,像思否,掘金之类,记录自己的工作总结和学习心得。
我的性格比较温和,在工作中代码开发时我喜欢全心全意的投入,对于工作我总抱着认真负责的态度。面试官,以上是我的介绍,谢谢。面试官你好;我叫XX,16年本科毕业于XXXX;毕业后在合肥卫宁,一家医疗软件公司工作,技术上前后端、数据库包括项目部署都做,属于全栈开发,18年来到上海入职京东一直到现在,做的是线下商场的后台及接口开发;老的项目还是
mvc
,新项目都做了前后端分离,前端用到 H5、小程序JQuery
、EasyUI
、VUE
、Angular
,后端用到.Net Framwork 4.5,4.6
、NetCore
、Java
,数据库用到SQLService
、Mysql
、MongoDB
、Redis
,中间件用到RabbitMQ
消息队列,在公司是核心开发的角色,负责老项目的维护及二次开发,和其他开发相比,我的优势在于沟通交流能力比较强,还有我的责任心和学习能力也是比较强的,如果有幸加入XXXX,我相信我能快速融入团队,快速掌握公司相关的技术;谢谢领导。面试官你好。我叫 XXXX。
主要技术栈是Vue
全家桶、jQuery
、原生、Node
,CSS
能力也不错,常见布局、伪类、过渡动画都会。
上家公司是做音视频泛娱乐社交这块的,竞品如:全民K歌、唱吧、YY、快手、抖音之类的。
我主要做移动端活动这块,年度庆典、小视频活动模版、直播间广告位之类的, PC 端也做一些,比如 PC的 IM 系统。因为公司的用户群体特性,对于兼容低版本设备有挺多经验。
平时也经常在思否社区做问答,写文章笔记之类的,对于 BUG 排查有敏锐度,也善于沟通理解问题。
知识储备
知识储备是我们面试成功的必需品。主要分为两部分:护城河、扩展。这里主要还是靠平时积累,面试时针对高频且不会的加强记忆。
接下来我们还是针对前端面试来举例。
前端护城河
什么是护城河?这都不会干屁前端! 没办法就是这么卷,所以这里只能去卷一些八股文。
但是我推荐还是由易到难,高频到低频。
HTML、CSS、JS 基础知识
flex: 0 1 auto
是什么意思?- css 有哪些伪元素选择器
- HTML5 语义化标签有哪些?
- 闭包编程题
- 手写 Promise 实现
- 手写 requestCache 实现
- 同步异步、微任务宏任务
- 深拷贝
Vue、React 常见基本框架
- 生命周期钩子函数
- 如何获取原始 DOM
- 如何获取虚拟 DOM
- 原理是什么?如何实现?
- 对 diff 的理解
- 数据双向绑定如何实现?兼容性?
- 状态管理、组件通信
- 路由跳转
ElementUI、antd 基本框架搭配 UI 库
- 组件化开发
- 源码理解程度
- 能力熟悉程度
浏览器基本知识
- 浏览器缓存原理
- 本地存储
- 基本能力(上传、下载)
扩展
这里一般就不局限于前端,也不要求全部掌握,但是一般都会有一些擅长点。
打包构建、前端研发工具(webpack、babel、gulp、vite、eslint)
- webpack 升级。
- eslint、stylelint。
- git hook。(husky)
项目优化
- 打包速度优化
- 加载速度优化
- 产物体积优化
跨端、跨平台、跨技术、跨语言
- Node
- Python
- nginx
git、svn。
- 如何回滚代码
网络
- https、http、http2,三次握手、四次挥手,如何保证安全
- websocket
- response 响应状态码
- 强缓存、弱缓存
算法练习
算法练习没什么好说的,简单必须会,中等也要做一些,困难看个人能力,掌握常见数据结构。一般就是推荐力扣、牛客。
学习路径的话是先了解数据结构,然后针对性做题,做不出来看题解。
链表、数组、字符串
- 查找是否有环?入环点在哪里?
- 快慢指针、双指针
树
- 先序遍历、中序遍历、后序遍历
- 平衡二叉树
- 栈、队列
- 动态规划
- 图
项目复盘
项目一般是为了看看你做过什么,有什么出色的地方,不是为了听你说一堆没用的。
这里属于一个没有标准答案的题,也是一个可以提前准备的题。
我面试的时候准备了三个内容,并且对具体实现方法都做了细致的应对方案。
PC IM 消息列表优化,其中有长列表优化、排序算法Bug及优化思考、多消息类型支持、消息手法机制、发送框实现等等
- chrome 的 sort 使用了什么算法。chrome 低版本用的是什么算法。原理是什么。
- 自己使用了什么算法?二分查找+插入排序。从 xxms 优化到 xxms。
- M 直播间广告位设计,其中有排序规则、动态载入规则、动态上线下线规则等等
- 项目加载速度优化
常见问题准备
一般来说会有一些高频问题,我们可以提前准备一下。当然具体还是要看你的技术栈是什么,你可以针对你的技术栈做特殊复习。
- 职业规划
- 为什么选择前端
- 个人介绍、项目介绍
- promise
- 浏览器强缓存、协商缓存
- 闭包
- vue 数据双向绑定原理
- 菲波那切数列
- 微任务、宏任务
面试前准备
如果说我们简历、知识储备、常见问题都准备就绪,那么接下来我们就可以开始以战养战。
投递岗位
不建议海投,推荐你选择二线、一线、大厂,把自己心仪的公司放在第二三周。
- 培养题感。(我面试的时候一道简单的题没做出来,超级尴尬,那道题是一道我十年前就会的题,但是第一次面试的时候怎么都想不起来。懵了)
- 培养自信、调整心态、告别紧张。如果你在面试的时候手里已经有了保底的 offer,那么你整个人的精神都会不一样。而且要价的时候也更大胆。(我面试的时候拒绝了金山,因为薪资低)
- 由易到难、由低到高,慢慢提升。其实有时候小公司也挺爽的(前端10人±),太少的就不推荐了。
可以选择适合自己的岗位投递,并不是比如说快手所有人都在做App,也会有做面向机构的服务平台,也会有面向电商的服务平台,还有对内的基建中台等等。选择一个适合自己的岗位比乱投强太多了
面试真题(针对性搜索)
这个就属于玩赖了,比如说你面阿里,可以针对性去找一些阿里一面面经,最好把岗位部门带上(会有意外惊喜哟)
根据我面过的几家公司,网上是有真题的。
如果你常混社区的话,你甚至可以问问面过的前辈
面试后准备
面试完不代表着结束,收到 offer 才是结束。
面试复盘
所以这口气我们不能松,可以在面试后把所有题都记录下来,然后看看自己那个题掌握不够全面。
- 记录所有的面试题。网上搜索资料排查是否有回答不清晰,缺斤短两情况
录屏。做更完整的复盘,包括语气节奏、口头语、面部表情、反应速度等等。
- 从我自己来说,我即兴是不如我有准备的。同样一份资料,在我无准备讲出来会多很多口头语,甚至我在讲的时候都会注意到这个问题,但是我无法解决,也克制不住,留给我调整的时间太少了。所以我只能做很多准备。
如果有不会的题,千万要查一下,然后记住。因为下一面有可能会考近似题。面试官也会通过这种方式来看你的自学能力。
- 比如说你面第一个公司的时候,问了你权限的问题。那么你就应该重点关注一下,比如说按钮权限,异步权限,如何和服务端交互。这个问题在二面甚至说其他公司都会再次遇到。
真题整理
上面说了复盘的重要性,也说了需要整理真题,这里主要是需要你注意分类,而且需要看到题后的内容。
有时候面试题只是考点的一个应用场景,所以我们需要看到背后的知识,不只是把面试官问你的问题搞会。
一般来说面试题会符合部门场景,做 PC 的部门不可能问你移动端适配原理。
css
「字节商业化」权重计算。
.a .b{color: #f00;} .b[data-role="1"]{color: #0f0}
- 「阿里」选择器
- 「快手搜索」「腾讯开放平台」css 单位
网络
- 缓存
- https、http、http2
面试中有哪些最最最常见的坑
简历
到了我个人擅长的位置了。哈哈哈,我看过成百上千的简历,基本没有看错的。
一眼假的简历(工作时间、经历造价),一般针对实习生、应届生、培训班简历比较常见。
- 熟练使用 Vue + react,其实一般来说为了维护成本、学习成本,正常公司都会统一技术栈
- 熟练使用 Node xxxx,目前来看全栈工程师并不是很多,都会有可能只是半桶水
- 项目经历不属于同一家公司。比如说一个项目是医疗,一个项目是石油,项目跨度很大。这种一般我们考虑是否存在经验积累,一个持续迭代的精细项目才是我们想看到的。
项目经历一看就比较水、或者开源项目、样子货。比如说网易云、饿了么,Vue1 的时候就开始仿饿了么,Vue3 还仿。
图片来源于沸点:https://juejin.cn/pin/7072864...
错别字简历、排版异常简历、雷同简历、异常简历
- 部分简历会存在一些错别字,尤其是 Reat 之类的错别字。千万不要有错别字,会显得不细心。而且简历应该每个字都是用心写的。
- 学历异常、外派外包。我不歧视外包外派,但是从团队内任务分配、稳定性等多方面来说,的确不是很理想,需要多注意。
- 雷同简历出现在同一学校、毕业季,上下午两个人简历一模一样。简历不是论文机器查重,不管是ERP的登陆权限系统,还是后台管理系统的登录权限系统,都是相同的简历,不是改个名称就叫不同简历。
异常的常见功能,对于有工作经验的人来讲反而不是常见功能。不是说常见功能,一定就是开发常开发功能
- 比如说登陆注册、权限、菜单,登陆一般来说都是现成的功能,不会轮到你再去开发。
不是每一家公司都认为你的“玩具”很有意思。
- 比如你说你写了 IM 相关的功能,如果你面试的也是 IM 相关的部门,那么很大可能性会揪着这个功能深挖。
- 如果你写了性能优化,那么会给你一个近似的场景考你,看你有没有去做优化的动机。
面试准备(面试题、算法题权重问题)
建议你先准备基础知识题,然后常见题,最后准备算法题。一定要记住由易到难。
如果不是高级、专家岗位,算法都可以暂时放弃。
- 我面试一面简单算法没答出来,但是并不影响我面试结果。顺利通过面试拿 offer。
- 有个朋友,基础题还没搞会,疯狂练习算法。到现在还分不清判断是否有环和查找入环点两个题的区别。(快有十年工作经验了,还混在中级工程师)他以为算法好了就能换到大公司,但是算法题一般都在比较后面考察。
面试中
- 问薪资。一般来说前几面只是同级同事,不应该知道你的薪资。也无权决定
“攻击”面试官。面试是否通过,就是当场面试官的一句话,很少公司有考核审查手段。所以不建议攻击面试官,放平心态(如果你不在乎这个机会,并且觉得和这样面试官共事比较恶心,那么怼就怼了。无所谓哈哈哈哈哈)。
- 我就遇到过一个人,面到一半跑了,和 HR 反馈我不专业。但是对我并没有什么影响。
- “贿赂”面试官。虽然说当前这场面试,面试官可以帮助你,但是后面还会有其他考核(天黑路滑人心复杂呀)。所以还是靠自己真正的实力比较好。
- 拖时间。一场面试 20分钟至 60分钟,会存在定会议室(HR 不帮定会议室,且有时间限制),工期挤压(面试属于突发时间,且不计算在正常工期中)等问题。所以不建议在单个问题上拖时间,这样会导致无法全面考察,直接判负。
- 不敢问面试官。面试官都是比较和善的,一些面试官也比较善于引导你回答问题。即使没有引导出来,给你个方向也是好事,面试官经验比较丰富,如果是单独的技术咨询来看明显是赚了。
面试官一般会问些什么问题?
一面(基础知识)
一面一般是同级同事、同级领导(斜线领导),属于主力开发,业务经验也比较足。一面侧重基础知识
项目考察(2个)
- 介绍一下你最近做的项目
- 介绍一下你在这个项目里做了什么?有什么出色的嘛?
- 你是怎么进行项目优化的?你是怎么设计这块权限的?你是怎么实现这里的?你的设计思路是什么?
- 你在项目中负责什么?有什么特别满意的地方的?
- 你们团队构成是什么样子?开发流程是什么样子?有什么优化空间嘛?
- 印象中最深的一件事
基础之类(6个±)
js、css、html 基础题。(2个)
- css 样式优先级、权重计算、选择器、Flex 布局等等
- js 场景类型、数组方法、闭包等等
- html 语义化标签、其他能力?
js 高级开发(2个)
- Promise、await、async、异步同步、微任务宏任务
- 继承、class、ES6+
- TS
- webpack、gulp、babel
- 框架知识 Vue、React
- requestCache、自动重试、异常上报
扩展知识(1个)
- http2、http1.1、https
- nginx
- node
- echarts、threejs、ui 等等
算法(1个)
- 一般会出初中级难度的题,链表、树、栈队列比较常见,图好像少一些
- 考察时间复杂度、空间复杂度
- 会让你讲一下想法
- 会让你思考有没有优化空间,如果有会逐步优化
- 简历异常点(学历、工作变动频繁)
普通聊天
- 为什么离职呀?
- 为什么选择我们公司呀?
- 为什么学前端呀?
- 住哪里呀?
- 平时有什么爱好
- 如何学习前端?
- 逛社区嘛?
- 对我们公司什么看法?
- 觉得今天面试表现怎么样?
二面(项目)
二面一般是不同组同事,一般来说是跨组交叉面试,当然会有可能不是前端。二面一般更侧重项目
- 项目考察(同一面,但有可能切入点不同)
- 高级应用(同一面,但是一般会和实际业务关联)
- 算法(同一面)
- 普通聊天(同一面)
这里可以看到,如果一面过了,二面基本是稳的。
因为一二面本身级别差不多,有可能面试官不是同技术(java)、升职不是技术(产品)
三面
三面一般是直系领导(50人至100人团队负责人),可能是前端,也可以是其他端,只能说肯定是个技术人员。
- 项目考察(同一面,切入点不同,会更加深入甚至扩展转换)
- 算法(同一面,但是有可能不用写,只考思路)
扩展知识
- 项目如何协调
- 分支如何管理
- 任务进度如何管理
- 上线流程是什么
- 发版流程是什么
- 部门介绍
- 普通聊天(同一面)
一般来说高级工程师就只有三面,三面的这个人就是决定你是否能入职的那个人,三面面试官一般也是一面面试官的直系领导。
HR 面试
普通聊天(同一面)
- 职业规划
- 为什么选择我们
- 你在原来公司负责什么
- 为什么离职
薪资期望
- 你当前的薪资
- 你期望的薪资
问面试官哪些问题?
一面
一面面试官一般就是你的同事,也是主力开发,是真正的打工人。所以这在一面环节你可以多问一些你关心的内容
- 面试官是谁?是否为你的同事。
- 工作情况
- 基建情况
- 团队氛围、团队规模
- 技术方向
- 自己表现怎么样
- 自己没答好的题,看看能不能给个方向。
二面
二面面试官因为存在交叉面试的情况,所以可用信息不太多。
- 面试官是谁?是否是你的同事,还是交叉?
- 自己表现怎么样
- 问面试官所在的团队氛围
- 自己没答好的题,看看能不能给个方向。
三面
三面面试官是你的直属领导,能管得事也比较多,你可以问一些其他的东西。
- 晋升机制、培训机制是否完善
- 团队氛围
- 所做业务
- 团队规划
- 有不懂的点也可以问,白嫖的交流机会啊。
本文参与了 SegmentFault 思否征文「如何“反杀”面试官?」,欢迎正在阅读的你也加入。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。