🐧 WSL + Fish Shell 设置说明管理 WSL 发行版1234wsl -l -v # List all installed distros with versionwsl --unregister Ubuntu # Remove old Ubuntu instance (⚠️ data loss)wsl --install -d Ubuntu-24.04 # Install fresh Ubuntuwsl -s Ubuntu-24.04 # Set Ubuntu as default distro
检查默认 Shell12echo $SHELL # Show current shellcat /etc/shells # List available shells
更新和升级软件包12sudo apt updatesudo apt upgrade -y
安装 Fish Shell + 实用工具12sudo ...
Rust学习笔记
未读线程间共享数据的方式
使用 move 转移所有权
使用限定作用域的线程(Scoped Threads)从生命周期更长的父线程借用数据
Static
Box::leak()
Arc
Static
Static 变量的值在整个程序运行期间都有效
拥有 ‘static 生命周期
只能用常量值初始化
代表了一个内存地址,可以进行引用
在程序结束时不会调用 drop
可以是 mut 的,或非 mut 的
实操非 mut static :
1234567891011121314151617use std::thread;static DATA: [i32; 5] = [1, 2, 3, 4, 5];fn main() { let mut handles = Vec::new(); for _ in 0..100 { let handle = thread::spawn(|| { println!("Data: {DATA:?}"); }); ...
相关概念什么是限定作用域的线程?
定义:使用std::thread::scoped创建的线程,生命周期受限于特定作用域
特性:线程在作用域结束前必须终止,无需手动管理JoinHandle
主要优点
简化线程管理:
无需手动调用**join()**,作用域自动确保线程退出。
减少管理线程生命周期的复杂性。
安全的数据访问:
线程可以安全引用作用域内的本地数据,无需复制或克隆(如使用Arc或clone)。
编译器保证数据在作用域内有效,限制所有权的可能性。
简化工作流:
闭包可以直接访问本地变量,编写线程函数更直观。
提高代码可读性和维护性。
局限性
线程生命周期受限
你不能在一个作用域中创建一个线程并期望它永远运行。
强制终止
父作用域在继续执行前,会强制等待所有子线程终止。
使用作用域线程普通线程使用方式123456789101112131415161718use std::{thread, time::Duration};fn main() { let mut handles = Vec::new(); for i ...
普通创建线程首先,先介绍一下普通创建线程的方法:使用 thread::spawn :
1234567891011121314151617use std::{thread, time::Duration};fn main() { thread::spawn(|| { for i in 1..10 { println!("hi number {i} from the spawned thread!"); thread::sleep(Duration::from_millis(1)); } }); for i in 1..5 { println!("hi number {i} from the main thread!"); thread::sleep(Duration::from_millis(1)); ...
Rust学习笔记
未读主要内容
从txt文件导入电影信息(一次性)
基于命令行的电影管理小程序(CRUD)
登录验证
CRUD
txt文件示例:
DVD.txt
12345678910111213145.1987 华尔街 Wall Street.mkv1998 细细的红线 The Thin Red Line.mkv1999 星球大战1魅影危机 Star Wars Episode I The Phantom Menace.mkv2000 猎杀U-571 U-571.mkv2002 星球大战2克隆人的进攻 Star Wars Episode II Attack Of The Clones.mkv2005 豺狼帝国 Empire of the Wolves.mkv2005 翻译风波 The Interpreter.mkv2005 星球大战3西斯的反击 Star Wars Episode III Revenge Of The Sith.mkv2005 查理和巧克力工厂 Charlie and the Chocolate Factory.mkv(儿童)2007 灵魂战车 Ghost Rider Extended ...
数据结构与算法
未读226. 翻转二叉树给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:
12输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]
示例 2:
12输入:root = [2,1,3]输出:[2,3,1]
示例 3:
12输入:root = []输出:[]
提示:
树中节点数目范围在 [0, 100] 内
-100 <= Node.val <= 100
💡 思路:本质上还是二叉树的遍历:
递归实现,每个节点递归处理左右子节点
迭代法深度优先(栈)实现
迭代法广度优先(层序遍历,队列)实现
代码(思路一):
1234567891011121314151617181920use std::rc::Rc;use std::cell::RefCell;impl Solution { pub fn invert_tree(root: Option<Rc<RefCell<TreeNode>>>) -> Option<Rc& ...
数据结构与算法
未读144. 二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
解释:
示例 2:
输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]
输出:[1,2,4,5,6,7,3,8,9]
解释:
示例 3:
输入:root = []
输出:[]
示例 4:
输入:root = [1]
输出:[1]
提示:
树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
💡 思路:
递归法
迭代法
二叉树定义:
123456789101112131415161718// Definition for a binary tree node.#[derive(Debug, PartialEq, Eq)]pub struct TreeNode { pub val: i32, pub left: ...
数据结构与算法
未读232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):
实现 MyQueue 类:
void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
示例 1:
1234567891011121314输入:["MyQueue", "push", "push", "peek", "pop", "empty"][[], [1], [2 ...
数据结构与算法
未读344. 反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
12输入:s = ["h","e","l","l","o"]输出:["o","l","l","e","h"]
示例 2:
12输入:s = ["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 10^5
s[i] 都是 ASC ...
数据结构与算法
未读242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
示例 1:
12输入: s = "anagram", t = "nagaram"输出: true
示例 2:
12输入: s = "rat", t = "car"输出:false
提示:
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
💡 思路:
哈希表法
数组记录法(输入字符串不能为unicode)
代码(思路一):
123456789101112131415161718192021222324use std::collections::HashMap;impl Solution { pub fn is_anagram(s: String, t: String) -> bool { ...















