2020-6 面经总结(二)

291 阅读3分钟

前言

接上一篇的内容,继续介绍本期我的面试经历。

经过上一周的面试后,自己针对这些问题也是查了很多资料,也终于是弄明白是怎么回事了,感觉自己收获了很多,有了收获,学习就不是那么枯燥了,嘿嘿。

面试

  1. 今日头条

  • 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解析没看... 可以看到头条的面试还是很扣细节,不认真准备真的会被问到怀疑人生

  1. 58转转

  • http/2
  • 前端的性能优化?图片懒加载的原理?
  • js事件循环机制,具体的输出顺序
  • 如何判断两个深层嵌套的对象内容是否一样
  • 跨域
  • gzip怎么配置
  • vue生命周期
  • keep-alive生命周期
  • 服务端渲染优缺点

重复的问题已经有点多了,前端的基础面试题应该就这些了

  1. 字节跳动

  • {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}] 去重

其余问题大都跟之前一样,这里就不再浪费时间了。这三道题的话还是考验基本功。平时了解的知识还是要多用啊。

  1. 快手

  • 变量声明提前、函数声明提前
  • 跨域最终是怎么判断的

这个问题问的我头皮发麻,我一度怀疑这个面试官是在故意刁难我。

总结

到现在大概已经面试了10家公司了,这里只是分享了有价值的内容。可以看到,面了这么多之后发现基础问题都是大同小异,如果面试官故意恶心你的话,就会硬扣你细节。一些开放性问题的话,应该都能扯一扯。算法题的话还是看基本功,平时要多用。最后,祝大家早日找到自己心仪的公司。