前几天离职了,离职前几天开始物色合适的下家。在疯狂的简历投递之后,陆续接到了几个面试邀请,已经面了四家。这四次面试风格迥异,期间遇到了一些比较有意思的问题,在此整理总结一番。

基本上所有的面试都涉及到自我介绍和前一份工作的项目介绍,这里不做讲解。本文主要是记录面试中遇到的面试题。

部分基础知识

每一次面试都涉及到了前端的一些基础知识,虽然有的问题交叉重复出现,但是基本上都是一些不同角度的面试题。比如:

  1. gulp中的流程控制,如何控制顺序执行和并行执行?
  2. gulp与webpack的区别?
  3. Less如何中实现继承?
  4. 原生JavaScript如何发送Ajax请求?Ajax请求结果的状态处理(考察XMLHttpRequest的方法)。

    不只是简单的XMLHttpRequest对象的使用,包含该对象的其他不太常见的方法。考察对这个对象的了解深度。

  5. JavaScript数组中常用的一些方法的解释,比如: filter,some,every,map,forEach等
  6. 说一说JavaScript中的作用域。
  7. CSS布局的实现:左右固定宽度,中间自适应。
  8. CSS中实现水平垂直居中的方法。
  9. 解释CSS选择器的权重。
  10. 讲一讲你听过的HTTP请求类型;GET和POST的区别。
  11. HTTP如何处理缓存?

    这个问题我根本答不上来。涉及到HTTP Header 中的值。具体的内容可以参考:
    http://www.alloyteam.com/2012/03/web-cache-2-browser-cache/
    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching_FAQ

  12. git的一些操作(rebase等)

开放性问题

  1. 自我介绍。
  2. 为什么做前端?
  3. 讲一讲最近的一份工作主要做了什么。
  4. 期待加入什么样的公司或者团队?
  5. 未来的职业规划。
  6. React的使用过程中性能优化的尝试。
  7. 如果解决模块之间的循环依赖?

    在回答这个问题的时候,我过于纠结字面的“解决”,试图从编码角度来解决,突然就有点慌了。其实只要讲一下如何避免出现循环依赖即可。比如:模块重新划分,公共的方法变量抽出等。不知是面试官没有表述清楚还是故意为之。

  8. 如果将你简历中的信息输出到页面上呈现:

    • 你会如何设计信息的数据结构?
    • 在上一步的基础上如何处理你设计的数据?
    • 如何将处理过的数据输出?
    • 输出选择HTML标签集合还是字符串?为什么?

      这个问题我觉得挺有意思。我觉得实现思路的难度不大,我认为最关键的点在于数据结构的定义,因为这会影响到后续两步的实际编码。具体实现可以参考markdown转成html的实现思路。

还有一些问题比较细,比较杂,暂时想起来,想到了再补充。