Rust 面试题
1. Rust 中的所有权(Ownership)是什么?
回答:
所有权是 Rust 的核心概念之一,每个值在 Rust 中都有一个唯一的所有者,并且所有权在作用域内转移。当所有者离开作用域时,Rust 会自动释放该值的内存,避免了内存泄漏。
代码示例:
fn main() {
let s1 = String::from("hello");
let s2 = s1; // 所有权转移,s1 不再有效
// println!("{}", s1); // 编译错误,s1 已失效
println!("{}", s2);
}
2. Rust 中的生命周期(Lifetimes)是什么?
回答:
生命周期是 Rust 中用于确保引用有效性的机制。它通过生命周期标注让编译器知道引用的作用域,避免悬垂指针和数据竞争。
代码示例:
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() > s2.len() {
s1
} else {
s2
}
}
3. Rust 中的 Option
类型是什么?
回答:
Option
类型表示一个可能存在也可能不存在的值,常用来处理可能返回 None
的函数,避免使用 null
。
代码示例:
fn find_item(val: i32) -> Option<i32> {
if val > 0 {
Some(val)
} else {
None
}
}
4. Rust 中的 Result
类型是什么?
回答:
Result
类型用于处理可能出错的操作,包含两个变体:Ok(T)
和 Err(E)
。
代码示例:
fn divide(a: i32, b: i32) -> Result<i32, &'static str> {
if b == 0 {
Err("Division by zero")
} else {
Ok(a / b)
}
}
5. Rust 中的模式匹配(Pattern Matching)如何工作?
回答:
match
语句是 Rust 中的一个强大工具,用于匹配值与模式并执行相应的代码。
代码示例:
enum Direction {
Up,
Down,
Left,
Right,
}
fn move_player(direction: