主题
Rust 类型选型 10 道高频面试题(速背版)
适合:
- Rust 初 / 中级面试
- 社招技术面
- 自我查漏补缺
1️⃣ Rust 的标量类型有哪些?为什么 String 不在里面?
答:
Rust 的标量类型只有 5 类:
- 整数(i / u / isize / usize)
- 浮点数(f32 / f64)
- bool
- char
- 单元类型
()
原因:
标量类型必须是语言内建、固定大小、不可再拆分、不依赖堆内存的值。
String 是标准库里的 堆分配结构体(struct),不是标量。
✅ 一句话记忆:标量 = 最小、固定、栈上;String = 堆上的结构体
2️⃣ 为什么 Rust 默认推荐使用 i32?
答:
- CPU 对 32 位整数优化最好
- 覆盖绝大多数业务场景
- 性能 / 内存 / 可读性最平衡
✅ 一句话记忆:不确定用啥 → i32
3️⃣ i16 / i32 / i64 / i128 的使用场景分别是什么?
答:
| 类型 | 使用场景 |
|---|---|
i16 | 协议字段、嵌入式、小范围数值 |
i32 | 默认业务整数 |
i64 | 时间戳、数据库 ID、文件大小 |
i128 | 金融金额、加密算法、大整数 |
rust
let ts: i64 = 1_706_000_000;✅ 一句话记忆:范围越大、语义越重 → 位数越大
4️⃣ u16 / u32 / u64 / u128 各自什么时候用?
答:
| 类型 | 使用场景 |
|---|---|
u16 | 端口号、长度字段 |
u32 | 计数器、哈希、IPv4 |
u64 | 文件大小、数量统计 |
u128 | UUID、加密、哈希 |
rust
let port: u16 = 8080;✅ 一句话记忆:永不为负 → 用 u
5️⃣ usize 和 u64 有什么本质区别?
答:
| 对比 | usize | u64 |
|---|---|---|
| 语义 | 内存相关 | 业务数据 |
| 位数 | 跟平台 | 固定 64 |
| 常见用途 | 索引、长度 | 数量、ID |
rust
let len: usize = vec.len();✅ 一句话记忆:索引 / 长度 → usize;数据 → u64
6️⃣ isize 是干嘛的?业务中常用吗?
答:
- 表示相对偏移
- 指针运算、底层逻辑使用
- 普通业务几乎不用
rust
let offset: isize = -1;✅ 一句话记忆:isize = 给指针用的,不是给业务用的
7️⃣ 为什么 Rust 的 char 是 4 字节?
答:
因为 Rust 的 char 表示:
一个 Unicode 标量值
而不是 UTF-8 字节。
rust
let c: char = '你';
let e: char = '😂';✅ 一句话记忆:char = 一个字符,不是一个字节
8️⃣ &str 和 String 的核心区别是什么?
答:
| 类型 | 含义 |
|---|---|
&str | 借用的字符串视图 |
String | 拥有数据的字符串 |
&str:不可改、不分配String:可改、堆分配
✅ 一句话记忆:要不要改 / 存 → String;只是用 → &str
9️⃣ 为什么函数参数优先用 &str 而不是 String?
答:
rust
fn greet(name: &str) {}因为:
- 不强迫分配内存
- 同时支持
&str和String - 更通用、更高效
✅ 一句话记忆:参数用 &str,是对调用者最友好的设计
🔟 const 和 static 的区别?怎么选?
答:
| 场景 | 选择 |
|---|---|
| 编译期常量 | const |
| 配置 / 默认值 | const |
| 全局只读数据 | static |
| 需要稳定地址 | static |
⚠️ static mut 需要 unsafe,慎用。
✅ 一句话记忆:90% 用 const,static 是高级工具
🎯 面试终极总结(一句话)
Rust 的类型选型,本质是在用类型系统 提前把“语义错误”挡在编译期。