《CSDiy》笔记
剖析数据库系统的精妙架构与理论基石
在作者:PKUFlyingPig 的著作《CSDiy》的导引下,我开始了对计算机科学领域诸多重要议题的研读之旅。首先映入眼帘的是数据库系统,这个数据管理的核心枢纽。不同于浮光掠影的表层应用,我渴望深入探究其内部的精妙架构与运作机理。透过《Architecture of a Database System》和《Readings in Database Systems》这两本书籍,我得以一窥数据库系统设计的堂奥。前者如同一份详尽的蓝图,细致地描绘了数据库系统的各个组件,从查询优化器到存储引擎,再到事务管理器,它们如何协同工作,构成一个完整而高效的数据处理平台。后者则像是一部思想的荟萃,收录了数据库领域诸多先驱的论文,展现了数据库技术发展的脉络与前沿探索。例如,关系型数据库的奠基之作——Codd的论文,以及NoSQL运动中Dynamo和Bigtable的创新设计,都让我受益匪浅。而《Database System Concepts》则如同一部百科全书,它涵盖了数据库领域的方方面面,从基本概念到高级主题,无所不包,为我构建了一个完整的知识体系。例如,书中详细阐述了 ACID 属性(原子性、一致性、隔离性和持久性)对于保障数据可靠性的重要意义,以及各种并发控制算法(如两阶段锁协议和乐观并发控制)的实现原理。现如今,数据库技术已经渗透到我们生活的方方面面。例如,电商平台的商品信息管理、社交媒体的用户关系维护、金融系统的交易记录存储,都离不开数据库的支持。根据Statista的数据,2023年全球数据库市场规模预计将达到800亿美元,并且还将继续保持高速增长📈。
探索编译原理与编程语言的深层奥秘
如果说数据库系统是数据的存储与管理中心,那么编译原理与编程语言则是软件世界的构建基石。在《CSDiy》的指引下,我开始探索编译器的设计与实现,以及编程语言的本质与演化。首先,我研读了《Engineering a Compiler》和《Compilers: Principles, Techniques, and Tools》这两部经典之作。前者注重实践,详细讲解了编译器各个阶段的实现技术,例如词法分析、语法分析、语义分析、代码优化和代码生成。后者则侧重理论,深入探讨了编译原理的各个方面,例如上下文无关文法、LL分析、LR分析、数据流分析和活跃变量分析。透过这两本书籍,我不仅掌握了编译器的基本原理,还了解了编译器设计的各种权衡与优化策略。例如,在代码优化阶段,编译器需要权衡优化效果与编译时间,选择合适的优化算法。随后,我深入研究了《Crafting Interpreters》,这本书以一种轻松愉快的方式,带领读者从零开始构建一个编程语言的解释器。通过亲手实现解释器,我对编程语言的内部运作有了更深刻的理解。我还学习了《计算机程序的构造和解释》(SICP),这本书以 Scheme 语言为例,深入探讨了程序设计的本质,例如抽象、递归、元编程和并发。SICP不仅是一本编程教材,更是一本关于计算思维的哲学著作。为了进一步提升对编程语言的理解,我阅读了《Essentials of Programming Languages》、《Practical Foundations for Programming Languages》、《Software Foundations》和《Types and Programming Languages》等书籍。这些书籍从不同的角度,探讨了编程语言的类型系统、语义和形式化验证。现如今,编程语言已经成为我们与计算机沟通的桥梁。例如,Python 凭借其简洁易用的语法,成为数据科学和人工智能领域的热门语言;Java 凭借其跨平台特性,成为企业级应用开发的首选语言;而 Rust 则凭借其安全性和高性能,在系统编程领域崭露头角。根据 TIOBE 指数,2023年最受欢迎的编程语言是 Python、C 和 Java 💻。
计算机体系结构、理论与安全领域的求索
除了软件层面的知识,硬件层面的理解同样至关重要。我开始研读《超标量处理器设计: Superscalar RISC Processor Design》、《Computer Organization and Design RISC-V Edition》和《Computer Architecture: A Quantitative Approach》等书籍,深入了解计算机体系结构的各个方面,例如指令集架构、流水线、缓存、存储器系统和多处理器。透过这些书籍,我不仅掌握了计算机硬件的基本原理,还了解了现代处理器设计的各种创新技术,例如超标量、乱序执行和分支预测。我还学习了《Introduction to the Theory of Computation》,这本书系统地介绍了计算理论的基本概念,例如自动机、形式语言、图灵机和计算复杂性。计算理论是计算机科学的基石,它为我们理解计算的本质和局限性提供了理论框架。同时,我也对密码学和逆向工程产生了浓厚的兴趣。我研读了《Cryptography Engineering: Design Principles and Practical Applications》和《Introduction to Modern Cryptography》等书籍,学习了密码学的基本原理和应用,例如对称加密、非对称加密、哈希函数和数字签名。密码学是信息安全的重要保障,它为我们保护数据的机密性、完整性和可用性提供了技术手段。我还学习了《逆向工程核心原理》和《加密与解密》等书籍,了解了逆向工程的基本技术和方法,例如反汇编、调试和漏洞分析。逆向工程是安全研究的重要工具,它可以帮助我们发现软件中的漏洞和安全隐患。在当今数字化时代,信息安全变得越来越重要。例如,近年来,勒索软件攻击事件频发,给企业和个人造成了巨大的经济损失;数据泄露事件也屡见不鲜,严重侵犯了用户的隐私权。根据 Cybersecurity Ventures 的报告,2025 年全球网络安全支出预计将达到 10.5 万亿美元 🛡️。
图形学、游戏引擎、软件工程与设计模式的融会贯通
在掌握了计算机科学的基础知识后,我开始探索一些更具应用性的领域,例如计算机图形学、游戏引擎、软件工程和设计模式。我研读了《Fundamentals of Computer Graphics》、《Physically Based Rendering: From Theory To Implementation》和《Real-Time Rendering》等书籍,学习了计算机图形学的基本原理和技术,例如光栅化、纹理映射、光照模型和渲染管线。透过这些书籍,我了解了如何将虚拟世界呈现在屏幕上,以及如何创造逼真的视觉效果。我还学习了《Game Engine Architecture》和《Game Programming Patterns》等书籍,了解了游戏引擎的架构和设计,以及游戏开发中常用的设计模式。游戏引擎是游戏开发的核心工具,它为游戏开发者提供了各种功能和服务,例如场景管理、物理模拟、碰撞检测、人工智能和渲染。设计模式则是一种解决常见软件设计问题的经验总结,它可以帮助我们编写可维护、可扩展和可复用的代码。为了提升软件开发的效率和质量,我学习了《Software Engineering at Google》,这本书总结了 Google 在软件工程方面的实践经验,涵盖了代码审查、测试、构建、部署和监控等各个方面。我还学习了《设计模式: 可复用面向对象软件》,这本书详细介绍了 23 种常用的设计模式,例如单例模式、工厂模式、观察者模式和装饰器模式。现如今,计算机图形学和游戏引擎技术已经广泛应用于各个领域。例如,电影特效、虚拟现实、增强现实、游戏开发和工业设计都离不开计算机图形学的支持;Unity 和 Unreal Engine 等游戏引擎则成为游戏开发者的首选工具。根据 Newzoo 的报告,2023 年全球游戏市场规模预计将达到 2000 亿美元 🎮。