前端面试都喜欢问些什么?45分钟高分虏获offer!

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

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

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

常见的误解

我见过候选人犯的最大错误之一就是准备了一些琐碎的问题,例如“什么是盒子模型”或者“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 & 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)、服务器端渲染(×××)和全局渲染;
  • 布局——如果你正在设计被多个开发团队使用的系统,需要考虑进行组件化,以及是否需要开发团队通过指定标记来使用组件;
  • 状态管理,例如在单向数据流或双向数据绑定之间做出选择。你还应该考虑你的设计是采用被动式还是反应式编程模型,以及组件如何相互关联,例如是 Foo->Bar 还是 Foo->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 应用程序需要掌握大量的知识。不要被知识的深度所限制,而是要保持开放的心态去学习所有复杂的部分。

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

自己是从事五年的前端工程师了,不少人私下问我,2019年前端该怎么学,方法有没有?

没错,年初我花了一个多月的时间整理出来的学习资料,希望能帮助那些想学习前端,却又不知道怎么开始学习的同学。

如果你依然在编程的世界里迷茫,不知道自己的未来规划,可以加入web前端学习交流群:731771211 里面可以与大神一起交流并走出迷茫。新手可进群免费领取学习资料,看看前辈们是如何在编程的世界里傲然前行!群里不停更新最新的教程和学习方法(进群送web前端系统学习路线,详细的前端项目实战教学视频),有想学习web前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入

原文地址:https://blog.51cto.com/14284898/2396758

时间: 2024-10-24 05:31:10

前端面试都喜欢问些什么?45分钟高分虏获offer!的相关文章

成为一名优秀的web前端工程师都需要做些什么?

程序设计之道无远弗届,御晨风而返.———— 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种:    第一种一直在问:如何学习前端?    第二种总说:前端很简单,就那么一点东西.     我从没有听到有人问:如何做一名优秀.甚至卓越的WEB前端工程师.    如果成为一名优秀的web前端工程师(前端攻城师)? 何为:前端工程师?前端工程师,也叫Web前端开发工程师.他是随着web发展,细分出来的行业.Web前端开发技术主要包括三个要素:HTML.CSS和JavaScript!它要求前端开发工程师

前端面试中常问的问题

1.event loop是什么? 主线程和任务队 2.HTTP协议与状态码,HTTP2.0等,状态码301.302等 3.原生实现promise //原生js实现promise function PromiseM() { this.status = "pending" this.mag = "" let process = arguments[0] let that = this process(function(){ that.status = "res

精心整理了15道面试官喜欢问的MyBatis面试题

1.什么是 MyBatis?答:MyBatis 是一个可以自定义 SQL.存储过程和高级映射的持久层框架.2.讲下 MyBatis 的缓存答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>3.Mybatis 是如何进行分页的?分页插件的原理是什么?答:1)Mybatis 使用 R

面试都在问的微服务、RPC、服务治理...一文帮你彻底搞懂!

单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程序」( Monolithic application ),单体式应用内部包含了所有需要的服务.而且各个服务功能模块有很强的耦合性,也就是相互依赖彼此,很难拆分和扩容. 说在做的各位都写过单体程序,大家都没意见吧?给大家举个栗子,刚开始写代码你写的helloworld程序就是单体程序,一个程序包含所有功能,虽然helloworld功能很简单. 单体应用程序的优点 开发简洁,功能都在单个程序内部,便于软件设计和开发规划. 容易部署,程序单

2016.10.19 小米前端面试 vs 2016.10.22 华为web面试

这次面试还是很值得记录一下的~长了很多姿势. 一共三面,面试官都是MIUI的浏览器部门,感觉面试官都很厉害,知识点问的很细很深入. 一面面试官是个可爱的小姑娘,主要考察的就是常见的前端面试题,很基础,但是会在其上进行拓展和深入.就我记得的一些题做个总结: 1. 说一下CSS的盒模型?(这简直是我参加过的几乎所有前端面试岗必问的一道题目--不管是比较水的国企还是问基础的互联网... 想一想似乎只有只问项目不谈基础的京东没有问吧) 这里是答案 2. 常用的跨域方法:(之前小米一个面试官电话面试时候也

前端面试要注意的那几个点?

不管是刚毕业踏入社会的还是在职场久经奋战的,都经历过被面这一环节.当然也有很多同学开始在面人,为自己的团队选择优秀的血液.而我也是属于这一类,这些年都有在帮公司或朋友的团队物色人才和面试同学.今年在手淘也一样,在给同学面试过程中,让我开始在思考,而且思考了很久,所以这几天静下来写了这篇文章,希望这篇文章对于刚毕业的大学生或者还在继续参加工作面试的同学有所帮助. 什么是前端 什么是前端?在这里不做阐述,如果您对这个问题感兴趣的话,建议您可以阅读早前写过的一篇博文<前端路上的旅行>,文章中对什么是

web前端开发都要学什么,有前途吗?

web前端开发现在如此火爆,可以说是引领了IT培训行业的一个潮流,那么web前端开发都要学些什么知识呢?为什么这么火有前途吗?现在行业很需要这种人才吗?还是大家盲目跟风,随大流,下面小编对web前端做了具体的研究,给出以下建议与结论. 首先可以告诉你:WEB前端开发时代才刚刚开始! 为什么这么说呢?其实web前端这个职位,并没有一个有效的历史记录可以查询,更没有一个明确的定义,她不像java工程师.ios开发这种一开始就有明确定位的工种一样,是有核心技能可以描述的.比如java开发,顾名思义就是

问得最多的十个JavaScript前端面试问题

我知道有很多人不同意这种类型的面试.其实不管你喜不喜欢,你都得接受.尤其当你是自学的,而且要申请第一份工作时. 我估计很多有人其它方法来证明他自己,像Github/ 项目地址可能是非常理想的证明方法,但也别全都指望这些. 好消息是有一些很难的问题,在有限的时间里我没答上来(比如说Event Loop和杨辉三角),一些其它面试侯选人也承认他们也没答上来,这会让讨论变得轻松很多. 坏消息是有些面试之后就没有任何反馈了.有三家公司再也没联系过.这点击打击自信,而且没有受到尊重.然后你可能会有心理斗争,

一线大厂面试官最喜欢问的15道Java多线程面试题

前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.现在引用Java5并发包关于并发工具和并发集合的问题正在增多.那些问题中ThreadLocal.Blocking Queue.Counting Semaphore和ConcurrentHashMap比较流行. Java多线程面试题及