今年还不曾面试过,若是不是头条的某个 HR 顺手把个人简历从简历库中捞起来的话。头条是大小周,这就意味着我能够周末去面试,不占用工做时间也不用请假,对于这点我仍是很满意的。前端
面试约到了周日早上十点,但过后我有点后悔,周日面试官极可能会晚点。面试一直持续到下午三点左右结束。node
头条的效率确实很高,周日面试结束后,次日 hr 就通知了面试经过。react
原文连接linux
另外,我把本次面试也记录在个人每日一问: shfshanyue/Daily-Question 中,欢迎讨论与 starwebpack
本篇文章写于一八年底,机遇巧合下放了出来,另外一七年面试与一九年面试见 2017面试记 与 2019面试记git
背景
到今年年末,我已经有了将近两年半的经验。而这两年来的时间能够一分为二,第一段时间我在整前端,用的 react,第二段时间我在整后端,用的 node,咱们用 node 直接操做数据库,而非做为中间层。而因为人事的过多调整,我在这时也作过一小段时间的 leader。作后端改BUG老是要调线上数据库的,再加上我对运维的兴趣,所以我拥有了线上数据库以及k8s集群的权限,并直接维护咱们项目组业务代码的 k8s resource。(固然,后来改到 helm 维护)github
因为 node 与前端千丝万缕的联系,以及我在头条的简历没有更新,所以此次接收到的仍是前端面试邀请,不会也有一些 node 的知识。web
面试
面试整个过程持续了四个多小时,聊的东西仍是不少面试
- 简单的自我介绍与项目经验
- 一道算法题
- 一道 setTimeout/Promise 输出顺序问题的题
- 什么是事件循环
- react 中的 key 用来作什么
- 什么是 virtual DOM
- 就是虚拟的DOM,提升渲染的性能,数据与UI分离,而且有利于服务器渲染
- webpack 的原理是什么,loader 和 plugin 的做用是什么
- ssr 的原理是什么,解决了什么问题
- renderToString,hydrate;首屏时间与SEO
- ssr 会有那些坑
- cpu/memory 可能爆了,出现异常很差定位调试,带权限接口与非权限接口有可能须要剥离(为了缓存),TTFB慢了(若是不加缓存,之前多是骨架屏,如今直接白屏),因为须要起http服务工程上也复杂了不少
- 你如何看待前端和后端
- 有没有了解过 shell
- 如何替换一个文件中的内容
- 有没有用过 awk
- 对一个文件如何只查看特定行的内容
- 大家的 node 的服务端应用如何部署
- 而后讲了讲咱们node部署的历史,从之前的 pm2 到 docker,到 openshift 再到 k8s
- docker 部署有什么好处
- docker 的底层原理是什么
- namespace 和 cgroups,一个隔离环境,一个控制资源配额。多亏我看 docker 的时候多看了一遍简介...
- 那隔离环境主要隔离什么环境
- 根据我对 docker 的映像说了网络,memory,进程,volume。回去以后看了看才知道是在问 linux namespcaces 有哪些..
- 有没有了解过 ufs
- 没有...回去以后发现这就是 docker 的分层存储,虽然一直知道它是分层存储,但不知道叫 ufs
- 部署 node 时如何充分利用服务器的多核
- 好比用node 的 cluster,用 k8s 也能部分利用多核性能
- 若是你要读取一个特别大的文件应该如何作
- 那时候还不知道 stream...因而就说了不停地 seek offset
- 大家有没有对服务端的异常进行监控
- 好比用 sentry 监控异常,elk 打日志,prometheus 监控性能并用 alertmanager 报警,再写一个webhook到钉钉
- 那大家在线上出现问题时如何在应用层面监控 cpu 和 memory 的信息
- 虽然线上出现过问题,,但这个确实不清楚。
cpu
和 heapdump
- 如何查看一个 node 的服务端应用的内存和CPU
- 当服务端的内存发生了 OOM 问题如何排查
- 好比看 promethues,查看监控的忽然高峰,看日志那段时候发生了什么,看有没有提交代码
- 数据库中什么是 left join 和 right join 有什么区别
- 数据库索引中为何要用 Btree
- 什么是聚簇索引
- redis 如何作持久化
- 我还在想持久化好像不过重要,有一次咱们线上的 redis 刷了一遍,也仅仅是用户掉线了而已...持久化有两种方案,具体忘了叫啥了。一种是隔一段时间备份数据,另外一种是备份命令,按照命令备份数据。回来一查是 RDB 和 AOF
- 如何实现一个分布式锁
- 有没有用过 LUA
- 并无,但不能说没有啊。因而说我看过一个关于
rate limit
的库的源码,里边的 redis 就是用的 lua 脚本
- 当一个地址从输入到展现在浏览器中有哪些步骤
- 递归解析的过程是什么样的,什么叫递归 DNS 和权威 DNS
- TCP 为何是可靠的
- 那 tpc 和 udp 相比的话,udp 有什么好处,虽然不可靠,可是为何还有不少基于 udp 的协议
- 由于 upd 报文小,udp 头部8个字节,tcp 头部20个字节,并且有些协议也不须要太可靠。面试官看我把报文 header 大小答出来了,而后看了下简历发现我是学网络工程的。其实我网络工程学的也忘的差很少了 (刚开始都能记住TCP的六个标志位)
- 为何要换工做
- 之前经过了面试怎么没有来
- 你有什么要问的吗
总结
通过本次面试后,愈发感受本身一些底层知识的薄弱。另外也感叹于面试官技术面的广度与深度,深知拓展技术栈也是至关重要。redis
我是山月,我会按期分享全栈文章在我的公众号中。若是你对全栈面试,前端工程化,graphql,devops,我的服务器运维以及微服务感兴趣的话,能够关注我。若是想进群交流,能够添加我微信 shanyue94,备注加群。