CS BASICS · 底层根基 / 随查随用

计算机基础速查

进制换算、单位估算、字符编码、补码运算、字节序与位运算实战、编码格式选用、存储层级量级对比——计算机底层最常用的 83 个知识点一张表收齐,随查随用。

83条速查 12大主题 持续更新

📖 速查表

点击展开各小节

🔢 进制与转换
名称说明要点 / 示例
二进制 只有 0 和 1 两个数码,计算机内部一切数据的基本表示形式 前缀 0b0B
0b1010 = 10
八进制 8 个数码(0~7),早期系统与文件权限常用 Java 前缀 0,JS/Python 前缀 0o
0o17 = 15 权限 755
十六进制 16 个数码(0~9、A~F),一个进制位对应 4 个二进制位,常用于内存地址与颜色值 前缀 0x0X
0xFF = 255 颜色 #FF5733
除基取余法 十进制转 N 进制:不断除以 N 记录余数,直到商为 0,余数倒序读出 13 转二进制:13÷2=6 余 1 → 6÷2=3 余 0 → 3÷2=1 余 1 → 1÷2=0 余 1
倒序读出 1101
按权展开法 N 进制转十进制:各位数字乘以对应位权 N^i 后求和 0b1011 = 1×8 + 0×4 + 1×2 + 1×1 = 11
二 ↔ 十六进制 每 4 个二进制位对应 1 个十六进制位,直接分组即可,无需经过十进制 1111 0101 → 0xF5
补齐位数:左侧不足 4 位补 0
2 的幂速记 容量估算、掩码计算高频使用,建议记熟 2^10 = 1024
2^16 = 65536
2^32 ≈ 42.9 亿 必背
一个字节的位权示意
位权展开:二进制按 2 的幂加权求和,每 4 位对应一个十六进制位
📏 数据单位换算
名称说明要点 / 示例
bit(位) 最小数据单位,只能表示 0 或 1 1 Byte = 8 bit 必背
Byte(字节) 8 个 bit 组成,是内存寻址与存储的基本单位 ASCII 一个字符占 1 Byte;Java 的 byte 类型为 8 位有符号整数
KB / MB / GB / TB 相邻单位按 1024(2^10)倍换算,这是操作系统与编程中的标准口径 1 KB = 1024 B
1 MB = 1024 KB
1 GB = 1024 MB1 TB = 1024 GB
容量快速估算 结合 2 的幂估算内存、缓存需求 2^32 Byte = 4 GB
int 数组 1 亿个元素 ≈ 4 亿 Byte ≈ 381 MB
带宽 Mbps 网络速率单位,小写 b 指 bit,每秒传输的比特数 100 Mbps = 100 Mbit/s 注意大小写
Mbps vs MB/s 1 Byte = 8 bit,下载速度(MB/s)= 带宽(Mbps)÷ 8 100 Mbps 宽带理论峰值 12.5 MB/s
硬盘标称偏差 存储厂商按 1000 进位(1 GB = 10^9 Byte)标注容量,操作系统按 1024 进位显示 1 TB 硬盘在系统中显示约 931 GB,并非缩水
🔤 字符编码

排查乱码只问两个问题:写入时用了什么编码、读取时按什么编码解码,两者不一致就是乱码的唯一根源。

名称说明要点 / 示例
ASCII 128 个字符(0~127),占 1 字节且最高位为 0,包含英文、数字与控制符 'A' = 65
'a' = 97'0' = 48
GBK 中文 Windows 历史默认编码,向下兼容 GB2312,收录简繁汉字 一个汉字占 2 字节 与 UTF-8 不同
Unicode 字符集而非编码方案,为全球每个字符分配唯一码点 '中' = U+4E2D
具体字节排布由 UTF-8/UTF-16 等实现决定
UTF-8 变长编码(1~4 字节),完全兼容 ASCII,是互联网与现代系统的事实标准 英文 1 字节、常用汉字 3 字节、emoji 4 字节 首选编码
UTF-16 变长编码(2 或 4 字节),Java 的 char 即 UTF-16 码元,Windows 内部广泛使用 常用汉字占 2 字节;生僻字/emoji 用代理对占 4 字节
乱码根源 编码(写入)与解码(读取)使用的字符集不一致 UTF-8 文件按 GBK 打开即乱码;解决方案是全链路统一 UTF-8
BOM 字节顺序标记,UTF-8 的 BOM 为 EF BB BF,可能干扰文件解析 Java 读写文件显式指定 StandardCharsets.UTF_8,慎用带 BOM 的编辑器保存
🧮 原码 · 反码 · 补码

计算机实际用补码存整数,负数运算、强转溢出、位运算边界值(如 -1 全 1)都由此而来,是最容易算错的一节。

名称说明要点 / 示例
原码 最高位为符号位(0 正 1 负),其余位表示数值绝对值 8 位下 +5 = 0000 0101
-5 = 1000 0101
反码 正数的反码与原码相同;负数符号位不变,其余位按位取反 -5 反码 = 1111 1010
补码 正数补码与原码相同;负数补码 = 反码 + 1,计算机实际存储使用的形式 -5 补码 = 1111 1011 存储形式
-1 的补码 8 位下 -1 的补码为全 1,是最容易识别的标志 -1 = 1111 1111 = 0xFF
为什么用补码 解决原码中 0 有两种表示(+0/-0)的问题,且减法可转化为加法,符号位直接参与运算无需特殊处理 5 + (-5) = 1 0000 0000,溢出位丢弃后恰好得 0
取值范围 n 位补码可表示 -2^(n-1) ~ 2^(n-1)-1,负数比正数多一个 8 位:-128 ~ 127
32 位 int:约 ±21.47 亿
补码速算 「按位取反 +1」可双向使用:由负数求绝对值同样适用 1111 1011 → 取反 0000 0100 → +1 得 5
↔️ 字节序与位运算
名称说明要点 / 示例
大端 Big-Endian 高位字节存放在低地址,符合人类书写习惯,网络传输采用 0x1234 存为 12 34
小端 Little-Endian 低位字节存放在低地址,x86 / 常见 ARM 默认字节序 0x1234 存为 34 12 跨平台注意
网络字节序 TCP/IP 统一规定网络字节序为大端,跨主机传输前需转换 Java 的 ByteBuffer 默认 BIG_ENDIAN
与 & 两位都为 1 结果才为 1,常用于掩码取位、清零 0b1100 & 0b1010 = 0b1000
或 | 有 1 则为 1,常用于置位、合并标志位 0b1100 | 0b0010 = 0b1110
非 ~ 与异或 ^ ~ 按位取反;^ 相异为 1、相同为 0,可用于交换两数、简单加密、找单独的数 5 ^ 5 = 05 ^ 0 = 5
a^=b; b^=a; a^=b; 交换两数
位移 << >> >>> << 左移补 0;>> 算术右移补符号位;>>> 逻辑右移恒补 0 1 << 10 = 1024
-8 >> 1 = -4-8 >>> 1 = 2147483644
位运算技巧 高频技巧:判奇偶、清零最低位 1、判断 2 的幂 n & 1 判奇偶
n & (n - 1) 清零最低位 1
n & (n - 1) == 0 判 2 的幂 面试高频
💾 存储层级
层级说明速度量级对比
寄存器 CPU 内部,存放正在计算的指令与数据,容量最小、速度最快 < 1 ns 最快
L1 / L2 / L3 缓存 SRAM 介质;L1/L2 通常每核私有,L3 多核共享 L1 约 1 ns、L2 约 4 ns、L3 约 10~20 ns
内存(DRAM) 进程运行的主要工作区,断电数据丢失,容量 GB 级 100 ns,比 L1 慢百倍
SSD(固态硬盘) 闪存介质、无机械部件,持久化存储首选 0.1 ms,比 HDD 快约百倍
HDD(机械硬盘) 磁盘寻道 + 旋转延迟决定速度,容量大、单位成本低 10 ms,比内存慢十万倍
局部性原理 时间局部性:刚访问的数据很快会再次访问;空间局部性:相邻数据会被接连访问 缓存预取的理论依据;顺序遍历数组远快于随机访问链表 性能优化根基
📐 浮点数表示
名称说明要点 / 示例
IEEE 754 结构 浮点数由符号位、指数位、尾数位三段组成,本质是二进制版的科学计数法 32 位 = 1 符号 + 8 指数 + 23 尾数
64 位 = 1 符号 + 11 指数 + 52 尾数
单精度 float 32 位(4 字节),约 6~7 位有效数字,适合图形等对精度不敏感的场景 指数偏移 127;Java 声明须加后缀 3.14f
双精度 double 64 位(8 字节),约 15~16 位有效数字,Java 默认的浮点类型 指数偏移 1023;字面量 3.14 默认即 double
0.1 + 0.2 ≠ 0.3 0.1 等十进制小数在二进制下是无限循环,存储的是近似值,运算误差随之累积 0.1 + 0.2 = 0.30000000000000004
判等用 Math.abs(a - b) < 1e-9 面试高频
整数化规避 金额等精确计算先转为整数(分)参与运算,展示时再换算 1.23 元 → 123 分,加减乘全程精确
BigDecimal 思想 用「无标度整数值 + 标度」表示十进制数,牺牲性能换取任意精度 用字符串构造 new BigDecimal("0.1")
除法须指定精度与舍入模式(如 HALF_UP)
特殊值 指数全 1 表示无穷大或 NaN,指数全 0 表示非规格化数(渐进下溢) 1.0 / 0.0 = Infinity
0.0 / 0.0 = NaN 注意
⚡ 逻辑门与布尔代数
名称说明要点 / 示例
与门 AND 所有输入为 1 时输出才为 1,对应按位与 1 & 1 = 11 & 0 = 0
或门 OR 任一输入为 1 输出即为 1,对应按位或 0 | 1 = 10 | 0 = 0
非门 NOT 输出与输入相反,1 变 0、0 变 1,对应按位取反 ~0 = -1(8 位下 1111 1111
异或 XOR 输入相异输出 1、相同输出 0;自反且与 0 异或不变,可消重与交换 1 ^ 1 = 01 ^ 0 = 1
a ^ a = 0a ^ 0 = a
德摩根定律 「非(A 与 B)= 非A 或 非B」「非(A 或 B)= 非A 且 非B」,化简逻辑表达式必备 !(A && B) = !A || !B
!(A || B) = !A && !B 必背
半加器 不考虑低位进位的一位加法:异或得和位,与得进位位 Sum = A ^ BCarry = A & B
全加器 含低位进位输入的一位加法,多个全加器级联即构成多位加法器 Sum = A ^ B ^ Cin
Cout = AB + Cin(A ^ B)
💽 磁盘与 RAID
名称说明要点 / 示例
HDD 机械盘 寻道 + 旋转延迟主导,随机读写性能弱,容量大、单位成本低 随机 IOPS 约 100~200,延迟约 5~10 ms
SSD 固态盘 闪存介质无机械部件,随机性能比 HDD 强百倍以上,存在写入寿命(TBW)限制 SATA 盘 IOPS 数万、NVMe 盘数十万
延迟约 0.01~0.1 ms 系统盘首选
RAID 0 条带 数据分片写到多盘并行读写,性能与容量最佳,但无任何冗余 容量 = n × 单盘;任意一盘损坏全盘数据丢失 高风险
RAID 1 镜像 两两互为完整副本,冗余能力最直接,读性能可提升 容量利用率 50%;每组允许坏 1 块盘
RAID 5 校验 奇偶校验信息分布存放在各盘,容量与安全的折中方案 至少 3 盘,允许坏 1 块;写入需计算校验有开销
RAID 10 先镜像再条带(RAID 1 + 0),兼顾性能与冗余,重建快 至少 4 盘,每组允许坏 1 块
数据库/高 IO 场景常用 推荐
选型一句话 核心数据优先冗余,可再生的日志/缓存数据才考虑 RAID 0 数据库用 RAID 10;RAID 不等于备份,冷备 + 异地副本兜底
🧵 进程与线程初识
名称说明要点 / 示例
进程 资源分配的最小单位,拥有独立内存空间与系统资源 一个 JVM 就是一个进程;进程间通过 IPC(管道、socket、共享内存)通信
线程 CPU 调度的最小单位,共享所属进程的堆与方法区 栈与程序计数器线程私有;共享数据需同步 并发安全
协程 用户态轻量「线程」,由程序自行调度,切换不经过内核 切换成本纳秒级、单线程可跑百万协程;Go goroutine、Kotlin 协程
并发 vs 并行 并发是交替执行(单核也可实现),并行是同时执行(依赖多核) 高并发靠时间片轮转;并行度受 CPU 核数限制
上下文切换 CPU 从一线程切到另一线程,需保存/恢复寄存器、缓存与内核状态 一次约 1~10 μs,频繁切换侵蚀吞吐
线程并非越多越快
一句话对比 进程隔离最稳、线程共享最省、协程切换最轻 要隔离选多进程;CPU 密集用线程池;IO 密集可上协程或 IO 多路复用
🔧 位运算实战

工程与面试里最高频的位运算套路:先记住两个坑——移位与按位运算符优先级低于加减,参与位运算的表达式要加括号;有符号数要考虑补码与边界值。

技巧写法实战说明 / 示例
奇偶判断 x & 1 结果 1 为奇数、0 为偶数,比 x % 2 语义更直接;负数同样适用(补码末位即奇偶)
7 & 1 = 1-6 & 1 = 0 最常用
乘除 2 的幂 x << n / x >> n 左移 n 位即 ×2^n,算术右移即 ÷2^n(向下取整)
易错:1 << n - 1 实际按 1 << (n - 1) 解析,优先级低于加减必须加括号 易错
异或交换 / 找唯一数 a^=b; b^=a; a^=b; 利用 a ^ a = 0a ^ 0 = a 无临时变量交换;「只有一个数出现一次」的数组全员异或即得答案
坑:同一变量自交换会归零;读代码的人未必熟,可读性差时建议加注释 面试高频
取低 n 位 x & ((1 << n) - 1) (1 << n) - 1 即低 n 位全 1 的掩码,如取低 8 位 x & 0xFF(颜色/协议字段拆包常用)
坑:n 等于整型位宽时 1 << n 已越界,需特判或换无符号类型
大小写转换 c ^ 32 / c | 32 / c & 0xDF ASCII 字母第 5 位(值 32)区分大小写:异或翻转、或转小写、与转大写
坑:仅对字母有效,混入数字或符号会得到错误字符 易错
清零最低位的 1 x & (x - 1) 每次执行消去最低位的 1:0b1100 → 0b1000 → 0;位图压缩、状态压缩遍历子集、快速判集合为空都靠它
汉明重量(1 的个数) while(x != 0) { x &= x - 1; count++; } 循环几次就有几个 1,最坏循环次数只与 1 的个数有关而非位宽
工程直接用 Integer.bitCount(x),底层是 popcnt 硬件指令 实战技巧
判断 2 的幂 x > 0 && (x & (x - 1)) == 0 2 的幂二进制只有一个 1,减一后与自身无公共位即成立
坑:漏掉 x > 0x = 0 会误判为真;缓冲区取 2 的幂大小即可用此校验 面试高频
📦 编码格式选用对照

同一份数据选不同编码,体积与用途差别巨大:先分清「字符编码(UTF-8)」与「二进制转文本编码(Hex / Base64)」两层,排查乱码与体积问题才有方向。

编码典型用途体积代价 / 易错点
Hex 十六进制 二进制数据的人类可读展示:内存 dump、抓包报文、文件魔数识别(如 EF BB BF 1 字节 → 2 字符,膨胀 ×2 体积最大
无歧义、可逐位核对,只适合展示与调试,不适合批量传输
Base64 二进制转文本传输:邮件附件(MIME)、Data URL 内嵌图片、HTTP Basic 认证、JWT 载荷 3 字节 → 4 字符,膨胀约 ×4/3,末尾 = 填充
URL 场景用 Base64url(+/-_),否则会被转义破坏 传输首选
URL 编码 转义 URL 保留字符与非 ASCII:查询参数、表单 application/x-www-form-urlencoded 保留字符 ? & = # 必须编码,漏编即参数错乱
中文按 UTF-8 编码后每字符膨胀到 9 字符(3 字节 × %XX) 易错
Unicode 转义 \uXXXX 源码/配置/JSON 中安全书写非 ASCII:Java properties 的 native2ascii、JS 字符串常量 BMP 内 1 字符 → 6 字符;超出 BMP 需代理对(\uD83D\uDE00
只是表示形式,解码后仍是同一字符,不改变存储内容
选用口诀 展示用 Hex、传输用 Base64、拼 URL 用百分号编码、写死源码用 \u 转义 先定位数据所处层次:字节流选 Hex/Base64,字符流选 URL/Unicode 转义;链路上二者常叠加出现(先 UTF-8 再 Base64)
安全红线 编码 ≠ 加密:Base64、Hex 无密钥、人人可逆 JWT 载荷只是 Base64url,拿到 token 的人都能解码查看内容
机密数据必须先加密再编码 高频误用