明天猿辅导转正面试,写个字节面筋攒攒rp,7月底面的了。
有些问题记得不是很清楚了,准备的也不是特别充分。QuQ,随便写写,回馈牛客~
之后有啥想起来的再来补一补~
TL;DR
一面
基本上就是问下基础,确实记得不是太清楚了。
自我介绍
两家实习,大二小米暑假实习2个月、大三猿辅导实习接近8个月。讲讲实习的一些事。
Ant-design 核心贡献者,讲讲给 antd 写的一些 feature 以及修复的一些 issue。
算法:最接近三数之和 和 比较两个pkg版本号大小(包括带
rc
和beta
、alpha
这种)。第一题刚开始用的 hash 表,面试官让我不要优化一下,改成双指针了。
第二题模拟(代码写了快70行,我太笨了)
一些前端基础知识
继承方式
问了下 es6 的继承的一些细节(constructor这些相关)
问了个事件执行机制的题目,然后给了一堆混有 promise 和 async之类的事件的代码来给出一个输出结果,分析好异步和同步队列的执行情况。
为了个 类似于 this 绑定的题目,也是给了一推代码分析结果,分析好隐式绑定和显示绑定以及执行的作用域就行了。
Dom、bom事件,小程序里面有吗(实习的时候做了一个兼容小程序的frog库)
实现三列布局(口胡),左右两侧自适应,中间固定呢
响应式布局 vw、em、rem 区别(实习的时候用 rem 做过响应式布局,根据视窗大小来动态计算根的 font-size 值)
nodejs 为啥适合做 IO 密集型不适合做 CPU 密集型
TCP、UDP 区别,详细问了下 TCP 的三握四挥手的过程,还问了个关于三次握手中间断开的话,包的情况。
new 执行过程中发生了啥
其他
其实这一轮问了挺久的,快70分钟了,有些记不起来了。
二面
antd 贡献情况,具体哪些 feature,然后 antd 的一些工作发布流程,pr 的code review之类。
实现一个类似于浏览器的并发加载的功能(用队列乱搞了半天,这题挺有意思)。
实现一个判断数组去重的函数。(用了 Map,面试官让我用 es5 的方式,就只能用 object 来做 hash 表,要是有不同类型的值呢?typeof 判断一下,然后存 key 的时候标记一下就行了)。
链表判环。
基础知识
记得有问 https 的加密相关的。
然后 http2 的一些优势。
还有一些也不记得了
问了下实习做的一个编辑相关的项目,ts compiler api 的一些用法,以及分析提取 ast 来拼接一个 object 出来。问了下里面用到的一些算法, 其实就只用了 dfs 去扫树结构。然后最后处理 json 输出的时候,处理那个逗号来遵循 json 格式下了点功夫。
问了下 react 的底层原理
讲了下 diff 算法,为啥之前那种修改算法是 o(n三次方)(要遍历两棵树 & 找出不用),diff算法比较暴力,会直接根据 type 不用去做销毁再重构。但 diff 算法也会有些复用的情况例如设置了 key 之类。然后讲了下单点 diff 以及多点 diff 的执行机制。
讲了下 react 15 之前的架构以及为啥要在 react15之后引入 fiber 架构。添加的 scheduler 做了哪些工作,以及在这一过程中主要优化解决的问题。
useState 的实现(依赖了一个双向链表)然后讲了一些其他的hooks
hooks 解决了 HOC 以及 render props 的一些痛点。
问了下微前端相关的
微前端解决的一些问题,市面上的一些微前端矿建
你给qiankun的源码做过贡献,讲一讲qiankun的隔离机制以及qiankun因为用到了es6 的proxy机制导致对 IE 浏览器的不兼容性,qiankun提供的一些解决方案。
讲一下qiankun 里面多应用样式是怎么隔离的,js 是怎么隔离的。
问了下 deno 相关(参加过 deno 中文 api 文档的一些翻译工作)
deno 解决了 nodejs 的哪些痛点,相较于 node 它有哪些优势,有哪些缺陷
问了我平时用 deno 来搞些啥
deno 源码为啥要用 rust 写而不是 cpp,聊了 rust 的一个 tokio 库来给 deno 作为异步事件支撑
deno 源码里面还有 cpp 吗(肯定没了啊。。),然后聊下之前 deno 团队将核心模块用 ts 迁移回 js 的事情。
面试官:还有能吹的吗?
我:没有。
面试官:那我帮你叫三面面试官。
其实这一轮也快1个小时了。有些问题也不记得了。。
三面
算法:写了个两数之和,我在里面用数组的
indexOf
来当 hash 表用,他就问我indexOf
有时间复杂度吗?其实这个是有的,以前打周赛就因为这个 t 过,具体时间复杂度其实有 O(N),然后他让我用 hash 表扫,提前预处理存了一轮,他问我能不能只写一层遍历。。。问了下
看了我
github
,然后顺势发现了我的博客(其实我简历上有。。。),看到内容后问了些关于浏览器渲染机制的问题,可以让我多去看看 chrome 的官方文档,那边资料比较新。开始问 antd 相关
写过哪些组件(skeleton的一个组件已经发布了)
有哪些感触(其实主要还是测试,因为大型开源库都遵循一个“百行代码,千行测试”的原则,有时候你可能只改了很小的逻辑,但是你要给这部分写很多test case)。
提到关于 antd 里面组件 refactor with hooks 的工作,在重构过程中遇到了哪些问题(jest 测试对与FC 的支持不好,例如没办法像之前测逻辑的时候直接去测 state, facebook 之后能做一些改善吧。)
写过一篇引导新人进入开源社区贡献 antd 的文章,现在被放在官方文档上面 hhhh
正在参加阿里的编程之夏,选的项目就是 antd,里面有个课题以前没做过(组件提供无障碍的支持,会怎么去思考以及克服)。
为啥春招不去阿里实习(疫情原因,不太想离开北京)。现在手上阿里云的offer 应该差不多可以拿到。
对面 leader 比对了一下抖音和阿里云的区别,宣传了一下抖音,前端架构组,专门攻坚技术,能做的事情有很多。我也表示应该意愿会比较大吧,不过还是得看最后的选择吧。。。
面试官:我这边没啥问题了,之后hr会找你聊的。
然后一天就面了三轮。下午hr发消息约了明天的hr面。
可能是穿着 leetcode 的短袖在面试,算法都出的没那么恐怖。面试官问了挺多代码题的,记得最后关闭那个浏览器窗口的时候,上面有 14 个题目的 tab。。。。
hr面
一些私人问题以及我对开源和技术的一些看法。
问了下之前的翻译经历(掘金翻译了20多篇文章加上 deno 中文文档的翻译),碰巧也穿着之前参与掘金翻译送的短袖。
问了钱在心中的地位,之后在北京的发展。
现在手上快有的offer(阿里云还在坐等hr面,猿辅导转正面试)
问了也挺久的,大概快40分钟吧。
然后面完之后三个工作日就接了意向书。
Others
个人 github: https://github.com/fireairforce
有个 leetcode 的刷题 repo,已经用 js 刷了 600 多题了。
全部评论
(15) 回帖