前端面试问题小汇集

5,032 阅读6分钟

问题集锦

自我介绍

要有套路。如何引导面试官问你擅长的领域就看自我介绍了。学历专业简述、项目细说、兴趣特长一句带过。

react和vue你都使用过,说说它们的区别?

推荐这篇文章

vue的源码看过没?说说基本的实现?实现双向绑定的原理?

即使没有实际地阅读过源码,也要找别人分享的博客去了解其中的原理。

推荐博文

说说你理解的虚拟dom?diff算法是怎么做的?
  • 用JS对象模拟DOM树
  • 比较两棵虚拟DOM树的差异
  • 把差异应用到真正的DOM树上

推荐《深度剖析,如何实现一个Virtual Dom算法》

redux和vuex的区别?

摘取尤大的知乎回答:

Vuex 其实是一个针对 Vue 特化的 Flux,主要是为了配合 Vue 本身的响应式机制。当然吸取了一些 Redux 的特点,比如单状态树和便于测试和热重载的 API,但是也选择性的放弃了一些在 Vue 的场景下并不契合的特性,比如强制的 immutability(在保证了每一次状态变化都能追踪的情况下强制的 immutability 带来的收益就很有限了)、为了同构而设计得较为繁琐的 API、必须依赖第三方库才能相对高效率地获得状态树的局部状态等等(相比之下 Vuex 直接用 Vue 本身的计算属性就可以)

所以 Vue + Vuex 会更简洁,也不需要考虑性能问题,代价就是 Vuex 只能和 Vue 配合。Vue + Redux 也不是不可以,但是 Redux 作为一个泛用的实现和 Vue 的契合度肯定不如 Vuex。

说出你知道的所有选择器权重?

important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符

说说你知道的所有伪类元素?(知道多少说多少)

LVHA(LV哈,简单明了)、focus、before、after、checked、disabled、last-child、first-child......很多,就不一一列举了。

你知道的父子选择器和兄弟选择器。

父子 > , 兄弟 +

行内元素和块级元素有哪些?区别是什么?

不知道的童鞋前往前方

你理解的盒子模型?

必问,无非就是围绕css3新属性 box-sizing 的两个值 content-box 和 border-box。

html5所有的新特性?以及对应属性的兼容性(知道多少说多少)

兼容浏览器这个问题,知道一些常用API的就好,也不可能全部记住。像canvas这个兼容性还是要知道的。

实现三列布局,左右固定宽度,中间响应式。兼容性尽量好。

常见的两列布局、三列布局实现要知道,知道2-3种实现方式为上策。而且兼容性方面也要知道,比如用了flex的话就兼容IE10+。

BFC的理解。什么情况会产生BFC。

必问。什么情况下会产生BFC,怎么处理等等。

你知道的ES6新特性?

这里有个注意的点是,常用的一些API要知道基本的实现。比如你常用promise,相关的库如bluebird是怎么实现的。

你知道的所有前端安全知识?怎么预防?怎么测试?

前端安全XSS、CSRF、SQL注入。什么场景会产生这些问题。预防和测试手段,测试手段比较少问。

你知道的http状态码?

必问。常见的状态码和说明必须知道。200、204、206、301、302、304、307、400、401、403、404、500、503

304是怎么产生的还是要知道的。

你理解的cookie?跟session有什么区别?http中设置cookie的头部字段有哪些?

前两个问题自行查阅哈,比较简单。头部字段的话有Cookie和Set-Cookie

你知道的http头部?

通用首部字段、请求首部字段、响应首部字段。这个太多了,平时用到的一些熟悉就好。

Date、Upgrade、Connection、Authorization、Accept、Accept-Charset、Host、From、Referer、Location......

建议阅读图解HTTP。

缓存相关的头部?

分为强缓存、协商缓存去记会简单点。

推荐博文

你知道的所有排序算法?手写快排算法。

前端对基础的数据结构和算法还是要非常熟悉的。这个也经常会问到。

写出所有你知道的git命令。

团队协作方面,版本管理工具。

用ES3实现bind函数。

类似这种API的原理,比如new的过程、Object.create的实现、curry函数的实现也会经常碰到。推荐冴羽的深入系列

js实现继承的方式。

原型链、js实现继承等类似基础的问题都是必考的。这个还是建议阅读冴羽的深入系列,整个系列阅读下来有一个比较深刻的概念。

使用promise模拟一个解决多级回调嵌套问题。

场景解决方案问题。这种方式出现的频率还是很高的。类似比如vue在不使用分页的前提下如何处理海量数据。

平时开发用的工具。

前端常用的一些工具,例如抓包wireshark、fiddler,编码工具vscode、sublime,调试工具浏览器控制台等,webpack、gulp等等。webpack的原理要了解下。

项目开发流程。项目中有什么比较复杂的难点。怎么解决的。还有没优化点。

自由发挥,针对性地突出自己擅长的领域。

平时开发中,有注意设计模式吗?说说你知道的设计模式。

跪!!!但是被问的概率还是蛮大的,需要了解一些基本的设计模式例如单例、工厂、迭代、装饰者、代理等等。

写在最后

还有其他一些的问题在这里就不一一列举了。针对岗位所需的一些技能去发散,这类问题根据岗位要求而定。比如说京东手Q微信业务,对性能方面要求就很高,对CDN相关的技术也要去了解下。同一份简历不要海投,针对每一个岗位要求,适当的改下关键字眼,能够提高面试机会哦,有面试机会就有了一切可能。

主要是想给正在找工作的小伙伴一个全局观。文章并没有详细地给出每道题的答案,但基本都给出了其他大神的参考文章啦。

找工作是一个煎熬的过程,有挫折,有打击,当然少不了收获。希望每个求职者都能斩获合心意的offer!