年轻人的第一次裸辞找工作面试记录
16年本科毕业,一直以来也没太多面试经历。
今年三月初裸辞,赶上疫情,有蛮多时间进行面试,按时间顺序面了伴鱼/好未来/OPPO/贝壳/滴滴/Shopee/头条/快手/阿里,在此特地总结一下。
前面的面试都记得很认真,到后面精神和体力值都指数级下降,面经就记录得越发简洁了……
面经
先放面经,主要贴一下与项目没太大关系的知识点考察题目
伴鱼(C轮在线教育公司)Offer
一开始投了两家教育类公司,算是我老东家的竞品,业务比较类似所以第一波来面。三轮技术面体验非常好,收到 offer 之后大前端负责人也给了很多关于选组与个人发展的建议。
一面
- 看代码说输出,常规 EventLoop 题目
- 看代码说输出,考察 JavaScript 参数按值传递
- 说说内存堆栈
- Fiber 架构
- 尤雨溪说 Vue3 没有采用 Fiber,依然很快,为什么 (这是个好题目)
- 懒加载与动态 import 语法的坑
- Webpack 怎么给 chunk 包命名,再说说怎么合理分包
- 说说怎么本地调试 npm 包,考察 npm link
- WeakMap 是什么,相比 Object 有什么优点
- 有没有写过 Webpack 插件,讲讲 Webpack 原理
- 老生常谈说说从输入 url 到页面加载发生了什么,面试官追问了网络应用层以下的内容
- Promise 的状态,Promise.all 是干什么的
- Promise.then.catch.then 会执行吗
- HTTP 缓存
- 简短聊了聊项目,顺着简历提到的性能优化点问了一些内容
二面
- CI / CD怎么做的
- Docker 分层是什么,怎么做
- Tree-shaking 原理
- 新版 React 的特性
- 对 React 做的优化
- Hooks VS HOC/ Render Props
- 给 Render props 传 pure component 有优化吗,解决了什么问题 (也是个埋坑问题)
- HTML 渲染机制, CSS 阻塞渲染吗
- 合成层怎么触发,怎么分的
- Node 端 Event Loop
- 微前端了解多少,如果让你做微前端的技术选型,你怎么考虑
三面
三面是大前端负责人,疯狂问项目,也考察了对业务的思考和看法,没有什么具体的知识点就没记了
好未来(中台)技术面通过,放弃 Offer
题目很神奇,恍惚回到了四年前找实习的时候 = = 两轮技术面但都没问什么有用的,就没怎么记
- CSS 定位方式, sticky 的使用场景
- 说说 CSS3 新属性
- 居中方式, flex布局怎么做
- script 标签的 async 和 defer 属性
- 怎么实现一个扑克牌翻转效果
- 怎么实现一个富文本编辑器
OPPO(智能搜索 base 北京) Offer
一面
- JSBridge 原理
- React 16 中 Diff 算法的变化
- 向一个 DOM 后面插入节点怎么做
- 怎么实现 lodash.get 方法
二面
- CDN 的特点,用 CDN 资源为什么快(分布式节点,回源,缓存,CDN 主动拉取)
- Vue 与 React 的区别
- 浏览器渲染相关的思考,怎么优化,对平时开发有什么启示
- Node 的特点,为什么适合高并发
- Node 服务部署,运维
- Node 框架用的什么, Koa 与 Express 相比有什么不同
- 简历项目挨个聊
三面
- 介绍一个项目
- 懒加载怎么做
- 说说其它性能优化方式
- 浏览器缓存
- 路由模式
- HTTPS 原理
- ContentType 模式,formData 里面是什么结构
- 数据上报怎么做,除了 img 标签
- git workflow,merge 与 rebase 的区别
- Promise 原理
四面
- Node 底层了解多少
- React 冷启动很慢,为什么,哪些地方可以优化
- 用户弱网环境问题排查与优化
- 性能数据上报怎么实现,什么时候上报
- CSRF 防范方法
贝壳(如视) Offer
如视是贝壳的 VR 业务线,链家、自如 app 里的 VR 看房就是他们做的,很好的团队,做的事情也很酷!
一面
- JSBridge 原理
- 开发 WebView 遇到过哪些问题
- 开发直播应用的心得体会(算是与简历项目相关)
- 如何设计一个日志分析,现场还原系统(记录画面)
- 实现一个单例
- 算法,括号匹配问题,Leetcode Easy 题目小变形
二面
- SSO 鉴权流程
- samesite cookie
- toB 和 toC 业务特点,区别
- 在上家公司遇到了什么问题,怎么解决的,技术和非技术都可以说说
- Electron 播放音视频踩过什么坑吗
- CSRF 防范方法
- Buffer 与 Stream
- createObjectURL 与 canvas.toDataURL
- base64 是什么
三面
聊项目为主,问了一些个人规划职业发展的问题
滴滴(网约车 C端) Offer
从晚上五点开始,连着面三轮,流程很快
一面
- TypeScript 里有哪些 JavaScript 没有的类型
- React Hooks 原理
- 节流防抖的使用场景
- Event Loop
- 数组与对象有哪些遍历方式,for…in 与 Object.keys 有什么区别
- ES6 的 Module 与 CommonJS
- Promise 有哪些方法,都是做什么的
- 按需加载怎么做
- 实现 Bind
- 实现一个乱序算法
- 实现一个深拷贝
- 跨域场景与常规解决方案
- HTTP 缓存
- 垂直居中与盒子模型
- 图片跑马灯效果怎么实现
二面
- JSBridge 原理
- 如何自己实现一个组件按需加载
- Webpack 原理,追问让说的更细一些
- Webpack 热更新原理
- Flex 布局
- BFC 的原理和使用场景
- CI/CD 怎么做的,哪些有提效
- 说一件让你有成就感的事情
三面
- TypeScript type 与 interface 的区别
- React Fiber
- Babel loader 原理
- Node Stream 是干什么的
- 写一个 ES5 继承
- 写一个 twoSum 算法
- Webpack 常用优化方式
- Webpack 原理
- React 里 key 做什么的
- z-index 干啥的,有哪些条件会形成层叠上下文
Shopee (卖家平台 base 深圳) Offer
疫情期间被家里催着回北方,就还是拒了 offer
一面(各种基础题,没记多少)
- CSS 块级元素与行内元素, BFC 等等
- 各种看输出题目,event loop,原型链
- 写一个大数加法
- 写一个数组拍平
二面
- 遍历 Object 属性的方式,哪些可以只遍历自有属性
- async 的异常捕获
- 如何并发执行 async
- 针对 HTTP 请求的优化方案
- icon 是怎么引入的, iconfont 里面怎么识别我们引入的 icon
- 如何检测浏览器、服务器是否支持 http2.0
- Sentry 这类监控怎么监控错误的,对于跨域脚本错误呢
- GraphQL 接口的性能与质量,单机QPS多少,单核还是多核部署(这个算问项目)
- 怎么做懒加载,如果我们想点击一个按钮,然后动态加载 modal,要怎么做
- mobx 和 redux
- 实现一个记忆函数
头条(广告系统)Offer
快被二面虐哭了
一面
- 移动端自适应方案
- 几道看输出的题目,考察变量声明提升,暂时性死区,原型链
- React 虚拟 DOM diff 算法
- Webpack HMR 原理
- 说几个 HTTP Content-Type
- cookie 的属性有哪些,都是干啥的
- React 组件间通信机制
- React 路由模式原理
- JSBridge 原理
- 手写实现 Promise.all,后面还有加上并发限制的几个小变形
二面
- 聊聊 React Fiber,Fiber 是依据什么切分任务的
- 显示器刷新率与浏览器帧率
- 瀑布流计算逻辑
- CSS 幽灵空白节点与解决方案
- CSS 行内元素的 baseline 问题
- 写个深拷贝
- Object.create 是干啥的,自己实现一个
- JavaScript 里的包装类型
- 聊聊 JavaScript 的语法解析, JIT 等等
- WebAssembly 了解么,是干啥的
- 说说最近很火的面试题 a == 1 && a == 2 && a == 3
- 聊聊尾递归
- HTTPS 原理
- HTTP 缓存
三面
- 介绍一个项目
- 这个项目还有哪些可以做的优化,技术优化,产品优化等等
- 错误监控的实现原理
- 数据上报的几种方案比较
- 挨个问了问简历里大佬比较感兴趣的内容
快手(中台)Offer
一面
- 聊了很久项目,各种项目
- Webpack 常见优化手段
- Webpack 里有几种哈希,都是干什么的
- 实现 LRU
二面
- 介绍一个项目
- 介绍一下 React Hooks,相比于 HOC 它有什么特点,解决了什么问题
- Mobx 如何监听到 Object array 的元素属性变化
- 开发移动端与 PC 端项目有什么不同
- JSBridge 原理,怎么解决安全问题
- 实现 Promise.all,加上一些变形
- 写个 treeToArray,再写个 arrayToTree
三面
- 移动端适配方案,rem 解决了什么问题,为什么要采用 rem
- 只用原生 API 实现一个拖拽跟随效果(好题目,又扩展地问了很多问题,有空再写写)
- 除了你一面说的那些,Webpack 还有什么优化手段(这个问法好厉害…)
- 深入考察了一波 CSS 绝对定位,相对定位,块级元素的本身概念
- 拐着弯问了个 @import 的特性和坑
阿里(钉钉 base 北京)HR面挂
作为面试季的结束,这个结果挺酸爽的……
总体感觉钉钉重点考察候选人对业务甚至商业模式的理解,hr 面都详细地问了做的事情对业务的帮助与影响,当前业务模式下技术有哪些手段可以降低项目成本等等
由于已经到了面试季的最尾声了,题目几乎都没怎么记,其实挺多知识点的切入,扩展方式都很赞
一面
- 聊项目
- React Fiber
- 比较一下 Mixin / HOC / Hooks
- 数据劫持的几种方式
- 手写 compareVersion 两种解法
二面
- 聊项目,有没有调研过业界竞品的技术方案
- CI 怎么做的, E2E测试的具体收益,适用于哪些场景
- 扫码登录的实现逻辑
- JSBridge 原理
三面
- 各种聊项目,对过往工作经历里的一些业务理解(各种对业务的理解,有哪些深挖的点)
- 聊虚拟 DOM 和 diff 算法,与真实 DOM 对比
- 聊闭包
- 聊工程化
- 聊 Web 安全
- 聊 Go 语言
- 聊你对钉钉的看法和对业务,前景理解
四面
这一面聊技术的内容不多,更多还是一些职业规划,技术规划,和业务方有分歧怎么处理这些软素质相关的问题。
四面之后本来还要有一轮大佬面,但是时间没排上就先进行 hr 面了,hr 面了一个半小时,然后就挂了…
体会
本来春节期间趁着在家还着重刷了一波算法的,但还是菜,面试期间手撕算法的场合也不多。
除了以上列出的技术考察点,还是聊项目更多,所以功在平时,好好做项目,多思考是必要积累。大多数面试里都是一轮纯基础面,类似于题库抽题的方式来考察各种基本点。第一轮通过之后都是聊项目为主,穿插着一些技术点面试也是很虚的“聊聊xx”,在我看来这种提问方式很考察对技术点的纵向理解,要自己扩展着一直说说说才行,这种题目也达成了一问一答的话就会减分,在面试官那里看起来是卡壳的。
对于贴在简历里的项目而言,项目的方方面面自己都要心里有数,最基本的打包体积有多少,首屏时间有多少,除此之外,针对项目在业务上下游中的作用也要有所了解和思考。针对面试官对项目的提问,一些场景的方案设计也要尽量做到,从业务出发,主要为业务考虑,权衡多种方案,给出自己的答案。很多时候,思考过程比答案更重要,毕竟面试并不是考察机器记忆。
还是要继续努力才行~