在过去的几年里,我在亚马逊和雅虎面试过很多专注于前端开发的Web开发者和软件工程师,在这篇文章中,我想分享一些面试技巧,帮助候选人为面试做好准备。

免责声明——本文并非旨在列出在前端面试中可能会被问到的所有问题,但可以将其视为知识的基线。

通过面试不是件容易的事,作为候选人,通常需要在45分钟的时间内展示自己能做些什么。作为一名面试官,同样难以在这么短的时间内评估候选人是否适合。对于面试来说,并不存在一刀切的方法,面试官问的问题通常会有一个范围,但除此之外,他们可以自行决定要问哪些其他问题。

作为曾经的候选人和面试官,我试图在这篇文章中涵盖你可能会在面试中被问到的最重要的前端开发知识。

常见的误解

我见过候选人犯的最大错误之一就是准备了一些琐碎的问题,例如“什么是盒子模型”或者“JavaScript中的==和===之间的区别是什么”。知道这些问题的答案固然是好,但这并不会告诉面试官来太多有用的信息。

相反,在实际的面试中,你可能需要使用JavaScript、CSS和HTML来编写代码。在你的面试期间,你可能需要实现UI、构建窗口小部件或使用Lodash和Underscore.js这样的库编写常用的实用程序函数。例如:

  • 构建常见的Web应用程序的布局和交互,例如类似Netflix网站那样的。

  • 实现小部件,如日期选择器、轮播或电子商务网站购物车。

  • 写一个类似debounce或深度clone对象的函数。

说到库,我看到候选人经常犯的另一个错误是他们需要完全依赖最新的框架来解决面试问题。你可能会想,如果我可以在生产环境中使用jQuery、React、Angular等,那为什么就不能在面试中使用它们呢?技术、框架和库会随着时间的推移而发生变化——我更感兴趣的是你是否了解前端开发的底层原理,而不是依赖更高层次的抽象。如果你不能在没有它们的情况下回答面试问题,我希望你至少可以彻底解释和推测这些库背后的原理。

总的来说,大部分的面试都涉及实际的编码。

JavaScript

你需要了解JavaScript,而且是彻底地了解。你面试的职位越高,对语言知识的要求就越高。以下是你应该熟悉的JavaScript知识点:

  • 执行上下文,尤其是词法作用域和闭包;

  • 提升、函数和块作用域,以及函数表达式和声明;

  • 绑定——特别是call、bind、apply和this;

  • 对象原型、构造函数和mixin;

  • 组合和高阶函数;

  • 事件委托和冒泡;

  • 使用typeof、instanceof和Object.prototype.toString进行类型转换;

  • 使用回调、promise、await和async处理异步调用;

  • 什么时候可以使用函数声明和表达式。

DOM

知道如何遍历和操作DOM非常重要,对于重度依赖jQuery或者开发了很多React \u0026amp; Angular类型应用程序的候选人来说,他们可能会在这个问题上栽跟斗。你可能不会每天都直接接触DOM,因为我们大多数人都在使用各种抽象。在不使用第三方库的情况下,你需要知道如何执行以下这些操作:

  • 使用document.querySelector选择或查找节点,在旧版浏览器中使用document.getElementsByTagName;

  • 上下遍历——Node.parentNode、Node.firstChild、Node.lastChild和Node.childNodes;

  • 左右遍历——Node.previousSibling和Node.nextSibling;

  • 操作——在DOM树中添加、删除、复制和创建节点。你应该了解如何修改节点的文本内容以及切换、删除或添加CSS类名等操作;

  • 性能——当有很多节点时,修改DOM的成本会很高,你至少应该知道如何使用文档片段和节点缓存。

CSS

至少,你应该知道如何在页面上布局元素,如何使用子元素或直接后代选择器来定位元素,以及什么时候该用类、什么时候该用ID。

  • 布局——安排彼此相邻的元素的位置,以及如何将元素布置成两列或三列;

  • 响应式设计——根据浏览器宽度大小更改元素的尺寸;

  • 自适应设计——根据特定断点更改元素的尺寸;

  • 特异性——如何计算选择器的特异性,以及级联如何影响属性;

  • 适当的命名空间和类命名。

HTML

知道哪些HTML标签最能代表你正在显示的内容以及相关属性,应该掌握手工知识。

  • 语义标记;

  • 标记属性,例如disabled、async、defer以及何时使用data-*;

  • 知道如何声明doctype(大多数人不是每天都会写新页面,所以可能会忘了这个)以及可以使用哪些元标签;

  • 可访问性问题,例如,确保输入复选框具有更大的响应区域(使用标签“for”)。另外还有role=“button”、role=“presentation”,等等。

系统设计

在系统设计方面,通常涉及MapReduce、分布式键值存储系统或CAP定理等知识。虽然前端工程师日常不需要深入了解如何设计这类系统,但在被要求设计出常见应用程序的前端架构时,你也不应该感到惊讶。这些问题通常含糊不清,比如“设计一个像Pinterest这样的网站”或者“如何构建购物结账服务?”。以下是需要考虑的知识点:

  • 渲染——客户端渲染(CSR)、服务器端渲染(SSR)和全局渲染;

  • 布局——如果你正在设计被多个开发团队使用的系统,需要考虑进行组件化,以及是否需要开发团队通过指定标记来使用组件;

  • 状态管理,例如在单向数据流或双向数据绑定之间做出选择。你还应该考虑你的设计是采用被动式还是反应式编程模型,以及组件如何相互关联,例如是Foo-\u0026gt;Bar还是Foo-\u0026gt;Bar;

  • 异步——你的组件可能需要与服务器进行实时的通信。在设计时需要考虑使用XHR或双向调用。如果你的面试官要求你支持旧浏览器,那么你需要在隐藏iFrame、script标签或XHR之间做出选择。如果没有,你可以建议使用websocket,或者使用服务器发送事件(SSE),这样会更好;

  • 关注点分离——Model-View-Controller(MVC)、Model-View-ViewModel(MVVM)和Model-View-Presenter(MVP)模式;

  • 多设备支持——你的实现是否同时支持Web、移动Web和混合应用程序,还是为每一种场景提供单独的实现?如果你正在构建像Pinterest这样的网站,你可能会考虑在Web上使用三列,但在移动设备上只使用一列,你的设计将如何处理这个问题;

  • 资产文件交付——在大型应用程序中,独立团队拥有自己的代码库是常有的事。这些不同的代码库可能彼此依赖,每个代码库通常都有自己的管道来发布代码变更。你的设计需要考虑如何基于依赖项进行资产文件的构建(代码拆分)、测试(单元测试和集成测试)和部署。你还需要考虑如何通过CDN交付资产文件或者内联它们来减少网络延迟。

Web性能

除了通用编程最佳实践之外,你应该期望访问者查看你的代码或设计及其性能影响。它曾经足以将CSS置于文档的顶部,而JS脚本位于页面底部,但Web正在快速移动,你应该熟悉这个领域的复杂性。

  • 关键渲染路径;

  • Service Worker;

  • 图像优化;

  • 延迟加载和捆绑拆分;

  • HTTP/2和服务器推送的一般含义;

  • 何时预取和预加载资源;

  • 减少浏览器回流以及何时将元素提升到GPU;

  • 浏览器布局、组合和绘制之间的区别。

数据结构和算法

这个可能有点争议,但对Big-O时间复杂性和常见运行时间(如O(N)和O(N Log N))有一个基本的了解对你来说不会是坏事。单页应用程序现在非常常见,所以了解内存管理等方面的知识是有帮助的。例如,如果你被要求构建客户端拼写检查程序,那么了解常见的数据结构和算法将会让你的任务变得轻松许多。

我不是说你一定需要念一个计算机学位,但这个行业已经从构建简单的网页转移到了计算机科学。网上有很多资源可以让那个你快速掌握基础知识。

一般的Web知识

你需要掌握一些构成Web的技术和范式。

  • HTTP请求——GET和POST以及相关标头,如Cache-Control、ETag、Status Codes和Transfer-Encoding;

  • REST与RPC;

  • 安全性——何时使用JSONP、COR和iFrame。

总结

对Web开发人员或工程师来说,构建Web应用程序需要掌握大量的知识。不要被知识的深度所限制,而是要保持开放的心态去学习所有复杂的部分。

除了这里涉及的技术主题之外,你还需要讨论过去参与的项目,描述发生了哪些有趣的事情以及做出了哪些权衡。

更多内容,请关注前端之巅。

\"\"

英文原文:http://davidshariff.com/blog/preparing-for-a-front-end-web-development-interview-in-2017/

那些巨头公司的前端面试都喜欢问些什么?相关推荐

  1. 2020大厂web前端面试都喜欢问这些

    本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题.通过对本篇知识的整理以及经验的总结,希望能帮到更多的前端面试者. 1.web前端项目的结构是怎样的?文件有哪些命名规范?   ...

  2. web前端开发面试都喜欢问什么

    web前端工程师通过面试不是件容易的事,作为候选人,通常需要在规定的时间内展示自己能做些什么.作为一名面试官,同样难以在这么短的时间内评估候选人是否适合.对于面试来说,并不存在一刀切的方法,面试官问的 ...

  3. 为什么产品经理面试都喜欢问注册问题?

    咖友提问:为什么产品经理面试都喜欢问注册问题? 如题.两次面试,一次要求画一个注册登录框,另一次被问如何设计一个注册功能,怎么跟UI和开发沟通.真的很好奇为什么都喜欢问注册啊?考察的点到底是什么呢? ...

  4. 世界顶级公司的前端面试都问些什么

    在过去的几年里,我在亚马逊和雅虎面试过许多前端工程师.在这篇文章中,我想分享一些技巧,帮助大家做好准备. 免责声明: 本文的目的并不是为你列出在前端面试中可能会被问到的问题,但是可以将其视为知识储备. ...

  5. 大厂前端面试都问些什么问题?入职爱奇艺年薪48万,面试经验总结

    前言 "金九银十"跳槽季,又到了面试求职的高峰期.好多小伙伴都会跳槽去找工作.如果你不跳槽,也建议把这篇文章看完,毕竟金九银十之后,就是金三银四了,总是逃不掉的? 你在面试的时候, ...

  6. 大厂面试都爱问这4个问题,.NET开发必看!

    金三银四已进入尾声,身边不少从事.NET开发的朋友有了更好的去处!大家日常在交流群里也常有分享经验.在面试时,大厂面试官都喜欢问什么:提问的形式和特点,大家又该如何应对等问题格外引起注意.今天就以腾讯 ...

  7. iOS 9,为前端世界都带来了些什么?「译」

    2015 年 9 月,Apple 重磅发布了全新的 iPhone 6s/6s Plus.iPad Pro 与全新的操作系统 watchOS 2 与 tvOS 9(是的,这货居然是第 9 版),加上已经 ...

  8. 初入职场-面试官都会问些什么?(结尾附视频)

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  9. 阿里的面试官都喜欢问哪些问题?

    作者:徐刘根 | 公众号:Java之间 金九银十是招聘的旺季,小编在这里也给大家整理了一套阿里面试官最喜欢问的问题或者出场率较高的面试题,助校招或者社招路上的你一臂之力! 首先我们需要明白一个事实,招 ...

最新文章

  1. WIN配置git 配置后失败 can't be established
  2. 浅谈代码的执行效率(4):汇编优化
  3. apache thrift_Apache Thrift快速入门教程
  4. [hackinglab][CTF][脚本关][2020] hackinglab 脚本关 writeup
  5. javascript动态合并纵向单元格
  6. oracle 052 题库变了,Oracle OCP题库变了,052全新题库收集整理-30
  7. oracle为表空间增加数据文件_只读数据文件损坏恢复实验记录
  8. LaTeX中的参考文献-BibTeX
  9. 世界三大短篇小说之王 代表作介绍
  10. 【OJ每日一练】1021 - 细菌个数
  11. 拼多多如何引流推广产品?拼多多新产品如何推广?
  12. 跳跳棋[LCA+二分查找]-洛谷1852
  13. flutter - mixin
  14. 机器学习实战(11)——初识人工神经网络
  15. 硬盘盒CE认证-EMC测试标准与流程
  16. 几款我比较满意的在线脑图工具
  17. 五款经典GPRS无线上网卡比拼
  18. 运维工程师分享7道经典面试题,看完轻松拿Offer
  19. BCD码以及各进制之间的相互转换
  20. input输入长度与限制内容

热门文章

  1. 「自然语言处理NLP」的“高光时刻” --- 28篇标志性论文
  2. 2019年「自然语言处理NLP」的“高光时刻” --- 28篇标志性论文
  3. SAP零售行业解决方案初阶 3 - WB01 创建Site Master
  4. 下一代 MES,智能制造的骨架
  5. 如何将机器学习模型的正确率从 80%提高到 90%以上
  6. 增强现实:一场正在到来的医疗革命
  7. 机器学习系列 1:监督学习和无监督学习
  8. 北欧小国的宏大AI实验:让1%的人口接受人工智能培训
  9. 卷积神经网络鼻祖LeNet网络分析
  10. 清华 NLP 团队推荐:必读的77篇机器阅读理解论文