6

一年半经验的前端面经总结(美团、头条、阿里、快手、滴滴、Shopee等等以及几个不知名...

 3 years ago
source link: https://zhuanlan.zhihu.com/p/362868129
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一年半经验的前端面经总结(美团、头条、阿里、快手、滴滴、Shopee等等以及几个不知名小公司)

关注微信公众号:web前端学习圈,领取85G前端全套系统教程

面试之前

先说好,问题的答案都不是唯一的,大部分只提供题目哈,后面有答案会慢慢补上!当时回答的都不是特别完全。面试过程比较长,从年初开始断断续续面试,没有做太详细的规划,有些答案也不记得当时怎么回答的。

v2-912680898e789c3ada2f74e7ca13637b_b.jpg

年初面试的公司还是比较多的,美团、头条、阿里、快手、滴滴、Shopee等等以及几个不知名小公司。从各种前辈的经验来说,是先拿小公司温故而知新一下哈,把自己的知识通过一次一次小面试归纳在一起。但实际上我遇到的情况是,小公司并不问太深的框架原理和基础(可能会有注重的公司,只是我没遇到),基本会着重于做过的项目经历,所以这几次面试并没有新的技术提升(毕竟每次面试都是在学习,从面试技巧来说,起码后面的时候你可以把自己做的项目说的更精彩...)。

对于大厂的面试,我只能说还是挺难的,首先和快手面试沟通的时候,最初的几个问题也比较紧张,回答的不在点上,面试官带个鸭舌帽,基本上没看我,偶尔和我对视一眼,从一开始就一副对我没有兴趣的样子,收到了十分大的打击,当时对快手很有好感,特意请了一天假准备面试,没想到惨淡收场 。

v2-1850ca386da8368334b6b23c72512f09_720w.jpg

其他的面试,面试官都很nice,虽然有的过了有的没过,起码体验上还不错,而且也学到了很多东西。因为面试题都是比较类似的,会针对你的简历去发问,基本上 20 分钟左右会讲项目,20 分钟讨论技术原理和基础,最后时间会手写几道题,算法还是程序题跟面试官喜好有关,起码个人觉得没有特别为难的题。

同时因为面试题类似,也就没有特意区分题目是来自于哪家公司,希望同学自行脑补...

下面是我尽力回忆的面试题,以及虽然没考,但是很有可能会考的题目,希望能帮助最近有想要跳槽的同学!

面经部分

仅供参考,仅供参考,仅供参考!!!

因为几乎没有 React 相关经历,问我最多的 React 问题就是你觉得和 vue 有什么区别?

啊...从这一点来说,简历环节确实很关键。其实我做过,但我不精通,简历上不写,所以我不会,别问...

下面的面经部分被我分为了八个方面:(下面题目的 代表面试频率出现过多次)

  • JavaScript 基础
  • Css 以及优化
  • vue 或 react 框架相关
  • 前端打包等工程化
  • 浏览器及常见安全问题相关
  • 跨平台技术

其中并没有 Html 相关的东西,一方面确实是相关的题目少,另外不会有太难的问题,平时开发时常见的情况基本可以解决。

并且因为是从自己的简历来发问,所以有些也很常见的 nodejs、serverless、GraphQL 等等都不在我的面试题里,但很有可能出现在你的题目里,相关题目可以自行补课!

原生 JS 代码

  1. avaScript 实现对上传图片的压缩?

答:读取用户上传的 File 对象,读写到画布(canvas)上,利用 Canvas 的 API 进行压缩,完成压缩之后再转成 File(Blob) 对象,上传到远程图片服务器;不过有时候我们也需要将一个 base64 字符串压缩之后再变为 base64 字符串传入到远程数据库或者再转成 File(Blob) 对象。

思路就是 File + Canvas 的 drawImage

可以看看张鑫旭大佬的文章HTML5 file API加canvas实现图片前端JS压缩并上传

2.谈一谈 JavaScript 的异步?

答:setTimeout、MutationObserver、postMessage、Promise、async、await、generator

从 MutationObserver、postMessage 会牵扯到 vue 的 $nextTick

从 generator 会聊到 co.js 实现,代码不长,意思也好理解,但让我写还真没写出来,建议兄弟们好好看一遍!

从 Promise 和 setTimeout 会聊到下面要说的事件循环

3.浏览器和 nodejs 事件循环?

答:执行栈,promise 是 microTask,setTimeout 是 task

其中很多的阶段,可以从这里看到完整的模型介绍:html.spec.whatwg.org/multipage/w…

需要说出来的点:首先 setTimeout 并没有特殊,也是一个 task。另外每次的执行过 task 和 大量的 microtask(不一定在一次循环全执行完)后,会进行 renderUi 阶段,虽然不是每次事件循环都进行 renderUi ,但每次间隔,也就是传说中 60hz 的一帧 16ms

nodejs 事件循环略有不同...多了 process.nextTick 等

4.手写 Promise 或者 Promise 的静态方法

答:手写 Promise 尽量写出来 Promise 的状态,静态方法以及 .then.catch。当然更细节的还原可以看 Promise A+ 规范。

静态方法指 Promise.allSettled Promise.all Promise.race 等等。

5.手写节流与防抖

答:老生常谈,原理很简单,主要还是看会不会封装函数,以及封装的高级与否,考虑的情况是否全面。

6.手写 bind 函数

答:同上。

7.service worker 使用

答:缓存,渐进式应用,拦截处理

聊到 worker 可能还会聊到 web worker, shared worder 等等,如果有自信,或者工作对这方面有深入理解,可以秀一下。能体现出自己的优势...

8.严格模式

答:this 的 undefined,禁止 with,arguments 不允许更改,给只读对象赋值抛异常,变量需要先声明,call,apply 第一个参数不会被转换...

能答出来一些就行。

9.原型链以及继承

答:很常问,但随便找个赞数高的讲解,看一遍就懂了,记住常考点即可。

10.正则表达式匹配规则?

答:这个真没办法,只能是对正则表达式的规则进行系统学习,当然常考的可能是 邮箱,url匹配。

css 以及优化

  1. flex 布局

答:阮一峰老师的 flex 文章,清晰易懂。

常用的 api 和两列、三列布局等等,对于我来说稍微有点难度。之前项目对兼容性高,基本没怎么用过 flex 布局。没用过的建议用一用,几个小时就会常见布局了。

2.优化长列表滚动效果

没答上来,说了几个 js 的方案没答对点上。

面试官答曰:transition 优化动画效果,分层渲染

后面分析了一下,可以用 transform 进行强制分层,第二种可以用 content-visibility 将看不见的元素不渲染,设置值为 auto 即可。第三个是对于某些动画效果,可以用 will-change作用在父元素上进行 gpu 加速,使用后删掉。

3.响应式布局

答:可能会涉及 css 函数,rem/em 区别,媒体查询...

4.什么是 BFC?

答:块级格式化上下文,我布局总用!

问:什么会形成 BFC?它的作用是什么?

  • body 根元素
  • 浮动元素:float 除 none 以外的值
  • 绝对定位元素:position (absolute、fixed)
  • display 为 inline-block、table-cells、flex
  • overflow 除了 visible 以外的值 (hidden、auto、scroll)

作用嘛,为了布局 (千万别这么答哈,具体可以看下面文章)

推荐一篇 BFC 文章

vue 或 react 框架相关

  1. vue 响应式原理以及双向绑定实现代码 ?
  2. vue3 响应式原理,有什么不同?
  3. vue 的 diff 算法思路,怎么对比节点?
  4. vue 的 compile 实现?
  5. vue 如何自定义指令?具体的 api 写法?
  6. vue3 对于 vue2 在性能上的优化(从 compile 和 runtime 两方面)?
  7. react 有什么不同?了解 hooks 吗?

答:(虽然我不会,但我可以说点别的,比如 vue3 也有 hooks,它的使用和一些优点?)

8.用过 TypeScript 吗?有什么优点,为什么用?具体的场景,使用 TypeScript 进行类型定义。

答:vue 项目多, ts 用的少,也用过,写前端监控 sdk 时,对接口进行类型校验,它像一个文档,每一个接口都有定义,后面再翻看瞬间理解意思。(强类型好处还有很多,但是个人觉得写起来超级麻烦,当然有人很喜欢很爽。)

9.vue 的 keep-alive 使用场景,以及原理?

前端打包等工程化

  1. webpack 和 rollup 使用?
  2. tree-shaking 原理?
  3. webpack loader 和 plugin 怎么写?
  4. 你对 vite 熟悉,和 webpack 区别?
  5. 给 vite 做的贡献和在实际项目的使用?
  • vite-electron-quick Git 地址
  • 代码被 merge 的 pr 历史

6.如何统一对错误进行捕获的?vue 的异步错误如何捕获?

顺便求个 git 小

浏览器及常见安全问题相关

  1. 浏览器页面加载过程,越详细越好
  2. 浏览器缓存
  3. 跨域问题及处理
  4. v8 快数组慢数组,hidden class 或者其他模块?
  5. xss 和 csrc 的意思?如何防范?

答:美团的两篇文章摆出来,面试官直接问下一题!

跨平台技术

  1. electron 使用,如何实现小托盘功能?
  2. flutter 的 widget stateFullWidget stateLessWidget 区别?
  3. js Bridge 的原理 ?
  4. flutter 的渲染引擎?

网络相关

  1. dns 相关,dns 服务器是什么,如何查询 dns 的?
  2. Oauth2.0 和 jwt 单点登录等
  3. http/https 区别?为什么 https 更安全一点?https 为什么也不是十分安全?
  4. http1.x 和 http2.0 的区别?http2.0 优点,以及某些情况会比 1.x 速度更慢?
  5. https 加密原理?
  6. http2.0 压缩头,以及并行请求原理?
  7. tcp 的连接方式?

少量算法

  • 回文串,中心扩散法
  • 冒泡,快排
  • 动态规划 (没遇到考这个的,可能难度太高,面试官看我简单的半天才拿下,这个直接不考虑了,大佬可以关注一下)

面试中的项目题

大概就是让你去设计一个系统的技术选型,或者是如何设计组件库,设计一个系统。个人猜测对于渣渣的我,这种题就是看看有没有 owner 意识,而且也可以看一下我对哪些技术更感兴趣?

除了系统,还有某些场景的设计方案,比如如何用鉴权控制登陆时间设计保持七天登录状态

因为我简历中几乎没有涉及 nodejs 服务端的东西,但面试官总想问一问...

只能说做过自己博客的服务端...

服务端代码 Git 地址

但是很简陋...只能说开发过

总结

  • 对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。
  • 算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈...(最好多刷一刷,不然影响你的工资和成功率 )
  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。
  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~

祝愿大家都有美好的未来,拿下满意的 offer。

希望我的文章能对你有所帮助,有问题随时评论,欢迎批评,看到都会回复哈~

原作者姓名: 黄梵高
原出处:掘金
原文链接:⚡️一年半经验的前端面经总结⚡️


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK