秋招投到现在一个多月了,字节和虾皮一面就挂,快手坚持到了三面,和面试官聊的很好,以为会给过的,没想到今天一看又挂了
timeline 8.21一面(两个小时后通过)8.26二面(面完两天后通过)9.3三面(第二天流程结束)
一面:
1. 开局经典自我介绍,Base 北京,用户增长部门
2. 闲话少说,直接看项目
3. 第一个项目:node 的 cli,为什么想做这个,聊了技术选型和流程
4. 为什么不做成插件呢,因为 cli 简单一点,面试官他们也做过类似的
5. 简历的灰度流程是怎么样的,按美团的仓库灰度,请求自带 cookie,如果仓库的 id 命中灰度的策略则上灰度的代码
6. 第二个项目:next 的,next倒是没怎么问,聊为什么选这些技术栈
7. 图片的瀑布流滚动加载怎么做的,不是用 intersectionObserver,但是我也忘记用什么了,下次就答这个
8. 场景:图片的高度不一样,是否会出现加载新的图片前某一列很高、某一列很矮,导致页面会留白的情况
9. 也许是会的,那么怎么解决?我说按照高度排序,贪心一下选最长和最短的一起,面试官问我懂不懂一个 dp,抽象成一个数组来说:分成两个部分使他们的和尽可能相同,我说就是背包问题,他就说那这个就没必要出了
10. 他们的解决方法是看哪一列短一点,后面多补图片上去那一列
11. 用到了 shadcn/ui,讲一下为什么,对比 antd 这些,这个可以按需引入,自定义主题
12. 那如果官方更新了代码,和我们自定义的主题有出入了怎么办,没考虑过这个问题
13. 聊到了函数式编程,所以给我出手撕:用 ts 写一个 reduceRight 的方法(相比 reduce 反过来遍历)
二面:
- 面试官介绍流程:自我介绍聊项目 + 聊项目简历 + 写算法 + 反问
- 首先是自我介绍,面试官没有打断,我就从自我介绍讲到两个项目完,然后面试官开始问项目
- 关于瀑布流加载是怎么做的,回答 intersectionObserver + useRef + useEffect
- 为什么用 tailwindcss,用过别的吗,讲一下各自的特点,我说了可以直接行内写样式,不过问题是复杂起来要写很多样式,那有什么解决方法吗,我回答可以把通用的长样式抽离出来、拆分一些节点
- 为什么用 MongoDB 这种非关系型数据库,了解过和 MySQL 的区别吗
- 除了 Prisma 还用过别的 orm 吗,有没有遇到过什么坑,又是怎么解决的
- 在美团的项目是自己做的吗,还是同事要求的
- 为什么用 Inquirer.js,原生的 node 命令交互会吗
- 代码是怎么在 node 的环境里面运行的
- 然后是写算法,实现一个高阶函数,每 x 秒执行一次函数,一共执行 y 次(牛客看见好几次了,三面也出了)
- 定时器一定是准确 delay 的吗,不一定,答了同步异步任务这些
- 有什么办法尽量准确,我讲了用时间戳来计算
- 箭头函数、this、apply、call 的问题,和 bind 有什么区别
- 最后一题是抢红包,给定金额、发几个红包、每个红包价钱的 min max,时间紧迫,用回溯写了一个
三面:
- 面试官自我介绍,我自我介绍,附带讲实习经历项目,最挑战的事情
- 第一个项目是关于做 npm 包的,问题一些常规能答的问题
- 如果想要引入埋点监控、指定哪个组件库、请求库等有什么思路
- 第二个项目是 nextjs 的,问有什么了解
- 数据库是 mongodb,为什么用这个,还知道哪些非关系型数据库吗(redis),和 mysql 有什么区别(使用、功能特性这些)
- 用了 tailwindcss,有什么见解,如果样式很长要怎么解决
- 问样式,隐藏元素的方法(display、opacity、visibility)
- 有什么区别?重绘回流
- 怎么让元素上下左右居中
- 用 magin,定位上左右为 0,元素会在哪
- 问网络,讲一下缓存,强缓存和协商缓存
- 问 expires、e-tags 等的区别,怎么判断要用协商缓存
- 怎么判断变量是不是数组,回答 Array.isArray(),但是这是 es6 的,于是说 instanceof
- 详细询问 instanceof
- 手写一个 repeat 函数,在指定时间内重复执行数次函数