From e1964178fe7c0569a0512244965b2662b30a373c Mon Sep 17 00:00:00 2001 From: Guide Date: Sun, 8 Dec 2024 18:55:39 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20update]=E5=AE=8C=E5=96=84=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E8=BF=99=E7=AF=87=E6=96=87=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/cs-basics/operating-system/linux-intro.md | 2 +- docs/database/mysql/mysql-questions-01.md | 2 +- docs/system-design/basis/refactoring.md | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/cs-basics/operating-system/linux-intro.md b/docs/cs-basics/operating-system/linux-intro.md index ead13577..9255eb1f 100644 --- a/docs/cs-basics/operating-system/linux-intro.md +++ b/docs/cs-basics/operating-system/linux-intro.md @@ -70,7 +70,7 @@ inode 是 Linux/Unix 文件系统的基础。那 inode 到是什么?有什么作 通过以下五点可以概括 inode 到底是什么: -1. 硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是 4kb,约为 8 个连续的扇区组成(每个扇区存储 512 字节)。一个文件可能会占用多个 block,但是一个块只能存放一个文件。虽然,我们将文件存储在了块(block)中,但是我们还需要一个空间来存储文件的 **元信息 metadata**:如某个文件被分成几块、每一块在的地址、文件拥有者,创建时间,权限,大小等。这种 **存储文件元信息的区域就叫 inode**,译为索引节点:**i(index)+node**。 **每个文件都有一个唯一的 inode,存储文件的元信息。** +1. 硬盘以扇区 (Sector) 为最小物理存储单位,而操作系统和文件系统以块 (Block) 为单位进行读写,块由多个扇区组成。文件数据存储在这些块中。现代硬盘扇区通常为 4KB,与一些常见块大小相同,但操作系统也支持更大的块大小,以提升大文件读写性能。文件元信息(例如权限、大小、修改时间以及数据块位置)存储在 inode(索引节点)中。每个文件都有唯一的 inode。inode 本身不存储文件数据,而是存储指向数据块的指针,操作系统通过这些指针找到并读取文件数据。 固态硬盘 (SSD) 虽然没有物理扇区,但使用逻辑块,其概念与传统硬盘的块类似。 2. inode 是一种固定大小的数据结构,其大小在文件系统创建时就确定了,并且在文件的生命周期内保持不变。 3. inode 的访问速度非常快,因为系统可以直接通过 inode 号码定位到文件的元数据信息,无需遍历整个文件系统。 4. inode 的数量是有限的,每个文件系统只能包含固定数量的 inode。这意味着当文件系统中的 inode 用完时,无法再创建新的文件或目录,即使磁盘上还有可用空间。因此,在创建文件系统时,需要根据文件和目录的预期数量来合理分配 inode 的数量。 diff --git a/docs/database/mysql/mysql-questions-01.md b/docs/database/mysql/mysql-questions-01.md index 1564f364..9991c752 100644 --- a/docs/database/mysql/mysql-questions-01.md +++ b/docs/database/mysql/mysql-questions-01.md @@ -193,7 +193,7 @@ MySQL 中没有专门的布尔类型,而是用 TINYINT(1) 类型来表示布 - **分析器:** 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。 - **优化器:** 按照 MySQL 认为最优的方案去执行。 - **执行器:** 执行语句,然后从存储引擎返回数据。 执行语句之前会先判断是否有权限,如果没有权限的话,就会报错。 -- **插件式存储引擎**:主要负责数据的存储和读取,采用的是插件式架构,支持 InnoDB、MyISAM、Memory 等多种存储引擎。 +- **插件式存储引擎**:主要负责数据的存储和读取,采用的是插件式架构,支持 InnoDB、MyISAM、Memory 等多种存储引擎。InnoDB 是 MySQL 的默认存储引擎,绝大部分场景使用 InnoDB 就是最好的选择。 ## MySQL 存储引擎 diff --git a/docs/system-design/basis/refactoring.md b/docs/system-design/basis/refactoring.md index eeecb0c2..c6042837 100644 --- a/docs/system-design/basis/refactoring.md +++ b/docs/system-design/basis/refactoring.md @@ -54,6 +54,12 @@ category: 代码质量 > 重构的唯一目的就是让我们开发更快,用更少的工作量创造更大的价值。 +## 性能优化就是重构吗? + +重构的目的是提高代码的可读性、可维护性和灵活性,它关注的是代码的内部结构——如何让开发者更容易理解代码,如何让后续的功能开发和维护更加高效。而性能优化则是为了让代码运行得更快、占用更少的资源,它关注的是程序的外部表现——如何减少响应时间、降低资源消耗、提升系统吞吐量。这两者看似对立,但实际上它们的目标是统一的,都是为了提高软件的整体质量。 + +在实际开发中,理想的做法是首先**确保代码的可读性和可维护性**,然后根据实际需求选择合适的性能优化手段。优秀的软件设计不是一味追求性能最大化,而是要在可维护性和性能之间找到平衡。通过这种方式,我们可以打造既**易于管理**又具有**良好性能**的软件系统。 + ## 何时进行重构? 重构在是开发过程中随时可以进行的,见机行事即可,并不需要单独分配一两天的时间专门用来重构。 @@ -132,6 +138,7 @@ Code Review 可以非常有效提高代码的整体质量,它会帮助我们 除了可以在重构项目代码的过程中练习精进重构之外,你还可以有下面这些手段: +- [当我重构时,我在想些什么](https://mp.weixin.qq.com/s/pFaFKMXzNCOuW2SD9Co40g):转转技术的这篇文章总结了常见的重构场景和重构方式。 - [重构实战练习](https://linesh.gitbook.io/refactoring/):通过几个小案例一步一步带你学习重构! - [设计模式+重构学习网站](https://refactoringguru.cn/):免费在线学习代码重构、 设计模式、 SOLID 原则 (单一职责、 开闭原则、 里氏替换、 接口隔离以及依赖反转) 。 - [IDEA 官方文档的代码重构教程](https://www.jetbrains.com/help/idea/refactoring-source-code.html#popular-refactorings):教你如何使用 IDEA 进行重构。