大家看到这篇文章的话我应该已经从阿里离职加入新公司了,这篇文章是我对最近换工作面试的一个总结。
先上结果吧,我先后面了 4 家公司:小红书(口头 offer)、滴滴(口头 offer)、贝壳(口头 offer)、快手(offer)。
准备阶段
笔试开始有跳槽准备的想法开始刷 leetcode 到实际开始面试大概经历了两个半月。而我个人对于面试的前期准备按照以下几部分循序渐进的进行:
- leetcode 刷题;
- JS & CSS 基础;
- React 基础;
- 工程化 & 架构 & 计算机基础;
- 基于简历的扩展
leetcode 刷题
刷算法题是现在社招面试的必考部分,也是令很多前端同学头疼的地方(包括我)。刷题是很痛苦的一个过程,最好找一个志同道合的小伙伴一起进行(一个人真的很难很难)。这里我就不分享刷题的经验了(网上一搜一大把)仅分享下我对于刷题的大体节奏来给大家分享。
leetcode 这边我是和一个后端小伙伴是保持了每天 2-5 道不等的节奏从 1 月中旬开始刷直到面试开始(4 月初),总共刷了 147 道简单题,11 道中等题。当然我的后端小伙伴还会自己刷中等和困难题,我对自己的认知就仅限在简单题,而对于 3 年左右社招的前端来说,简单题就够用了。
JS & CSS 基础
笔者一直从事中后台相关的开发,对于一年都写不了几行 css 的我直接选择忽略了复习 css...(不建议大家这么做...),而对于 JS 基础我是按照以下几个维度复习(学习)的。
类型
- 类型转换
- 类型判断
- 深浅拷贝
- 函数
- 原型 & 原型链
- new 操作符
- 对象创建 & 继承
执行上下文
- 变量(活动)对象
- 作用域 & 作用域链
- this
- 闭包
EventLoop
- task
- micro task
ES6 & next
- let & const
- Map、Set、WeakMap、WeakSet
- 箭头函数
- 迭代器
- for of
- Generator
- Promise
- async、await
- class
- import、export
模拟实现
- bind、call、apply
- new
- Promise
- instanceOf
- map、filter、reduce、flat
编程技巧
- 实现 compose
- 实现 curry
- 实现深拷贝
React 基础
生命周期
- mount 阶段
- update 阶段
- unmount 阶段
- error
- JSX
setState
- 同步异步
虚拟 DOM
- diff 算法
- 事件系统
Hooks
- 原理
- useEffect
- useCallback
- useRef
- Fiber
- 状态管理
- 路由管理
- 性能优化
工程化 & 架构 & 计算机相关
- webpack
- babel
- cdn 原理
- 浏览器缓存
- 基本的数据结构和算法
基于简历的扩展
- 组件 & 组件库设计
微前端 & 其他方案的设计
- 原理
- 子应用加载
- 沙箱隔离
- 路由劫持
- 应用间通信
面试阶段
挑选机会
找机会我是采取猎头+内推两种方式同步进行的。
找猎头的话可以发掘很多机会不错并且自己没有关注到的公司和职位,并且猎头会基于你的自身情况有选择性的推荐职位并全程陪跑:前期机会沟通、每轮面试跟进、后期 offer 推进甚至薪资 argue(如果本身项目压力大并且想看机会的同学可以考虑,真的很省心,但是需要找到一个靠谱的猎头)。
找前同事内推的话可以更直接的了解这个公司的氛围、工作内容以及其他杂七杂八的事,并且真心想挖你的同事也会帮你和老板还有面试官说好话~
在筛选机会以及安排面试的时候大部分同学想的都是先找几个小公司练练手,然后开始投大厂。其实我也是这么做的,只不过我选择的面试的公司都是我有兴趣并且面试通过可能会去的。
- 第一波:我会选择具有一定规模并且我觉得有发展前景的独角兽公司;
- 第二波:我会选择一些二线厂子的核心业务部门或者我觉得有前景的赛道;
- 第三波:一线大厂或者热门赛道的头部公司;
面试
面试这边的话我一共是面了 4 家公司,本来还想接着面面,但是说实话每家公司至少 4 轮面试,4 家公司我一共面了 18 轮,平均下来 2 天至少一轮面试,面到后期明显感觉疲惫(因此建议大家还是适可而止量力而为吧~)。
笔者一直从事 B 端相关的前端开发,面了这么多轮总结起来 B 端相关的热点词汇:微前端、组件库、低代码、搭建。
一面
一面以基础为主(也有基于项目考察基础知识的):自我介绍、JS + CSS 的考察、框架的考察、计算机基础相关的考察、算法题。
下面列出我在面试时候遇到的一些考察点:
- 作用域的理解
EventLoop
- 原理理解
- 考察执行结果顺序的一道题(网上很多,基本差不多)
Promise
- 基本概念的考察
- then、catch 链式调用顺序的一道题(网上很多,基本差不多)
- 深拷贝的实现
- 装饰器的原理
- call、apply、bind 函数的模拟实现
- for 循环和 for of 循环的区别是什么
- React diff 算法的原理
- React setState 同步异步的原理
- React Fiber 的原理,为什么要引入 Fiber
- Redux 的原理,解决了哪些问题
- 浏览器缓存,项目中如何更合理的利用缓存
- 水平垂直居中的实现
- flex:1 0 0 对应的含义是什么
- 实现一个样式
- BFC 是什么?用来解决什么问题?
下面是基于我的项目和简历的一些问题:
- 业务组件库的设计思路
- 组建的按需加载怎么实现的
- webpack 中 import require 的原理
- 性能优化的思路
二面
二面已经开始基于项目考察知识点,问题大多是基于简历上的项目延展出来的。
下面列出我在面试时候遇到的一些考察点:
- 微前端是什么?解决了哪些问题?为什么使用微前端?和 iframe 的对比?
- 微前端沙箱隔离的原理?
- 微前端落地选型时候的思考?
- 除了使用微前端框架在微前端上还做了哪些扩展?
- 业务组件库怎么设计的?为什么要使用业务组件库?
- 业务组件库如何推广?在落地期间遇到了哪些问题?
三面 & 四面
三面 & 四面很多都是考察业务的理解能力和个人综合能力考察。
- 对当前工作业务域的理解;
- 曾经工作遇到过最大的挑战是什么、怎么解决的、有什么收获;
- 对技术深度和广度的理解;
- ...
HR 面
HR 面的话都是考察软实力相关,也会询问一些业务问题,这里就不过多的赘述了。
总结
其实离面试到现在已经过去了很久了,能记起的东西还是有限,还是差很多东西的,请大家谅解。这里希望大家都能拿到自己满意的 offer。
最后打个广告:
我们是快手商业化广告团队,目前还有大量 HC,感兴趣的联系我,我发你 JD,你发我简历哈哈哈。
本文转自网络,版权归原作者所有,原文链接:https://segmentfault.com/a/1190000040236485