10
10
11
11
## 面试指南
12
12
13
- - 什么是孤儿进程?参考:[ Interview1] ( #Interview1 )
14
- - 创建多进程时,代码里有 ``` app.listen(port) ``` 在进行 fork 时,为什么没有报端口被占用?参考:[ Interview2] ( #Interview2 )
15
- - 什么是 IPC 通信,如何建立 IPC 通信?什么场景下需要用到 IPC 通信?参考:[ Interview3] ( #Interview3 )
16
- - Node.js 是单线程还是多线程?进一步会提问为什么是单线程?参考:[ Interview4] ( #Interview4 )
17
- - 关于守护进程,是什么、为什么、怎么编写?参考:[ Interview5] ( #Interview5 )
18
- - 实现一个简单的命令行交互程序?参考:[ Interview6] ( #Interview6 )
19
- - 如何让一个 js 文件在 Linux 下成为一个可执行命令程序?参考:[ Interview7] ( #Interview7 )
20
- - 进程的当前工作目录是什么? 有什么作用?参考:[ Interview8] ( #Interview8 )
21
- - 多进程或多个 Web 服务之间的状态共享问题?参考:[ Interview9] ( #Interview9 )
13
+ - 什么是进程和线程?之间的区别?参考:[ Interview1] ( #Interview1 )
14
+ - 什么是孤儿进程?参考:[ Interview2] ( #Interview2 )
15
+ - 创建多进程时,代码里有 ``` app.listen(port) ``` 在进行 fork 时,为什么没有报端口被占用?参考:[ Interview3] ( #Interview3 )
16
+ - 什么是 IPC 通信,如何建立 IPC 通信?什么场景下需要用到 IPC 通信?参考:[ Interview4] ( #Interview4 )
17
+ - Node.js 是单线程还是多线程?进一步会提问为什么是单线程?参考:[ Interview5] ( #Interview5 )
18
+ - 关于守护进程,是什么、为什么、怎么编写?参考:[ Interview6] ( #Interview6 )
19
+ - 实现一个简单的命令行交互程序?参考:[ Interview7] ( #Interview7 )
20
+ - 如何让一个 js 文件在 Linux 下成为一个可执行命令程序?参考:[ Interview8] ( #Interview8 )
21
+ - 进程的当前工作目录是什么? 有什么作用?参考:[ Interview9] ( #Interview9 )
22
+ - 多进程或多个 Web 服务之间的状态共享问题?参考:[ Interview10] ( #Interview10 )
22
23
23
24
## 进程
24
25
@@ -501,6 +502,12 @@ $ node index.js
501
502
502
503
## Interview1
503
504
505
+ > 什么是进程和线程?之间的区别?
506
+
507
+ 关于线程和进程是服务端一个很基础的概念,在文章 [ Node.js进阶之进程与线程] ( https://www.imooc.com/article/288006 ) 中介绍了进程与线程的概念之后又给出了在 Node.js 中的进程和线程的实际应用,对于这块不是很理解的建议先看下。
508
+
509
+ ## Interview2
510
+
504
511
> 什么是孤儿进程?
505
512
506
513
父进程创建子进程之后,父进程退出了,但是父进程对应的一个或多个子进程还在运行,这些子进程会被系统的 init 进程收养,对应的进程 ppid 为 1,这就是孤儿进程。通过以下代码示例说明。
@@ -555,7 +562,7 @@ $ curl http://127.0.0.1:3000
555
562
I am worker, pid: 32971, ppid: 1
556
563
```
557
564
558
- ## Interview2
565
+ ## Interview3
559
566
560
567
> 创建多进程时,代码里有 ``` app.listen(port) ``` 在进行 fork 时,为什么没有报端口被占用?
561
568
@@ -645,7 +652,7 @@ worker process created, pid: 34515 ppid: 34511
645
652
646
653
关于多进程端口占用问题,cnode 上有篇文章也可以看下 [ 通过源码解析 Node.js 中 cluster 模块的主要功能实现] ( https://cnodejs.org/topic/56e84480833b7c8a0492e20c )
647
654
648
- ## Interview3
655
+ ## Interview4
649
656
650
657
> 什么是 IPC 通信,如何建立 IPC 通信?什么场景下需要用到 IPC 通信?
651
658
@@ -701,21 +708,21 @@ I am worker, PID: 42474
701
708
702
709
<p style =" text-align :center ; padding : 10px ;" >父子进程 IPC 通信交互图</p >
703
710
704
- ## Interview4
711
+ ## Interview5
705
712
706
713
> Node.js 是单线程还是多线程?进一步会提问为什么是单线程?
707
714
708
715
第一个问题,Node.js 是单线程还是多线程?这个问题是个基本的问题,在以往面试中偶尔提到还是有不知道的,Javascript 是单线程的,但是做为其在服务端运行环境的 Node.js 并非是单线程的。
709
716
710
717
第二个问题,Javascript 为什么是单线程?这个问题需要从浏览器说起,在浏览器环境中对于 DOM 的操作,试想如果多个线程来对同一个 DOM 操作是不是就乱了呢,那也就意味着对于DOM的操作只能是单线程,避免 DOM 渲染冲突。在浏览器环境中 UI 渲染线程和 JS 执行引擎是互斥的,一方在执行时都会导致另一方被挂起,这是由 JS 引擎所决定的。
711
718
712
- ## Interview5
719
+ ## Interview6
713
720
714
721
> 关于守护进程,是什么、为什么、怎么编写?
715
722
716
723
参考守护进程一节 [ 守护进程编写] ( #守护进程 )
717
724
718
- ## Interview6
725
+ ## Interview7
719
726
720
727
采用子进程 child_process 的 spawn 方法,如下所示:
721
728
@@ -730,7 +737,7 @@ $ node execfile
730
737
简单的命令行交互
731
738
```
732
739
733
- ## Interview7
740
+ ## Interview8
734
741
735
742
> 如何让一个 js 文件在 Linux 下成为一个可执行命令程序?
736
743
@@ -752,7 +759,7 @@ $ hello
752
759
hello world!
753
760
```
754
761
755
- ## Interview8
762
+ ## Interview9
756
763
757
764
> 进程的当前工作目录是什么? 有什么作用?
758
765
@@ -767,7 +774,7 @@ process.chdir('/Users/may/Documents/test/') // 设置当前进程目录
767
774
console .log (process .cwd ()); // 获取当前进程目录
768
775
```
769
776
770
- ## Interview9
777
+ ## Interview10
771
778
772
779
> 多进程或多个 Web 服务之间的状态共享问题?
773
780
0 commit comments