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面试总结(整理中)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程