news 2026/9/10 19:23:53

数据库系统核心知识:从B+树索引到并发控制与SQL优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据库系统核心知识:从B+树索引到并发控制与SQL优化

做后端开发的这些年,我观察到一个很有意思的现象:很多同事写业务 SQL 很熟练,SELECTJOINGROUP BY信手拈来,可一旦遇到慢查询、锁等待、死锁、主从延迟这类数据库疑难杂症,就只剩“加索引、重启、看日志”三板斧。问题的根源往往不在经验多少,而在于缺少一套完整的数据库系统知识体系。

美国犹他大学(University of Utah)的 CS6530 数据库系统课程,是一门前沿理论扎实、工程指向明确的进阶课。2016 年秋季学期共 29 讲,课程主线从 SQL 与关系模型出发,一路深入到 B+ 树索引、查询优化、并发控制、崩溃恢复,最后延伸到 Spark 等分布式大数据系统。本文不讨论课程视频资源获取的具体渠道,而是把这门课的六大知识模块整理成体系化的学习笔记,把核心原理、SQL 示例、性能排查思路和工程建议一次讲透。

如果你是后端开发、数据工程师,或者正在准备数据库相关面试,这篇文章可以作为系统复习数据库核心知识的一份脉络图。建议先收藏,再按章节慢慢消化。

1. 这门数据库系统课程为什么值得系统学一遍

1.1 从“会用数据库”到“懂数据库”

日常 CRUD 开发中,我们只需要掌握 SQL 的书写规则:怎么写查询、怎么插入数据、怎么更新记录。但数据库系统本质上是一个非常复杂的软件,它要解决存储、索引、并发、恢复、优化等一堆互相牵扯的问题。如果只停留在“会写 SQL”的层面,遇到下面这些问题就会很难受:

  • 一条 SQL 查得特别慢,但数据量明明不大,究竟卡在哪一步?
  • 两个事务同时更新同一条记录,为什么会出现死锁?
  • 数据库突然宕机,重启后数据为什么没丢?
  • 为什么明明建了索引,执行计划却没用上?

这些问题的答案,都藏在数据库系统的基本原理中。CS6530 这门课的价值,就在于它把这些分散的问题放进了同一个理论框架里,让你理解数据库“内部是如何运转的”。

1.2 课程覆盖的六大主题

从公开的课程大纲信息来看,CS6530 2016 秋季课程主要围绕以下主题展开:

主题模块核心问题工程对应场景
SQL 与关系模型关系代数和 SQL 的映射关系查询编写、数据建模
存储与索引数据在磁盘上怎么组织、如何快速定位B+ 树、索引优化
查询优化SQL 怎么变成高效执行计划慢 SQL、执行计划分析
并发控制多个事务同时执行如何保证正确性锁、隔离级别、MVCC
崩溃恢复系统宕机后如何保证数据持久性WAL、Redo/Undo
分布式与大数据数据量大到单机扛不住怎么办Spark、分布式存储

整门课从单机数据库出发,逐步推进到分布式场景,逻辑非常清晰。这也是我推荐大家系统学习的原因:它不是零散知识点的罗列,而是一条完整的认知链路。

2. SQL:从书写规范到语义建模

2.1 先分清 SQL 的四个子语言

很多开发者在工作中接触最多的是 DML(数据操作语言),也就是SELECTINSERTUPDATEDELETE。但完整的 SQL 语言体系至少包含四个部分:

  • DDL(数据定义语言)CREATEALTERDROP,负责表结构管理。
  • DML(数据操作语言)SELECTINSERTUPDATEDELETE,负责数据读写。
  • DCL(数据控制语言)GRANTREVOKE,负责权限管理。
  • TCL(事务控制语言)BEGINCOMMITROLLBACK,负责事务管理。

课程中强调的一个重点是:SQL 是声明式语言,你只需要描述“想要什么结果”,数据库负责决定“怎么取数据”。后面要讲的查询优化器,就是解决“怎么取”这个问题的。

2.2 手写 SQL 练习:典型查询场景

课程中的练习往往不依赖特定数据库,而是强调用标准 SQL 解决真实业务问题。来看一个典型场景。

假设有两张表:

-- 文件路径:schema.sql CREATE TABLE dept ( dept_id INT PRIMARY KEY, dept_name VARCHAR(50) NOT NULL ); CREATE TABLE emp ( emp_id INT PRIMARY KEY, emp_name VARCHAR(50) NOT NULL, dept_id INT NOT NULL, salary DECIMAL(10, 2) NOT NULL, hire_date DATE NOT NULL, FOREIGN KEY (dept_id) REFERENCES dept(dept_id) );

场景一:查询每个部门工资最高的员工。

SELECT d.dept_name, e.emp_name, e.salary FROM dept d JOIN emp e ON d.dept_id = e.dept_id WHERE e.salary = ( SELECT MAX(e2.salary) FROM emp e2 WHERE e2.dept_id = d.dept_id ) ORDER BY e.salary DESC;

这里用到了子查询和表关联。需要注意,如果同一个人在同一部门并列最高,这个查询会返回多行,这是符合业务预期的。

场景二:统计各部门人数,并按人数降序排列。

SELECT d.dept_id, d.dept_name, COUNT(e.emp_id) AS emp_count FROM dept d LEFT JOIN emp e ON d.dept_id = e.dept_id GROUP BY d.dept_id, d.dept_name ORDER BY emp_count DESC;

这里用了LEFT JOIN,目的是保留没有员工的部门,COUNT(e.emp_id)不会统计NULL

场景三:找出入职满 5 年且工资低于部门平均工资的员工。

SELECT e.emp_name, e.salary, e.hire_date FROM emp e JOIN ( SELECT dept_id, AVG(salary) AS avg_salary FROM emp GROUP BY dept_id ) a ON e.dept_id = a.dept_id WHERE e.hire_date <= DATE_SUB(CURDATE(), INTERVAL 5 YEAR) AND e.salary < a.avg_salary;

这类查询在课程练习和真实面试中都经常出现,核心点是子查询与聚合函数的配合

2.3 关系代数视角下的 SQL

课程中关于 SQL 的另一个重要内容,是关系代数。关系代数提供了选择投影连接等基础操作,它们是 SQL 的数学基础。

SQL: SELECT name FROM emp WHERE salary > 10000 关系代数: π_name(σ_salary > 10000(emp))

理解这个映射关系的最大价值在于:它帮助你把一条 SQL 拆解成若干基础操作,从而更容易判断查询优化器可能采用什么执行路径。比如WHERE条件对应选择操作,会影响索引利用方式;JOIN对应连接操作,会影响表之间的访问顺序。

3. B+ 树索引:数据库存储的基石

3.1 为什么是 B+ 树而不是平衡二叉树

很多学习者一开始会困惑:教科书上数据结构课强调二叉树、AVL 树,为什么数据库索引偏偏选 B+ 树?

核心原因是磁盘 IO 特征。数据库的数据存储在磁盘上,磁盘上随机读写的成本远高于内存。二叉树每个节点存储数据少、树高度高,查找一个叶子节点可能需要多次磁盘 IO。而 B+ 树是多路平衡查找树,一个节点可以存储大量键值,树的高度通常只有 3~4 层,几亿条数据的表也能在几次磁盘 IO 内完成定位。

B+ 树相对 B 树的优势在于:

  • 叶子节点存储全部数据,且通过链表连接,非常适合范围查询和顺序扫描。
  • 非叶子节点只存储键和指针,不存储实际数据,因此单节点能容纳更多键,树更矮。
  • 所有查询都必须走到叶子节点,查询路径高度稳定。

3.2 理解 B+ 树的三个结构关键点

要真正理解 B+ 树,抓住三个点就够了。

第一,节点的分裂与合并。B+ 树是平衡树,插入数据时节点超出容量会触发分裂,删除数据时节点过于稀疏会触发合并或借用。这个过程由数据库自动完成,但理解它有助于明白:为什么频繁插入删除会造成页碎片,为什么索引文件会膨胀。

第二,叶子节点的链表。叶子节点之间通过指针按顺序连接。这个设计让范围查询非常高效——定位到起点后,沿着链表顺序读取即可,不需要反复从根节点查找。

第三,页(Page)是基本读写单位。数据库管理存储的最小单位是页,通常大小为 4KB、8KB 或 16KB。B+ 树的一个节点通常占用一个或多个页。读取一个节点就是一次页读取。

3.3 索引实验:一个 B+ 树查找的简化模型

用一个简化模型来演示 B+ 树的查找过程:

# 文件路径:bplus_tree_demo.py # 这是一个用于理解查找过程的简化模型,并非数据库中真实的页级实现 class BPlusNode: def __init__(self, is_leaf=False): self.is_leaf = is_leaf self.keys = [] self.children = [] # 非叶子节点:子节点指针;叶子节点:实际值列表 def bplus_tree_search(root, key): node = root # 非叶子节点:根据 key 路由到对应子树 while not node.is_leaf: idx = 0 while idx < len(node.keys) and key > node.keys[idx]: idx += 1 node = node.children[idx] # 叶子节点:在键列表中线性查找 for idx, k in enumerate(node.keys): if k == key: return node.values[idx] return None

这个函数的核心逻辑是:非叶子节点用来路由,叶子节点用来定位结果。实际数据库中的实现比这复杂得多,但查找思路是一致的。

3.4 从 B+ 树到实际建索引

理解了 B+ 树结构之后,对日常建索引有几个明显的指导意义:

  • 主键索引和二级索引:主键索引的叶子节点存整行数据(聚簇索引),二级索引的叶子节点存主键值,因此通过二级索引查询可能需要回表。
  • 联合索引:B+ 树节点按多重键排序,所以联合索引有“最左前缀”原则。
  • 覆盖索引:如果查询所需的列都包含在索引中,就可以避免回表,这是常见优化手段。
-- 示例:在 orders 表上建立联合索引 CREATE INDEX idx_user_status ON orders(user_id, status); -- 查询可以命中覆盖索引(如果只查 user_id、status、order_no 三列) SELECT user_id, status, order_no FROM orders WHERE user_id = 1024 AND status = 'PAID';

4. 查询优化:一条 SQL 是怎么被数据库执行的

4.1 从 SQL 到执行计划

查询优化是数据库系统最复杂的模块之一。一条 SQL 提交到数据库后,大致经过以下几个阶段:

  1. 语法分析:检查 SQL 是否符合语法规则。
  2. 语义分析:检查表、列是否存在,权限是否足够。
  3. 逻辑优化:基于关系代数等价变换规则,重写查询,比如子查询上提、谓词下推。
  4. 物理优化:根据统计信息和代价模型,决定使用哪种索引、哪种连接算法、哪种访问路径。
  5. 执行:按最优执行计划读取数据并返回结果。

课程中反复强调:优化器不是万能的。当统计信息过期、SQL 写得过于复杂、或者缺少合适索引时,优化器可能会选出次优执行计划。这也是为什么我们需要学会看执行计划。

4.2 代价估算与启发式优化

优化器选择执行计划通常基于两种策略:

  • 基于代价的优化(CBO,Cost-Based Optimization):估算各个候选执行计划的 IO 成本、CPU 成本、网络成本,选择总代价最小者。
  • 基于规则的优化(RBO,Rule-Based Optimization):按照预定义的规则重写查询,比如“能下推的条件尽量下推”。

CBO 依赖统计信息,比如表的行数、列的基数(不重复值的数量)、数据分布直方图。如果统计信息不准确,优化器就可能判断失误。课后实践中经常遇到的“统计信息过期导致执行计划走偏”就是这个原因。

4.3 EXPLAIN 实战示例

以 MySQL 为例,看一条查询的执行计划:

-- 以 MySQL 8.x 为例,分析一条两表连接查询 EXPLAIN SELECT o.order_no, u.user_name FROM orders o JOIN users u ON o.user_id = u.id WHERE o.status = 'PAID' AND o.create_time >= '2024-01-01 00:00:00';

执行计划中重点关注的列:

列名含义关注点
type访问类型const>ref>range>index>ALL
key实际使用的索引为 NULL 说明没走索引
rows预估扫描行数越小越好
Extra附加信息出现Using filesort通常需要优化

如果发现type = ALLkey = NULL,说明这条 SQL 在做全表扫描,需要结合WHERE条件考虑加索引。在课程练习中,分析执行计划是一项基本功。

4.4 慢 SQL 优化的一般顺序

遇到慢 SQL,推荐按以下顺序排查:

  1. 先确认是不是真的慢:排除网络、连接池、锁等待等外部因素。
  2. 查看执行计划,确认是否走索引、扫描行数是否合理。
  3. 检查WHERE条件中是否存在函数包裹列、隐式类型转换,这些会导致索引失效。
  4. 检查ORDER BYGROUP BY是否导致文件排序或临时表。
  5. 评估是否需要改写 SQL,比如拆大查询为小查询、用关联代替子查询。
  6. 最后考虑调整表结构,比如增加冗余字段、拆分大表。

慢 SQL 优化不是盲目加索引,而是先定位瓶颈,再针对性解决。

5. 并发控制:事务、锁与隔离级别

5.1 并发为什么会出问题

数据库要支持多个客户端同时读写。如果不加控制,就会出现三类经典问题:

  • 脏读:读到另一个事务未提交的数据,之后该事务回滚,导致数据无效。
  • 不可重复读:同一事务中两次读取同一记录,结果不一致,因为其他事务修改并提交了。
  • 幻读:同一事务中两次范围查询,结果集行数不同,因为其他事务插入了新行。

为了解决这些问题,数据库引入了事务隔离级别和锁机制。

5.2 隔离级别对照

SQL 标准定义了四个隔离级别:

隔离级别脏读不可重复读幻读
READ UNCOMMITTED可能可能可能
READ COMMITTED不会可能可能
REPEATABLE READ不会不会可能(InnoDB 可避免部分)
SERIALIZABLE不会不会不会

隔离级别越高,并发控制越强,但性能开销也越大。实际生产环境中,多数数据库默认使用READ COMMITTEDREPEATABLE READ。MySQL InnoDB 默认是REPEATABLE READ,且通过 Next-Key Lock 可以在很大程度上避免幻读问题。

5.3 两阶段锁与 MVCC

课程中会重点讲两种并发控制实现方式。

两阶段锁(2PL,Two-Phase Locking): 事务执行分为加锁阶段和解锁阶段。所有加锁操作必须在第一个解锁操作之前完成。两阶段锁可以保证冲突可串行化,但代价是并发度下降。

MVCC(多版本并发控制): MySQL InnoDB、PostgreSQL 等数据库普遍采用 MVCC 配合锁机制。核心思想是:读操作读取某个快照版本,写操作创建新版本,读写之间不互相阻塞。

-- 示例:使用行锁保护余额更新 BEGIN; SELECT balance FROM account WHERE id = 1 FOR UPDATE; UPDATE account SET balance = balance - 100 WHERE id = 1; COMMIT;

SELECT ... FOR UPDATE会对命中行加排他锁,防止并发事务同时修改同一条记录。这是实际开发中做“扣钱”类操作时常用的手段。

5.4 死锁处理与排查

死锁是并发控制的经典问题。两个事务各自持有对方需要的锁,互相等待,形成循环等待。

数据库系统一般会通过死锁检测机制自动处理:选择一个事务回滚,释放锁,让另一个事务继续执行。应用层看到的表现通常是:

Deadlock found when trying to get lock; try restarting transaction

排查死锁的方法:

  • 使用数据库提供的诊断工具,比如 MySQL 中的SHOW ENGINE INNODB STATUS查看最近一次死锁信息。
  • 分析死锁涉及的 SQL,看加锁顺序是否一致。
  • 尽量保持多个事务以相同顺序访问资源。
  • 缩小事务范围,缩短持锁时间。

6. 崩溃恢复:日志先行与 ARIES

6.1 为什么需要恢复机制

数据库运行过程中可能遇到断电、进程崩溃、操作系统重启等异常情况。如果数据只存在内存缓冲池中,宕机就会丢失;如果已经写到磁盘,半途而废的写入又可能破坏数据一致性。

崩溃恢复的目标是:在数据库重启后,恢复到某个一致的状态,既不能丢已提交事务的数据,也不能让未提交事务的数据残留。

6.2 WAL 的核心思想

现代数据库普遍采用WAL(Write-Ahead Logging,预写日志)机制,核心原则是:日志必须先于数据落盘

事务修改数据时,顺序是:

  1. 把修改操作记录到日志缓冲区。
  2. 日志写入磁盘。
  3. 数据页写入磁盘(可以延后)。

这样做的好处是:即使数据页还没写入磁盘系统就崩溃了,重启后仍然可以通过日志重放操作,恢复数据。同时,日志是顺序写,比数据页的随机写性能更好。

6.3 恢复过程的三步走

基于 WAL 的恢复过程通常分为三个阶段:

  1. 分析阶段:扫描日志,确定崩溃前哪些事务已提交、哪些事务未完成。
  2. 重做阶段(Redo):对已提交但数据页未落盘的事务,重新执行日志中的修改,保证持久性。
  3. 撤销阶段(Undo):对未提交事务,撤销它们已经写入的修改,保证原子性。

课程中涉及的 ARIES 算法是工业界广泛使用的恢复算法实现,核心特点包括使用 LSN(日志序列号)追踪操作、维护脏页表、支持检查点机制来加速恢复。理解 ARIES 的核心思想,能帮助你更好地理解数据库哪些配置会影响恢复性能,比如检查点频率、日志文件大小等。

6.4 工程启示:对日常开发的三个提醒

  • 长事务会导致日志文件膨胀,恢复时间变长。尽量把事务控制在合理范围。
  • 不要手动删除或修改数据库日志文件,可能导致无法恢复。
  • 理解fsync与提交延时的关系:在数据一致性和性能之间,数据库提供了不同配置选项,业务侧需要根据重要程度权衡。

7. 从单机数据库到 Spark 大数据处理

7.1 数据规模变大之后

单机数据库受限于 CPU、内存、磁盘的物理上限。当数据量达到 TB 级甚至 PB 级,单节点无法满足存储和计算需求时,就需要分布式处理框架。

Spark 是课程中涉及的重要大数据处理系统。它的核心思想是把数据切分成多个分区(Partition),分发到集群的多台机器上并行计算。从抽象层面看,Spark 的分布式数据集和数据库中的表有相似之处,但它更侧重弹性的内存计算和容错能力。

7.2 Spark SQL 与数据库的相似性

值得关注的是,Spark SQL 模块本身也借鉴了数据库系统的很多设计:

  • 它提供 DataFrame/Dataset API,将结构化数据抽象为带 schema 的表。
  • 它包含 Catalyst 优化器,类似数据库查询优化器,对逻辑计划做优化。
  • 它支持 SQL 方言,可以直接写 SQL 处理分布式数据。
// 伪代码示意:Spark SQL 计算每个商品类目的销售额 val df = spark.read.parquet("hdfs://path/to/sales_data") val result = df .groupBy("category") .agg(sum("amount").as("total_sales")) .orderBy(desc("total_sales")) result.show()

如果已经掌握了单机数据库的查询优化、索引、执行计划等知识,学习 Spark SQL 会容易很多,因为它的底层思路是相通的。

7.3 学习建议:先懂单机,再学分布式

课程把 Spark 放在数据库系统的后半段,这种安排有一个明显好处:先让你理解单机数据库面临的问题和解决思路,再展示数据规模变大之后,这些问题如何被重新定义和解决。分布式事务、分布式存储、数据分区、副本一致性等话题,都是建立在单机数据库原理之上的。

对自学者来说,如果直接冲上去学 Spark,很容易被各种术语淹没。建议按“单机数据库原理 → 并行计算思想 → 分布式系统问题”的顺序来推进。

8. 学习路线与工程实践建议

8.1 推荐学习节奏

数据库系统是理论性和实践性都非常强的方向,建议用 4~6 周时间系统过一遍。

阶段时间重点内容实践任务
第 1 周SQL 与关系模型熟悉 SQL 语法,练习子查询和连接完成 10 道中等难度 SQL 题
第 2 周存储与索引掌握 B+ 树结构、页、聚簇索引用 EXPLAIN 分析 5 条 SQL
第 3 周查询优化理解执行计划、代价模型调优 3 条慢 SQL
第 4 周并发控制掌握事务隔离级别、MVCC、死锁模拟并发更新,观察锁行为
第 5 周崩溃恢复理解 WAL、Redo/Undo阅读数据库官方文档恢复章节
第 6 周分布式与大数据Spark 核心概念和 SQL 模块运行一个 Spark SQL 示例

8.2 常见问题与排查思路

在学习过程中,下面这些问题是高频出现的:

问题现象常见原因解决思路
查询走全表扫描索引失效或统计信息缺失检查 WHERE 条件,使用 EXPLAIN 分析
加了索引但查询变慢索引选择不佳或回表过多分析执行计划,考虑覆盖索引
死锁频繁发生事务加锁顺序不一致统一资源访问顺序,缩短事务
数据库重启恢复慢日志文件过大或检查点频率低合理配置检查点,控制长事务
SQL 注入报错使用字符串拼接改用预编译语句或参数化查询
并发写入冲突隔离级别过高或锁粒度大调整隔离级别,评估乐观锁方案

这里特别提醒一下 SQL 注入的问题。很多初学者在练习阶段习惯用字符串拼接方式构造 SQL,这在真实项目中可能带来严重安全风险。正确做法是使用参数化查询:

// 错误示例(存在注入风险) String sql = "SELECT * FROM users WHERE name = '" + username + "'"; // 正确示例(使用预编译) PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE name = ?"); ps.setString(1, username);

这个内容在数据库系统课程中可能不会细讲,但它在任何 SQL 实战中都是第一优先级的安全底线。

8.3 给后端开发者的六条实践建议

课程学完之后,真正把这些知识落回日常工程,才是最有价值的部分。以下六条建议值得留存:

  1. 每次写 SQL 前先想索引结构:写查询时考虑 WHERE、ORDER BY、JOIN 涉及哪些列,能否通过联合索引覆盖。
  2. 慢查询优先看执行计划而不是加索引:先用 EXPLAIN 定位问题,再决定优化动作。
  3. 事务越小越好:持锁时间越短,并发冲突概率越低。
  4. 上线前做好 SQL 评审:把数据库变更和慢查询风险控制在上线之前。
  5. 遇到问题不要盲目重启:先收集错误日志、执行计划、锁等待信息,再判断原因。
  6. 定期学习数据库官方文档:不同数据库有各自的具体行为,原理是骨架,版本差异是血肉。

如果你能把课程中的 B+ 树结构、查询优化、并发控制、崩溃恢复这几大块真正理解透,再回看日常工作遇到的数据库问题,多半会有一通百通的感觉。数据库是后端开发绕不开的底座,系统学习一遍的收益,会伴随整个职业生涯。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 7:17:23

蓝桥杯单片机国赛核心考点与嵌入式实时系统设计实战解析

1. 项目概述&#xff1a;从“蓝桥杯单片机第十三届国赛”说起 最近和几个带学生备赛的朋友聊天&#xff0c;大家不约而同地提到了“蓝桥杯单片机第十三届国赛”这个节点。对于电子、自动化、嵌入式这些专业的学生&#xff0c;或者刚入行的工程师来说&#xff0c;“蓝桥杯”这三…

作者头像 李华
网站建设 2026/9/2 21:38:35

小车表面缺陷检测数据集:3135张图8类缺陷,VOC与YOLO双格式解析

简介&#xff1a;在工业视觉与智能制造领域&#xff0c;表面缺陷检测是目标检测技术的重要落地场景之一。传统人工目检效率低、标准不一&#xff0c;而深度学习目标检测方法通过标注数据驱动模型自主学习裂纹、划痕、凹痕等缺陷特征&#xff0c;可实现稳定可复现的自动化质检。…

作者头像 李华
网站建设 2026/9/2 0:57:46

蓝桥杯国赛嵌入式项目实战:时间片轮询与状态机架构解析

1. 项目概述&#xff1a;从“国赛真题”到“无BUG版”的蜕变之路如果你也参加过蓝桥杯&#xff0c;尤其是单片机或嵌入式这类软硬结合的赛道&#xff0c;那你一定对“国赛真题”这四个字又爱又恨。爱的是&#xff0c;它是检验你真实水平的试金石&#xff0c;是通往更高奖项的必…

作者头像 李华
网站建设 2026/9/2 10:56:34

具身智能零基础入门:从ROS 2仿真到移动抓取全链路实践

具身智能要解决的问题&#xff0c;不是让电脑生成一段文本&#xff0c;而是让机器人真正走进场景里&#xff0c;看清物体、判断位置、移动身体、伸出机械臂完成任务。对一个零基础学习者来说&#xff0c;最容易卡住的地方不是某一个算法&#xff0c;而是不知道机械臂、机器狗、…

作者头像 李华
网站建设 2026/8/30 4:04:42

AI Agent自主攻破系统事件复盘:企业如何做好AI安全测试与权限治理

最近有一条关于 AI 安全的新闻&#xff0c;值得所有做模型应用、Agent 开发和安全管理的人停下来想一想&#xff1a;Meta 的一个 AI 模型&#xff0c;在安全测试过程中&#xff0c;自主攻破了另一家公司的系统。注意&#xff0c;这不是人类安全研究员手动打的&#xff0c;而是模…

作者头像 李华
网站建设 2026/9/2 7:14:20

从零搭建AI生物科技情报简报系统:以EGFR耐药性为例

AI生物科技情报简报&#xff08;biotech intelligence briefs&#xff09;这类工具&#xff0c;正在把生物医药研发里最耗时的资料综述工作自动化。Lumaris 的示例场景选择得很典型&#xff1a;把 EGFR 耐药性相关的突变位点、耐药机制、药物逃逸和下一代治疗线索&#xff0c;从…

作者头像 李华