vue
中MVVM
的实现原理javascript
答:因为我读过vue
的源码,因此能够比较清楚的说明这其中的原理。主要是数据劫持、模板解析、依赖收集这几个过程。这道题也是被问到最多的一道题。能够参考:剖析Vue实现原理 - 如何实现双向绑定mvvmcss
Object.defineProperty
方法有什么做用?有哪些参数?能够经过描述对象来设置哪些特性?html
答:这道题是上一道题的拓展。Object.defineProperty
方法能够给一个对象设置相关的属性,这个方法一共有三个参数,第一个参数是目标对象,第二个参数是属性名,第三个参数能够是一个描述对象。描述对象一个有以下特性:value
-- 设置属性值、configurable
-- 表示是否可删除属性,可否修改属性的特性、writable
-- 是不是只读属性、enumerable
-- 是不是可枚举属性、get
-- 读取属性时调用的函数、set
-- 设置属性时调用的函数。前端
for in
能够遍历原型链上的属性吗?能够遍历不可枚举属性吗?Object.keys
能够遍历到不可枚举属性吗?怎么遍历到对象的不可枚举属性?vue
答:这道题也是上一道题中说起的枚举特性的拓展。for in
能够遍历到原型链上的属性,可是遍历不到不可枚举属性。Object.keys
不能遍历到原型链上的属性也不能遍历到不可枚举属性。能够经过Object.getOwnPropertyNames()
方法访问到不可枚举属性(最后一小问没有回答出来)。java
react
中的事件跟js
原生的事件有什么区别?node
答:react
中的事件是合成事件,经过事件冒泡的原理绑定在根元素上。普通的事件时绑定在目标元素上。python
事件捕获和事件冒泡机制。react
答:在一个有层次的多个元素之间,事件会先通过捕获阶段,捕获阶段是从最顶层元素一直到目标元素。当捕获阶段结束以后事件会从目标元素向底层元素进行传递也就是冒泡阶段。具体细节能够参考《javascript 高级程序设计》的第十三章事件流。webpack
说一下对Promise
的理解。Promise
有哪些经常使用的静态方法?Promise.all()
方法的做用是什么?能够传入哪些类型的参数?
答:Promise
是一个构造函数,实例化的过程当中能够传入一个函数,这个函数有两个参数。在函数内部能够经过resolve
、reject
来修改Promise
的状态,状态发生变化后会在当前事件队列的末尾去执行then
或者catch
里面的方法。经常使用的静态方法有Promise.all
、Promise.race
、Promise.resolve
、Promise.reject
等。Promise.all
方法能够传入一个数组,数组中的每一项都是一个Promise
实例,只有数组中全部的Promise
的状态都是成功时才会去改变Promise.all
方法对应的Promise
状态。Promise.all
方法除了能够传入数组还能够传入全部具备iterator
的对象。具体能够参考阮老师的es6入门Promise。
正则表达式有哪些经常使用的符号?略
列举经常使用的数组方法,哪些方法会改变原数组?略
for of
能够遍历哪些数据类型?
答:能够遍历具备iterator
接口的对象。能够参考阮老师的es6入门Iterator 和 for...of 循环
CSS中overflow
有哪些属性值?分别是什么做用?默认值是什么?略
webpack
中有哪些经常使用的loader
?css-loader
与style-loader
的做用分别是什么?
答:经常使用的有css-loader
、babel-loader
、vue-loader
、style-loader
、url-loader
等。css-loader
是用来解析css文件的,由于webpack
会将全部的东西都当成是模块,可是没有办法去解析css文件以及分析css文件中的依赖项因此须要css-loader
去进行分析。style-loader
会将经过css-loader
编译好的模块提取出来经过style
标签的形式插入到html文件中。
webpack
中有哪些经常使用的plugin
?怎么作代码分割?
答:因为我用的webpack3.x
的版本,因此回答的也是该版本中一些经常使用的plugin
。经常使用的有htmlWebpackPlugin
、extractTextPlugin
、commonChunkPlugin
等。
简要描述js的事件循环。
答:能够参考事件循环
简要描述浏览器的渲染原理。
答:我就简单说了说浏览器的渲染过程和一些概念:DOM树、CSSOM树、render、paint。能够参考你真的了解回流和重绘吗?
浏览器发起请求的整个过程。
答:这是一道老生常谈的题了,从DNS解析到三次握手到发送请求报文到服务端响应,具体答案能够自行百度。
经常使用的http请求头和响应头。与缓存相关的有哪些?http1.0
与http1.1
中关于缓存有些什么区别?
答:能够参考完全弄懂HTTP缓存机制及原理
经常使用的http响应状态码。分别表示什么意思? 答:2xx、3xx、4xx、5xx
谈谈对websocket
的理解。有哪些替代方案?
答:我对webscoket
的理解比较有限,只知道是用来作全双工通信的,是一个持久链接。创建链接的过程实际上是经过http协议进行的,链接完成以后经过upgrade字段进行了协议升级,修改成websocket
协议,该协议的请求头数据量比较少。当时回答的替代方案是ajax
轮询和服务端推送,具体的推送方案不清楚。后来查了一些资料作了一点了解。能够参考《图解HTTP》这本书和《JavaScript高级程序设计》的第二十一章,里面提到了comet
、SSE
两种方案。
TCP
与UDP
的区别。
答:理解的很少,只知道TCP
是可靠传输UDP
是不可靠传输。
经常使用的web性能优化有哪些手段?
答:这道题我主要从http
请求和页面渲染两个方面作得解答,http请求上主要是将代码分割,进行代码压缩,gZip编码,路由懒加载等一些手段来完成优化。页面渲染上主要涉及到DOM操做,减小重排、读写分离、动画上帧率跟浏览器的刷新频率保持一致。能够参考一下阮老师的博客网页性能管理详解
说一下做用域链。原型链。
答:说的主要是《JavaScript高级程序设计》这本书上的内容,说到原型链我通常会画一张原型链关系图。能够参考我写的一篇博客js总结系列(三)原型链
为何0.1 + 0.2 === 0.3
是false
?
答:这道题我主要是说了一下小数在内存中的存储方案,取的是一个近似值致使的精度丢失。
如何实现js的继承?你说的这些继承方式各自有什么缺点?如何实现完美继承?
答:构造函数继承、原型链继承、组合继承、完美继承。这些都是高程中的内容,能够照搬。
经常使用的设计模式有哪些?分别有哪些应用场景?
答:对设计模式总结的比较少,回答的时候说到了单例模式:用来作全屏遮罩或一些模态框;观察者模式:举了vue中实现数据绑定的例子;装饰者模式:用来扩展对象;工厂模式:举了jQuery
中生成jQuery
对象的例子。你们能够专门作个总结。
如何实现一个能够设置过时时间的localstorage
存储?
答:这题写了两三版,初版考虑到的问题不多。在面试官的提示之下才有较高的完成度。主要是提供两个方法set和get,set的时候不只要存储内容还须要存储过时时间,而后在get方法中判断是否已通过期。固然还有一些优化手段。
为何会有跨域问题?经常使用的解决方案有哪些?
答:直接上阮老师博客浏览器同源政策及其规避方法、跨域资源共享 CORS 详解
常见的一些web安全问题
答:XSS
、CSRF
let
和var
有哪些区别?略
new
关键字有什么做用?如何实现一个new
关键字的方法?略
外层div中有两个子元素,如何经过flex布局实现两个子元素垂直居中,左右分别顶到两边的布局?略
如何经过定位的方式实现一个不肯定宽高元素的垂直水平居中?略
使用过node吗?主要作什么?
答:服务端node使用较少,主要是用来作一些打包时候的自定义功能脚本。平时作一些代理服务器啥的。后端的话主要是demo水平。
express
和koa
有什么区别?
答:了解的很少,主要是从回调的处理和中间件的使用不一样两个方面
知道三次握手和四次挥手吗? 答:略
谈谈你对闭包的理解。
答:你们仍是自行百度比较好。
虚拟DOM是什么?了解diff算法吗?
答:虚拟DOM使用js对象来模拟DOM树的结构。js对象中有标签名、属性、子元素。具体细节你们自行百度吧,比我说的专业。
vue和react中循环生成元素时的key有什么做用?
答:也是从diff算法的角度来讲的,循环的时候key是虚拟DOM的惟一标志符,能够节约性能。
DNS解析过程
答:浏览器缓存、操做系统配置文件、DNS服务器
window.onload
和document.ready
有什么区别?
答:window.onload
是页面多有的元素的已经渲染完成包括image
等。document.ready
是DOM
元素渲染完成,一些图片请求并不必定已经完成。
移动端1px问题产生的缘由是什么?有什么解决方案?
答:直接上文章移动端 1px 像素问题及解决办法
rem的原理?还有哪些移动端布局方案?
答:说了一下根据屏幕宽度进行动态计算而后给html
元素这是fontSize
。其余的方案主要说了一下响应式、vw、vh、百分比布局等。
移动端为何click
事件会延迟300ms?如何禁止屏幕的缩放?
答:主要是iPhone
为了判断用户是否发生了双击。禁止缩放经过设置视口的缩放比例。
PC、移动端、微信小程序开发你会分别选用什么框架?说明你的理由。
答:我给出的答案是PC业务场景复杂的状况下选用react
,由于函数编程更加灵活;移动端选用vue
,通常来讲移动端场景不会很复杂,vue
比较轻量化;小程序选用vue
,有较为完善的框架。
了解SSR
吗?有什么好处?
答:没用过,大概结合了node的服务端渲染说了一下本身的理解,好处是首屏性能和SEO
怎么判断一个数据的类型?
答:Object.property.toString.call(obj)
说一下vue的生命周期钩子?vue-router
有哪些钩子?优先级是怎么样的?略
对于秒杀类的业务怎么确保倒计时的准确性?
答:随便想了想,我说能够在活动开始前的某个时间点发送一个请求获取服务端时间。如今想一想好像也不太理想,感受须要在初始化页面的时候服务端就返回一个相对的时间而不是绝对时间。
接口返回了一个很是庞大的数据怎么渲染到页面上?
答:面试官提到了数据层级很深,我提到了数据缓存、分页渲染、数据扁平化等一些手段。
经常使用的异步处理方案及它们的一些优缺点。
答:主要说了回调函数、Promise
、generator
、async/await
原生js给一个元素绑定事件有哪些形式?有什么区别?
答:onclick
和 addEventListener
。前者只能绑定一次,屡次绑定会发生覆盖,后者能够绑定多个事件处理函数,不会发生覆盖。
因为个人水平有限,以上问题的完成度并无达到100%,以上记录了我印象比较深的一些问题,也有些因为时间间隔较长有所遗漏。后续若是新的内容会作出更新。
更多内容能够关注公众号:
伟伟学python