哭了!从腾讯辞职后找不到工作,投了 20 多家简历,却只面过一家
题主 2019 年非 985/211 非计算机专业本科毕业(野生程序员),之前在腾讯实习了半年多+毕业后在腾讯工作了一年
年中的时候因个人原因,打算离开腾讯,到外面看看,投了若干简历,最终面试了字节跳动、虾皮、快手、拼多多这 4 家公司。有的喜有的忧,本文是对本次面试的一个总结。
快手
快手是最早约的面试,在 boss 直聘上投完大概几天就约了。也是我本次第一家面试的公司。时间某个工作日的晚上 8 点,那天早早溜回家面试了,是在牛客网上进行的
主要问的问题如下:
react16 新增了哪些生命周期、有什么作用,为什么去掉某些 15 的生命周期(写过码看过文档都能答上了)
fiber 怎样的,如何实现异步渲染(链表/可中断)
redux 和 redux-saga 的区别和原理
项目中用到的 saga-duck 是个什么东西
useEffect 的实现原理(坦白说自己没看过 react 的实现,就说了下 preact 的实现)
异步渲染和旧版的 diff 的区别
babel 实现转码的过程(词法/语法分析)
项目的技术栈怎么选型(这种问题好几次都被问到,感觉我真的不太知道怎么答)
小程序底层实现原理了解多少(说了下双线程模型/预加载 webview)
项目 nodeJs 应用异常退出如何处理(pm2/uncaughtException 事件等)、日志上报怎么做(输出重定向到文件,elk 服务传传到 kibana)
graphic schema 怎么设计(说了下我对于项目中的理解,资源维度,感觉回答不太好)
有哪些技术驱动业务的案例(说了下这个插件的思路和 webpack 一些优化)
最后写了一道算法:最大乘积子序列,有正负数的情况。应该对应于这个 leetcode 题目。这里我理解错题意以为这个序列是可以不连续的,而且对于理解错的题意也用了一种错误的写法,用了 o(n2)的一种实现。然后面试官提示说 o(n),最后还是没做出来。这个题目其实自己在之前的刷题的时候自己也是比较顺利能解出来了,这里有点可惜,面试临场代码能力还是有待加强
最后面试官大概讲了下部门情况,他们那边是深圳快影前端团队,目前规模还不大,正在大力招人。最后还问了下我如何看待目前部门工程化建设不足的问题,我表示这是一个很好的机会去挑战自己(hhh)。
当时这次面试之前,差不多两年没面试了(上一次面试还是 2018 年的 8 月),很多地方自己感觉也是表现不太好。虽然面试官最后说了认为我是一个比较优秀的同学,让我当时迷之自信误以为会有下一轮。过了一周没有任何答复后,去 boss 直聘上问了下 hr,答复说算法有待加强,第一次面试凉凉~
拼多多
拼多多投的是广州的部门,好像是小程序团队,通过一个同学内推的
一面 47 分钟。某天晚上 9 点
redux 的理念(说了下 action dispatch state 啥的,单向数据流)
react-redux 中 connect 怎么实现(高阶组件、context 注入 store、subscribe 订阅 store 数据变化)
mixin hoc 继承的区别,优缺点
react diff 如何实现
react 旧版的 diff 用深度优先还是广度优先。为什么用深度优先,广度优先能实现吗(其实我认为广度也能实现的,面试官问广度有啥不好,我确实不知道..)
diff 的时间复杂度?为什么?(o(n)。提了下 react 优化 o(n3)->o(n))
react-router 实现原理(hash/html5 history)
客户端路由 hash/history 实现的区别、原理
有哪些常见的 http 头
websocket/轮询的好处和缺点 (性能、兼容性)
websocket 的握手过程(urgrade websocket)
tcp 的握手过程
tcp/udp 的区别
一个应用场景 redux 触发几次 action 如何设计(这个问题感觉有点迷,不知道有啥问,我回答也有点迷,面试官说可以了...)
尽可能多实现 pdd app 导航布局实现(就是类似 4 等分 div 并列排布)
如何清除浮动
BFC 实现原理
开放题:pdd 首页假设没有任何优化,尽可能多的想优化的办法(懒加载、打包优化、webpack 速度、代码压缩、雪碧图、http2 balabala....)
二面 周日 下午 2.30 35 分钟
css 的盒子模型(content-box border-box)
实现动画有哪些方法 (js css)
react mixing hoc 继承 hook 之间的区别/优缺点
浏览器渲染出一个页面的过程
vue/react 技术选型
项目相关,项目重构开发如何并行 balabala...
项目中工程化进行了哪些优化
项目中继续进行优化会从哪些方面去做(说了下 webpack5 module fedration)
nodejs 项目的性能优化
linux 文件权限(4 2 1 )
前端监控怎样实现 (数据采集、上报、展示之类)
三面 本来约了去星期天广州现场的,结果车票都买好了,前几天,hr 说部门架构调整,岗位暂时不开放了。又凉了~
拼多多的面试时间还是很合适的,周天+晚上 9 点,基本可以避免上班的尴尬(毕竟 11 11 6...)。问的问题也中规中矩吧。不过也无缘了。拼多多的两轮是比较少有的不需要手写代码的,都是电话面试。
虾皮
虾皮通过一个同学内推的,面的金融部门
虾皮都是 qq 视频面试+腾讯文档 word 写代码
一面 周二早上
http 302 301 307 之间的区别
301 和 302 对于 seo 来说哪个更好 (301)
跨域是什么、如何解决
jsonp 有什么缺点
图片 base64 和外链的应用场景,各有什么优缺点(base64 减少请求数,但是会增加额外的体积)
http 缓存机制
https 的握手过程是怎样的
set/map 的区别
hook 的局限性
setState 和 hook 的区别
decorator 的作用,编译后是怎样的(@decorator -> decorator(target)...)
symbol 是什么,一般用来做什么
csrf 是什么 如何防范
sql 注入是什么,如何防范
react 调用 setState 之后发生了什么
nodejs 事件循环机制
pm2 的原理,有哪些模式(cluster fork)
docker 和 k8s 有了解多少(k8s 听过没用过)
移动端端一个元素拖动,如何实现和优化(节流、改变位置)
-for in/for of 看代码输出
几道看代码说输出(忘了具体题目了)
描述链表的反转怎样实现,复杂度多少
编程
实现 instanceOf
实现一个对象被 for of 遍历
实现链表的添加、删除。复杂度多少
一面考的都是一些基础知识,需要一定牢固的基础知识准备才行
二面 时间 一面之后的下午
给了两段效果上都可以实现 child 继承 parent,细节上的差别 function child(){}
function parent(){}
child.prototype.__proto__ = parent.prototype
child.prototype = new parent()
一些代码看输出的题目。考点有函数 this 指向的问题
如何监听 html 外链资源加载失败(面试官又追问了 onerror 和 addEventListener 的 error 都能吗。面试官说 onerror 不行,具体我没试过...)
Mutation Observer、Intersection Observer 使用场景(Intersection 听过没用过)
127.0.0.1 和 0.0.0.0 差别(一个只能通过 localhost ,一个可以通过本机 ip 或者 localhost 都行)
利用 promise js sleep 函数实现
jsx 转换后是怎样的
redux compose 函数做什么的,中间件呢
redux-saga 是什么,和 redux-thunk 有什么区别
dva 有了解吗
umi.js 有用过吗
req.pipe(res)
stream 如何处理数据消费和数据生产的速率不一致问题
writeable stream drain 事件是做什么的(这是和一个控制读写速率有关的事件)
二面考得比较细,问了很多看代码问输出的问题,也问了一些比较细节的问题,有些细节的地方确实实际也没接触过。
字节
字节是通过一个同学内推的。字节也是自己比较中意的公司之一吧。为了准备字节面试,刷了不少 leetcode,虽然好像面试也没怎么考,但是通过这段时间刷 leetcode,不得不承认感觉自己的代码能力也有一定提升
某个周日晚上 20 点
一面
常用的 http 状态码(101 200 204 301 302 304 307 400 404 500...)
301 和 302 的区别(永久/临时)
前端路由怎样实现(hashchange 事件 hack history.pushState)
前端路由直接刷新 404 怎样处理(404 时重定向到 index.html 如 nginx)
从前端到后端全链路如何设计实现一个登陆的流程(session 方案、jwt)
什么是跨域,怎样处理
简单请求和复杂请求的区别
浏览器的缓存策略说下
domain 属性解决跨域。几种 domain 设置对跨域是否生效
ts 泛型做什么的,infer 关键字的作用
题目
实现 typescript 的 Paramters、ReturnType (考察 infer 关键字使用)
实现 Promise.all (每个 promise resolve 结果存数组,最后一个 promise 返回时,把数组返回)
实现一个并发请求控制函数,限制并发数
二面 一面之后马上进行了二面
jwt 的原理(以前用过,比较好说)
xss 和 csrf 是怎样的,如何去解决
pureComponent 和 Component 的区别(前者 shouldComponentUpdate 默认比较 props)
react hoc hook 解决了什么问题
有哪些常用的 react hook,它们做了什么(useState useReducer`` useContext 等等...)
项目实现一个中间层的意义(前端全链路日志打通)
setState 同步还是异步
setState 传递对象和函数有什么区别?如何选择
合成事件怎样的,有什么好处
事件冒泡和事件捕获的区别、react 中的冒泡和捕获呢(react 中都是合成事件,无论冒泡和捕获,对应于原生事件都是冒泡)
怎样看待加班(hhh 加班很正常啦,在腾讯的时候也是每天加班)
为啥选择跳槽
题目
实现 css 垂直、水平居中
实现 bind 函数
实现快速排序
三面 三面是 leader 面,某个周二下午进行
为什么之前拿了实习 offer 没来/下一份工作有怎样的预期
graphql 相比 restful 的区别、优点缺点()
为啥选择了 redux-saga 作为解决方案(解决异步优雅/提供很多工具函数)。redux 的异步中间件方案有哪些,对比。saga 对比 dva?
graphql 的鉴权在哪里做
协程是什么(语言层面实现的并发),Go/nodeJs 怎样去实现协程(Go 使用 go 关键字、node 可以使用 Generator 实现、我理解 react16 的异步渲染也是协程的实现)
react fiber 的机制是怎样的
锁机制的作用,node 和 Go 如何处理死锁
Go/node 实现并发怎么做
node 和 Go 的优缺点怎样理解
编程
实现一个 useState
三面可能因为简历写了自己写过一些 Go(其实我只是个人项目的一些玩具),面试官问了不少 node 和 Go 的问题,然后我就先表明 Go 自己只是简单学过,然后就按照我的理解回答 node 和 Go 的问题..幸好感觉回答得也 7788 吧
四面 因为某些原因,前 3 面发了 offer 后我选择换了部门,于是就有了 4 面
介绍项目 项目难点
项目做了哪些优化
一个广告页面,如何统计在不同平台上的停留时间
为何选择换工作
四面基本上都是聊项目,难得没有做题。我们准备面试的时候一定也要先整理下自己的项目的一些难点之类的,所以四面过程还是比较轻松的
字节感觉总体难度是这 4 个公司面试难度最大的,写代码也是最多的,而且感觉面试的时候写代码真的比平时加了不少 debuff,这个还是非常考验心理素质和代码能力的。最后还是有惊无险拿了字节跳动的 offer 啦~
写在最后
这就是本次跳槽面试经历小总结。忠告各位:目前大环境也确实不好,各位跳槽要慎重,千万别裸辞~
码字不易,据说点赞的人都能收割 offer~
推荐阅读
看完三件事
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
关注公众号 『 Java 斗帝 』,不定期分享原创知识。
同时可以期待后续文章 ing🚀
评论