最后
今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!
可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
-
使用 JavaScript 作为服务器端脚本语言,可以消除一些与浏览器端 js 脚本的冲突
-
可以发挥 JavaScript 动态编程的特性,在服务器与浏览器之间建立直接的动态程序
应用层来说,可以进行像PHP一样做动态网站开发和WEB应用开发
对于前端程序员来说,Node.js 意味着什么?
- 拓宽知识域
前端的知识领域实际上是很广的,但是大部分人被局限在了业务上或某家公司里,因为业务不需要或者公司不用所以就不学。这是不对的,前端的趋势是在往服务端走,所以这是我们一定要接触的东西。
- 提高核心竞争力
这一点就很明显了,现在市面上的前端程序员10个有6个不会Node,然而市场是需要这门技术的。
- 优先录取权
相信这句话已经屡见不鲜了:有node开发经验优先。但凡是大厂招人或是高薪前端岗位基本都会有Node的要求。
同步式I/O和异步式I/O
1. 同步式I/O(阻塞式I/O)
当计算机调度线程进行I/O操作命令后,由于文件的读写或者网络通信需要较长的操作时间,操作系统为了充分利用cpu,此时会暂停到当前的I/O线程对CPU的控制(故又称同步式为阻塞式I/O),把cup资源然给其他的线程资源。
当I/O线程完成了操作时,此时操作系统会恢复此时的I/O线程,从而当前I/O线程重新获得了cup的的控制权,继续完成其他操作。
举个例子: A同学接到了B同学的一个要求,要帮B去做某件事。这时候C老师和A同学说,你去帮我去做xxx事情,这个事情比较急。这个时候A同学不得不放下B同学的事情(停止当前线程),先去处理C老师交代的事情(开启一个新线程)。做完C老师交代的事情之后,又开始帮忙做B同学的事情。
代码案例(demo.js):
var fs = require(“fs”);
// readFileSync表示同步读取
var data = fs.readFileSync(“./store.js”,“utf-8”);
console.log(data);
console.log(“获取结束”);
store.js是与demo.js同级的文件,通过同步请求可以拿过来,看到的结果是:
这就是典型的同步式,必须要等到文件读取完才会往下执行打印的操作。
2. 异步式I/O(非阻塞式I/O)
针对所有I/O操作不采用阻塞策略,当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或数据的返回,而只是讲IO请求发送给操作系统,继续执行下一条语。
当操作系统完成IO操作时,以事件的形式通知执行IO操作的线程,线程会在特定时候处理这个事件,为了 处理异步IO,线程必须有事件循环,不断的检查有没有未处理的事件,依次予以处理。
var fs = require(“fs”);
// 默认是采用异步式I/O
fs.readFile(‘./store.js’,‘utf-8’,function(err,data){
if(err){
console.log(err);
}else{
console.log(data);
}
})
console.log(“获取结束”);
执行结果如下:
看图就能知道,现在不用再等到文件读取完毕再执行打印了,这就是异步式。
3. 同步式I/O和异步式I/O的区别
异步式: 一个线程永远在执行计算操作,这个线程所使用的CPU核心利用率永远是100%,IO以事件的方式通知。
同步式: 多线程往往能提高系统吞吐量,因为一个线程阻塞还有其他线程在工作,多线程可以让CPU资源不被阻塞中的线程浪费。
总结
阿里十分注重你对源码的理解,对你所学,所用东西的理解,对项目的理解。