九、Node模块
基础部分
1. 对Node的优点和缺点提出了自己的看法
- [ ] (优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子
2. node.js 的应用场景
- [ ] 1. 实时应用:如在线聊天,实时通知推送等等(如socket.io)
2. 分布式应用:通过高效的并行I/O使用已有的数据
3. 工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程序
4. 游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo框架)
5. 利用稳定接口提升Web渲染能力
6. 前后端编程语言环境统一:前端开发人员可以非常快速地切入到服务器端的开发(如著名的纯Javascript全栈式MEAN架构)
3. NodeJS非阻塞I/O模型执行流程
- [ ] 主线程:
1. 执行 node 的代码,把代码放入队列
2. 事件循环程序(主线程)把队列里面的同步代码都先执行了,
3. 同步代码执行完成,执行异步代码
4. 异步代码分 2种状况,
(1)、异步非 io setTimeout() setInterval()
判断是否可执行,如果可以执行就执行,不可以跳过。
(2)、异步io 文件操作
会从线程池当中去取一条线程,帮助主线程去执行。
5. 主线程会一直轮训,队列中没有代码了,主线程就会退出。
子线程:被放在线程池里面的线程,用来执行异步 io操作
1. 在线程池里休息
2. 异步 io 的操作来了,执行异步 io操作。
3. 子线程会把异步 io操作的 callback 函数,扔回给队列
4. 子线程会回到线程池了去休息。
callback,在异步 io 代码执行完成的时候被扔回主线程。
4. nodejs中流(stream)的理解
- [ ] 1. 什么是Stream?
答案:stream是基于事件EventEmitter的数据管理模式.由各种不同的抽象接口组成,主要包括可写,可读,可读写,可转换等几种类型.
2. Stream有什么好处?
答案: 非阻塞式数据处理提升效率,片断处理节省内存,管道处理方便可扩展等.
3. Stream有哪些典型应用?
答案: 文件,网络,数据转换,音频视频等.
1. 怎么捕获 Stream的错误事件?
答案: 监听 error 事件,方法同 EventEmitter.
2. 有哪些常用Stream,分别什么时候使用?
答案:Readable 为可被读流,在作为输入数据源时使用;Writable 为可被写流,在作为输出源时使用;Duplex 为可读写流,它作为输出源接受被写入,同时又作为输入源被后面的流读出.Transform 机制和Duplex一样,都是双向流,区别时 Transfrom 只需要实现一个函数transfrom(chunk, encoding, callback);而 Duplex 需要分别实现read(size)函数和_write(chunk, encoding, callback)函数.
3. 实现一个 Writable Stream?
答案: 三步走:1)构造函数call Writable 2) 继承 Writable 3) 实现_write(chunk,encoding, callback)函数
5. ES6有哪些新特性?
- [ ] 类的支持,模块化,箭头操作符,let/const块作用域,字符串模板,解构,参数默认值/不定参数/拓展参数, for-of遍历, generator, Map/Set, Promise
6. 你对ES6的个人看法
- [ ] 从软件工程角度来看,以前真的很弱,不适合做大型应用,很容易导致烂尾工程。ES6就相当于当年的Java5,是历史性的发展,从此我们可以用js做大型项目了。事实上,各大主流浏览器现在已经支持大部分新特性了,后端的Node.js更是可以直接使用ES6的绝大多数语法。
7. node中的Buffer如何应用?
- [ ] Buffer是用来处理二进制数据的,比如图片,mp3,数据库文件等.Buffer支持各种编码解码,二进制字符串互转.
8. 什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪些优点和缺点?
- [ ] 1. 什么是前端路由
路由是根据不同的url地址展示不同的内容或页面。前端路由就是把不同路由对应不同的内容或页面的任务交给前端来做,之前通过服务端根据url的不同返回不同的页面实现的
2. 什么时候使用前端路由
在单页面应用,大部分页面结构不变,只改变部分内容的使用
3. 前端路由有什么优缺点
优点:
用户体验好,不需要每次都从服务器全部获取,快速展现给用户
缺点:
使用浏览器的前进,后退键的时候会重新发送请求,没有合理利用缓存
单页面无法记住之前滚动的位置,无法再前进,后退的时候记住滚动的
9. 如何判断当前脚本运行在浏览器还是node环境中?
- [ ] exports = typeof window === 'undefined' ? global : window ;
获取全局对象的方式
同理可得,typeof window可以用来判断是不是在浏览器环境中
实际工作部分
1. node中的异步和同步怎么理解?
- [ ] node是单线程的,异步是通过一次次的循环事件队列来实现的.同步则是说阻塞式的IO,这在高并发环境会是一个很大的性能问题,所以同步一般只在基础框架的启动时使用,用来加载配置文件,初始化程序什么的.
2. 有哪些方法可以进行异步流程的控制?
- [ ] 1. 多层嵌套回调
2. 为每一个回调写单独的函数,函数里边再回调
3. 用第三方框架比方async, q, promise等
3. npm有哪些常用的命令,请列举并说明作用
- [ ] $npm init 项目初始化
$npminstall -g <name> 安装并更新package.json中的版本配置
$npm run<name> 执行一段脚本
$npm update -n <name> 更新模块
网友评论