计算机程序设计决策深度解析:剖析 THE Design 系列中的架构权衡与实现逻辑

113次阅读
没有评论

Why’s THE Design 是一个深度剖析计算机程序设计决策的系列文章。它不提供简单的定义,而是通过探讨具体设计背后的“为什么”,分析不同方案的权衡(Trade-off)及其对实际实现的影响,帮助开发者构建底层的技术直觉。

完整系列可访问:https://draven.co/whys-the-design/

知识图谱

网络协议

  • 连接与传输: 为什么 TCP 建立连接需要三次握手 (001)、为什么 TCP 协议有粘包问题 (020)、为什么 TCP 协议有 TIME_WAIT 状态 (021)、为什么 TCP/IP 协议会拆分数据 (017)
  • 协议分析: 为什么 DNS 使用 UDP 协议 (005)、为什么 UDP 头只有 8 个字节 (013)、为什么 HTTPS 需要 7 次握手以及 9 倍时延 (019)
  • 性能与架构: 为什么 TCP 协议有性能问题 (012)、为什么流媒体直播的延迟很高 (018)、为什么集群需要 Overlay 网络 (028)
  • 寻址与标准: 为什么 MAC 地址不需要全球唯一 (026)、为什么 IPv6 难以取代 IPv4 (027)

数据库与存储

  • 数据结构: 为什么 MySQL 使用 B+ 树 (009)、为什么 MongoDB 使用 B 树 (011)、为什么 OLAP 需要列式存储 (036)
  • Redis 专项: 为什么 Redis 选择单线程模型 (003)、为什么 Redis 快照使用子进程 (010)
  • 工程实践: 为什么数据库会丢失数据 (015)、为什么 MySQL 的自增主键不单调也不连续 (024)、为什么数据库不应该使用外键 (031)
  • 其他: 为什么比特币可以防篡改 (016)

操作系统

  • 内存管理: 为什么 Linux 需要虚拟内存 (023)、为什么 Linux 默认页大小是 4KB (030)、为什么 HugePages 可以提升数据库性能 (034)、为什么 Linux 需要 Swapping (035)
  • 硬件与交互: 为什么系统调用会消耗较多资源 (029)、为什么 CPU 访问硬盘很慢 (032)、为什么 NUMA 会影响程序的延迟 (033)
  • 磁盘与碎片: 为什么早期的 Windows 需要整理碎片 (038)、为什么 Linux 和 macOS 不需要碎片整理 (039)

软件工程与语言

  • 工程方法论: 为什么使用通信来共享内存 (002)、为什么你应该使用 Git 进行版本控制 (004)、为什么基础服务不应该高可用 (007)、为什么总是需要无意义的 ID (008)、为什么 Kubernetes 要替换 Docker (037)
  • 安全与计算: 为什么使用 MD5 存储密码非常危险 (006)、为什么 0.1 + 0.2 = 0.300000004 (022)、为什么 0.1 + 0.2 = 0.3 (025)
  • 编程语言: 为什么 Go 语言没有泛型 (014)

适用场景

该系列非常适合那些 不满足于「如何使用」而希望探索「为何如此设计」的开发者。无论是在准备技术面试、优化系统性能,还是在进行架构设计时需要权衡方案,都可以将其作为参考资料。

正文完
 0
Administrator
版权声明:本站原创文章,由 Administrator 于2022-06-06发表,共计1163字。
转载说明:除特别说明外,本站原创内容采用 Creative Commons Attribution 4.0 (CC BY 4.0) 许可协议发布,转载请注明来源并保留原文链接。 本站部分内容基于公开资料整理,并可能经 AI 技术辅助生成或优化,仅供参考,不构成任何专业建议,请读者自行判断与核实。 本站不对第三方资源的可用性、安全性或合法性承担任何责任。
评论(没有评论)
验证码