- 前后端语言不同而分散梳离的知识点,奇迹般的因为Node重新连接起来
- 为什么是nodejs,与java等区别
- 为什么nodejs 高并发,可伸缩性
- 为什么不适合cpu密集型
- 进程、线程、协程、系统内核态、用户态、上下文切换
- 阻塞IO/非阻塞IO
- 高性能web服务器/ nginx 事件驱动
- web workers / child_process
- 与公司其他语言如何异构共存
模块机制
- commonjs 规范 服务端 (AMD、CMD)
- browerify
- 加载顺序
- 模块加载实现
- 用户模块、核心模块(js/c++)、c++扩展模块
- 性能
- npm cnpm dnpm区别
- c++扩展模块
- 为什么要编写c++扩展模块
- 复用能力
- dubble 位运算
- 提高性能,性能一定更高么?
- 扩展模块如何被js调用的、process.dlopen 、动态链接库、静态链接库
- 如何编写c++扩展模块
- V8 ApI
- NAN
- N-API
- GYP / makefile
异步I/O
- 为什么异步I/O、为什么是异步函数
- 多线程、创建、切换开销;死锁、状态同步
- 异步IO实现 (系统层)
- 轮询 (epool 自动挂起,进程or线程)
- IOCP (Input/Output Completion Port,IOCP)
- DMA(Direct Memory Access)直接内存存取, 芯片. 为什么可以并行IO,一个中断异常
- Node 异步IO/ 应用程序层 实现
- linux 自定义IO线程
- windows 系统级IO线程
- IO线程池
- 事件循环、请求对象,IO线程池
- 非IO类异步API
- 定时器红黑树
- timemout/interval/ nexttick / immediate先后顺序
- 事件循环每次tick 做的 6 个阶段cb先后顺序
- process.nextTick() 不在 Event Loop 的任何阶段执行,而是在各个阶段切换的中间执行,即从一个阶段切换到下个阶段前执行。
- macrotask 宏任务 和 microtask微任务 的概念
- Idel观察者,io观察者,check观察者。数组,红黑树,链表
异步编程
- 函数可以入参返参一等公民,c++指针实现,故有回调函
- 高阶函数
- 柯里化函数
- 异步编程 提交阶段、处理阶段
- 异步编程问题
- 异步不能try catch ,回调函数 标准化,第一个参数异常
- 函数嵌套
- 没有sleep
- 多线程利用
- 同步转异步
- 解决方案
事件发布/订阅模式
Promise/Deferred模式
流程控制库
async await 协程
性能对比
- 并发控制
为什么要并发控制
并发雪崩 加锁状态控制 只有一份SQL