自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 Rust 中的 if let 与 while let 语法糖:简化模式匹配的优雅工具

if let和while let在不牺牲安全性的前提下,通过语法糖提升开发效率。它们没有引入新的语义,只是简化了常见模式的表达,让代码更专注于逻辑本身。if let解决了 “只关心一种匹配结果” 的场景,避免match的仪式感;while let让循环中的模式匹配更自然,尤其适合处理动态产生的值。掌握这两种语法糖,能让你的 Rust 代码更简洁、更易读,同时保持模式匹配的严谨性。记住:好的语法糖应当 “润物细无声”—— 既简化代码,又不隐藏逻辑。

2025-10-30 21:56:36 511

原创 Rust 模式匹配的穷尽性检查:编译期保障的完整性与安全性

Rust 的穷尽性检查,本质是 “让编译器成为第一道防线”,将 “是否覆盖所有情况” 的验证从运行时提前到编译期。零遗漏保障:确保每种可能的输入都有明确的处理逻辑;平滑重构:当数据结构(如枚举)变化时,编译器自动定位需要更新的代码;清晰的意图表达:通过模式的完整性,让代码读者明确所有可能的分支。在实际开发中,应充分利用这一机制:避免过度依赖通配模式(除非确实需要兼容未来扩展),优先显式处理每一种情况。

2025-10-30 21:55:12 436

原创 Rust 代码审查清单:从安全到性能的关键校验

Rust 代码审查的核心是 “平衡安全与性能,兼顾规范与实用”。团队需结合业务场景调整清单(如嵌入式场景强化内存审查,分布式系统侧重并发安全),通过持续校验将语言特性转化为实际代码质量,最终实现安全、高效、可维护的 Rust 项目交付。

2025-10-30 21:51:19 432

原创 Rust API 设计中的零成本抽象原则:从原理到实践的平衡艺术

零成本抽象并非要求 API 设计者 “消除所有成本”,而是让成本变得可预测、可控制—— 用户能清晰感知抽象带来的收益,并只为实际使用的功能付费。在 Rust 中,这一原则通过泛型单态化、细粒度 trait、条件编译等机制落地,要求设计者既理解编译器优化逻辑,又能站在用户视角权衡抽象价值与性能成本。最终,优质的零成本抽象 API 应像 Rust 语言本身一样:既提供超越传统系统语言的抽象能力,又不牺牲底层代码的性能控制力,让开发者在 “易用” 与 “高效” 之间无需妥协。

2025-10-30 21:49:58 461

原创 Rust 线程安全性的基石:Send 与 Sync 特性解析

Send与Sync零成本安全:所有检查在编译期完成,无需运行时开销(如额外的动态校验),兼顾安全性与性能。明确的责任边界:通过自动派生规则,将线程安全的责任分散到类型设计中,开发者无需在业务逻辑中重复处理安全细节。掌握Send与Sync的关键,在于理解 “线程安全是类型的属性”—— 设计并发代码时,应优先选择 Rust 标准库中已实现的类型(如ArcMutex),避免手动实现这两个特性。当必须手动实现时,需进行严格的安全性验证,确保符合特性的语义契约。最终,Send与Sync。

2025-10-30 21:48:28 348

原创 Rust 内存泄漏的检测与防范:超越安全的实践指南

Rust 无法像阻止空指针那样完全消除内存泄漏,但通过 “预防为主,检测为辅” 的策略,可有效控制泄漏风险。优先使用安全抽象:依赖RcArc时警惕循环引用,善用Weak打破依赖环;全局状态需明确生命周期与清理机制。工具链常态化:将clippy检查、泄漏测试纳入 CI 流程,使用valgrind或 Rust 专用工具定期扫描。unsafe代码最小化:必须使用原始指针时,通过 RAII 封装确保资源自动释放,避免手动管理。

2025-10-30 21:46:08 406

原创 Rust 中 unsafe 代码的安全使用准则:在边界内释放力量

所有包含unsafe的函数或类型,必须通过文档明确 “安全前提”—— 即调用者必须满足哪些条件,才能保证unsafe代码的安全性。指针必须指向有效内存且未悬垂;传入的索引不得越界;多线程环境下需保证同步;类型内部状态的不变性(如Vec的例如,封装一个不安全的内存拷贝函数时,需明确指针有效性契约:rust/// 安全地将 `src` 指向的 `n` 个字节拷贝到 `dst`。////// # 安全前提/// - `dst` 和 `src` 必须指向至少 `n` 字节的有效内存;

2025-10-30 21:44:37 331

原创 Rust 过程宏开发入门:元编程的艺术与实践

派生宏通过#[proc_macro_derive(宏名)]注解的函数实现,函数签名固定为rust// 派生宏入口:处理 #[derive(MyDebug)]// 1. 解析输入的 TokenStream 为 DeriveInput(表示被派生的结构体/枚举)// 2. 处理 AST 并生成代码// 3. 将生成的代码转换为 TokenStream 并返回属性宏通过注解的函数实现,签名为(第一个参数为属性参数,第二个为被修饰的项):rust// 解析被修饰的函数// 函数名。

2025-10-30 21:40:03 248

原创 Rust 中 trait 对象与动态分发的权衡:性能与灵活性的艺术

trait 对象与动态分发是 Rust 多态体系中不可或缺的一环,其价值在于为灵活性需求较高的场景提供简洁的解决方案,而代价则是可预知的性能开销与使用限制。明确场景优先级:性能敏感则优先静态分发,灵活性优先则接受动态分发的成本。量化权衡结果:通过基准测试()对比两种方案的性能差异,避免凭直觉决策。混合策略优化:在大型项目中,根据模块职责拆分策略 —— 底层核心用静态分发保证性能,上层扩展用动态分发提升灵活性。

2025-10-30 21:38:37 373

原创 Rust 日志级别与结构化日志:从调试到生产的日志策略

trace:最详细的调试信息,用于追踪代码执行的每一步细节(如函数调用参数、循环变量值)。仅在本地开发或深度调试时启用,生产环境禁用(避免性能损耗与日志泛滥)。rusttrace!("进入用户认证流程,用户名: {}", username);debug:程序运行的关键节点信息,用于验证逻辑正确性(如缓存命中情况、计算中间结果)。适用于开发与测试环境,生产环境通常关闭或仅针对特定模块启用。rustdebug!("缓存未命中,键: {}", cache_key);info。

2025-10-30 21:35:58 287

原创 Rust 借用检查器(Borrow Checker)的工作原理:编译期内存安全的守护者

摘要:Rust的借用检查器(Borrow Checker)是确保内存安全的编译器核心组件,它通过静态分析代码中的借用关系、生命周期和所有权转移,在编译阶段验证内存安全规则。其工作包括生命周期分析(防止悬垂引用)和借用规则验证(确保独占/共享语义),能够拦截数据竞争、违规借用等问题且无需运行时开销。借用检查器基于所有权关系图和生命周期推断,分阶段完成验证,并生成详细错误报告。虽然存在对复杂数据结构和逻辑安全的分析局限,但通过代码结构调整或使用RefCell等类型可以应对。这一机制使Rust实现了零成本的内存安

2025-10-29 21:34:25 669

原创 Rust 中所有权与零成本抽象的深度关联:原理与实践

Rust通过所有权系统实现了零成本抽象这一核心设计理念。所有权机制在编译期完成静态分析和优化,无需运行时垃圾回收或引用计数,既保证了内存安全,又避免了性能损耗。其移动语义消除了不必要的内存复制,Drop trait的自动调用机制也完全在编译期确定。实践测试表明,Rust的内存操作性能与C语言相当,显著优于Java等GC语言。这种"安全与性能双赢"的特性,使Rust成为系统编程和高性能计算领域的理想选择。所有权系统与零成本抽象的深度结合,展现了Rust独特的设计哲学和核心竞争力。

2025-10-29 21:29:22 813

原创 Rust 所有权与解构:内存管理的精细交互

Rust中的解构(Destructuring)是与所有权系统深度绑定的重要特性。文章详细解析了解构在不同数据类型中的所有权流转规则:结构体解构会拆分所有权,原变量失效;部分解构可通过..保留剩余字段所有权;枚举解构时变体数据所有权会转移至匹配变量;元组和数组解构遵循类似规则。为避免所有权转移,可使用引用解构(&)或@绑定。文章还分析了常见错误场景和性能考量,强调解构本质是所有权拆分与再分配的过程,正确理解这一特性对编写安全高效的Rust代码至关重要。

2025-10-29 21:26:04 730

原创 Rust探秘:所有权转移在函数调用中的表现​

本文探讨了编程语言中所有权转移机制的核心概念与实际应用,重点分析Rust语言的所有权系统。文章详细解析了函数调用时所有权转移的两种情形:堆数据类型的所有权转移和实现CopyTrait类型的值复制。同时阐述了返回值导致的所有权移交机制,包括简单类型和复杂数据结构的处理方式。所有权转移带来的内存管理优势体现在避免内存泄漏和防止数据竞争两个层面。实际应用场景分析展示了该机制在资源管理和大型项目架构中的重要作用。最后展望未来,指出所有权管理机制可能朝着语法简化、智能化和适应新兴技术需求的方向发展。

2025-10-29 21:20:05 933

原创 Rust 探秘:复制语义与移动语义的差异剖析

Rust语言通过所有权系统实现了独特的内存管理机制。文章深入分析了移动语义和复制语义这两种核心概念:移动语义默认转移所有权,确保内存安全,适合处理复杂数据结构;复制语义通过Copytrait实现按位复制,适用于简单数据类型。对比显示,移动语义能避免数据重复复制,提升大对象处理效率;复制语义则使基本数据类型的操作更直观高效。在实际应用中,开发者需根据数据类型选择合适的语义机制,以平衡性能与安全性。Rust的这种内存管理方式为系统编程提供了安全高效的解决方案,未来可能在更多领域发挥重要作用。

2025-10-29 21:10:37 854

原创 LeetCode刷题:字符串组成最大的数字

【代码】LeetCode刷题:字符串组成最大的数字。

2024-09-09 20:08:59 269

原创 LeetCode刷题:找到第K大的元素

本题其实就是考察排序算法,为了减低时间复杂度,所以采用堆排序。

2024-09-09 19:51:28 493

原创 LeetCode刷题:找到前K大的元素

【代码】LeetCode刷题:找到前K大的元素。

2024-09-09 19:19:26 220

原创 Leetcode刷题:堆排序

【代码】Leetcode刷题:堆排序。

2024-09-09 17:56:00 242

原创 LeetCode刷题:快速排序

思路:利用双指针遍历数组寻找出基准数的位置,然后左右递归。

2024-09-09 15:28:37 218

原创 Leetcode刷题:归并排序

递归思维:自己调用自己,但每个时段的自己都是进化的,而且仅仅调用声明进栈,没有实际计算,计算发生在回溯阶段,因此没有终止条件,便无限进栈,永不回溯。回溯则是逆向的,视觉是从小到大(正向是大化小)分治法是递归思维的经典应用:分而治之,分至不可再分为止。

2024-09-09 11:25:18 218

原创 LeetCode刷题:3.无重复字符的最长子串

所以可以利用左右指针来遍历数组,但凡形成的窗口中有重复元素就把重复元素删掉。同时记录每次出现重复元素时(左指针移动时)滑动窗口的长度,并且选择记录的最大值。需求描述:要求得到滑动窗口的大小,也就是左右指针的距离,同时确保左右指针的元素是不重复的。子串:依据其形式是拥有一段长度的,所以考虑滑动窗口。所以还是一个简单的遍历问题,无需想得过于复杂。1.要求得到一个唯一最长子串的序列的长度。唯一:考虑使用HashSet。问题:首先分析问题得出需求。

2024-08-29 22:51:54 382 1

原创 Leetcode刷题:2.两数相加

链表节点可以直接运算,无需借用下标。为了避免大数问题,每个位数独立相加。问题变成了遍历链表的简单问题。

2024-08-29 14:25:39 306 1

原创 LeetCode刷题:1 两数之和

利用哈斯表查找O(n)和反向思维(变问题为寻找other=target-num[i]的位置):O(n)暴力解法:O(N^2)

2024-08-29 00:48:19 291

原创 假设检验:P值的作用

P值代表由样本数据得到的样本统计量,该样本统计量在理论统计量的置信区间(1-a)内的概率(根本原因),意思是样本统计量在理论统计量的占比越大,表示样本统计量越接近理论统计量。P值是假设检验中很重要的一个指标。它代表接受原假设的概率。(直接作用)P值本质上是在原假设H0成立的条件下,得到实际样本统计量或更极端统计量的概率。它是通过以下步骤推导得来的:1. 提出原假设H0和对立假设H1。H0通常表示两种变量之间没有关系或差异。2. 假设H0为真,从总体分布中得出样本统计量的理论分布。

2023-04-19 11:54:45 1703

原创 21个常用注解

综上,@SpringBootApplication 注解是一个 Spring Boot 场景下的核心注解,它集成了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的功能,用于开启 Spring Boot 的自动配置机制,简化 Spring 应用的配置。@ResponseBody是一个 Spring MVC 的注解,用于标记控制器方法的返回值将被转换为 HTTP 响应报文的消息体。

2023-04-18 21:55:01 1717 1

原创 时间序列分析的基本流程(R语言版——实验篇)

1.导入数据(.csv) 2.对数据切片获取 3.把一行变一列数据4. 将数据做成时间序列ts数据处理已经完成,下面进行时序分析1.画时序图(初步直观感受时间序列的特性) 看平稳性和白噪声(直观不科学)非平稳性:有周期性和趋势性如果存在周期性,那么图像就会有周期性波动,趋势性:就是有单调性趋势2. 数据说话:ADF单位根法进行平稳性检验结果:Augmented Dickey-Fuller Test alternative: stationary Type 1: no

2022-12-05 22:39:37 6655

原创 课堂练习P181最后一问:应回

【代码】课堂练习P181最后一问:应回。

2022-11-30 20:45:04 586

原创 Multiple linear regression

多元线性回归的内容与一元线性回归的内容差不多,下面直接上代码说明一下具体功能。这里值得一提的是中心化和标准化是不会影响数据的原本规律的,它们只是对数据进行平移以及压缩。为什么不会影响呢?其实是因为数据的分布规律是以数据点与中间点的距离规律,我们把数据等比例地压缩和平移,不会对这个相对距离造成影响。对数据进行标准化再多元回归分析的好处是一来方便计算,二来其系数能够反映出各变量对因变量的贡献程度。不进行标准化时,第二点是不能反映的,因为变量间可能存在量纲影响。

2022-10-20 18:53:02 1493 1

原创 【WORM ONE】:静态网页制作

因为是刚刚结束前端10分钟,有些内容只是理解得很浅显,所以笔记部分借鉴了一些优秀的博主。希望能帮到大家。

2022-10-10 11:46:45 413

原创 Simple Linear Regression:ONE

【代码】应用回归分析实操案例一。

2022-09-28 17:43:14 793 2

原创 【NOWCODE EIGHT】:二分查找\排序

程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧。数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。❄️ 冰冻三尺非一日之寒❄️,只刷一两天刷法可成不了编程界的耶路撒冷,千里之行始于足下,所以还是得坚持刷题阿,每天记得要上机哟!!!

2022-09-27 18:37:11 180

原创 【NOWCODE SEVEN】:二分查找/排序

程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧。数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。❄️ 冰冻三尺非一日之寒❄️,只刷一两天刷法可成不了编程界的耶路撒冷,千里之行始于足下,所以还是得坚持刷题阿,每天记得要上机哟!!!

2022-09-27 18:27:32 666

原创 【NOWCODE SIX】:链表

程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧。链表通常由一连串节点(“链结点”)组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接(“links”)。

2022-09-27 17:09:38 130

原创 【NOWCODE FIVE】:链表

程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧。链表通常由一连串节点(“链结点”)组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接(“links”)。

2022-09-27 17:03:30 308

原创 【NOWCODE FOUR】:链表

程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧。链表通常由一连串节点(“链结点”)组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接(“links”)。

2022-09-27 16:45:00 295

原创 【NOWCODE THREE】:链表

程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧。链表通常由一连串节点(“链结点”)组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接(“links”)。

2022-09-27 16:28:02 338

原创 【NOWCODE TWO】:链表

程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧。链表通常由一连串节点(“链结点”)组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接(“links”)。

2022-09-27 16:07:55 172

原创 【NOWCODE ONE】:链表

一位大佬曾经说过:程序=数据结构+算法,数据结构相当于一套普遍适用的工具,算法相当于一套行之有效的解题方法和解题步骤。Dambisa Moyo 曾经说过:“种一颗树最好的时间是十年前,其次是现在。”所以十年前没有刷题的朋友,现在跟着博主一起刷题吧,我常用的刷题的网站是:👉牛客网🔍链表通常由一连串节点(“链结点”)组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接(“links”)。

2022-09-27 14:57:37 281

原创 数学建模算法总结

拟合得到的是一条曲线 ,拟合得到的函数不一定过所有点cftool)最小二乘法最小二乘法评价评价拟合的好坏:拟合优度R^2:只能在拟合函数是线性函数时作为参数 R2 = SSR/SST,R2越接近1,说明拟合越好总体平方和SST:SST = SSE+SSR回归平方和SSE:当拟合函数是线性函数或其他函数时可以只看SSE(越小越好)残差平方和SSR。...............

2022-08-27 19:54:43 4575

HTML课堂笔记.md

HTML课堂笔记.md

2023-03-20

这里面只是一个感想,没必要看,建议不要浪费积分

storm作业

2023-05-21

应用回归分析课程代码与实验代码.rar

应用回归分析课件以及代码

2023-01-12

应用回归分析的课件,可供学习参考

应用回归分析的课件,可供学习参考

2022-12-11

时间序列分析(r语言)实验篇文件

时间序列分析(r语言)实验篇文件

2022-12-05

历年国赛数学建模优秀论文

历年国赛数学建模优秀论文

2022-09-19

全国大学生数学建模大赛历年真题

全国大学生数学建模大赛历年真题

2022-09-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除