Skip to content

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文件大小、数量统计
u128UUID、加密、哈希
rust
let port: u16 = 8080;

一句话记忆:永不为负 → 用 u


5️⃣ usizeu64 有什么本质区别?

答:

对比usizeu64
语义内存相关业务数据
位数跟平台固定 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️⃣ &strString 的核心区别是什么?

答:

类型含义
&str借用的字符串视图
String拥有数据的字符串
  • &str:不可改、不分配
  • String:可改、堆分配

一句话记忆:要不要改 / 存 → String;只是用 → &str


9️⃣ 为什么函数参数优先用 &str 而不是 String

答:

rust
fn greet(name: &str) {}

因为:

  • 不强迫分配内存
  • 同时支持 &strString
  • 更通用、更高效

一句话记忆:参数用 &str,是对调用者最友好的设计


🔟 conststatic 的区别?怎么选?

答:

场景选择
编译期常量const
配置 / 默认值const
全局只读数据static
需要稳定地址static

⚠️ static mut 需要 unsafe,慎用。

一句话记忆:90% 用 const,static 是高级工具


🎯 面试终极总结(一句话)

Rust 的类型选型,本质是在用类型系统 提前把“语义错误”挡在编译期。