前端框架
前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。
以 Vue 为例,我整理了如下的面试题。
如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
其次,面试官在问一些问题的时候,尽管你知道该如何回答,但是表述不清楚依旧会减分;
最后,刷题可以帮助梳理前端核心知识点,查缺补漏,预防面试中可能出现的忘记某方面知识的尴尬情况。
那么,要熟悉掌握那些知识点?那些大厂前端面试喜欢问什么呢?又该怎么面呢?
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”,等等。
系统设计
-
渲染——客户端渲染(CSR)、服务器端渲染(SSR)和全局渲染;
-
布局——如果你正在设计被多个开发团队使用的系统,需要考虑进行组件化,以及是否需要开发团队通过指定标记来使用组件;
-
状态管理,例如在单向数据流或双向数据绑定之间做出选择。你还应该考虑你的设计是采用被动式还是反应式编程模型,以及组件如何相互关联,例如是 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;
-
浏览器布局、组合和绘制之间的区别。
JavaScript
-
JS原始数据类型有哪些?引用数据类型有哪些?
-
说出下面运行的结果,解释原因。
-
null是对象吗?为什么?
-
‘1’.toString()为什么可以调用?
-
0.1+0.2为什么不等于0.3?
-
什么是BigInt?
-
为什么需要BigInt?
-
如何创建并使用BigInt?
-
typeof 是否能正确判断类型?
-
instanceof能否判断基本数据类型?
-
能不能手动实现一下instanceof的功能?
-
Object.is和===的区别?
-
[] == ![]结果是什么?为什么
…
HTTP
-
HTTP 报文结构是怎样的?
-
HTTP有哪些请求方法?
-
如何理解 URI?
-
如何理解 HTTP 状态码?
-
简要概括一下 HTTP 的特点?HTTP 有哪些缺点?
-
对 Accept 系列字段了解多少?
-
对于定长和不定长的数据,HTTP 是怎么传输的?
-
HTTP 如何处理大文件的传输?
-
HTTP 中如何处理表单数据的提交?
-
HTTP1.1 如何解决 HTTP 的队头阻塞问题?
-
对 Cookie 了解多少?
…
TCP协议
-
能不能说一说 TCP 和 UDP 的区别?
-
说说 TCP 三次握手的过程?
-
为什么是三次而不是两次、四次?
-
三次握手过程中可以携带数据么?
-
同时打开会怎样?
-
说说 TCP 四次挥手的过程
-
为什么是四次挥手而不是三次?
-
同时关闭会怎样?
-
说说半连接队列和 SYN Flood 攻击的关系
-
如何应对 SYN Flood 攻击?
-
介绍一下 TCP 报文头部的字段
-
说说 TCP 快速打开的原理(TFO)
…
浏览器
-
能不能说一说浏览器缓存?
-
能不能说一说浏览器的本地存储?各自优劣如何?
最后
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
- 能不能说一说浏览器的本地存储?各自优劣如何?
最后
[外链图片转存中…(img-aivo5uGD-1715892994170)]
[外链图片转存中…(img-5yQUkT9r-1715892994171)]
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容