前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。

前后端面试题-专栏总目录

在这里插入图片描述

文章目录

  • 一、本文面试题目录
      • 11. Rust的`if`表达式与其他语言的`if`语句有何不同?(提示:返回值)
      • 12. 简述`loop`、`while`、`for`循环的使用场景,如何退出循环?
        • 1. `loop`:无限循环
        • 2. `while`:条件循环
        • 3. `for`:迭代循环
      • 13. `break`和`continue`在循环中的作用,`break`如何返回值?
        • 1. `break`的作用
        • 2. `continue`的作用
      • 14. 函数的参数和返回值在Rust中如何定义?返回值可以省略`return`吗?
        • 1. 参数定义
        • 2. 返回值定义
        • 3. 返回值与`return`的关系
      • 15. 什么是表达式(Expression)和语句(Statement)?Rust中函数体的本质是什么?
        • 1. 表达式(Expression)
        • 2. 语句(Statement)
        • 3. 函数体的本质
      • 16. 如何定义一个没有返回值的函数?(提示:`()`单元类型)
        • 1. 省略返回值类型声明
        • 2. 显式声明返回`()`
      • 17. 函数可以嵌套定义吗?Rust的作用域规则是什么?
        • 1. 函数嵌套定义
        • 2. 作用域规则
      • 18. 举例说明函数参数的模式匹配(如解构元组、结构体)。
        • 1. 解构元组参数
        • 2. 解构结构体参数
        • 3. 解构枚举参数
  • 二、120道Rust面试题目录列表

一、本文面试题目录

11. Rust的if表达式与其他语言的if语句有何不同?(提示:返回值)

Rust的if表达式(Expression),而非单纯的语句(Statement),这是它与其他语言(如C、Java)中if语句的核心区别。

  • 关键差异:Rust的if表达式可以返回值,且所有分支的返回值类型必须一致。
  • 原理:在Rust中,表达式会产生一个值,而语句(如let声明)不产生值(或说返回())。if表达式的返回值由各分支的最后一个表达式决定。

示例

// if表达式返回值
let num = 5;
let result = if num > 0 {"positive"  // 分支最后一个表达式(无分号)作为返回值
} else if num < 0 {"negative"
} else {"zero"
};
println!("{}", result);  // 输出:positive// 若分支加了分号,返回单元类型()
let val = if num > 0 {10;  // 语句,返回()
} else {20;
};
println!("{:?}", val);  // 输出:()

其他语言中if仅用于控制流程,无法直接返回值(需借助变量赋值),而Rust的if表达式更简洁地支持这一功能。

12. 简述loopwhilefor循环的使用场景,如何退出循环?

Rust提供三种循环类型,适用场景和退出方式不同:

1. loop:无限循环
  • 场景:需要无限重复执行,直到满足特定条件才退出(如服务器监听请求、重试逻辑)。
  • 退出方式:必须使用break手动退出,可配合条件判断。

示例

let mut count = 0;
loop {count += 1;if count == 3 {break;  // 满足条件退出循环}println!("count: {}", count);  // 输出:1 2
}
2. while:条件循环
  • 场景:当循环条件为true时执行,适合循环次数不确定的场景(如处理用户输入直到退出指令)。
  • 退出方式:条件为false时自动退出,也可使用break强制退出。

示例

let mut n = 3;
while n > 0 {println!("n: {}", n);  // 输出:3 2 1n -= 1;if n == 1 {break;  // 提前退出}
}
3. for:迭代循环
  • 场景:遍历集合(如数组、范围、迭代器),循环次数由集合长度决定,是Rust中最常用的循环。
  • 退出方式:遍历完所有元素自动退出,也可使用break强制退出。

示例

// 遍历范围
for i in 1..4 {println!("i: {}", i);  // 输出:1 2 3
}// 遍历数组
let arr = [10, 20, 30];
for val in arr {println!("val: {}", val);  // 输出:10 20 30if val == 20 {break;  // 提前退出}
}

总结loop用于无限循环,while用于条件控制,for用于迭代集合,三者均可通过break强制退出。

13. breakcontinue在循环中的作用,break如何返回值?

breakcontinue是循环控制的核心关键字,功能如下:

1. break的作用
  • 立即终止当前循环,并跳出循环体。
  • 特殊能力:在loop循环中,break可以返回一个值(该值成为loop表达式的结果)。

示例:break返回值

let mut sum = 0;
let result = loop {sum += 5;if sum >= 20 {break sum;  // 返回sum的值并退出循环}
};
println!("Result: {}", result);  // 输出:20(sum=5+5+5+5=20)
2. continue的作用
  • 跳过当前循环的剩余部分,直接进入下一次循环。
  • 不终止循环,仅跳过当前迭代。

示例:continue跳过迭代

for i in 1..6 {if i % 2 == 0 {continue;  // 跳过偶数}println!("i: {}", i);  // 输出:1 3 5
}

区别总结

关键字作用适用循环类型
break终止循环,可返回值(仅loop中)loop/while/for
continue跳过当前迭代,进入下一次循环loop/while/for

14. 函数的参数和返回值在Rust中如何定义?返回值可以省略return吗?

Rust函数的参数和返回值定义有严格的语法规则,且支持灵活的返回值处理。

1. 参数定义
  • 函数参数需显式声明类型,格式为参数名: 类型
  • 多个参数用逗号分隔。

示例

// 两个i32类型参数的函数
fn add(a: i32, b: i32) -> i32 {a + b
}
2. 返回值定义
  • 通过-> 类型在函数签名末尾声明返回值类型。
  • 若函数无返回值,可省略-> 类型(默认返回())。
3. 返回值与return的关系
  • 可以省略return:函数体中最后一个表达式的结果会自动作为返回值(表达式后不加分号)。
  • return的作用:用于提前返回值(如在条件判断中)。

示例

// 省略return,最后一个表达式作为返回值
fn multiply(x: i32, y: i32) -> i32 {x * y  // 无分号,表达式结果作为返回值
}// 使用return提前返回
fn absolute_value(n: i32) -> i32 {if n < 0 {return -n;  // 提前返回}n  // 最后一个表达式返回
}println!("{}", multiply(3, 4));        // 输出:12
println!("{}", absolute_value(-5));    // 输出:5

注意:若最后一个表达式后加了分号,会被视为语句,返回值变为()(单元类型),可能导致类型不匹配错误。

15. 什么是表达式(Expression)和语句(Statement)?Rust中函数体的本质是什么?

在Rust中,表达式和语句是两个核心概念,决定了代码的执行逻辑和返回值。

1. 表达式(Expression)
  • 定义:执行后会产生一个值的代码片段。
  • 特点
    • 没有分号结尾(或说分号会将表达式转为语句)。
    • 可作为其他表达式的一部分(如a + (b * c)中的b * c)。
  • 示例
    5 + 3  // 表达式,返回8
    "hello".len()  // 表达式,返回5
    if x > 0 { 1 } else { -1 }  // 表达式,返回1或-1
    
2. 语句(Statement)
  • 定义:执行某种操作但不产生值(或说返回(),单元类型)的代码片段。
  • 特点
    • 通常以分号结尾。
    • 包括变量声明(let)、赋值、函数调用(若忽略返回值)等。
  • 示例
    let x = 5;  // 变量声明语句,返回()
    x = 10;     // 赋值语句,返回()
    println!("hi");  // 函数调用语句,返回()
    
3. 函数体的本质

Rust函数体本质上是一个表达式块(block expression),由一系列语句和一个最终表达式组成。函数的返回值就是这个最终表达式的结果(若省略return)。

示例

fn calculate() -> i32 {let a = 2;  // 语句let b = 3;  // 语句a * b  // 最终表达式,作为函数返回值(无分号)
}println!("{}", calculate());  // 输出:6

函数体中,语句用于执行操作(如变量初始化),最终表达式决定返回值,这体现了Rust“表达式导向”的设计理念。

16. 如何定义一个没有返回值的函数?(提示:()单元类型)

在Rust中,没有返回值的函数默认返回单元类型(),定义方式有以下两种:

1. 省略返回值类型声明
  • 函数签名中不写-> 类型,编译器默认其返回()
2. 显式声明返回()
  • 函数签名中用-> ()明确指定返回单元类型,常用于强调函数无实际返回值。

单元类型()

  • 是一个特殊类型,仅包含一个值(),表示“无有意义的值”。
  • 类似于其他语言中的void,但()是一个实际的类型和值(可存储或传递)。

示例

// 省略返回值类型,默认返回()
fn greet() {println!("Hello!");
}// 显式声明返回()
fn log(message: &str) -> () {println!("[LOG]: {}", message);
}let result1 = greet();
let result2 = log("test");
println!("{:?}, {:?}", result1, result2);  // 输出:(), ()

void的区别

  • C/C++中的void表示“无类型”,不能声明void类型的变量。
  • Rust的()是实际类型,可声明变量(如let x: () = ();),更符合语言的类型一致性。

17. 函数可以嵌套定义吗?Rust的作用域规则是什么?

1. 函数嵌套定义

Rust不支持函数嵌套定义(即不能在一个函数内部定义另一个函数)。但可以通过闭包(Closure) 实现类似“嵌套函数”的功能(闭包是匿名函数,可在函数内部定义)。

示例:用闭包替代嵌套函数

fn outer_function() {// 闭包(匿名函数),类似嵌套函数let inner_closure = |x: i32| x * 2;let result = inner_closure(3);println!("{}", result);  // 输出:6
}outer_function();
2. 作用域规则

Rust的作用域(Scope)是变量有效存在的代码范围,遵循以下规则:

  • 块级作用域:由{}分隔的区域(如函数体、if分支、循环体)都是作用域。
  • 变量可见性:变量在其声明的作用域内可见,在作用域外不可访问。
  • 嵌套作用域:内部作用域可访问外部作用域的变量(外层变量对内层可见),反之不行。

示例

fn scope_demo() {let a = 10;  // 外部作用域变量{let b = 20;  // 内部作用域变量println!("a: {}, b: {}", a, b);  // 正确:内部可访问外部}// println!("b: {}", b);  // 错误:外部不可访问内部变量
}scope_demo();  // 输出:a: 10, b: 20

作用域规则确保了变量的生命周期可控,减少了命名冲突和意外修改的风险,是Rust内存安全的基础之一。

18. 举例说明函数参数的模式匹配(如解构元组、结构体)。

Rust允许在函数参数中直接使用模式匹配,简化对复杂类型(如元组、结构体)的解构操作,无需在函数体内手动拆分。

1. 解构元组参数

直接在参数列表中指定元组的结构,提取内部元素。

示例

// 解构元组参数
fn print_tuple((x, y): (i32, &str)) {println!("x: {}, y: {}", x, y);
}let my_tuple = (42, "hello");
print_tuple(my_tuple);  // 输出:x: 42, y: hello
2. 解构结构体参数

通过结构体字段名或位置(元组结构体)在参数中提取字段值。

示例

// 普通结构体
struct Point {x: i32,y: i32,
}// 解构结构体参数(按字段名)
fn print_point(Point { x, y }: Point) {println!("Point: ({}, {})", x, y);
}// 元组结构体
struct Color(i32, i32, i32);// 解构元组结构体参数(按位置)
fn print_color(Color(r, g, b): Color) {println!("Color: RGB({}, {}, {})", r, g, b);
}print_point(Point { x: 10, y: 20 });  // 输出:Point: (10, 20)
print_color(Color(255, 0, 0));        // 输出:Color: RGB(255, 0, 0)
3. 解构枚举参数

匹配枚举的特定变体并提取关联数据。

示例

enum Message {Quit,Move { x: i32, y: i32 },Write(String),
}// 解构枚举参数
fn process_message(msg: Message) {match msg {Message::Quit => println!("Quit"),Message::Move { x, y } => println!("Move to ({}, {})", x, y),Message::Write(s) => println!("Write: {}", s),}
}process_message(Message::Move { x: 5, y: 3 });  // 输出:Move to (5, 3)
process_message(Message::Write("hi".to_string()));  // 输出:Write: hi

优势:函数参数模式匹配减少了手动解构的代码,使逻辑更清晰,同时利用了Rust模式匹配的穷尽性检查(如枚举匹配需覆盖所有变体)。

二、120道Rust面试题目录列表

文章序号Rust面试题120道
1Rust面试题及详细答案120道(01-10)
2Rust面试题及详细答案120道(11-18)
3Rust面试题及详细答案120道(19-26)
4Rust面试题及详细答案120道(27-32)
5Rust面试题及详细答案120道(33-41)
6Rust面试题及详细答案120道(42-50)
7Rust面试题及详细答案120道(51-57)
8Rust面试题及详细答案120道(58-65)
9Rust面试题及详细答案120道(66-71)
10Rust面试题及详细答案120道(72-80)
11Rust面试题及详细答案120道(81-89)
12Rust面试题及详细答案120道(90-98)
13Rust面试题及详细答案120道(99-105)
14Rust面试题及详细答案120道(106-114)
15Rust面试题及详细答案120道(115-120)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92614.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92614.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92614.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-排序(2)

一、堆排序 &#xff08;借助树&#xff09;1.利用完全二叉树构建大顶堆 2.堆顶元素和堆底元素进行交换&#xff0c;堆底元素不再参与构建&#xff0c;剩余元素继续构建大顶堆3.时间复杂度 O(nlogn)1.完全二叉树&#xff1a;按照从上到下&#xff0c;从左到右的顺序进行排序2.…

Qt-信号和槽

一.信号和槽概念1. 信号&#xff08;Signal&#xff09;概念&#xff1a;信号是 Qt 对象在状态发生变化或事件发生时自动发出的通知。比如按钮被点击、文本框内容变化、定时器超时等&#xff0c;都会发出相应信号。本质&#xff1a;它只是一个函数声明&#xff08;没有函数体&a…

NLP学习开始-02逻辑回归

逻辑回归什么是逻辑回归逻辑回归的应用场景逻辑回归几个重要概念Sigmoid 函数损失函数构建逻辑回归模型的步骤举个例子参数解释模型优化什么是逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的统计学习方法&#xff0c;尽管名字中带有…

【运维进阶】LAMPLNMP 最佳实践

LAMP/LNMP 最佳实践 LAMP/LNMP 组件 LAMP&#xff1a;LinuxApacheMysql/MariadbPHP/Python/Perl。 LNMP&#xff1a;LinuxNginxMysql/MariadbPHP/Python/Perl。 Linux&#xff1a;操作系统&#xff0c;提供程序运行基础。Apache/Nginx&#xff1a;Web 服务器&#xff0c;提供网…

深入解析 resolv.conf 文件:DNS 配置的核心

/etc/resolv.conf 文件是 Linux 和类 Unix 系统中 DNS 配置的核心组件。它决定了系统如何将域名解析为 IP 地址&#xff0c;这是网络通信的关键环节。本文将深入探讨 resolv.conf 文件的核心内容&#xff0c;重点讲解 nameserver 指令以及 options 配置中的 attempts 和 rotate…

【LeetCode】102 - 二叉树的层序遍历

题目描述 给你二叉树的根节点 root&#xff0c;返回其节点值的层序遍历&#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 解题思路 使用 BFS&#xff08;广度优先搜索&#xff09;的思想&#xff0c;维护当前层的所有节点&#xff0c;逐层处理&#xff1a;…

计算机网络1-5:计算机网络的性能指标

目录 常用性能指标 速率 带宽 吞吐量 时延 时延带宽积 ​往返时间 ​利用率 ​丢包率 常用性能指标 性能指标可以从不同的方面来度量计算机网络的性能 常用的计算机网络的性能指标有8个:速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率 速率 比特…

TDengine IDMP 文档介绍

TDengine IDMP (Industrial Data Management Platform) 是一款 AI 原生的物联网、工业数据管理平台。它通过经典的树状层次结构组织传感器、设备采集的数据&#xff0c;建立数据目录&#xff0c;对数据提供语境化、标准化的处理、并提供实时分析、可视化、事件管理与报警等功能…

使用 iFLOW-CLI GitHub Action 和 Qwen3-Coder 给 GitHub 仓库生成幻灯片风格的文档站点

阿里的心流 https://www.iflow.cn/ 团队最近开源了一款基于终端的 AI Agent 工具 iFLOW CLI, 目前可以免费使用到强大的 Qwen3-Coder、Kimi K2 等模型。又是一款类似 Anthropics Claude Code 的产品。 iFlow CLI 是一款直接在终端中运行的强大 AI 助手。它能够无缝分析代码仓库…

【2025最新】在 macOS 上构建 Flutter iOS 应用

推荐超级课程&#xff1a; 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 目录软件要求操作系统开发工具文本编辑器或集成开发环境安装 Flutter SDK下载并安装 Flutter将 Flutter 添加到您的PATH配置 i…

MySQL 临时表详细说明

目录 MySQL 临时表详细说明 1. 定义 2. 核心特性 3. 创建与使用 4. 典型应用场景 5. 生命周期管理 6. 注意事项 7. 性能优化建议 MySQL 临时表详细说明 1. 定义 临时表是存储在内存或磁盘上的临时性数据表&#xff0c;仅在当前数据库会话中存在。会话结束时自动销毁&a…

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南 文章类型&#xff1a;性能优化实践指南 技术领域&#xff1a;微服务架构 —— API 网关 文章结构&#xff1a;原理深度解析型 目标读者&#xff1a;有一定微服务与运维基础的后端开发工程师一、技术背景与应用场景 随…

【Spring Boot刷新上下文核心流程详解】

Spring Boot 刷新上下文核心流程详解 一、前言 在使用 Spring Boot 启动应用时&#xff0c;控制台会打印出一大串日志&#xff0c;其中最核心的启动动作之一就是 刷新上下文&#xff08;refresh&#xff09;。 refresh 方法不仅负责 Bean 的创建与初始化&#xff0c;还涉及监…

关于过滤器(Filter)的学习

过滤器&#xff08;Filter&#xff09;概述 过滤器是 Java Servlet 规范的一部分&#xff0c;用于在请求到达 Servlet 之前或响应返回客户端之前拦截请求和响应。它可以用于执行各种任务&#xff0c;如请求预处理、响应后处理、身份验证、日志记录等。 过滤器的作用 预处理请…

Spring AI 打造智能面试人实战

Spring AI人工智能面试机器人相关实例 以下是与Spring AI人工智能面试机器人相关的实用案例,涵盖技术实现、功能设计及常见问题解决方案,按应用场景分类呈现: 技术集成案例 调用Hugging Face模型库处理专业领域问题 通过Spring Security添加面试会话身份验证 结合WebSoc…

QT 程序发布时候调用自定义动态库

1、需要在pro文件中增加下面的内容&#xff1a;QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/lib\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/../lib\"其中lib为动态库的文件夹名称&#xff0c;可以根据自己喜好…

SpringBoot学习日记 Day6:解锁微服务与高效任务处理

一、开篇&#xff1a;从单体到微服务的思维转变刚开始接触微服务时&#xff0c;我总习惯把所有功能写在一个项目里。直到项目越来越臃肿&#xff0c;每次修改都要全量部署&#xff0c;才意识到微服务架构的价值。今天我们就来探索SpringBoot在微服务场景下的强大能力&#xff0…

机械学习--DBSCAN 算法(附实战案例)

DBSCAN 算法详解DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;带噪声的基于密度的空间聚类应用&#xff09;是一种经典的密度聚类算法&#xff0c;由 Martin Ester 等人于 1996 年提出。与 K-means 等基于距离的聚类算法不同&am…

【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808

一、背景 1.1 主要的硬件是&#xff1a;1.2 主要的软件是&#xff1a; RK3588跑操作系统Atlas 200I A2加速模块作为EP模式关键参数版本说明CPU架构aarch64OS版本Ubuntu 22.04.5 LTSkernel版本5.10.198 二、适配 准备固件run包文件&#xff1a;Ascend-hdk-310b-npu-firmware_7.…

如何在 VS Code 中进行 `cherry-pick`

cherry-pick 是 Git 的一个功能&#xff0c;允许你选择某个 commit 并将其应用到当前分支&#xff0c;而无需合并整个分支。在 VS Code 中&#xff0c;你可以通过 内置的 Git 功能 或 终端 来完成 cherry-pick。方法 1&#xff1a;使用 VS Code 的 Git 图形界面&#xff08;GUI…