本篇文章给大家总结了一些2018 – 2022 年前端 javascript 面试题,有着一定的参考价值,现在分享给大家,希望能帮助到大家!
【相关推荐:前端面试题(2022),js面试题(2022)】
我们真的是在编写代码,还是像乐高积木一样简单地组装代码?
在 2020 年底,我们仍然看到大多数面试者被问到 ajax 时,面试者依然在 jquery 语境中回答问题。这种差距还有很多典型的例子:
css grid 和 flexbox 布局已经得到了广泛支持。然而,css 面试时仍然集中在多列浮动布局 和行内块级元素居中。他们依然对 bootstrap 或 foundation 网格系统有着永不消亡的热情。
模块打包器(module bundler)现在几乎是大规模应用程序的标配。然而,当谈到架构时,我们谈论的又是 minification(压缩) 和 concatenation(合并) 。在访面试中我们真正讨论过多少次 webpack ?
如果 97% 的代码来自 npm ,但面试的重点缺又是数组排序或对象迭代。更糟糕的是,我们仍然对 typeof null 很感兴趣。为什么不能聊点 选择合适的库,框架或工具的理性方法呢?
我们仍在让面试者在原型之上进行经典继承,但并不是要验证对这些错误想法的需要。我们有更多的功能性模式。当然,使用 javascript class(类),新引入的私有和静态属性可以好好的讨论一下。这将使人们更好地理解面试者的想法,关键决策等。
缓存讨论仍局限于 cache control headers(控制头) 和 cdn。像 indexdb,http/2 或service workers 这样的东西只是路过。
这种例子不胜枚举,面试评估与工作实际需求之间的差距显而易见。一方面,我们的前端技术实现取得了跨越式发展,另一方面,新的开发方式还没有形成大的社区。社区分裂永远不是好兆头。这是一条灾难之路。差距总是会创造出一种新的东西,它有能力摧毁我们迄今为止所建造的一切。我无法想象 java 开发人员使用 gwt 编写另一个 facebook 。
面试是催生变革和汇聚人才的好方式。作为面试官的你,如果仅仅把面试当成面试,那么它只会让你自我膨胀。
要使一场面试成功,必须进行讨论。 它必须是一个交换思想的地方。 它应该挑起人们思考并客观地分析给定的问题。 它是理解人们做出的决策过程,也是了解一个人对技术和解决问题的热情,也意味着了解未来可能的同事。 所有那些难题,技巧或 typeof null 都无法称得上真正面试。
以下是我们在面试讨论中提出的一些问题清单。我们希望此清单可以帮助面试官和面试者在正确的背景下设定期望,需求和现实。
tldr; 我们要先把自己当成面试官。
javascript 基础问题
1.使以下代码正常运行:
javascript 代码:
const a = [1, 2, 3, 4, 5]; // implement thisa.multiply(); console.log(a); // [1, 2, 3, 4, 5, 1, 4, 9, 16, 25]
2.以下代码在 javascript 中返回 false 。 解释一下为什么会这样:
javascript 代码:
// false0.2 + 0.1 === 0.3
3.javascript 中有哪些不同的数据类型?
提示:只有两种类型 – 主要数据类型和引用类型(对象)。 有 6 种主要类型。
4.解决以下异步代码问题。
检索并计算属于同一教室中每个学生的平均分数,其中一些id为75。每个学生可以在一年内参加一门或多门课程。 以下 api 可用于检索所需数据。
javascript 代码:
// get list of all the studentsget /api/studentsresponse:[{ "id": 1, "name": "john", "classroomid": 75}]// get courses for given a studentget /api/courses?filter=studentid eq 1response:[{ "id": "history", "studentid": 1}, { "id": "algebra", "studentid": 1},]// get evaluation for each courseget /api/evaluation/history?filter=studentid eq 1response:{ "id": 200, "score": 50, "totalscore": 100}
编写一个接受教室 id 的函数,您将根据该函数计算该教室中每个学生的平均值。该函数的最终输出应该是具有平均分数的学生列表:
javascript 代码:
[ { "id": 1, "name": "john", "average": 70.5 }, { "id": 3, "name": "lois", "average": 67 },]
使用普通的 callbacks ,promises ,observables,generator 或 async-wait 编写所需的函数。尝试使用至少 3 种不同的技术解决这个问题。
5.使用 javascript proxy 实现简单的数据绑定
提示:es proxy 允许您拦截对任何对象属性或方法的调用。首先,每当更改底层绑定对象时,都应更新 dom 。
6.解释 javascript 并发模型
您是否熟悉 elixir,clojure,java 等其他编程语言中使用的任何其他并发模型?
提示:查找事件循环,任务队列,调用栈,堆等。
7.new 关键字在 javascript 中有什么作用?
提示:在 javascript 中,new 是用于实例化对象的运算符。 这里的目的是了解知识广度和记忆情况。
另外,请注意 [[construct]] 和 [[call]]。
8.javascript 中有哪些不同的函数调用模式? 详细解释。
提示:有四种模式,函数调用,方法调用,.call() 和 .apply()。
9.解释任一即将发布新的 ecmascript 提案。
提示:比如 2018 的 bigint,partial 函数,pipeline 操作符 等。
10.javascript 中的迭代器(iterators)和迭代(iterables)是什么? 你知道什么是内置迭代器吗?
11.为什么 javascript classes(类)被认为是坏的或反模式?
这是一个神话吗?它是否遭受了误传?是否有一些有用的用例?
12.如何在 json 中序列化以下对象?
如果我们将以下对象转换为 json 字符串,会发生什么?
javascript 代码:
const a = { key1: symbol(), key2: 10}// what will happen?console.log(json.stringify(a));
13.你熟悉 typed arrays 吗? 如果熟悉,请解释他们与 javascript 中的传统数组相比的异同?
14. 默认参数是如何工作?
如果我们在调用 makeapirequest 函数时必须使用 timeout 的默认值,那么正确的语法是什么?
javascript 代码:
function makeapirequest(url, timeout = 2000, headers) { // some code to fetch data}
15.解释 tco – 尾调用优化(tail call optimization)。 有没有支持尾调用优化的 javascript 引擎?
提示:截至 2018 年,没有。
javascript 前端应用设计问题
1.解释单向数据流和双向数据绑定。
angular 1.x 基于双向数据绑定,而 react,vue,elm 等基于单向数据流架构。
2.单向数据流架构在哪些方面适合 mvc?
mvc 拥有大约 50 年的悠久历史,并已演变为 mvp,mvvm 和 mv *。两者之间的相互关系是什么?如果 mvc 是架构模式,那么单向数据流是什么?这些竞争模式是否能解决同样的问题?
3.客户端 mvc 与服务器端或经典 mvc 有何不同?
提示:经典 mvc 是适用于桌面应用程序的 smalltalk mvc。在 web 应用中,至少有两个不同的数据 mvc 周期。
4.使函数式编程与面向对象或命令式编程不同的关键因素是什么?
提示:currying(柯里化),point-free 函数,partial 函数应用,高阶函数,纯函数,独立副作用,record 类型(联合,代数数据类型)等。
5.在 javascript 和前端的上下文中,函数式编程与响应式编程有什么关系?
提示:没有正确答案。但粗略地说,函数式编程是关于小型编码,编写纯函数和响应式编程是大型编码,即模块之间的数据流,连接以 fp 风格编写的组件。 frp – 功能响应式编程( functional reactive programming)是另一个不同但相关的概念。
6.不可变数据结构(immutable data structures)解决了哪些问题?
不可变结构是否有任何性能影响? js 生态系统中哪些库提供了不可变的数据结构?这些库的优点和缺点是什么?
提示:线程安全(我们真的需要在浏览器 javascript 中担心吗?),无副作用的函数,更好的状态管理等。
7.大型应用程序是否应使用静态类型?
如何比较 typescript/flow 与 elm/reasonml/purescript 等 js 转换语言?这些方法的优缺点是什么?
选择特定类型系统的主要标准应该是什么?
什么是类型推断(type inference)?
静态类型语言和强类型语言有什么区别?在这方面 javascript 的本质是什么?
有你知道的弱类型但静态类型的语言吗?有你知道的动态类型但强类型的语言吗?举例一二。
提示:structural 与 nominal 类型系统,类型稳健性,工具/生态系统支持,正确性超过方便。
8.javascript 中有哪些杰出的模块系统(module systems )?如何评价 es 模块系统。
列出在实现不同模块系统之间互操作所涉及的一些复杂性问题(主要对 es 模块和 commonjs 互操作感兴趣)
9.http/2 将如何影响 javascript 应用程序打包?
列出 http/2 与其上一个版本的基本区别。
10.fetch api 相对于传统的 ajax 有哪些改进?
使用 fetch api 有那些缺点/难点吗?
哪些是ajax 可以做的,而 fetch 不能做的?
11.如何评论 pull-based 和 push-based 的反应系统。
讨论概念,含义,用途等。
在这个讨论中加入惰性和及早求值。
然后在讨论中添加单数和复数值维度。
最后,讨论值解析的同步和异步性质。
为javascript中可用的每个组合提供示例。
提示:observable 是惰性的,基于推送的复数值构造,同时具有 async/sync 调度程序。
12.讨论与 promise 相关的问题。
提示:及早求值(eager evaluation),尴尬的取消机制,用 then() 方法伪装 map() 和 flatmap() 等。
前端基础和理论问题
1.html 中 doctype 的用途是什么?
具体谈谈,以下每种情况下会发生什么:
doctype 不存在。
使用了 html4 doctype,但 html 页面使用了 html5 的标签,如 b97864c2e0ef2353a16c4d64c7734e92 或 39000f942b2545a5315c57fa3276f220 。它会导致任何错误吗?
使用了无效的 doctype。
2. dom 和 bom 的区别是什么?
提示:bom,dom,ecmascript 和 javascript 都是不同的东西。
3.javascript 中的事件处理如何运行?
如下图所示,我们有三个 div 元素。每个 div 都有一个与之关联的点击处理程序。处理程序执行以下任务:
outer div click 处理程序将 hello outer 打印到控制台。
inner div click 处理程序将 hello inner 打印到控制台。
innermost div click 处理程序将 hello innermost 打印到控制台。
编写一段代码来分配这些任务,以便在单击 innermost div 时始终打印以下序列?
hello inner → hello innermost → hello outer
提示:事件捕获和事件冒泡
4.使用单页应用将文件上传到服务器的有哪些方法?
提示:xmlhttprequest2(streaming),fetch(non-streaming),file api
5.css 重排和重绘之间有什么区别?
哪些 css 属性会导致重排及重绘?
6. 什么是 css 选择器权重以及它如何工作?
说说计算 css 选择器权重的算法。
7.css 中的 pixel 与硬件/物理中的 pixel 有何不同?
提示:像素不是像素不是像素 – ppk。
8.什么是 sectioning 算法?
提示:它也被称为 html5 大纲算法。特别是在构建具有语义结构的网站时非常重要。
9.如果你用过 css flex / css grid(网格)布局,请说明你为什么要使用它?它为你解决了什么问题?
使用 css grid,百分比%和 fr 单位有何不同?
使用 css flexbox,有时 flex-items/children 会不考虑 flex 容器设置的宽度/高度?为什么会这样?
可以使用 css grid 创建 masonry layout(瀑布流布局)吗?如果可以,怎么做?
解释 css grid 和 css flexbox 术语?
浮动元素(float: left | right;)如何在 css grid 和 flexbox 中渲染?
提示:等高的列,垂直居中,复杂网格等。
10.什么时候应该使用 css animations 而不是 css transitions ?你做出这个决定标准是什么?
11.如果你正在 review css 代码,那么你在代码中经常遇到的问题是什么?
示例:使用魔性数字,如 width: 67px; 或使用 em 代替 rem 单位,在通用代码之前编写 media queries(媒体查询),滥用 id 和类等。
12.如何在 javascript 中检测触摸事件?
你是否不看好检测设备对触摸事件的支持?如果是,为什么?
比较触摸事件和点击事件。
当设备同时支持触摸和鼠标事件时,你认为这些事件的正确事件顺序是什么或应该是什么?
13.为 script 标签定义的 async 和 defer 属性有什么用?
现在我们有 http/2 和 es 模块,它们真的很有用吗?
列出的清单只是我们在面试中可能讨论的无限点的一瞥。web components,cors,安全性,cookies,css transform,web assembly,service workers,pwa,css架构等,还有许多我们没有考虑到的东西。我们也没有涉及框架或库的具体问题。
相关推荐:
1、2022年小米高级 php 工程师面试题(模拟考试卷)
2、前端面试江湖
以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注相关教程栏目!!!