当前位置: 首页 > article >正文

深入解析浮点数内存存储与IEEE 754标准:从0.1+0.2≠0.3说起

1. 从一次“诡异”的计算错误说起前几天一个刚入行的同事跑来找我一脸困惑地给我看了一段Python代码。他写了个简单的循环累加想计算0.1加10次理论上应该等于1.0。但打印出来的结果却是0.9999999999999999。他反复检查了代码确认逻辑没错甚至怀疑是不是Python解释器出了bug。我一看就笑了告诉他“兄弟你这不是bug你这是撞上浮点数的‘特性’了。” 这个看似简单的现象背后牵扯到的正是计算机科学中一个既基础又至关重要的概念——浮点数以及它在内存中那套精密而独特的存储规则。浮点数这个在编程中无处不在的数据类型是处理小数和极大/极小数值的基石。无论是科学计算、图形渲染、金融建模还是游戏开发都离不开它。但如果你只把它当作一个能存小数的“黑盒子”那么类似0.10.2不等于0.3的“灵异事件”就会时不时跳出来困扰你。理解浮点数在内存中是如何被“拆解”和“重组”的不仅是解开这些谜题的关键更是写出健壮、精确代码的必备技能。这篇文章我就结合自己这些年踩过的坑和积累的经验带你彻底搞懂浮点数的本质及其内存存储的奥秘让你下次再遇到精度问题时能胸有成竹地说“我知道问题在哪儿。”2. 浮点数的核心设计思想用科学计数法在计算机中安家在深入内存之前我们必须先理解浮点数设计的初衷。计算机的内存是二进制的且存储空间有限。我们如何用有限的二进制位来表示范围极其广泛从微观粒子质量到宇宙距离且精度要求各异的实数呢答案就是借鉴我们熟悉的科学计数法。2.1 科学计数法的二进制版本回想一下十进制的科学计数法一个数可以表示为有效数字 × 10的指数次幂。例如光速约299792458米/秒可以写成2.99792458 × 10^8。这里2.99792458是有效数字也叫尾数8是指数。浮点数完全沿用了这个思想只不过把底数从10换成了2。任何一个二进制实数忽略符号都可以表示为有效数字Mantissa/Significand × 2的指数Exponent次幂这就是浮点数最核心的公式。内存中那几个字节就是用来分别存储这个公式里的符号正负、指数和有效数字这三部分信息的。这种做法的最大优势在于它通过调节指数实现了动态的小数点“浮动”——这也是“浮点”一词的由来。指数变大数值范围就向巨大的方向扩展指数变小甚至为负数值范围就向极小的精度方向深入。固定点数的表示法则没有这种灵活性。2.2 标准化表示隐藏的“1”为了最大化利用有限的二进制位来表示有效数字提高精度浮点数标准引入了一个关键约定规格化Normalization。对于二进制科学计数法我们总可以调整指数使得有效数字的整数部分有且仅有一个“1”。比如二进制数1011.101可以写成1.011101 × 2^3看到吗调整后整数部分变成了“1”。由于在二进制中这个前导的“1”在规格化后总是存在为了节省一位宝贵的存储空间在存储有效数字时我们干脆把这个固定的“1”隐藏起来不存它只存储它后面的小数部分即.011101这个部分被称为“尾数”或“小数部分”。这个“隐藏位”技巧是理解浮点数内存布局的精髓。它意味着在计算一个浮点数的实际值时我们需要在内存中读取的尾数前面默默地加上一个“1.”。这相当于白嫖了一位精度。注意这个“隐藏的1”规则主要适用于最常见的规格化数。对于非常接近于0的数非规格化数指数有特殊编码此时隐藏位是0这是为了平滑地过渡到0值避免出现“突然下溢”的精度断层。我们后面会详细讨论。3. IEEE 754标准浮点数的世界语如果每个硬件厂商、每种编程语言都自己搞一套浮点数格式那世界就乱套了。为了让不同系统间能可靠地交换浮点数据并保证计算行为的一致性IEEE 754标准应运而生。它就像是浮点数领域的“世界语”如今绝大多数计算机系统都遵循这一标准。该标准主要定义了两种我们最常接触的二进制浮点数格式单精度float占用32位4字节双精度double占用64位8字节此外还有半精度16位、四精度128位等。下面我们以最典型的单精度float和双精度double为例拆解它们的内存布局。3.1 内存布局拆解32位单精度的“三明治”结构一个32位的单精度浮点数它的32个比特被严格地划分为三部分像一块三明治部分符号位 (Sign)指数位 (Exponent)尾数位/有效数字位 (Mantissa/Significand)比特宽度1 bit8 bits23 bits作用决定正负。0代表正数1代表负数。存储经过“偏置”后的指数值。存储规格化后有效数字的小数部分即隐藏了整数1之后的部分。1. 符号位Sign最简单只有1位。0表示正数1表示负数。它决定了整个数的正负号。2. 指数位Exponent—— 关键中的关键这8位存储的并不是指数的原始值。因为指数有可能是正数表示很大的数也可能是负数表示很小的数。如果直接用补码表示比较大小会麻烦。IEEE 754采用了一种巧妙的偏置编码Biased Representation。对于一个8位的指数域规定的偏置量是127。实际存储的值E 指数的真实值e 127所以指数的真实值e 存储的值E - 127这样做的妙处在于所有经过偏置后的指数值E都是一个0到255之间的无符号整数。这非常便于硬件直接进行大小的比较和排序。例如真实指数e 0则存储E 0 127 127(二进制01111111)。真实指数e -3则存储E -3 127 124。真实指数e 5则存储E 5 127 132。3. 尾数位/有效数字位Mantissa这23位存储的是我们前面提到的“规格化后有效数字的小数部分”。记住前面有一个隐藏的“1.”。所以一个规格化单精度浮点数的实际值Value计算公式为Value (-1)^Sign × (1 Mantissa) × 2^(Exponent - 127)(-1)^Sign符号部分Sign为0则结果是1正数Sign为1则结果是-1负数。(1 Mantissa)1是隐藏的整数位Mantissa是23位尾数位代表的二进制小数例如尾数位101...表示二进制小数.101...。2^(Exponent - 127)指数部分Exponent是8位指数域存储的无符号数减去偏置127得到真实指数。3.2 双精度浮点数更宽更精确双精度double使用64位其布局思想与单精度完全一致只是各部分“加宽”了部分符号位 (Sign)指数位 (Exponent)尾数位 (Mantissa)比特宽度1 bit11 bits52 bits偏置量无1023无双精度的计算公式为Value (-1)^Sign × (1 Mantissa) × 2^(Exponent - 1023)更宽的指数域11位意味着能表示更大和更小的数值范围。而宽得多的尾数域52位则直接带来了更高的精度能更精确地表示一个数。3.3 特殊值的编码无穷大、NaN与零IEEE 754标准不仅定义了常规数字还预留了指数部分的特殊编码来表示一些边界情况这使得浮点运算更加完备。零Zero当指数位和尾数位全为0时表示数值0。根据符号位是0还是1有0和-0两种表示在大多数比较中它们被视为相等。无穷大Infinity当指数位全为1且尾数位全为0时表示无穷大。符号位决定正负Inf和-Inf。例如1.0 / 0.0 会产生正无穷大。非数NaN, Not a Number当指数位全为1且尾数位不为0时表示NaN。NaN用于表示无效的运算结果如0.0 / 0.0、sqrt(-1.0)。NaN有一个重要的特性任何涉及NaN的比较操作除了“!”结果都是false甚至NaN NaN的结果也是false。判断一个值是否为NaN需要使用专门的函数如C语言的isnan()Python的math.isnan()。非规格化数Denormalized/Subnormal Numbers当指数位全为0且尾数位不为0时表示非规格化数。此时隐藏位不再是1而是0。实际值计算公式变为Value (-1)^Sign × (0 Mantissa) × 2^(-126)单精度。非规格化数的引入是为了实现渐进下溢让绝对值很小的数能够比直接归零更精确地表示填补了0到最小规格化正数之间的“空洞”。4. 实战演练手把手解析内存中的浮点数理论说得再多不如亲手拆解一个。我们以单精度浮点数-12.375为例看看它如何在内存中安家。步骤1转换为二进制科学计数法规格化处理整数部分12 的二进制是1100。处理小数部分0.375 如何转二进制不断乘2取整。0.375 × 2 0.75 → 整数部分 00.75 × 2 1.5 → 整数部分 10.5 × 2 1.0 → 整数部分 1小数部分为0停止。所以 0.375 的二进制是.011。合并-12.375的二进制表示为-1100.011。规格化移动小数点使其左边只有一位1。-1100.011-1.100011 × 2^3这里有效数字是1.100011真实指数e 3。步骤2确定内存三要素符号位Sign因为是负数所以Sign 1。指数位Exponent真实指数e 3。单精度偏置为127所以存储的指数E 3 127 130。130 的二进制是10000010(8位)。尾数位Mantissa规格化后的有效数字是1.100011。隐藏整数位的“1.”只存储小数部分.100011。小数部分100011需要补齐到23位。在其后补0得到10001100000000000000000。步骤3组装内存位模式按照1位符号位 8位指数位 23位尾数位的顺序组装1 10000010 10001100000000000000000为了方便阅读和验证我们通常写成十六进制。将上述二进制每4位一组1100 0001 0100 0110 0000 0000 0000 0000对应十六进制0xC1460000所以单精度浮点数-12.375在内存中的表示就是0xC1460000。你可以用任何支持查看内存的编程工具比如C语言里用指针和printf(%08X, ...)来验证这个结果。实操心得理解这个转换过程至关重要。当你调试程序在内存窗口看到一串像0xC1460000这样的十六进制数时如果能立刻反应过来它大概代表一个负的、十几左右的数你的调试效率会大大提升。对于双精度过程完全一样只是位数和偏置量不同。5. 浮点数的“阿喀琉斯之踵”精度问题与应对策略现在我们可以回答开头那个问题了为什么0.1 0.2 ! 0.3根本原因在于绝大多数十进制小数无法用有限位的二进制小数精确表示。5.1 精度丢失的原理剖析让我们把0.1转换成二进制0.1(十进制) 0.0001100110011001100110011001100110011...(二进制无限循环)看到了吗0.1在二进制下是一个无限循环小数就像1/3在十进制下是0.333...一样。无论是单精度23位尾数还是双精度52位尾数都只能截取这个无限循环序列的前面有限位进行存储。这就必然引入了舍入误差。0.2同理二进制也是无限循环的。当计算机存储的这两个带有微小误差的近似值相加时误差可能会累积或放大导致结果与我们所期望的精确的0.3有一个极小的偏差。在打印时由于显示精度设置这个微小的偏差比如5.551115123125783e-17可能被显示出来就出现了0.30000000000000004这样的结果。5.2 编程中的常见陷阱与避坑指南避免直接比较浮点数是否相等这是铁律永远不要写if (a b)来比较两个浮点数尤其是经过计算得到的。因为微小的舍入误差可能导致它们并不严格相等。正确做法比较它们的差值是否在一个极小的允许误差范围内这个范围通常被称为“epsilon”。# Python 示例 a 0.1 0.2 b 0.3 epsilon 1e-10 # 根据精度要求设定 if abs(a - b) epsilon: print(在误差范围内可以认为相等)在C/C中对于float和double标准库通常提供了FLT_EPSILON和DBL_EPSILON常量作为参考。小心累积误差在循环中进行大量浮点数累加时误差会累积。对于求和操作可以考虑使用Kahan求和算法等补偿算法来显著降低累积误差。其核心思想是跟踪并补偿在累加过程中丢失的低位精度。注意运算顺序浮点数运算不满足结合律(a b) c的结果可能与a (b c)有细微差别。在可能的情况下将数量级相近的数相加可以减小舍入误差。也可以考虑从大到小排序后相加但效果因情况而异。金融计算请用十进制对于货币、会计等对十进制精度要求极高的场景绝对不要使用浮点数。应使用专门处理十进制浮点数的库如Python的decimal模块Java的BigDecimal类。这些库用整数模拟小数或者使用十进制的浮点标准如IEEE 754-2008中的十进制浮点格式可以精确表示十进制小数。了解你的“epsilon”不同精度的浮点数其机器精度即1和大于1的最小可表示数的差值不同。单精度float的精度约为1.2e-7双精度double的精度约为2.2e-16。在设置比较阈值时应参考这个量级。6. 性能、选择与最佳实践理解了原理和陷阱我们该如何在工程中用好浮点数呢6.1 单精度float vs 双精度double的选择精度优先绝大多数科学计算、数值分析、通用编程场景默认使用双精度double。其更高的精度约15-16位有效十进制数字能更好地控制误差是现代CPU尤其是x64架构高效处理的数据宽度。内存与带宽敏感在图形渲染GPU、嵌入式系统、大型数值数组如3D模型顶点数据、大型矩阵且对极高精度不敏感的场景下使用单精度float可以节省一半的内存和带宽有时还能获得更快的计算速度。许多GPU对单精度运算有优化。强制转换需谨慎在混合精度的表达式中低精度float通常会向高精度double提升。但将double强制转换为float会直接截断尾数造成精度损失需明确知晓后果。6.2 检查与诊断工具查看内存表示在C/C中可以通过联合体union或指针强制转换直接查看float/double的二进制位。#include stdio.h #include stdint.h void print_float_bits(float f) { uint32_t* p (uint32_t*)f; printf(Hex: 0x%08X\n, *p); }特殊值判断使用isnan(x),isinf(x)函数来判断NaN和无穷大。精度相关常量使用cfloat或float.h头文件中的常量如FLT_EPSILON,DBL_MIN,DBL_MAX等。6.3 一个综合案例数值稳定的算法设计假设你需要计算一个数列的和S 1 1/2 1/3 ... 1/n。当n很大时直接从前向后加后面的项1/n很小加到已经很大的部分和上可能会因为舍入而丢失贡献。一种更稳定的方法是从后向前加即从最小的项1/n开始加起。这样每次相加的两个数数量级相对更接近舍入误差的影响会更小。虽然对于这个具体的调和级数改善可能不明显但它体现了“先加小数后加大数”以减少误差的思想在更复杂的数值计算中非常有用。理解浮点数不仅仅是记住“不要直接比较相等”。它要求我们在内心深处建立起一种对计算机数值计算局限性的清醒认识。每一次浮点运算都是一次近似。我们的任务是设计算法、组织运算顺序、选择数据类型让这个近似结果尽可能可靠、可控地接近我们的数学理想。下次当你再看到0.30000000000000004时希望你的反应不再是困惑而是会心一笑然后稳健地写下你的 epsilon 比较语句。这才是从“会用”到“懂行”的关键一步。

相关文章:

深入解析浮点数内存存储与IEEE 754标准:从0.1+0.2≠0.3说起

1. 从一次“诡异”的计算错误说起前几天,一个刚入行的同事跑来找我,一脸困惑地给我看了一段Python代码。他写了个简单的循环累加,想计算0.1加10次,理论上应该等于1.0。但打印出来的结果却是0.9999999999999999。他反复检查了代码&…...

Swift集成飞书生态:使用feishu-swift SDK实现高效开发

1. 项目概述:一个连接飞书与Swift生态的桥梁最近在折腾一个内部工具,需要把iOS App里的某些数据自动同步到飞书文档里,方便团队协作查看。一开始想用飞书官方API直接写,但发现Swift这边原生的HTTP请求和JSON处理起来有点啰嗦&…...

AI短剧拉片应用软件2026推荐,助力高效内容分析

AI短剧拉片应用软件2026推荐,助力高效内容分析在当今的娱乐市场中,AI短剧凭借其紧凑的剧情、便捷的观看方式,受到了广大观众的喜爱。据艾瑞咨询《2026 年中国短剧行业发展报告》显示,2026 年 AI 短剧市场规模持续增长,…...

DGX服务器上Spark性能优化:NUMA绑定与GPU资源精细调度实践

1. 项目概述与核心价值最近在折腾一个挺有意思的项目,叫adadrag/nemoclaw-dgx-spark。乍一看这个名字,像是把几个八竿子打不着的技术名词硬凑在了一起:adadrag像是个开发者代号,nemoclaw听着像某个工具或框架,dgx让人联…...

手机短剧拉片软件2026推荐,助力高效内容分析

手机短剧拉片软件2026推荐,助力高效内容分析在当今的影视行业中,手机短剧以其短小精悍、节奏紧凑的特点受到了广大观众的喜爱。对于创作者来说,如何深入分析这些短剧,学习其中的创作技巧,成为了提升自身水平的关键。据…...

为什么92%的团队在ElevenLabs多角色对话项目中3周内失败?——基于17个真实SaaS客户日志的根因分析

更多请点击: https://intelliparadigm.com 第一章:为什么92%的团队在ElevenLabs多角色对话项目中3周内失败?——基于17个真实SaaS客户日志的根因分析 ElevenLabs 的 VoiceLab API 虽然提供了强大的多说话人语音合成能力,但其多角…...

开源AI本地化框架py-gpt:微内核插件化架构与RAG应用实战

1. 项目概述:一个本地化、可扩展的AI应用框架最近在折腾AI应用本地化部署的朋友,可能都绕不开一个核心矛盾:既想享受大语言模型(LLM)强大的对话和推理能力,又对数据隐私、网络依赖和持续付费心存顾虑。市面…...

为什么预训练再好的VLA,在新任务上普通SFT 并不好用?CapVector给出了原因和方案

Vision-Language-Action(VLA)模型现在已经很强了。 但一个很现实的问题是: 预训练再充分的 VLA,到了新任务上,普通 SFT 往往并不好用。 很多工作发现: 训练收敛慢少量 demonstration 不够泛化能力并没有…...

高效大语言模型优化全攻略:从量化、LoRA到推理引擎实战

1. 项目概述:为什么我们需要关注高效大语言模型?最近在GitHub上看到一个叫“Awesome-Efficient-LLM”的项目,点进去一看,好家伙,简直是个宝藏。这个项目本质上是一个精心整理的资源列表,专门收集那些致力于…...

Adobe-GenP 3.0深度解析:破解Adobe Creative Cloud订阅验证的技术实现

Adobe-GenP 3.0深度解析:破解Adobe Creative Cloud订阅验证的技术实现 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe Creative Cloud订阅模式为设…...

告别玄学:给STM32/CH32V的SD卡SPI驱动加上超时、重试与状态机

从零构建工业级SD卡SPI驱动:超时重试与状态机设计实战 在嵌入式系统中,SD卡作为可靠的大容量存储介质被广泛应用。然而许多开发者都经历过这样的困境:实验室测试完美的SD卡驱动,一旦部署到真实环境中就频繁出现读写失败、卡死甚至…...

AI Agent Harness Engineering 的安全攻防:你的智能体如何被欺骗、劫持与利用

AI Agent Harness Engineering 安全攻防深度解析:你的智能体如何被欺骗、劫持与利用 关键词 AI Agent安全、Harness工程、Prompt注入、工具劫持、智能体攻防、LLM安全、权限逃逸 摘要 随着AI Agent从概念验证走向大规模产业落地,作为智能体控制平面的Harness层已成为攻防…...

思源宋体TTF完全指南:7种字重免费解决中文排版难题

思源宋体TTF完全指南:7种字重免费解决中文排版难题 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目找不到合适的字体而烦恼吗?无论是网页设计…...

AI Agent交互设计新范式:基于Leader Key的可编程对话流实践

1. 项目概述与核心价值最近在折腾AI智能体(AI Agent)的开发,发现一个挺有意思的现象:很多开发者,包括我自己在内,在初期都会把大量精力花在模型调用、工具链集成这些“硬核”功能上,却常常忽略了…...

朋友学过都说好的家电清洗培训 行业前景与培训内容科普解读

家电清洗培训行业前景随着人们生活水平的提高,家电的普及率越来越高,对家电清洗的需求也日益增长。据相关数据显示,近年来家电清洗市场规模呈现逐年上升的趋势。在城市中,越来越多的家庭开始重视家电的清洁与保养,以延…...

企业出海聘用海外员工该怎么挑选靠谱名义雇主服务商?

很多企业出海初期,都会卡在海外员工聘用这一步:没有海外实体,没法合法签合同、缴社保,想找名义雇主服务商,又怕选到不靠谱的,踩坑又不合规。结合我这几年帮出海企业对接服务商的经验,今天不玩虚…...

Minecraft服务器技能数据自动化管理:mcpskills-cli命令行工具实战指南

1. 项目概述与核心价值 最近在折腾一些Minecraft服务器的自动化管理,发现很多重复性的技能配置、权限同步工作特别耗时。手动去游戏里敲指令,或者对着配置文件一条条改,效率低还容易出错。就在这个当口,我发现了 alibiinformatio…...

BallonsTranslator:3分钟搞定漫画翻译的终极AI辅助工具

BallonsTranslator:3分钟搞定漫画翻译的终极AI辅助工具 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址: https…...

Mochi语言解析:轻量级编程语言的设计原理与应用实践

1. 项目概述:一个为现代应用而生的轻量级编程语言最近在社区里看到不少朋友在讨论mochilang/mochi这个项目,作为一个对编程语言设计和运行时实现有浓厚兴趣的老码农,我立刻就被吸引住了。简单来说,Mochi 是一个新兴的、以轻量级和…...

使用 QLineF 从 QTransform 提取角度信息

我们在对 QGraphicsItem 进行变换时,QT 提供了很多便捷的方法。但当我们想获取当前变换的角度时却有些困难,因为 QTransform 没有提供获取角度的方法。在文章Qt 从 QTransform 逆向解出 Translate/Scale/Rotate(平移/缩放/旋转)分…...

从EGO-Planner到集群协同:分布式轨迹优化在无人机编队中的应用

1. 项目概述:从单机到集群的自主飞行进化如果你玩过无人机,或者关注过机器人领域,大概会知道让一台机器在空中自主规划路径、避开障碍物已经是个不小的挑战。那么,想象一下,让一群无人机像鸟群一样,在复杂、…...

使用git filter-repo删除已提交到git中的敏感信息,api key,配置文件等

使用git filter-repo删除已提交到git中的敏感信息,api key,配置文件等 前提条件 Python 3.5 git > 2.22.0通过 pip 安装:pip install git-filter-repo 注意事项 官方推荐在fresh clone上修改,即clone一份远程的再做修改 操作后…...

FAST开发方法在系统分析中四个阶段

在系统分析师考试中,被频繁考查的FAST(Framework for the Application of Systems Thinking)方法,是一个聚焦于系统分析阶段的框架。 它的核心是将复杂的分析工作拆解为四个环环相扣的阶段:初始研究、问题分析、需求分析和决策分析。 📊 四个阶段速览 阶段 核心任务 1…...

开源智能体框架xbrain:模块化设计与工程实践指南

1. 项目概述:一个面向开发者的开源智能体框架最近在开源社区里,一个名为xbrain的项目引起了我的注意。它由开发者yuruotong1发起,定位是一个“开源智能体框架”。简单来说,它试图为开发者提供一个工具箱,让构建、管理和…...

从计数器到计时器:使用Spectator构建可观测性系统的实践指南

1. 项目概述:从“观众”到“观察者”的视角转变在软件开发,尤其是后端服务开发中,我们常常需要一种机制来观察和度量系统的内部状态。这种观察不是简单的日志打印,而是系统化、结构化地收集运行时指标,比如接口的调用次…...

使用HIP编写GPU 算子向量加法

HIP (Heterogeneous-compute Interface for Portability) 来编写一个 GPU 算子(operator)。HIP 是 AMD 推出的 GPU 编程接口,类似 CUDA,但可在 AMD 和 NVIDIA GPU 上运行。下面我给你一个完整示例,演示如何写一个简单算…...

成都口碑好的特斯拉专修公司有哪些

在成都,如果你是特斯拉车主,寻找一家靠谱的专修公司是非常重要的。今天就给大家推荐一家口碑极佳的特斯拉专修公司——TBA特斯拉专修(成都三业店),也就是成都市三业汽车服务有限责任公司。下面从多个方面来看看它的优势…...

微软 Qlib 实战:从零构建跑赢大盘的 AI 智能选股策略(附最新回测与全流程代码)

在 GitHub 的量化投资社区中,微软亚洲研究院开源的 Qlib 毫无疑问是王者级别的存在(13k Stars)。传统的量化策略通常依赖主观经验设定的指标(如:均线突破、MACD背离),而 Qlib 则是让 人工智能&a…...

前端开发者如何构建个人工具箱:从工具函数到配置片段的效率实践

1. 项目概述:一个前端开发者的“百宝箱”仓库在多年的前端开发生涯中,我养成了一个习惯:每当遇到一个精巧的解决方案、一个高频使用的工具函数,或者一个值得反复琢磨的配置片段,我都会把它们收集起来。久而久之&#x…...

数据库角色管理(Role Management)

1.1、角色基础角色是权限的集合,是 Oracle 权限管理的核心机制。12c 增强了角色的安全特性。创建角色:CREATE ROLE app_developer;创建带密码的角色(需激活时提供密码):CREATE ROLE sensitive_role IDENTIFIED BY &quo…...