为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。
按分类组织
网络
- 001 为什么 TCP 建立连接需要三次握手
- 005 为什么 DNS 使用 UDP 协议
- 012 为什么 TCP 协议有性能问题
- 013 为什么 UDP 头只有 8 个字节
- 017 为什么 TCP/IP 协议会拆分数据
- 018 为什么流媒体直播的延迟很高
- 019 为什么 HTTPS 需要 7 次握手以及 9 倍时延
- 020 为什么 TCP 协议有粘包问题
- 021 为什么 TCP 协议有 TIME_WAIT 状态
- 026 为什么 Mac 地址不需要全球唯一
- 027 为什么 IPv6 难以取代 IPv4
- 028 为什么集群需要 Overlay 网络
数据库
- 003 为什么 Redis 选择单线程模型
- 009 为什么 MySQL 使用 B+ 树
- 010 为什么 Redis 快照使用子进程
- 011 为什么 MongoDB 使用 B 树
- 015 为什么数据库会丢失数据
- 016 为什么比特币可以防篡改
- 024 为什么 MySQL 的自增主键不单调也不连续
- 031 为什么数据库不应该使用外键
操作系统
- 023 为什么 Linux 需要虚拟内存
- 029 为什么系统调用会消耗较多资源
- 030 为什么 Linux 默认页大小是 4KB
编程语言
- 014 为什么 Go 语言没有泛型
软件工程
- 002 为什么使用通信来共享内存
- 004 为什么你应该使用 Git 进行版本控制
- 006 为什么使用 MD5 存储密码非常危险
- 007 为什么基础服务不应该高可用
- 008 为什么总是需要无意义的 ID
- 018 为什么流媒体直播的延迟很高
- 022 为什么 0.1 + 0.2 = 0.300000004
- 025 为什么 0.1 + 0.2 = 0.3
全部文章
- 031 为什么数据库不应该使用外键
- 030 为什么 Linux 默认页大小是 4KB
- 029 为什么系统调用会消耗较多资源
- 028 为什么集群需要 Overlay 网络
- 027 为什么 IPv6 难以取代 IPv4
- 026 为什么 Mac 地址不需要全球唯一
- 025 为什么 0.1 + 0.2 = 0.3
- 024 为什么 MySQL 的自增主键不单调也不连续
- 023 为什么 Linux 需要虚拟内存
- 022 为什么 0.1 + 0.2 = 0.300000004
- 021 为什么 TCP 协议有 TIME_WAIT 状态
- 020 为什么 TCP 协议有粘包问题
- 019 为什么 HTTPS 需要 7 次握手以及 9 倍时延
- 018 为什么流媒体直播的延迟很高
- 017 为什么 TCP/IP 协议会拆分数据
- 016 为什么比特币可以防篡改
- 015 为什么数据库会丢失数据
- 014 为什么 Go 语言没有泛型
- 013 为什么 UDP 头只有 8 个字节
- 012 为什么 TCP 协议有性能问题
- 011 为什么 MongoDB 使用 B 树
- 010 为什么 Redis 快照使用子进程
- 009 为什么 MySQL 使用 B+ 树
- 008 为什么总是需要无意义的 ID
- 007 为什么基础服务不应该高可用
- 006 为什么使用 MD5 存储密码非常危险
- 005 为什么 DNS 使用 UDP 协议
- 004 为什么你应该使用 Git 进行版本控制
- 003 为什么 Redis 选择单线程模型
- 002 为什么使用通信来共享内存
- 001 为什么 TCP 建立连接需要三次握手
相关博文
为什么这么设计系列文章