Skip to content

面试级 Rust 类型选型问答(一次把坑填平)

这些问题,基本覆盖了 Rust 初 / 中级面试 80% 的类型选型考点


Q1:Rust 的标量类型有哪些?为什么要区分?

答:

Rust 的标量类型包括:

  • 有符号整数:i8 i16 i32 i64 i128 isize
  • 无符号整数:u8 u16 u32 u64 u128 usize
  • 浮点数:f32 f64
  • 布尔值:bool
  • 字符:char
  • 单元类型:()

设计目的:

用类型本身表达“值的语义”,而不是只表示“能装多少数据”。


Q2:为什么默认推荐用 i32

答:

  • 大多数 CPU 对 32 位整数优化最好
  • 覆盖绝大部分业务范围
  • 内存、性能、可读性平衡最好

👉 经验法则:

不确定 → i32


Q3:i16 / i32 / i64 / i128 分别什么时候用?

有符号整数使用场景

类型典型场景
i16网络协议字段、小范围数值、嵌入式
i32默认业务数值(最常用)
i64时间戳、数据库 ID、文件大小
i128金融金额、加密算法、大整数计算
rust
let timestamp: i64 = 1_706_000_000;

Q4:u16 / u32 / u64 / u128 呢?

无符号整数使用场景

类型典型场景
u16端口号、协议长度字段
u32计数器、哈希值、IPv4
u64文件大小、对象数量
u128UUID、哈希、加密相关
rust
let port: u16 = 8080;

Q5:usizeu64 有什么本质区别?

答:

对比usizeu64
语义内存相关纯数值
位数跟平台固定 64
用途索引 / 长度业务数据

👉 结论:

索引 / 长度 / size → usize

数据 / 数量 → u64


Q6:什么时候用 isize

答:

  • 指针偏移
  • 相对位移
  • 底层 / unsafe 场景
rust
let offset: isize = -1;

👉 普通业务中 几乎不用


Q7:char 为什么是 4 字节?

答:

因为 Rust 的 char 表示:

一个 Unicode 标量值

而不是:

  • ASCII
  • UTF-8 字节
rust
let c: char = '你';
let e: char = '😂';

Q8:为什么字符串要分 &strString

答:

类型含义
&str借用的字符串视图
String拥有数据的字符串

👉 核心判断:

要不要改?要不要存? 要 → String 不要 → &str


Q9:为什么函数参数常用 &str

答:

rust
fn greet(name: &str) {}

因为这样:

  • 不强迫分配
  • 接受 &strString
  • 更通用、更高性能

Q10:conststatic 怎么选?

答:

场景选型
编译期常量const
配置值const
全局只读数据static
需要固定地址static

👉 90% 场景用 const


最终一句话(面试收尾)

Rust 的类型系统不是为了复杂, 而是为了让错误在编译期暴露,语义在代码中显性表达