计算机RoadMap
制作计算机
计算机本质就是用来做计算的,核心在于把客观世界抽象成数学模型,选择合适的数据结构,进行数据计算。
逻辑门
- 常见的逻辑门有哪些
- 它们可以组成什么计算机原件
- 怎么把这些原件拼接起来
BIOS开机启动
- 从按下电源键到进入系统桌面的过程
高速缓存
- 怎么有效利用高速缓存?
- 高速缓存会带来什么问题
外围设备
- 如何与IO设备交互?
操作系统
操作系统对各种硬件资源进行抽象,我们可以基于此提高开发软件的效率
虚拟化
- 512MB的内存怎么运行得了1GB的程序?
- PCB的数据结构是怎样的
并发
- 为什么需要进程/线程安全?死锁的必要条件是啥?
- 进程、线程、协程的关系?
持久化
- 如何将文件与磁盘块做关联?
- 在磁盘上怎么找到你想要的文件?
- 文件系统有一层OS Cache,如何保证数据不丢失
计算机网络
TCP通信
- 为什么三次握手,四次挥手
- 序号如何初始化,为何每次都不同
- 可靠传输、流量控制如何保证?
- 和UDP有哪些区别
应用层
- DNS的工作机制
- HTTPS的工作机制
- 描述从浏览器输入url到显示html页面这个过程
系统设计
数据库
- 常见的数据模型有哪些,适合哪些场景
- 如何高效读写数据,应该设置怎样的数据结构
- 如何保证ACID的实现
- 事务可以设置哪些隔离级别,会有什么问题,底层实现?
缓存
- 缓存穿透是什么,如何避免
- 缓存不一致如何解决
搜索引擎
- 底层数据结构如何设计
消息队列
- 消息队列能解决什么问题
- 如何保证消息的顺序性
- 消息丢失了怎么办
- 有没有可能消费到相同的消息,怎么处理
- 积压了大量消息,怎么办
分布式系统
好的分布式系统应该具有高可用性、良好的扩展性
事务
- 2PC的具体过程
一致性算法
分区方案
- 如何生成全局唯一ID并根据分区进行路由
选主
- 选主的方式是怎样的
- 出现脑裂的情况怎么办
- 写立即读如何处理
锁
- 得到锁的机器宕机了怎么办
运维
容器
自动化测试
Linux
- 查看监听端口
- 查看进程资源使用率
汇编&编译
- 这方面的发展主要是让开发程序更方便、更易维护
- 编译有哪几个阶段
虚拟机
- 编译器、解释器、虚拟机三者有什么区别
编解码
- 半包/粘包问题
- 内存中的数据结构如何序列化/反序列化