二月前端实战面试

23,048 阅读6分钟

作者从事前端一年半
基础的我就不讲了,我讲一些回答的不是很好的

腾讯

一面

  1. webpack的劣势在哪里
  2. 技术选型上为什么选择vuevue有哪些缺陷
  3. 是如何进行code review的,这里讲了持续化集成
  4. js的基础类型(这个脑子短路了,给忘了)
  5. webpack针对模块化做的处理
  6. 是如何保证组件库的质量的

一面

  1. 了解websocket吗,websocket是如何进行握手的
  2. 生产消费者模式
  3. 线程和进程(腾讯二面又问我了,我又没回答出来,哈哈)
  4. 如何批量抓取文章
  5. 如何处理ios键盘挡住屏幕,ios输入的时候光标定位错乱
  6. virtual dom的优势在哪儿
  7. 了解xpath吗
  8. 客户端和fe是如何通信的,客户端是如何操作fe的代码的
  9. 性能优化能从哪些方面入手
  10. 前端如何实现图片剪裁

二面

  1. webAssembly了解吗,讲一下
  2. 算法题: 有一个无序数组求中位数
  3. 网络协议一共有几层,能具体讲讲他们的协议吗
  4. 了解HTTP3吗,HTTP3做了哪些优化
  5. 了解Vue3吗,相对于Vue2做了哪些优化
  6. 谈谈对pwa的理解
  7. 在Vue渲染组件的时候,都是从父到子组件再到父组件,如果你是框架的设计者,你会怎么做
  8. 了解v8引擎吗,一段js代码如何执行的

腾讯一轮游,面的怀疑人生,二面问了很多计算机基础的东西,由于作者不是计算机专业的,所以答得不是很好

头条

  1. 如何批量引入组件,require.context
  2. 组件之间如何通信
  3. 问了监控系统,如何计算白屏时间和首屏渲染时间的,如何进行数据上报的,上报到监控系统展示是怎样的一个过程
  4. 问了一个$listener$attr,但是我当初没有get到面试官的点
  5. 谈谈pwa
  6. vuex的工作流(工作流是什么?)
  7. 知道function component
  8. 如何选择图片格式,例如png,webp

算法题

有一个数组和一个值,需要求大于等于该值的最小长度,例如[2, 3, 4, 7]5,那么最小就是1,因为7大于5 如果数字是8,那么最小就是2, 因为4 + 7大于8

第二道算法题 有序数组中小于某个数的个数,例如

[1, 2, 3, 4]
2
// 1

快手

  1. 如何对请求进行缓存,例如有10个异步请求,如果有一个异步请求返回结果剩下的请求就用这个结果,并且能过传入成功和失败的回调函数
  2. 实现(10).add(10).add(10)
  3. 有这个一个情况,代码如下:
function Person() {}
const person = new Person();

person的原型上有Funciton
4. vue文件中为什么需要一个根元素1

百词斩

  1. vue hooks的使用
  2. cdn的原理
  3. 白屏时间和首屏时间的计算
  4. 性能监控平台是如何捕获错误的
  5. 平时遇到有哪些兼容性的问题
  6. leetcode峰值的问题
  7. vue中key的作用
  8. 代码题
  9. cdn的原理,cdn选择最近的缓存服务器是怎么实现
  10. 如何对音频和视频资源进行预加载
  11. 算法题: 做一个数组的压缩
  12. http2是如何实现多路复用的
let arr = [1, 2, 3];
let fnArray = [];
for (var i = 0; i < arr.length; i++) {
    fnArray[i] = function () {
        return arr[i] * 2;
    }
}
let result = fnArray.find((fn) => {
    return fn() === 4;
})
console.log(result);

算法题

实现一个栈,具有pushpop方法,还有获取他的最小值,复杂度是O(1) 实现如下:

[1, 2, 3, 6, 7] => 1-3,6-7
[1, 4, 7] => 1, 4, 7

美团

  1. 如果将一个同步函数包装为异步函数
  2. 同一张图片第二次请求状态码是多少
  3. 大数相加
  4. native和前端如何通信
  5. 如何唤起app
  6. 写一个url解析函数,包括hash
  7. 监控相关的,能说说你了解的performance相关的信息吗,完全可交互时间
  8. 实现一个deepClone需要兼容setmapsymbolobject
  9. 比如在代码中有a.addEventListener('click', fn1), a.addEventListener('click', fn2)这个时候fn1fn2会执行吗,假如加上说阻止冒泡呢
  10. 如何实现点击元素外部关闭元素
  11. 在从左向右和从上往下皆为升序的二维数组中,查找一个数是否存在,存在的话输出它的位置
  12. offsetTopscrollTopscrollHeight分别代表什么
  13. vuekey的作用是什么,为什么不推荐使用数组的index(高频)
  14. computedwatch有啥区别(这道题出现频率很高,建议认真了解一下)
  15. http2http1的区别,具有哪些优势(高频)
  16. keep-alive实现原理
  17. 如何判断是不是数组
  18. 如何设计一个组件

其他公司

我也没投几家公司,这里记录一下其他公司的面试问题

  1. 你们对组件库做了哪些优化
  2. 组件库的样式自定义是如何实现的
  3. tcp的滑动窗口
  4. 前端如何做权限控制
  5. HMR的原理
  6. 如果页面出现白屏,如何排查

算法

rightView

有一棵树从右边看他,并输出结果,例如

        1
    2       4
5       3

上面输出的树就是[1, 4, 3]

我总结了一下,面试中出现频率最高的是,排名分前后:

  1. 宏任务和微任务
  2. 浏览器缓存
  3. bfc
  4. computedwatch的差异

我觉得我面的最好的是百度,结果百度一轮游,说我不匹配(呜呜呜~~~)

只要是电话面试就必挂,百度是电话面试,腾讯两次挂了都是电话面试,自闭了

经验

  1. 电话面试必挂,能视频面就视频面试
  2. 少给自己挖坑,说出来的尽量自己会了解
  3. 稍微正规的公司就是算法必问
  4. 大一点的公司除了问了前端的部分,也会问你后端的部分
  5. 一般的公司你刷一刷网上的面经基本就能过,稍微大点的公司就需要结合平时使用的经验
  6. 你不会说不定面试官也不会,如果不会先分析

结果

年前面了四家小公司,全挂了,搞的非常自闭,感觉自己不太行了
然后年后痛定思痛,认真的刷了网上的面试题,发现这些面试题你背住了,小公司基本都没啥问题。
BAT都挂了,我投了阿里,但是阿里根本不搭理我(今天你对我爱答不理,明天我要你高攀不起)。 然后其他基本的都过了。还是水平太菜了,新的一年也是要好好学习哦
然后我会把我为面试准备的东西都传到githubreview分支

然后作者最后选择了深圳头条