收集了一波面试时可能会被提问的一些问题,也把回答结果呈现出来。后续不断更新题目和答案。 不知道分析的是否对错,欢迎大家来指正,提出建议。
JavaScript
问题:this是什么?
问题:原型与原型链的理解
问题:typeof instanced of
- typeof 返回字符串类型
typeof一般只能返回如下几个结果:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"instanceof运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性。- instanceof用于判断变量是否是某个对象的实例
问题:call、apply、bind的区别
三个都是绑定对象,用来重定义this对象,主要的区别是:
-
call、apply绑定对象,而bind返回的是新的函数,必须调用它才能执行
-
参数call和bind的参数都是直接放进去,而apply参数是必须放在一个数组内才能传进去
-
这三个参数不限定类型
var person = {name:"jasen",age:99,}function myFun(){ console.log(`name:${this.name},age:${this.age}`); } myFun.call(person); myFun.apply(person); myFun.bind(person)(); //多了个括号,返回的是新的函数,必须调用它才能执行 //执行结果: name:jasen,age:99 name:jasen,age:99 name:jasen,age:99 //传参数 var person = { name:"jasen", age:99, } function myFun(frm ,w){ console.log(`name:${this.name},age:${this.age},来自${frm} 去往${w}`); } myFun.call(person,'北京','厦门'); myFun.apply(person,['北京','厦门']); myFun.bind(person,'北京','厦门')(); myFun.bind(person,['北京','厦门'])(); //执行结果 name:jasen,age:99,来自北京 去往厦门 name:jasen,age:99,来自北京 去往厦门 name:jasen,age:99,来自北京 去往厦门 name:jasen,age:99,来自北京,厦门 去往undefined
EScript6
问题:ES6新特性你多了解多少?
- 答:ES6特性有class、promise、async/await、箭头函数、generator
问题:promise中then第二个参数与catch的区别?三种状态是哪三种?
- 考点:promise的理解
- 答:三种状态:pending、resolve、reject 如果then的第一个函数抛出异常,则由then第二个函数5、class的用法
问题:解决回调地狱的方法有哪些?
- 答:1、通过封装模块;2、使用promise;3、使用await\async
问题:generator
貌似基本都没有使用过
问题:ES6如何兼容ES3
问题:箭头函数和普通函数的区别?
- 第一次回答:使用比较简便
- 第二次回答:
Node
问题:谈谈你对事件循环的理解?
- 答:我对事件循环的理解Node是单线程的,主线程将所有任务都放在循环队列中,然后由底层的libuv库从循环事件队列中取出任务分配给不同的线程去处理,主线程同时也会进行回调处理,整个过程形成事件循环
问题:事件队列中的任务你是怎么理解
- 答:主线程将都任务都是放在事件队列中,任务都划分为微任务和宏任务,libuv库会优先取出微任务进行处理,都处理完后再取出宏任务进行处理
- 微任务:promise.next();
- 宏任务:
问题:node的原生模块你用过哪些?
- 答:原生模块:有http,stream,buffer ,fs,path,child_process,cluster,v8,os,net等等
- 需要都熟悉下,面试时说到哪些自然会进一步被询问一些原理
问题:Node模块中的Buffer 和Stream
- 第一次答:平时的业务场景使用的比较少,但是大概知道stream是流,数据流,会在读取大文件,大数据量使用,类似分片读取,buffer 是缓冲区,经常和steam配合使用
- 第二次答:stream是数据流,经常在读取大文件和大数据量通过使用stream读取,避免一次性读取数据量过大阻塞线程;buffer 是缓冲区,可以将数据转化成二进制再进行传输,可以解决大数据量通过字符串形式进行网络传输时性能影响。
问题:express 和koa框架的区别
-
考点:express和koa的理解
-
第一次答:koa使用比较少,express有比较多的成熟的中间件,koa比较简洁
-
第二次答:都是node的服务端框架,这部分的框架都是基于中间件来实现的,主要的区别是中间件的执行方式。
- express封装、内置了很多中间件,如connect、router,而koa比较轻量,可根据要求自己定制
- express 是基于callback来处理中间件,koa是基于await/async
- express 不是严格按照洋葱模型执行中间件,koa是严格按照洋葱模型执行中间件
问题:Node是单线程的吗?
是单线程的,主线程是单线程,底层的还是多线程的,比较说基于事件循环的实现就是多线程的,而且虽然说是单线程的但是也是可以支持多线程的
问题:Node的优势和劣势?
- 优势:因为是单线程的,就无需考虑因多线程而产生的问题死锁问题,线程切换的问题,多线程共享的问题。
- 劣势:因现在硬件条件都很好了,如果分配多核的服务器部署node应用程序,这样自然会造成资源的浪费。单线程也容易造成一旦有错误就会导致整个服务都退出。大量占cpu计算就容易线程阻塞