计算机基础小册
-
- 字节面试题
- 什么是补码?有什么用?
- 一个中文占多少字节?这个跟编码有什么关系?Unicode 跟编码有什么关系?js 是什么编码?
- 为什么 0.1 + 0.2 不等于 0.3?请结合 IEEE 标准来说
- 阿里面试题
- CPU 和 GPU 的区别,前端如何利用 GPU 加速?
- I/O 是什么?知道 I/O 设备的演进过程吗?
- 字节面试题
-
- 阿里面试题
- 参考我这之前写的文章阿里面试官的”说一下从 url 输入到返回请求的过程“问的难度就是不一样!
- 阿里面试题
-
- 腾讯面试题(面试火花思维也遇到过)
- 进程、线程、协程的区别
- 进程间通信的方式
- 为什么要有文件描述符
- PCB 和 FCB 分别指什么,包含哪些内容
- 腾讯面试题(面试火花思维也遇到过)
-
- 美团面试题
- 有效的字母异位词
- 杨辉三角
- 蔚来面试题
- 合并两个有序数组
- 二叉树层次遍历
- 美团面试题
-
- linux 这边常用的查看日志的指令
- linux 下进程间通信方式?管道、共享内存什么场景下会用?两个进程不在同一个机器如何通信?
- 何查看 linux 进程信息,其中 vsz 和 rss 有什么区别?
Js 基础问题
与前端 Js 不同, 后端方面除了 SSR/爬虫之外很少会接触 DOM, 所以关于 DOM 方面的各种知识基本不会讨论. 浏览器端除了图形业务外很少碰到内存问题, 但是后端几乎是直面服务器内存的, 更加偏向内存方面, 对于一些更基础的问题也会更加关注.
部分问题:
- 类型判断
- typeof NaN 结果是什么?以及为什么?
- 类型判断
- 如何精确判断引用类型?
- 原型链
- Function.prototype === Object.proto 结果是什么,以及为什么?
- 作用域
- javascript 是静态作用域还是动态作用域?
- 执行上下文栈
- 有些人可能要说《高级程序设计》的 VO,AO,对不起,这是 ES3 的说法。答这道题就走远了
- 引用传递
- js 中什么类型是引用传递, 什么类型是值传递? 如何将值类型的变量以引用的方式传递?
模块
模块机制详细分析文章可以参考我之前写的一篇文章NodeJS 有难度的面试题,你能答对几个?,最开始就讨论了 commonjs 的模块机制。
- 模块机制
- 请介绍一下 node 里的模块是什么
- 请介绍一下 require 的模块加载机制
- 热更新
- 如何在不重启 node 进程的情况下热更新一个 js/json 文件? 这个问题本身是否有问题?
- 上下文
- 每个 require 的 js 文件,作用域如何保证独立呢?
- 知道 vm 模块有什么用吗?
- 包管理
- npm 包管理下,node_modules 里安装的包是按什么结构和逻辑整理目录的
事件/异步
异步还是不异步? 这是一个问题.
- Promise
- 问烂的题就是问你什么是宏任务,什么是微任务,有啥区别,然后上个题问你打印顺序
- Events (事件)
- 如下情况是否会死循环?
const EventEmitter = require("events");
let emitter = new EventEmitter();
emitter.on("myEvent", () => {
console.log("hi");
emitter.emit("myEvent");
});
emitter.emit("myEvent");
以及这样会不会死循环?
const EventEmitter = require("events");
let emitter = new EventEmitter();
emitter.on("myEvent", function sth() {
emitter.on("myEvent", sth);
console.log("hi");
});
emitter.emit("myEvent");
进程
后面的篇章需要了解操作系统的一些基本运行原理,才能更好的回答问题,比如进程就是一个典型的例子,以下链接是我之前写的关于操作系统的基础知识: https://juejin.cn/post/6844904112803282957
- Stream
- 可读流默认是什么状态?
- 背压是什么?知道 pipeline 吗?跟 pipe 有什么区别
- 流内部机制
- Process (进程)
- 请回答进程、线程和协程的区别
- RPC,LPC 中文啥意思?有啥区别吗
- Child Processes (子进程)
- spawn 、fork、exec、execFile 的区别?
- Cluster (集群)
- Cluster 底层使用的是 Child Processes, 那它的工作机制什么
- 进程间通信
- 常见的 IPC 方式有哪些
- 守护进程
- 请实现一个简易的 nodejs 编写的守护进程
IO
Node.js 是以 IO 密集型业务著称. 那么问题来了, 你真的了解什么叫 IO, 什么又叫 IO 密集型业务吗?
- Buffer
- Buffer 一般用于处理什么数据? 其长度能否动态变化?
- Buffer.alloc()和 Buffer.allocUnsafe()有什么区别
- String Decoder (字符串解码)
- 知道 String Decoder 的应用场景吗?
- File System (文件系统)
- 什么是文件描述符? 输入流/输出流/错误流是什么?
- Readline
- Readline 是如何实现的? (有思路即可)
Network
- Net (网络)
- 知道 TCP 的粘包是什么吗?
- cookie 与 session 的区别? 服务端如何清除 cookie?
- UDP/Datagram
- 什么场景适用 udp
- HTTP
- 什么是跨域请求? 如何允许跨域?
- 列举几个提高网络传输速度的办法?
- DNS (域名服务器)
- hosts 文件是什么? 什么叫 DNS 本地解析?
- RPC
- 常见 RPC 的方式有哪些
OS
- TTY
- 什么是 TTY? 如何判断是否处于 TTY 环境?
- OS (操作系统)
- 不同操作系统的换行符 (EOL) 有什么区别?
- Path
- 为什么要用 path 模块去处理路径(兼容性问题)
- 命令行参数
错误处理/调试
[Doc]
Errors (异常)- javascript 标准错误分为几种
- 怎么处理未预料的出错? 用 try/catch ,还是其它什么?
- 什么是
uncaughtException
事件? 一般在什么情况下使用该事件? - 什么是防御性编程? 与其相对的 let it crash 又是什么?
- 为什么有些异常没法根据报错信息定位到代码调用? 如何准确的定位一个异常?
[Doc]
Debugger (调试器)- 内存泄漏通常由哪些原因导致? 如何分析以及定位内存泄漏?
测试
存储
[Point]
Mysql- 索引有什么用,大致原理是什么? 设计索引有什么注意点?
- char 和 varchar 字符宽度的区别
- 字符集 utf8 和 utf8mb4 的区别
- 为什么需要规范 sql 数据规范化?
[Point]
Mongodb[Point]
数据一致性- 什么是数据一致性,如何解决
- 什么是事务,在 mysql 如何开启
安全
- Crypto (加密)
- 知道对称加密和非对称加密吗?https 中它们彼此是如何协作的呢?
- HTTPS
- https 解决 http 的哪些问题?https 是如何解决
- XSS
- 过滤 Html 标签能否防止 XSS?
- CSRF
- 什么是 CSRF,如何防止?
- 中间人攻击
- 如何避免中间人攻击?
- Sql/Nosql 注入
- 为什么会产生 sql 注入
nginx
最后
欢迎大家一起共建这个知识库,以及不吝啬 star 哦!感谢!