Rust
精通预计深耕 6 个月+星团 编程语言
岗位需求
0 核心 · 1 加分
在职岗位将其列为技能要求
核心岗位薪资带
—
核心要求岗位的月薪区间
需求趋势
上升 0稳定 0收缩 0
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. Rust 的所有权与借用规则是什么?
所有权三规则:每个值有唯一所有者;同一时刻要么一个可变引用要么任意多个不可变引用;所有者离开作用域值被释放。由此衍生借用规则:&T 共享只读、&mut T 独占可写,两者不能同时存在,编译期借用检查器据此证明无数据竞争与 use-after-free,错误在编译期暴露而非运行时崩溃。生命周期标注不改变实际寿命,只是向编译器声明引用间的关系约束,多数场景可省略因省略规则推断。Move 语义让赋值与传参转移所有权,Copy 类型例外。常见应对:需要多处访问用 Rc 加 RefCell(运行时借用检查)、跨线程用 Arc、循环引用配 Weak 防泄漏。答出三规则加一个字符串赋值后原变量失效的例子即扎实。
2. Option 与 Result 是什么?如何优雅处理错误?
Option 用于可能缺席的值,Some 包装有值、None 表示无;Result 用于可失败运算,Ok 与 Err 分别携带成功与错误。两者都是枚举,配模式匹配强制处理所有分支,杜绝空指针异常与被忽略的错误。惯用工具:问号运算符把 Err 提前返回并自动转换错误类型(From),链式调用层层传播;map、and_then、unwrap_or 等组合子做无样板转换;anyhow 面向应用快速聚合错误,thiserror 为库派生错误枚举。对比异常的优劣:无栈展开开销与隐藏控制流,错误路径显式出现在签名中,调用方无法假装没有错误。反模式是到处 unwrap 与 expect,库代码应返回 Result 并实现 std::error::Error。能写出问号链与自定义错误类型即完整。
3. trait 与 trait object、泛型静态分发有什么区别?
trait 定义共享行为,类似接口但更强:可带默认实现、关联类型与泛型方法。泛型加 trait 约束(约束 T 实现 Display)是静态分发,编译器为每个具体类型单态化生成专版代码,零运行时开销但增大二进制;trait 对象 Box 等于 dyn Trait 是动态分发,通过胖指针(数据指针加虚表指针)在运行时查方法,一个容器能装不同类型,代价是间接跳转与无法内联。对象安全限制:含泛型方法或返回 Self 的 trait 不能做 dyn。孤儿规则要求实现本地类型或本地 trait,防止破坏一致性。常见追问:抽象类型 impl Trait 用于参数与返回值隐藏具体类型;关联类型与泛型参数的选择。能对比两种分发的代价并解释胖指针布局即高分。
4. Send 与 Sync 标记 trait 是什么?如何实现线程安全?
Send 表示类型可以安全地把所有权转移到另一个线程,Sync 表示可安全地被多线程共享引用(T 为 Sync 等价于 &T 为 Send)。两者是标记 trait,由编译器根据成员自动推导:裸指针两者皆非,Rc 非线程安全,包含它的类型自动失去标记;Arc 通过原子引用计数实现 Send 加 Sync,Mutex、RwLock 把内部可变性封装为线程安全。当自动推导不满足时,unsafe impl 需人工证明正确性,这正是 unsafe 的高危区之一。实践中:跨线程共享可变数据用 Arc 加 Mutex;只读共享 Arc 即可;channel 传递所有权避免共享。死锁与中毒(MutexGuard 释放时的 poisoning 机制)是常见追问。答出定义、自动推导与 Arc 加 Mutex 组合拳即完整。
5. Rust 的内存管理为什么不需要 GC,代价是什么?
Rust 通过所有权与作用域在编译期插入确定性析构:值离开作用域自动调用 drop,内存即时回收、无 GC 暂停、时序可预测,适合实时与嵌入式。共享靠引用与借用受检查器约束,逃逸出堆用 Box,多重所有权用 Rc 加 Arc。代价是学习曲线陡:借用检查器拒绝许多运行时安全的写法(如双向链表、自引用结构、图结构),需要 Rc 加 RefCell、索引、arena 等设计绕行;某些模式必须 unsafe 并自证不变式;编译时间与单态化带来的二进制体积增长。运行时成本几乎为零的承诺换来开发期复杂度前移。答出确定性析构与 GC 的对比、以及至少一个绕行方案(如图用索引替代指针)能体现真实使用经验。
官方文档
2 条官方入门入口,汇聚书、示例与练习三类资源
官方圣经级教程,所有权与借用章节必读
推荐教程
2 条社区维护的官方书中文翻译,完整免费
官方可运行示例集,按特性速查语法
推荐课程
1 条官方小练习集,编译不过就修到过,边改边学
上手实践
1 条免费练习加导师评审,训练借用检查器思维
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

