Node面试总结(整理中)
2020/4/21 17:17:49
本文主要是介绍Node面试总结(整理中),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Node
为什么要用Node做后端
- Node中间层代替传统前后端分离
zhuanlan.zhihu.com/p/75843905
前后端分离:可以分层,基础数据层,业务层,性能有优势;缺点,沟通成本过高,容易出bug; node前端全栈: 使用node-web模式,加快开发效率,降低沟通成本,缺点:增加运维成本和安全性问题,性能效率需要考察后端专业性。 复制代码
- 为什么学Node
blog.csdn.net/u013451157/…
和其他语言的最大区别: 解决了长链接,多请求引起的成本问题 php,java等一个请求场景一个线程,有限的内存只能支持有限的并发(可用nginx解决) node是事件驱动,请求会在引擎里发射一个事件,而不是为每个链接生成一个进程 优势: 密集IO,事件驱动,异步编辑,节约CPU资源、不阻塞、快速、高响应,不用考虑锁,线程上下切换 复制代码
- Node的应用场景
适用场景
游戏,在线聊天,实时推送,SNS实时交流,实时监控系统,股票 单页面,多异步请求 社交系统 命令行工具:可以场景大量子进程流输出,做devops等效率工具 复制代码
不实用场景
cpu密集,io适用较差 复制代码
核心
事件循环Event-loop
www.jianshu.com/p/1ee6c21f6… zhuanlan.zhihu.com/p/33058983
promise,nextTick, setImmediate,setTimeout,setInterval JS运行环境中拥有栈,消息队列,堆。 timers: 这个阶段执行定时器队列中的回调如 setTimeout() 和 setInterval()。 I/O callbacks: 这个阶段执行几乎所有的回调。但是不包括close事件,定时器和setImmediate()的回调。 idle, prepare: 这个阶段仅在内部使用,可以不必理会。 poll: 等待新的I/O事件,node在一些特殊情况下会阻塞在这里。 check: setImmediate()的回调会在这个阶段执行。 close callbacks: 例如socket.on('close', ...)这种close事件的回调。 消息队列有宏任务队列(setImmediate,setTimeout,setInterval ),微任务队列(promise,nextTick) 当前执行栈执行完毕时会立刻先处理所有微任务队列中的事件,然后再去宏任务队列中取出一个事件。同一次事件循环中,微任务永远在宏任务之前执行。 复制代码
核心fs
- fs-extra 扩展 fs,增加了promise
- 缓冲buffer
juejin.im/post/5d3a3b…
buffer就是内存 复制代码
- 数据流和管道steam
- 为什么使用流
一次性读取大文件,会占用大量内存,使用流分割。http的请求和响应,文件压缩都是用流 复制代码
* 手写流 复制代码
juejin.im/post/5b3d75… 使用切割fs.read,切割读取和记录位置,之后使用事件触发器触发on.data事件
path
juejin.im/post/58feb8…
网络http
juejin.im/post/5d032b… socket.io
集群cluster
Round-robin算法,负载 for和os.cpus构建对等的进程 复制代码
进程和线程
- 多进程的实现
- 高并发
- 进程线程协程的关系
- juejin.im/post/5d4301…
Node常用框架和解析
-
- Node常用三方包
-
- 内存管理机制
- 内存溢出
- v8,非v8内存,buffer
- [juejin.im/post/5d59fc…]()
接口设计模式
- restful
- graphql
- rpc
- ssl
- tcp/ip
- websockrt
- 为什么要用websocket
- 什么是轮询
数据库
Mysql
-
系统架构
-
数据类型
-
日志系统
-
事务和锁
-
索引
-
数据库优化点
Redis
-
数据类型和常用场景
-
实现原理
-
为什么要用redis
Mongodb
-
系统架构
-
数据类型
-
日志系统
-
事务和锁
-
索引
-
mongoing.com/archives/27…
-
数据库优化点
-
语法
- 调用栈和内存管理
- 数据类型数据结构
- 数组
- 对象
- Map
- Set
- for循环
- 作用域和闭包
- this关键字
- 原型链
- JS异步解决方案
- async/await proposal实现原理 www.zhihu.com/question/39…
- ES6/ES7/ES8的新特性
- typescript
- promise的实现
前端
-
css篇
**- **布局有哪些
-
前端性能优化有哪些方法
-
输入一个url发生了什么
-
vue相关面试题
-
mvvm如何实现
-
状态管理是什么
-
cookie和session的区别
-
http的缓存配置
-
跨域
- segmentfault.com/a/119000001…
-
post提交数据
- imququ.com/post/four-w…
数据算法
经典算法
- 冒泡排序: 两个for循环,大小交换,n-n2
1.优化点 一次循环没有交换,终结外层循环体 每次循环交换的位置记录下来 2.伪代码 比较交换,两个遍历。大的就替换小的 复制代码
- 选择排序: n2
- 堆排序:nlogn
- 插入排序:n-n2
- 希尔排序:n
- 快排:
- 快速排序: 分而治之
- 冒泡排序: 邻居对比
高级算法
- 贪心算法和动态规划
- 深度遍历
数据结构
- 数组
- 栈
- 队列
- 链表
- 哈希表
- 树 ,
list、stack、queue、linkedList、dictionary、hash、set、tree、graph
测试
- 单元测试 Mocha
- latanbul
- 集成测试
部署
- dcoker
- devlops
- pm2
- git
- nginx
- nginx的负载均衡是用什么算法怎么实现的
- linux
- 文件管理
- 内存管理
- 磁盘IO
- 进程内存
- cpu
更多面试整理
www.notion.so/golang-fec3…
这篇关于Node面试总结(整理中)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南