两年前端头条面试记

今年还未曾面试过,如果不是头条的某个 HR 顺手把我的简历从简历库中捞起来的话。头条是大小周,这就意味着我可以周末去面试,不占用工作时间也不用请假,对于这点我还是很满意的。

面试约到了周日早上十点,但事后我有点后悔,周日面试官很可能会晚点。面试一直持续到下午三点左右结束。

头条的效率确实很高,周日面试结束后,第二天 hr 就通知了面试通过。

原文链接

另外,我把本次面试也记录在我的每日一问: shfshanyue/Daily-Question中,欢迎讨论与 star

背景

到今年年底,我已经有了将近两年半的经验。而这两年来的时间可以一分为二,第一段时间我在整前端,用的 react,第二段时间我在整后端,用的 node,我们用 node 直接操作数据库,而非作为中间层。而由于人事的过多调整,我在这时也做过一小段时间的 leader。做后端改BUG总是要调线上数据库的,再加上我对运维的兴趣,因此我拥有了线上数据库以及k8s集群的权限,并直接维护我们项目组业务代码的 k8s resource。(当然,后来改到 helm 维护)

由于 node 与前端千丝万缕的联系,以及我在头条的简历没有更新,因此这次接收到的还是前端面试邀请,不会也有一些 node 的知识。

面试

面试整个过程持续了四个多小时,聊的东西还是很多

  • 简单的自我介绍与项目经验

  • 一道算法题

  • 一道 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 的信息

    • 虽然线上出现过问题,,但这个确实不清楚。cpuheapdump
  • 如何查看一个 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的六个标志位)
  • 为什么要换工作

  • 以前通过了面试怎么没有来

  • 你有什么要问的吗

总结

经过本次面试后,愈发感觉自己一些底层知识的薄弱。另外也感叹于面试官技术面的广度与深度,深知拓展技术栈也是相当重要。


我是山月,一个喜欢跑步与爬山的程序员,我会定期分享全栈文章在个人公众号中。如果你对全栈面试,前端工程化,graphql,devops,个人服务器运维以及微服务感兴趣的话,可以关注我

原文链接:segmentfault.com

上一篇:wildcard2
下一篇:vue-cli项目踩坑

相关推荐

  • 🚩四年前端带你理解路由懒加载的原理

    前言 说起路由懒加载,大家很快就知道怎么实现它,但是问到路由懒加载的原理,怕有一部分小伙伴是一头雾水了吧。下面带大家一起去理解路由懒加载的原理。 路由懒加载也可以叫做路由组件懒加载,最常用的是通过im...

    1 个月前
  • 🔥手写大厂前端知识点源码系列(上)

    如今前端攻城狮的要求越来越高,会使用常见的API已经不能满足现如今前端日益快速发展的脚步。现在大厂基本都会要求面试者手写前端常见API的原理,以此来证明你对该知识点的理解程度。

    3 个月前
  • 🔥前端面试大厂手写源码系列(上)

    如今前端攻城狮的要求越来越高,会使用常见的API已经不能满足现如今前端日益快速发展的脚步。现在大厂基本都会要求面试者手写前端常见API的原理,以此来证明你对该知识点的理解程度。

    3 个月前
  • 🔥《吊打面试官》系列 Node.js 必知必会必问!

    (/public/upload/f204a3b224d986128f1b4d9b8d06cd17) 前言 codeing 应当是一生的事业,而不仅仅是 30 岁的青春🍚 本文已收录 Git...

    3 个月前
  • (立下flag)每日10道前端面试题-15 关于【高级技巧】十问

    (/public/upload/4dc64bf14f4bd714fcd87e98b6a10373) 第一问:安全类型检测——typeof和instanceof 区别以及缺陷,以及解决方案 这两...

    2 个月前
  • (本人)2019前端校招经历

    我是一个想要找前端工作的妹纸,最近电话面了挺多企业,在每次面试中都会发现自己的不足或者没涉及到的方面,一边被拒一边学习新知识。想要在这里记录、分享前端校招遇到的问题,希望每一次都有提升,下一次不会再犯...

    2 年前
  • (前端工程化01)私人管家-包管理器

    字数:3883, 阅读时间:10分钟,点击阅读原文 目录: 磨刀篇开发环境搭建 私人管家包管理器 待续 点击查看源网页(/public/upload/7b9b054b364e1627547...

    1 个月前
  • (前端工程化01)私人管家-包管理器

    字数:3883, 阅读时间:10分钟,点击阅读原文 目录: 磨刀篇开发环境搭建 私人管家包管理器 待续 点击查看源网页(/public/upload/fde96d7941fadecf7f3...

    2 个月前
  • (前端工程化01)私人管家-包管理器

    字数:3883, 阅读时间:10分钟,点击阅读原文 点击查看源网页(/public/upload/4b3364dbda7cb152b15a01d33da483ed) 包管理器 在很久很久...

    2 个月前
  • (初级前端)面试如何写出一个满意的深拷贝

    前言 已经有很多关于深拷贝与浅拷贝的文章,为什么自己还要写一遍呢💯 ❝ 学习就好比是座大山,人们沿着不同的路登山,分享着自己看到的风景。你不一定能看到别人看到的风景,体会到别人的心情。

    3 天前

官方社区

扫码加入 JavaScript 社区