来自:mjsws > 馆藏分类
配色: 字号:
2018 – 2019 年前端 JavaScript 面试题
2019-02-17 | 阅:  转:  |  分享 
  
2018–2019年前端JavaScript面试题本篇文章给大家总结了一些2018–2019年前端JavaScript面
试题,有着一定的参考价值,现在分享给大家,希望能帮助到大家!我们真的是在编写代码,还是像乐高积木一样简单地组装代码?在2018
年底,我们仍然看到大多数面试者被问到AJAX时,面试者依然在jQuery语境中回答问题。这种差距还有很多典型的例子:CSS
Grid和Flexbox布局已经得到了广泛支持。然而,CSS面试时仍然集中在多列浮动布局和行内块级元素居中。他们依然对
Bootstrap或Foundation网格系统有着永不消亡的热情。模块打包器(Modulebundler)现在几乎是大
规模应用程序的标配。然而,当谈到架构时,我们谈论的又是minification(压缩)和concatenation(合并)
。在访面试中我们真正讨论过多少次Webpack?如果97%的代码来自NPM,但面试的重点缺又是数组排序或对象迭代。更糟
糕的是,我们仍然对?typeofnull?很感兴趣。为什么不能聊点选择合适的库,框架或工具的理性方法呢?我们仍在让面试者在原型
之上进行经典继承,但并不是要验证对这些错误想法的需要。我们有更多的功能性模式。当然,使用JavaScriptclass(类),
新引入的私有和静态属性可以好好的讨论一下。这将使人们更好地理解面试者的想法,关键决策等。缓存讨论仍局限于Cachecontro
lheaders(控制头)和CDN。像IndexDB,HTTP/2或ServiceWorkers这样的东西只是路过。
这种例子不胜枚举,面试评估与工作实际需求之间的差距显而易见。一方面,我们的前端技术实现取得了跨越式发展,另一方面,新的开发方式还没
有形成大的社区。社区分裂永远不是好兆头。这是一条灾难之路。差距总是会创造出一种新的东西,它有能力摧毁我们迄今为止所建造的一切。我无
法想象Java开发人员使用GWT编写另一个Facebook。面试是催生变革和汇聚人才的好方式。作为面试官的你,如果仅仅
把面试当成面试,那么它只会让你自我膨胀。要使一场面试成功,必须进行讨论。它必须是一个交换思想的地方。它应该挑起人们思考并客观地
分析给定的问题。它是理解人们做出的决策过程,也是了解一个人对技术和解决问题的热情,也意味着了解未来可能的同事。所有那些难题,技
巧或?typeofnull?都无法称得上真正面试。以下是我们在面试讨论中提出的一些问题清单。我们希望此清单可以帮助面试官和面试者
在正确的背景下设定期望,需求和现实。TLDR;我们要先把自己当成面试官。JavaScript基础问题1.使以下代码正常运行:J
avaScript代码:consta=[1,2,3,4,5];//Implementthisa.multip
ly();console.log(a);//[1,2,3,4,5,1,4,9,16,25]2.以下代码在
JavaScript中返回?false?。解释一下为什么会这样:JavaScript代码://false0.2+0.1
===0.33.JavaScript中有哪些不同的数据类型?提示:只有两种类型–主要数据类型和引用类型(对象)。有6
种主要类型。4.解决以下异步代码问题。检索并计算属于同一教室中每个学生的平均分数,其中一些ID为75。每个学生可以在一年内参加一
门或多门课程。以下API可用于检索所需数据。JavaScript代码:12345678910111213141516171
81920212223242526//GETLISTOFALLTHESTUDENTSGET/api/students
Response:[{http://www.xby4.cn?"id":1,?"name":"John",?"classroo
mId":75}]//GETCOURSESFORGIVENASTUDENTGET/api/courses?filt
er=studentIdeq1Response:[{?"id":"history",http://www.nofkb.c
n?"studentId":1},{?"id":"algebra",?"studentId":1},]//GETEVA
LUATIONFOREACHCOURSEGET/api/evaluation/history?filter=student
Ideq1Response:{?"id":200,?"score":50,?"totalScore":100http:
//www.qw96.cnhttp://www.ff787.com}编写一个接受教室ID的函数,您将根据该函数计算该教室中
每个学生的平均值。该函数的最终输出应该是具有平均分数的学生列表:JavaScript代码:[{"id":1,"name"
:"John","average":70.5},{"id":3,"name":"Lois","average"
:67},]使用普通的?callbacks?,promises?,observables,generator?或?async-
wait?编写所需的函数。尝试使用至少3种不同的技术解决这个问题。5.使用JavaScriptProxy实现简单的数据绑
定提示:ESProxy允许您拦截对任何对象属性或方法的调用。首先,每当更改底层绑定对象时,都应更新DOM。6.解释Jav
aScript并发模型您是否熟悉Elixir,Clojure,Java等其他编程语言中使用的任何其他并发模型?提示:查找事件
循环,任务队列,调用栈,堆等。7.new?关键字在JavaScript中有什么作用?提示:在JavaScript中,new
?是用于实例化对象的运算符。这里的目的是了解知识广度和记忆情况。另外,请注意?[[Construct]]?和?[[Call]]。
8.JavaScript中有哪些不同的函数调用模式?详细解释。提示:有四种模式,函数调用,方法调用,.call()?和?.ap
ply()。9.解释任一即将发布新的ECMAScript提案。提示:比如2018的BigInt,partial函数,p
ipeline操作符等。10.JavaScript中的迭代器(iterators)和迭代(iterables)是什么?你知
道什么是内置迭代器吗?11.为什么JavaScriptclasses(类)被认为是坏的或反模式?这是一个神话吗?它是否遭受了误
传?是否有一些有用的用例?12.如何在JSON中序列化以下对象?如果我们将以下对象转换为JSON字符串,会发生什么?Jav
aScript代码:consta={key1:Symbol(),key2:10}//Whatwillhapp
en?console.log(JSON.stringify(a));13.你熟悉TypedArrays吗?如果熟悉,请解释
他们与JavaScript中的传统数组相比的异同?14.默认参数是如何工作?如果我们在调用?makeAPIRequest?函
数时必须使用?timeout?的默认值,那么正确的语法是什么?JavaScript代码:functionmakeAPIRequ
est(url,timeout=2000,headers){//Somecodetofetchdata}15
.解释TCO–尾调用优化(TailCallOptimization)。有没有支持尾调用优化的JavaScript引
擎?提示:截至2018年,没有。JavaScript前端应用设计问题1.解释单向数据流和双向数据绑定。Angular1.x
基于双向数据绑定,而React,Vue,Elm等基于单向数据流架构。2.单向数据流架构在哪些方面适合MVC?MVC拥有大
约50年的悠久历史,并已演变为MVP,MVVM和MV。两者之间的相互关系是什么?如果MVC是架构模式,那么单向数
据流是什么?这些竞争模式是否能解决同样的问题?3.客户端MVC与服务器端或经典MVC有何不同?提示:经典MVC是适用于
桌面应用程序的SmalltalkMVC。在Web应用中,至少有两个不同的数据MVC周期。4.使函数式编程与面向对象或命
令式编程不同的关键因素是什么?提示:Currying(柯里化),point-free函数,partial函数应用,高阶函数,纯
函数,独立副作用,record类型(联合,代数数据类型)等。5.在JavaScript和前端的上下文中,函数式编程与响应式编
程有什么关系?提示:没有正确答案。但粗略地说,函数式编程是关于小型编码,编写纯函数和响应式编程是大型编码,即模块之间的数据流,连接
以FP风格编写的组件。FRP–功能响应式编程(FunctionalReactiveProgramming)是另一个
不同但相关的概念。6.不可变数据结构(immutabledatastructures)解决了哪些问题?不可变结构是否有任何性能
影响?JS生态系统中哪些库提供了不可变的数据结构?这些库的优点和缺点是什么?提示:线程安全(我们真的需要在浏览器JavaSc
ript中担心吗?),无副作用的函数,更好的状态管理等。7.大型应用程序是否应使用静态类型?如何比较TypeScript/Fl
ow与Elm/ReasonML/PureScript等JS转换语言?这些方法的优缺点是什么?选择特定类型系统的主要标准应
该是什么?什么是类型推断(typeinference)?静态类型语言和强类型语言有什么区别?在这方面JavaScript的本
质是什么?有你知道的弱类型但静态类型的语言吗?有你知道的动态类型但强类型的语言吗?举例一二。提示:Structural与Nom
inal类型系统,类型稳健性,工具/生态系统支持,正确性超过方便。8.JavaScript中有哪些杰出的模块系统(module
systems)?如何评价ES模块系统。列出在实现不同模块系统之间互操作所涉及的一些复杂性问题(主要对ES模块和Co
mmonJS互操作感兴趣)9.HTTP/2将如何影响JavaScript应用程序打包?列出HTTP/2与其上一个版本的
基本区别。10.FetchAPI相对于传统的Ajax有哪些改进?使用FetchAPI有那些缺点/难点吗?哪些是Aja
x可以做的,而fetch不能做的?11.如何评论pull-based和push-based的反应系统。讨论概念,含义
,用途等。在这个讨论中加入惰性和及早求值。然后在讨论中添加单数和复数值维度。最后,讨论值解析的同步和异步性质。为JavaScrip
t中可用的每个组合提供示例。提示:Observable是惰性的,基于推送的复数值构造,同时具有async/sync调度程序。
12.讨论与Promise相关的问题。提示:及早求值(eagerevaluation),尴尬的取消机制,用?then()?方
法伪装?map()?和?flatMap()等。前端基础和理论问题1.HTML中Doctype的用途是什么?具体谈谈,以下每种
情况下会发生什么:Doctype不存在。使用了HTML4Doctype,但HTML页面使用了HTML5的标签,如?<
audio>?或?
献花(0)
+1
(本文系mjsws首藏)