【DailyENJS第4期】如何在前端面试中面试成功

621 阅读7分钟

DailyENJS 致力于翻译优秀的前端英文技术文章,为技术同学带来更好的技术视野。

https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2019/7/30/16c3ebfe8f2dc269~tplv-t2oaga2asx-image.image

前端面试尤其具有挑战性,因为你需要牢牢掌握计算机科学基础知识,并理解Web领域、构建系统和CSS布局引擎等主题。

你在前端面试中应该首先考虑的问题之一是你过去的项目。考虑一下你以前的项目,并准备一个关于它的简短介绍,包括使用的框架和工具。如果可能,你应该选择一个使用现代前端开发方式进行开发的项目,例如Webpack / Babel / Browserify作为bundler或Grunt / Gulp用于自动化。

如果你还没有使用上述任何技术和工具,你可以考虑探索它们,以便你能够向面试官证明你愿意学习新技术。

对于面试的技术部分,你应该表达出你了解问题并阐述如何评估解决方案。好的面试者使用系统的方法,通过清晰的沟通,并适应他们的面试官可能提出的反馈和问题。

前端面试的一个核心目标是能够证明你可以成为一名好的的队友。以下是一些提示:

在面试早期阐明模糊不清的部分

在开始编码之前花时间明确问题的候选人有更大的成功机会。你应该向面试官重申你对问题的理解,如果有理解不清楚的地方,你应该询问面试官。这样做不仅可以确保你正确理解问题的基本要求,还可以突出你的沟通技巧以及与队友解决问题的能力。

让面试官了解你思路

候选人在技术面试中最常见的失误之一是未能确保面试官理解他们的思考过程。当候选人陷入困境时,他们往往会变得过于安静,并将他们的思维内化。即使你在苦苦挣扎,你也应该记住,面试是一种双向互动。你的面试官在这里是为了倾听并尝试了解你的思考过程,因此请随时向你的面试官询问问题和表达思考过程。

不要只采用一种方案

面试官在候选人中寻找的另一个特点是他们有能力接收反馈并在必要时调整解决方案。重要的是不要过于专注于一种方法或解决方案,特别是如果你的面试官提出疑虑或增加新约束。

从多个角度解决问题

你应该提及与当前问题相关的任何考虑因素和替代方案,并采纳你的面试官提出的任何疑虑或异议。

展现好奇心

表现出对你正在解决的前端问题充满好奇和热情。

前端面试话题

要掌握前端面试所需的技能,你需要熟悉面试可能涉及的主题类型。以下是在前端面试期间经常探讨的主题列表:

一般网络知识

  • HTTP请求:GET、POST和headers,如Cache-Control,ETag和Transfer-Encoding

  • REST vs RPC

  • 安全性:何时使用CORS,JSONP和iFrame策略

web 性能

DOM

许多人遍历和操纵DOM上并不擅长,特别是如果他们一直在使用jQuery或编写React和Angular应用程序。你应该知道如何在不使用库的情况下执行以下操作:

  • 使用 document.querySelector

  • 遍历DOM

  • 操作:在DOM树中添加,删除,复制和创建节点

  • 性能:文档片段和节点缓存

JavaScript

许多JavaScript问题都围绕着这些概念:

在给出JavaScript问题时,请尽力确定你正在被问到哪些概念从而找出正确的解决方案。

你还应该了解JavaScript设计模式,这将为你提供可重复的常见问题解决方案。以下是一些很有用的设计模式:

除了设计模式之外,熟悉JavaScript框架会更好。你应该知道前端团队何时以及为何使用不同的框架。

HTML

你需要知道哪些HTML标记最能代表你正在显示的内容及其相关属性。你应该知道:

  • 语义化

  • 标签的属性

  • 如何声明你的doctype以及可以使用的 meta 标签

  • 无障碍访问

CSS

除了了解何时使用 class 和ID之外,你还应该了解如何在页面上布局元素并使用子级或直接后代选择器来定位元素。

  • 布局:两列布局,三栏布局

  • 响应式

  • 网页自适应

  • 选择器优先级

  • namespacing

数据结构和算法(DS & A)

虽然数据结构和算法的知识对于前端开发并不重要,但许多前端工程师仍然会在面试中遇到。为此,重要的是要对时间复杂度和常见的复杂度(如O(n)和O(n log n))有基本的了解。花点时间查看这些基本数据结构并在JavaScript中实现它们:

  • 链表

  • hash 表

  • 栈和队列

  • 树(二叉树和堆)

  • 图(知道如何实现深度优先和广度优先搜索遍历)

系统设计

虽然大多数前端工程师不需要深入了解后端系统的设计,但可能会要求你设计常见应用程序的前端架构。这些问题通常是含糊不清且开放式的,例如“设计Twitter”或“你将如何构建购物支付服务?”以下是一些需要考虑的主题:

  • Rendering:客户端、服务端

  • Layout: 在设计一个涉及多个开发团队使用的系统时,需要考虑构建组件以及是否需要团队遵循相应的规范来使用这些组件

  • 状态管理,如单向数据流或双向数据绑定

  • 异步流:你构建的组件可能需要实时与服务器通信,你建议的设计应考虑XHR与双向调用。如果要求你支持现代浏览器,则可以使用websockets或 server-sent events;如果要求支持旧版浏览器,则需要在设计中选择IFrame,JSONP等。

  • 关注点分离

  • 多端支持:你的设计是否会在Web,移动和混合应用程序中使用单独的实现或相同的实现?

  • Asset delivery:你的设计应考虑如何处理依赖关系,测试和部署。

实践最重要

虽然你可以自己总结理论,但最后一个难题是实践。可以一次又一次地应用这些步骤,与同行交流前端问题。

知识是技术和实践的结合,这能帮助你找到理想的工作

其他资源

原文: blog.pramp.com/how-to-succ…

最后照旧是一个广告贴,最近新开了一个分享技术的公众号,欢迎大家关注👇(目前关注人数可怜🤕)