〇、前言
了解行业术语是一个程序猿的基本素养,只有更深入的了解才能与其他人畅快沟通,下面来简单汇总下,会持续更新。
欢迎评论区补充。
之前版本:专业术语简介【一】:没有银弹、加盐、毛刺、冒烟测试、热备。
一、具体介绍
1.1 排水(数据库)
在数据库管理系统(DBMS)中,"排水"是一个关键的专业术语,它指的是将内存中的数据持久化存储到磁盘中的过程。这与城市排水系统或给排水工程中的"排水"完全不同,而是数据库管理中的特定操作。
- 数据库排水的必要性
简单可以概括为三点:
数据持久性保障: 当系统崩溃或断电时,内存中的数据会丢失,通过排水操作可以将数据安全写入磁盘,保证数据不丢失。
数据一致性维护: 通过事务日志和检查点机制,确保在系统恢复后数据处于一致状态。
**性能优化:**通过先写入内存再批量写入磁盘的方式,减少磁盘I/O操作,提高数据库写入性能。
- 具体操作流程
**写入日志:**在进行数据排水之前,数据库会将所有待写入的数据操作记录写入事务日志中。事务日志是持久化的存储介质,用于记录数据库的所有事务操作(包括插入、更新和删除)。
**刷新脏页:**数据通常存放在内存的缓冲区(Buffer Cache)中,而不是直接写入磁盘,当进行排水操作时,会将缓冲区中被修改过的数据页(Dirty Page)刷新到磁盘中,这样可以在系统崩溃时,从磁盘中恢复数据。
**写入检查点:**为了减少排水操作的频率,数据库会定期将缓冲区中的数据页写入磁盘,形成检查点(Checkpoint)。检查点是一个标记,表示数据库在这个时间点之前的数据都已经被成功写入磁盘,当系统崩溃时,可以通过检查点恢复到最近的一致状态。
**回写脏页:**在进行排水操作时,可以选择将缓冲区中的数据页回写到磁盘中,而不是等到检查点,这种方式可以减少系统的 I/O 压力,提高数据库性能。
- 工作原理
数据库采用**"先写内存,后写磁盘"**的策略,具体流程如下:
应用程序对数据库进行写操作。
数据先被写入内存缓冲区(Buffer Pool)。
事务操作记录写入事务日志(WAL,Write-Ahead Logging)。
在适当的时候(如检查点、系统空闲时),将内存中的脏页刷新到磁盘。
系统崩溃后,通过事务日志和检查点进行恢复。
- 性能优势
减少 I/O 操作:内存写入速度远高于磁盘写入,先写入内存再批量写入磁盘,减少磁盘I/O次数。
提高写入性能:内存操作比磁盘操作快 100-1000 倍,通过缓冲机制显著提升写入速度。
批量处理:可以将多个小写操作合并为一次大写操作,进一步优化 I/O 性能。
异步处理:排水操作可以与应用操作异步进行,不影响应用的响应速度。
- 数据库排水与系统可靠性
数据库排水是保证系统可靠性的关键机制。
RPO(Recovery Point Objective):通过排水操作,可以将数据丢失时间窗口控制在最小范围。
RTO(Recovery Time Objective):在系统恢复时,通过检查点和事务日志,可以快速恢复到最近的一致状态。
故障恢复:系统崩溃后,数据库可以通过检查点和事务日志进行恢复,确保数据一致性。
因此,理解"排水"概念对数据库管理员、系统架构师和软件工程师来说至关重要,它直接影响到数据库系统的可靠性、性能和数据安全。
1.2 哈希碰撞
哈希碰撞是指两个不同的输入数据,经过同一个哈希函数处理后,得到了相同的输出结果(哈希值)。
let input1 = "Hello World"
let input2 = "Goodbye World"
// 如果下边等式成立,就代表发生额哈希碰撞
hash(input1) == hash(input2)
为什么会发生哈希碰撞?
主要原因就是哈希函数的输出长度是固定的(比如 MD5 输出是 128 位,SHA-256 输出是 256 位),而输入的数据可以是无限长、无限多的组合。
所以从数学上讲:输入空间 > 输出空间 ⇒ 必然存在多个输入映射到同一个输出。这就是所谓的鸽巢原理(Pigeonhole Principle)。
安全哈希算法如何应对碰撞?
一个好的哈希算法应该具备以下特性:
抗碰撞性强(Collision Resistance):很难人为构造出两个不同输入得到相同输出。
雪崩效应明显:输入哪怕改变一个比特,输出就会完全不同。
不可逆性(Preimage Resistance):不能通过哈希值反推出原始输入。
当前尚未出现碰撞示例的安全哈希算法有:SHA-2(如 SHA-256)、SHA-3、bcrypt(用于密码存储)。
2004 年,中国密码学家王小云团队首次成功找到两组不同的明文,它们的 MD5 哈希值完全一样,这标志着 MD5 已被正式破解,不再适合用于安全场景。
因此 MD5属于不被推荐用于高保密性的数据存储,另外类似的还有 SHA-1。
1.3 彩虹表漏洞
彩虹表(Rainbow Table) 是一种用于破解哈希值的预计算查找表,它通过预先计算出可能的明文数据对应的哈希值,并将这些对应关系存储在一个庞大的表格中。
当需要破解某个哈希值时,可以通过查询这张表格快速找到对应的原始输入。这种方法特别适用于那些没有加盐(Salt)或者使用弱哈希算法的情况。
彩虹表主要用于攻击如 MD5、SHA-1 等较老的哈希算法,由于其设计缺陷以及广泛的应用,已经有许多现成的彩虹表可供使用。
为了防止彩虹表攻击,通常采取以下几种策略:
加盐(Salting): 在进行哈希运算之前,向每个密码添加一段随机生成的字符串(称为"盐") 。这意味着即使两个用户选择了相同的密码,它们的哈希结果也会不同,因为各自的盐值不同。这使得彩虹表变得无效,因为每个用户的哈希都需要独立构建一张新的彩虹表。
使用强哈希算法: 选择更安全的哈希算法,比如 bcrypt,scrypt,或 Argon2。这些算法不仅增加了哈希计算的时间成本,还内置了加盐机制,进一步提高了安全性。
增加迭代次数: 对于某些哈希算法,可以通过增加迭代次数的方式来提高攻击难度 。例如,在 PBKDF2 中,可以通过调整参数来控制哈希函数被重复应用的次数,从而延缓暴力破解的速度。
**多因素认证(MFA):**虽然这不是直接针对彩虹表攻击的防护措施,但启用多因素认证可以显著增强账户的安全性,即使密码被破解也无法轻易访问账户。
1.4 多因子认证(Multi-Factor Authentication, MFA)
MFA 有时也称为多步验证或双重认证,是一种安全机制,它通过要求用户提供两种或更多种不同类型的认证因素来增强安全性。
这些因素通常分为以下三类:
知识因素(Something you know):用户知道的东西,比如密码、PIN码。
拥有因素(Something you have):用户拥有的东西,比如手机、硬件令牌、智能卡。
生物特征因素(Something you are):用户的生物特征,比如指纹、虹膜扫描、面部识别。
MFA 通过结合上述至少两个不同类别的认证因素来确认用户身份,极大地提高了账户的安全性,因为攻击者即使获取了用户的密码(知识因素),如果没有第二个因素(如手机上的验证码或指纹),也无法成功登录账户。
实施 MFA 的方式:
短信验证码(SMS-based OTP): 在输入正确的用户名和密码之后,系统会发送一个一次性密码(OTP)到用户的手机上,用户需要输入这个验证码才能完成登录过程。
软件令牌: 使用专门的应用程序生成一次性密码,例如 Google Authenticator、Microsoft Authenticator 等。
硬件令牌: 物理设备生成的动态密码,如 YubiKey。
生物识别技术: 利用指纹、面部识别或语音识别等方式进行身份验证。
**电子邮件验证码:**类似于短信验证码,不过是通过电子邮件发送一次性密码。
优点:
提高安全性:增加了额外的安全层,大大降低了账户被非法访问的风险。
灵活性:可以根据不同的应用场景和个人偏好选择合适的认证方式组合。
合规性:帮助满足某些行业标准和法规对数据保护的要求。
造成的不便:
用户体验:可能增加用户的操作步骤,影响便捷性。
依赖性:如果丢失了用于接收验证码的设备或者无法使用生物识别功能,则可能导致无法正常登录。
社会工程学攻击:攻击者可能会尝试通过欺骗手段绕过 MFA,因此教育用户识别此类威胁同样重要。
所以,实施 MFA 是提升在线服务和个人信息安全的有效措施之一。
随着技术的发展,新的认证方法不断涌现,使得 MFA 更加高效且易于使用,因此 MFA 策略还是比较推荐的。
1.5 "流状态"(Flow State)(心流)
"流状态"(Flow State),常被简称为"心流",是心理学中的一个核心概念,由美籍匈牙利心理学家米哈里·契克森米哈赖(Mihaly Csikszentmihalyi)在1975年首次提出。
它描述的是一种完全沉浸、全神贯注于当前活动的精神状态 。在这种状态下,人们会感到高度的专注、享受和满足感,甚至忘记时间的流逝和自我的存在。
根据契克森米哈赖的研究,进入心流状态通常伴随着以下体验:
完全专注: 注意力高度集中在手头的任务上,外界干扰(如手机消息、环境噪音)自动被过滤。
行动与意识融合: 你不再"思考"怎么做,动作自然而然地发生,就像人车合一的赛车手或即兴演奏的音乐家。
自我意识消失: 你忘记了"我"的存在,不再担心别人怎么看你,也不再怀疑自己的能力。
时间感扭曲: 感觉时间过得飞快("怎么一下就过了3个小时?"),或者在极慢的动作中感觉时间变慢。
直接且清晰的反馈: 你能立刻知道自己做得好不好(例如编程时代码跑通了,打球时球进了),从而即时调整行动。
挑战与技能的平衡: 这是最关键的一点。任务的难度略高于你当前的技能水平,但又在你的能力范围内(既不会太难导致焦虑,也不会太简单导致无聊)。
掌控感: 虽然任务有挑战性,但你感觉自己能掌控局面。
**活动本身即是目的(Autotelic):**做这件事本身就是奖励,不需要外部的金钱或名誉驱动。
- 心流通道模型(The Flow Channel)
心流产生的关键在于挑战(Challenge)与技能(Skill)的匹配:
高挑战 + 低技能 = 焦虑(Anxiety):任务太难,你会感到压力和挫败。
低挑战 + 高技能 = 无聊(Boredom):任务太简单,你会感到乏味和分心。
低挑战 + 低技能 = 冷漠(Apathy):既不关心也做不好。
**高挑战 + 高技能 = 心流(Flow):这是最佳区域。**当你在不断磨练技能去应对逐渐增加的挑战时,就会进入心流。
- 在 AI Coding 时代的意义
心流状态对现代开发者尤为重要。
**AI 帮助消除"琐碎摩擦":**传统编程中,查文档、写样板代码、调试语法错误等低价值工作容易打断心流。AI Coding 工具(如 Claude Code)可以瞬间完成这些琐事,让开发者直接聚焦于高挑战、高技能的核心逻辑设计和架构构建,更容易进入心流通道。
"Vibe Coding"即心流: 安德烈·卡帕西(Andrej Karpathy)提出的"Vibe Coding"概念,本质上就是利用自然语言与 AI 协作,让思维流畅地转化为代码。这种**"所想即所得"的极低延迟反馈循环,是诱发心流的完美环境**。
**深度工作的护城河:**在信息碎片化的 2026 年,能够长时间维持心流状态进行深度创造,是区分普通执行者与顶尖创新者的关键能力。
- 如何触发心流?
设定清晰的目标:知道下一步要做什么。
消除干扰:关闭通知,创造独处环境。
选择恰当难度的任务:主动寻找那些让你"跳一跳才够得着"的任务。
即时反馈:利用工具(如AI、测试框架)快速获得结果反馈。
简而言之,心流是人类幸福感和生产力的巅峰体验,也是我们在 AI 时代从**"苦力劳动"转向"创造性劳动"**的关键心理状态。