一些面试题

已经有一段时间没有面试了,感觉最近有些颓废,整理一些自己的面试问题啥的。

Q: css 如何实现水平垂直居中

送分题,先从这道题开始

Q: 如何实现 dark mode

很多种方式,可以 css variables, 或者 dymaic load 都行,随便聊聊。进一步还可以探讨下 css methodologies ,讨论下 atomic css, css modules 啥的,还是看情况吧。

Q: 手写去重

暴力解也行,基本送分题

Q: 如何检测浏览器的性能。空闲的时候做一些事情

大概从 setTimeout 开始谈起,引申到 requestAnimationFrame 继而谈到 Promise 顺便就能带一下事件模型,从中也可以继续谈 Vue.nextTick 或者 React 中的切分任务后的实现,看看候选人能不能聊到 MutateObserver , requestIdleCallback 等新式 API 和设计

纯性能检测得提 performance 的一些 API,查内存。不过不是特别重要。

如果还能聊,继续谈谈 node.js 事件模型,再往下到 epoll 和异步模型的概念了。到这里可以转到 process, thread , coroutine, fiber 之类的概念解释。

Q: 有哪些优化策略。

随便讲,从 http cache, dns prefetch, cdn 到资源压缩,图片格式什么的。还能穿插 pwa,压缩算法之类的应该蛮有意思。

这里 TCP/HTTP 是绕不开的,还得继续流程。中间谈到 HTTPS 可以介绍 TLS 证书校验的概念,细节可以到 RSA, AES 的算法实现。这里还可以问问怎么攻击 HTTPS 很有意思。

Q: event loop

前端面试八股文,没啥意思,但是如果感觉面试者是背过的,可以让他背一下拯救尴尬的场面,随便聊聊吧。

前面性能检测部分如果谈到可以跳过

Q: 内存泄漏及如何避免

简述吧,看看代码写得安全不,如何产生的,如何避免,怎么显示清理。

如果能到介绍 GC 基础算法就不错,如果有优化算法的介绍就更好了。

Q: 正则手机号

简单看看正则,一般不会太复杂

Q: js bridge 如何实现

如果有写 hybird 的简历,可以问问看。感觉没啥意思。

Q: 框架有关

React 问 hooks 实现,手写可以来个 useInterval 涉及到了蛮多东西的,很有意思。数据流聊一聊,看看怎么理解单向数据流的,还能继续就聊聊 saga

Vue 不是很懂, definePropertyproxy 问烂了,就问问如何实现模板的事件绑定吧。数据流继续 flux 思想

ng 直接 ng

更多可以聊聊新潮得 next.js, gatsby 这些,看情况。

Q: git 操作

看看是不是除了三板斧之外还了解别的,比如 bisect, cherry-pick, merge, rebase 这种,另外 tag 和 branch 策略也可以聊聊

Q: 工程相关问问如何保证可用性

前端的报错怎么处理,性能监控怎么做,CI & CD怎么做,单元测试有没有

这段我还没想清楚怎么聊能更好地理解候选人的架构设计能力。仅限参考

Q: 聊聊最近看的最 wow (惊叹) 的东西,技术最好,非技术也行

比如最近刷屏的 web container 文章,或者新的浏览器渲染策略。

非技术可以说什么哲学思想,金融,历史?随便吧

有惊喜的话可以接着聊,算是加分项


整个过程我感觉自己对于设计可能更看重一些,可以看出我还是有些践行自己 不把 bug 当 feature 问 的价值观,这点儿还行。

算法没怎么问,我也基本只是 easy 到 medium 再高了我自己都不会写可不敢问。然后二进制计算的我是不会问的,这个东西知道就是知道,不知道想破脑袋也想不出来。

计算机基础,其实我很想去问,但是做前端天生被浏览器屏蔽了太多的东西,没办法往下了解。所以大多数时候我会把这个环节换成能不能试着探索候选人的学习能力和好奇心。


其实我很想在面试时从两个超大数字相除的问题开始,例如 4983934826 / 33。这一招是从之前的 leader 身上学来的,但是我还不敢这么开始,他也从未尝试过。

这道题看着很傻,实际上解法也是纯暴力解,两个数字都是随机想出来的。目的只是看候选人的耐心。其实就经历来看,我个人感觉至少三成候选人答不了这道除法题。。。

TODO: 有空更新下后端的面试题