前言
接上一篇的内容,继续介绍本期我的面试经历。
经过上一周的面试后,自己针对这些问题也是查了很多资料,也终于是弄明白是怎么回事了,感觉自己收获了很多,有了收获,学习就不是那么枯燥了,嘿嘿。
面试
-
今日头条
- var、let、const区别,const生命对象或数组,内部数据可不可变?
这些声明都是创建一个指向内存的指针,const只能控制内存地址不变,并不能控制内部数据结构
- em和rem区别?
听过,具体怎么回事不知道
- vue核心?双向绑定的原理?如何实现数据劫持?vue2和vue3的区别?实现一个观察者模式?
很简单,主要是因为校招的时候面过这个问题,后来做了笔记...
- 实现一个九宫格,外层盒子宽高不确定
简单,flex布局,加上flex:1
- 说一下跨域的原理和至少三种解决跨域的办法?说下jsonp原理以及defer和async区别?
当时太紧张,脑子一抽忘记了同源策略了...就开始从csrf跨站请求说起,解决方法网上一堆,这里不再赘述。
- 箭头函数的特点?能不能用arguments?怎么转变成es5?
这也是细节问题,因为箭头函数中this是一直指向定义时的作用域的,所以内部并没有真实的this,所以是没有arguments的。转成es5的话,应该是想问babel的编译原理,不知道。后来看了babel的官方文档,还是没明白怎么回事,可能这就是差距吧,搬砖都搬不明白...
- 算法题,数组扁平化
自己写了个for循环+递归+闭包实现,后来看es6数组内容的时候才发现,原来es6早就加入了flat方法...
- 字符串去除b,再去除连续ac,注意这种aaabbccc => ''
这应该是leetCode上的题,很久之前做过,有印象,但记不清了。当时的思路是,先一遍循环删掉b,再循环递归删掉ac,但尴尬的是,我不知道递归改什么时候结束了...
- 从输入url到渲染出页面的整个过程,DNS解析原理,三次握手
DNS解析没看... 可以看到头条的面试还是很扣细节,不认真准备真的会被问到怀疑人生
-
58转转
- http/2
- 前端的性能优化?图片懒加载的原理?
- js事件循环机制,具体的输出顺序
- 如何判断两个深层嵌套的对象内容是否一样
- 跨域
- gzip怎么配置
- vue生命周期
- keep-alive生命周期
- 服务端渲染优缺点
重复的问题已经有点多了,前端的基础面试题应该就这些了
-
字节跳动
- {a:string, b:string},用typescript快速变成空字符串
- [{key: 'a', value:'a1'}, {key:'b', value: 'b1'}] => {a: 'a1', b:'b1'} 用reduce处理
- [{a: 1}, {a:2}, {a:1}] => [{a: 1}, {a:2}] 去重
其余问题大都跟之前一样,这里就不再浪费时间了。这三道题的话还是考验基本功。平时了解的知识还是要多用啊。
-
快手
- 变量声明提前、函数声明提前
- 跨域最终是怎么判断的
这个问题问的我头皮发麻,我一度怀疑这个面试官是在故意刁难我。
总结
到现在大概已经面试了10家公司了,这里只是分享了有价值的内容。可以看到,面了这么多之后发现基础问题都是大同小异,如果面试官故意恶心你的话,就会硬扣你细节。一些开放性问题的话,应该都能扯一扯。算法题的话还是看基本功,平时要多用。最后,祝大家早日找到自己心仪的公司。