总结
我在成长过程中也是一路摸爬滚打,没有任何人的指点,所以走的很艰难。例如在大三的时候,如果有个学长可以阶段性的指点一二,如果有已经工作的师兄可以告诉我工作上需要什么,我应该前面的三年可以缩短一半;后来去面试bat,失败了有5、6次,每次也不知道具体是什么原因,都是靠面试回忆去猜测可能是哪方面的问题,回来学习和完善,当你真正去招人的时候,你就会知道面试记录是多么重要,面试官可以从面试记录里看到你的成长,总是去面试,总是没有成长,就会被定义为缺乏潜力。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
(5) jasmine/mocha单元测试。
13、怎样调试 Node. js程序?
用node-- debug app. js和 node-inspector。
14、Node .js的网络模块都有哪些?
Node. js全面支持各种网络服务器和客户端,包括TCP、HTP/ HTTPS、TCP 、UDP、DNS、tls/ssl等。
15、Node.js是怎样支持 HTTPS、tls的?
主要通过以下几个步骤支持。
(1)使用 openssl生成公钥、私钥。
(2)服务器或客户端使用HTTPS替代HTTP。
(3)服务器或客户端加载公钥、私钥证书。
16、什么是 Node. js?
Node. js是一个 JavaScript的运行环境,是一个服务器端的“ JavaScript解释器”,用于方便高效地搭建一些响应速度快、易于扩展的网络应用。它采用事件驱动、异步编程方式,为网络服务而设计。
17、Node. js的优缺点是什么?
优点如下:
(1) Node. js是基于事件驱动和无阻塞的,非常适合处理并发请求,因此构建在 Node. js的代理服务器相比其他技术实现的服务器要好一点。
(2)与 Node. js代理服务器交互的客户端代码由 JavaScript语言编写,客户端与服务端都采用一种语言编写。
缺点如下:
(1) Node .js是一个相对新的开源项目,不太稳定,变化速度快。
(2)不适合CPU密集型应用,如果有长时间运行的计算(比如大循环),将会导致CPU时间片不能释放,使得后续I/O无法发起。
18、npm是什么?
npm是 Node. js中管理和分发包的工具,可用于安装、卸载、发布、查看包等。
19、npm的好处是什么?
通过ηpm,可以安装和管理项目的依赖,还可以指明依赖项的具体版本号。
20、Node. js中导入模块和导入 JavaScript文件在写法上有什么区别?
在 Node. js中要导入模块,直接使用名字导入即可,如下所示:
var express = require(“express”);
要导入 JavaScript文件,需要使用文件的路径,如下所示:
var demo = require(“./demo.js”);
21、npm的作用是什么?
npm是同 Node .js一起安装的包管理工具,能解决 Node. js代码部署上的很多问题。常见的使用场景有以下几种。
(1)允许用户从npm服务器下载别人编写的第三方包到本地。
(2)允许用户从npm服务器下载并安装别人编写的命令行程序到本地。
(3)允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用。
22、什么是 EventEmitter?
EventEmitter是 Node. js中一个实现观察者模式的类,主要功能是订阅和发布消息,用于解决多模块交互而产生的模块之间的耦合问题.
23、如何实现一个 EventEmitter?
可通过3步实现 EventEmitter定义一个子类,通过寄生组合式继承,继承 EventEmitter
父类,代码如下。
var Util= require(‘util’ );
var EventEmitter= require (‘events’ ) .EventEmitter;
function IcktEmitter () {
EventEmitter .apply(this, arguments)
}
Util.inherits(IcktEmitter, EventEmitter);
var ie = new IcktEmitter ( ) ;
ie.on(‘icketang’, function(data){
console.log(‘接收到消息’,data )
})
ie.emit(’ icketang’,‘来自有课网的消息’);
24、EventEmitter有哪些典型应用?
有以下应用。
(1)在模块间传递消息。
(2)在回调函数内外传递消息。
(3)处理流数据,因为流是在 EventEmitter的基础上实现的。
(4)运用观察者模式收发消息的相关应用。
25、如何捕获 EventEmitter的错误事件?
当发布error消息的时候,如果没有注册该事件,应用程序会抛出错误并中断执行。所以要监听error事件,代码如下。
var ie= new IcktEmitter ( );
ie .on('error ', function(err){
conso1e.1og ( ‘接收到错误的信息’,err )
})
ie.emit(’ error’,‘来自ie1的错误消息’);
26、Node. js中的流是什么?
流(Stream)是基于 EventEmitter的数据管理模式,由各种不同的抽象接口组成,主要包括可写、可读、可读写、可转换等类型。
27、使用流有什么好处?
流是非阻塞式数据处理模式,可以提升效率,节省内存,有助于处理管道且可扩展等。
28、流有哪些典型应用?
流在文件读写、网络请求、数据转换、音频、视频等方面有很广泛的应用。
29、如何捕获流的错误事件?
监听error事件,方法与订阅 EventEmitter的error事件相似。
30、有哪些常用 Stream流?分别什么时候使用?
Readable流为可读流,在作为输入数据源时使用;Writable流为可写流,在作为输岀源时使用;Duplex流为可读写流,它作为输岀源被写入,同时又作为输入源被后面的流读出。
Transform流和 Duplex流一样,都是双向流,区别是 Transfrom流只需要实现一个函数 _transfrom( chunk, encoding, callback);而 Duplex流需要分别实现_read(size )函数和_write( chunk, encoding, callback )函数。
31、如何实现一个 Writable流?
实现 Writable流分成3步
(1)引入 Writable模块。
(2)继承 Writable模块。
(3)实现 _write(chunk, encoding, callback )写入函数。
代码如下。
//引入 Writable模块
var Writable= require(‘stream’).Writable;
var Util = require(‘util’);
//继承 Writable模块
function IcktWritable( ) {
Writable. apply(this, arguments ) ;
}
Util.inherits ( IcktWritable, Writable ) ;
//实现 write函数
IcktWritable. prototype. _write = function ( data, encoding, callback ) {
console.log (‘被写入的数据是:’ ,data. toString ( ) )
callback ( )
}
var iw= new IcktWritable ( ) ;
for (var i=0;i< 5 ;i++ ) {
iw. write(‘有课网’+i,'utf8")
}
iw,end(‘学技能就上有课网’ );
32、内置的fs模块架构由哪几部分组成?
fs模块主要由下面几部分组成。
(1) POSIX文件 Wrapper,对应操作系统的原生文件操作。
(2)文件流,fs. createReadStream和 fs.createWriteStrean。
(3)同步文件读写, fs.readFileSync和fs.writeFileSync。
(4)异步文件读写, fs.readFile和fs.writeFile。
33、读写一个文件有多少种方法?
总体来说,有4种方法。
(1) POSIX式底层读写。
(2)流式读写。
(3)同步文件读写。
(4)异步文件读写。
34、如何读取JSON配置文件?
主要有两种方式。第一种是利用 Node. js内置的 require( data.json!)机制,直接得到 Javascript对象;
第二种是读入文件内容,然后用JSON. parse( content)转换成 JavaScript对象。
二者的区别是,对于第一种方式,如果多个模块都加载了同一个JSON文件,那么其中一个改变了 JavaScript对象,其他也跟着改变,这是由 Node.js模块的缓存机制造成的,缓存中只有一个 JavaScript模块对象;
第二种方式则可以随意改变加载后的JavaScript变量,而且各模块互不影响,因为它们都是独立的,存储的是多个 JavaScript对象。
35、fs.watch和 fs.watchFile有什么区别?
二者主要用来监听文件变动,fs.watch利用操作系统原生机制来监听,可能不适用网络文件系统;fs. watchFile则定期检查文件状态变更,适用于网络文件系统,但是与fs.watch相比有些慢,因为它不采用实时机制。
36、为什么需要子进程?
Node. js是异步非阻塞的,这对高并发非常有效。可是我们还有其他一些常用的需求,比如和操作系统 shell命令交互,调用可执行文件,创建子进程,进行阻塞式访问或高CPU计算等,子进程就是为满足这些需求而产生的。顾名思义,子进程就是把 Node. js阻塞的工作交给子进程去做。
37、exec、 execFile、 spawn和fork都是做什么用的?
它们的作用分别如下。
exec可以用操作系统原生的方式执行各种命令,如管道 cat ab. txt | grep hello。
execFile用于执行一个文件。
spawn负责在流式和操作系统之间进行交互。
fork负责在两个 Node. js程序( JavaScript)之间进行交互。
38、如何实现一个简单的命令行交互程序?
实现代码如下。
var cp = require (’ child process );
//执行指令
var child= cp .spawn(‘echo’, ['hello, ‘’] );
// child.stdout是输入流, process. stdout是输出流
//子进程的输出流作为当前程序的输入流,然后重定向到当前程序的控制器输出
child. stdout. pipe(process. stdout)
39、两个 Node. js程序之间如何交互?
通过fork实现父子程序之间的交互。子程序用 process.on、 process. send访问父程序,父程序用 child.on、 child.send访问子程序。
关于 parent. JS的示例代码如下。
var cp = require (’ child_process’ ) ;
var child= cp.fork (‘./child. js’ );
child .on(‘message’, function(msg){
console.1og(‘子程序发送的数据:’,msg )
})
child.send ( ‘来自父程序发送的数据’ )
关于 child .js的示例代码如下。
process .on ( ‘message’ , function(msg){
conso1e.1og ( '父程序发送的数据: ’ , msg )
process.send ( ‘来自子程序发送的数据’ )
40、如何让一个 JavaScript文件变得像 Linux命令一样可执行?
具体步骤如下。
(1)在文件头部加入#!/ bin/sh
如 icketang40.js
#!/bin/sh
echo’有课网— 技能学习就上有课网;
(2)用 chmod命令把名为 icketang40的 JavaScript文件改为可执行文件。
chmod + x icketang40.js
(3)进入文件目录,在命令行输入 icketang40.js就相当于执行 node icketang40.js
$ ./icketang40.js
执行结果。
41、子进程和进程的 stdin、 stdout、 stderror是样的吗?
概念都是一样的。stdin、 stdout、 stderror分别是输入、输出、错误。三者都是流。区别是在父进程里,子进程的 stdout是输入流, stdin是输出流。
42、async都有哪些常用方法?分别怎么用?
async是一个 JavaScript类库,它的目的是解决 JavaScript中异常流程难以控制的问题。async不仅在 Node. js里适用,还可以用在浏览器中。其常用方法和用法如下。
具体代码如下所示。
var async = require('async ');
var date = Date .now ( );
(1) async. parallel:并行执行完多个函数后,调用结束函数。不用等到前一个函数。执行完再执行下一个函数。
async .parallel ( [
function ( callback ) {
setTimeout (function () {
console. log(‘process one’, Date. now ( ) - date)
callback(null, ‘msg one’)
},2000)
},
function ( callback ){
setTimeout ( function () {
console. log(‘process tow’, Date .now ( ) - date )
callback ( null, ‘msg tow’ )
},1000)
}
], function(err, result){
console. log(err, result, 'done ')
})
(2) async.series:串行执行完多个函数后,调用结束函数。前面一个函数执行完之后,就会立即执行下一个函数。
async .series ( [
function ( callback ) {
setTimeout ( function () {
console. log ( 'process one ', Date. now ( ) - date )
callback ( null, ’ msg one’ )
},2000 )
},
function ( callback ) {
setTimeout ( function () {
console. log ( ‘process tow’, Date. now ( ) - date )
callback ( null, 'msg tow ’ )
},1000 )
}
] , function (err, result ) {
console. log(err, result, ‘done’)
})
(3) async. waterfall:依次执行多个函数,前一个函数的执行结果作为后一个函数执行时的参数。
async .waterfall ( [
function ( callback ) {
setTimeout ( function () {
console. log('process one, Date. now()- date)
callback(null, ‘msg one’)
},2000)
},
function(argl, callback){
刷面试题
刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
-
前端字节跳动真题解析
-
【269页】前端大厂面试题宝典
最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
为后一个函数执行时的参数。
async .waterfall ( [
function ( callback ) {
setTimeout ( function () {
console. log('process one, Date. now()- date)
callback(null, ‘msg one’)
},2000)
},
function(argl, callback){
刷面试题
刷题的重要性,不用多说。对于应届生或工作年限不长的人来说,刷面试题一方面能够尽可能地快速自己对某个技术点的理解,另一方面在面试时,有一定几率被问到相同或相似题,另外或多或少也能够为自己面试增加一些自信心,可见适当的刷题是很有必要的。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
-
前端字节跳动真题解析
-
【269页】前端大厂面试题宝典
最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。