技术术语集
本文档收录开发、网络技术相关的重要术语定义。
1. 向后兼容(Backward Compatibility)
定义: "后"指的是以前的(老的)系统、程序或数据格式。
向后兼容也就是新版本的软件或系统能够运行**(兼容)旧版本**的程序、处理旧数据、支持旧接口。
1.1 示例:新浏览器支持老代码
// 这是 10 多年前的老代码
var name = "Alice";
function sayHi() {
alert("Hi " + name);
}
sayHi();
这个老代码可以在最新版本的 Chrome、Firefox、Edge 等现代浏览器中完美运行,因为:
- 新浏览器仍然支持
var、function声明 - 保留了旧语法、旧 API 的行为
结果: 新环境支持老代码 → 没问题
一句话总结: 新版本兼容旧版本
2. 向前兼容(Forward Compatibility)
定义: "前"指的是新的系统、程序或数据格式。
向前兼容也就是旧版本的软件或系统能够运行**(兼容)未来(或更新版本)**生成的程序、数据或接口。
2.1 示例:老浏览器不支持新代码
// 现代 JS 新特性
const sayHi = (name = "world") => {
console.log(`Hello, ${name}!`);
};
sayHi();
如果你把这段代码放到 IE10 或 IE11 浏览器里运行,会出现:
SyntaxError: Unexpected token '=>'
原因:
- 老浏览器不认识箭头函数(
=>) - 也不支持默认参数
name = "world" - 甚至可能连
const都不支持
结果: 老环境跑不了新代码 → 报错、崩溃、空白页
说明: 向前兼容几乎是不可能的,因为向前兼容意味着无法引入新的特性,比如新版 JS 的箭头函数,老程序是无法识别的。
一句话总结: 旧版本兼容未来新版本 (通常做不到)
3. shebang
定义: shebang(读作:sha-bang)是指 Unix/Linux 脚本开头的那一行:
#!/bin/bash
它告诉操作系统:用哪个解释器来执行这个脚本。
3.1 没有 shebang 会怎样?
- 直接执行脚本:
./myscript.sh- 必须要有 shebang,否则系统不知道用哪个解释器 - 指定解释器执行:
bash myscript.sh- 系统用你指定的解释器(bash),shebang 就没用
4. 领域模型
领域模型就是把现实生活中的业务和规则,用一个“模型”画出来或描述出来,帮助我们理解和开发系统。
4.1 举个例子
假设我们要做一个网购系统:
- 用户(User):买东西的人
- 商品(Product):卖的东西
- 订单(Order):用户买的东西
- 地址(Address):送货地址
领域模型就是把这些业务概念和它们之间的关系画出来,比如:
用户(User) --> 下订单(Order) 订单(Order) --> 包含商品(Product) 订单(Order) --> 配送到地址(Address)
它告诉你:
- 系统里有哪些“东西”(实体/值对象)
- 它们怎么联系
- 它们能做什么(业务规则)
4.2 通俗总结
- 领域模型不是代码,不是数据库表,它是思维工具。
- 作用就是让开发者和业务人员看懂系统在干什么。
- 它帮你理清头绪:谁做什么、怎么做、有什么关系。
+-----------+
| 用户 |
| User |
+-----------+
|
| 下订单
v
+-----------+
| 订单 |
| Order |
+-----------+
/ \
/ 包含商品 \ 配送到
v v
+-----------+ +-----------+
| 商品 | | 地址 |
| Product | | Address |
+-----------+ +-----------+
交叉编译(cross compile)
在一台电脑上编译,但编译出来的程序是给另一种架构/系统 运行的。 例:在 x86_64 的 Ubuntu 上用 ARM 工具链 编译,生成的程序是跑在 ARM 开发板(比如树莓派、嵌入式板子)上的。
所以,交叉编译就是 “编译环境 ≠ 运行环境”。
幂等性
幂等性(Idempotence) 指的是:一个操作执行一次和执行多次的效果完全相同。
核心概念
在数学中,幂等函数满足:f(f(x)) = f(x)
例如:abs(abs(x)) = abs(x)
常见应用
HTTP 方法的幂等性
| HTTP 方法 | 幂等性 | 说明 |
|---|---|---|
GET | 是 | 查询操作,结果一致 |
PUT | 是 | 更新到指定状态 |
DELETE | 是 | 删除资源,多次删除效果相同 |
POST | 否 | 创建操作,每次产生新资源 |
数据库操作
幂等操作:
UPDATE user SET age = 18 WHERE id = 1; -- 设置固定值
DELETE FROM user WHERE id = 1; -- 删除操作
非幂等操作:
UPDATE user SET age = age + 1 WHERE id = 1; -- 递增操作
INSERT INTO user (name) VALUES ('Bob'); -- 普通插入
为什么需要
- 容错性:网络重试不产生副作用
- 用户体验:防止重复点击产生多次操作
- 业务安全:避免重复扣款、重复下单
原子操作
原子操作(Atomic Operation)指的是在计算机中不可分割的最小操作单元,它要么全部完成,要么完全不执行,不会被其他线程或进程的操作所中断。
特点
-
不可中断性:一旦开始执行,就不会被操作系统调度器切走,也不会被其他线程打断。
-
一致性:执行完后,结果对所有线程可见。
-
最小粒度:是并发编程中保证数据正确性的重要手段。
-
非原子操作:
int a = 0;
a = a + 1; // 这个过程可能被分解为三步:
// 1. 读取 a
// 2. 计算 a+1
// 3. 写回 a
如果两个线程同时执行,可能会出现竞争条件(race condition),导致最终结果不是期望的 2。
- 原子操作:
std::atomic<int> a(0);
a.fetch_add(1); // 原子加一
在这里 fetch_add 保证整个加一过程是原子的,不会被打断。多个线程并发执行也能保证结果正确。