- 博客(1234)
- 收藏
- 关注
原创 249-rust入门14 - 测试
通常放在模块的底部,通过内嵌模块mod tests来实现。放在tests/目录中,cargo会自动识别。├── src/└── tests/类型说明单元测试#[test],模块内测私有函数集成测试tests/文件夹,测公共 API异步测试或覆盖率tarpaulin或llvm-cov性能测试criterionmockmockall, 手动 trait 替换。
2025-07-12 22:48:43
935
原创 248-rust入门13 - 生命周期
在 Rust 中,生命周期(lifetime)是编译器用于追踪所有引用(reference)有效性范围的机制。Rust 不像其他语言那样依赖垃圾回收器,而是依靠所有权系统来保证内存安全。而引用的使用就必须配合生命周期,确保:不会使用悬垂引用(Dangling Reference)不会出现数据竞争(Data Race)生命周期是静态检查,即在编译阶段就检查引用是否合法,不会影响运行时性能。'static是整个程序运行期间都有效的生命周期。概念说明生命周期引用的有效作用域'a。
2025-07-12 21:43:31
662
原创 247-rust入门12 - Trait
Trait 是 Rust 中用于定义行为接口的语言特性,相当于 Java 的接口(interface)、C++ 的抽象类或 Go 的接口。这里定义了一个Greettrait,任何实现它的类型都需要提供greet()方法。✅ Rust 的 trait 是强类型系统的核心特性✅ 提供了抽象、泛型、多态、复用等能力✅ 可结合泛型、关联类型、生命周期、const 泛型✅ 标准库广泛使用 trait 实现统一行为✅ 区分静态分发(泛型)与动态分发(trait 对象)
2025-07-12 18:45:59
344
原创 246-rust入门11 - 泛型
Rust 泛型的优点:✅ 零成本抽象✅ 高度类型安全✅ 编译时类型检查✅ 可与 trait/lifetime/const 搭配使用✅ 强大表达力,标准库广泛使用掌握泛型是深入 Rust 编程的必备技能!
2025-07-11 22:47:54
403
原创 245-rust入门10 - 错误处理
手写From很麻烦,可以用thiserror超级简洁,还能自动生成错误消息。Rust 的错误处理比大多数语言都更“严格”,但也更安全、更灵活:用精确表达每一个可能出错的操作用?快速传播错误,用context增强错误信息用thiserror管理复杂的错误类型用anyhow快速上手、简化逻辑错误处理是一种态度。Rust 逼着你面对每一个可能出错的地方,让你不再“逃避责任”,而是显式地处理问题、明确地设计接口、清晰地传递信息。
2025-07-11 22:27:02
355
原创 244-rust入门9 - 多重借用
关键点内容不可变借用数量可以多个可变借用数量只能一个借用不能混用可变借用与不可变借用不能共存生命周期控制借用的作用范围由使用位置决定高级方式RefCell、Rc、clone、局部作用域。
2025-07-11 09:39:18
386
原创 243-rust入门8 - HashMap
方法名功能.new()创建一个新的空 HashMap创建一个预分配空间的 HashMap插入键值对(覆盖).get(&k)获取键对应的值删除指定键的值判断是否包含键如果键不存在则插入.len()当前键值对数量是否为空.clear()清空全部数据.iter()迭代器(借用/获取所有权)HashMap是 Rust 中功能强大且高效的键值对数据结构。它支持常见的插入、删除、查找操作,并且具有灵活的更新逻辑。你需要理解其所有权模型、哈希算法、性能特征以及与BTreeMap的对比,才能用好它。
2025-07-11 09:28:48
611
原创 242-rust入门7 - String
Rust 中的String是一门非常注重内存安全和性能的语言对字符串的回答。与&str配合使用,能够有效避免内存泄露、编码错误、线程冲突等问题。关键要点回顾String是可变、拥有所有权的堆分配 UTF-8 字符串不支持直接索引,必须考虑 UTF-8 边界String与&str紧密协作.chars().bytes()是核心 API切片必须小心,避免非字符边界。
2025-07-11 09:23:32
248
原创 241-rust入门6 - 枚举
注意match的时候,必须穷举所有的情况。所以,rust就搞了一个Option。然后来试一下Option<T>如果无法穷举,就用_符号。Rust中没有Null。这是一个很有意思的事情。
2025-07-07 09:32:14
211
原创 240-rust入门5 - 切片和struct
用tuple struct的话就不用变量了,直接tuple。那么实际上,area这个函数可以成为Rect的函数。我们可以用字符串切片来表示hello和world。学完了之后,感觉对rust有了更深的了解。用struct的话就要命名变量xyz。再来试试tuple struct。假设point表示xyz的坐标点。这边的11实际上可以用长度代替。并且这里的0和len可以省略。是rust里面最重要的概念。然后来学习一下struct。那么,如果是完整的字符串。上两篇写了所有权和引用。来创建一个struct。
2025-06-29 11:52:40
184
原创 239-rust入门4 - 引用
如果引用了某些数据,编译器将保证在引用离开作用域之前,数据不会离开作用域。我们可以通过创建新的作用域,来允许非同时的创建多个可变引用。在特定作用域内,对某一块数据,只能有一个可变的引用。在rust中,编译器可以保证引用永远都不是悬空引用。1.不可以同时拥有一个可变引用和一个不可变引用。然后&mut s1,就是将可变引用传入参数。不可以同时拥有一个可变引用和一个不可变引用。这时候,我们调用函数的时候,传入了引用。这样是可以,因为全都是不可变引用。引用和变量一样,默认是不可变的。这里我们想在函数中使用s1。
2025-06-26 21:50:16
267
原创 238-rust入门3 - 所有权
当一个包含heap数据的变量离开作用域的时候,它的值就会被drop函数清理,除非数据的所有权移动到另一个变量上了。3.rust采用了不同的方式:对于某个值来说,当拥有它的变量走出作用域的时候,内存会立即自动的交还给操作系统。1.字符串字面值,在编译的时候就知道它的内容了,其文本内容直接被硬编码到了最终的可执行文件里了。访问heap中的数据要比访问stack中的数据慢,因为需要通过指针才能找到heap中的数据。对于现代的处理器来说,由于缓存的缘故,如果指令在内存中跳转的次数越少,那么速度就越快。
2025-06-26 21:26:38
631
原创 237-rust入门2 - 函数与循环
b这样改是不行的,因为刚开始是&str,后面是数字,不行。rust里面有3种循环,loop,while,for。a这样改是没问题的,因为是同一个类型。rust里面的可变变量是固定类型的。这里并不是2个a,而是shadow。这样是可以的,前后都是&str。如果是返回值,后面不能加分号。因为加了分号,就是一个语句了。不加分号,就是返回值的表达式。再来看下range的rev。然后来看下while。
2025-06-26 19:37:32
193
原创 236-rust入门1 - 基础知识
如果我把guess的类型弄成i32,那么secret就自动变成i32 如果我把guess的类型弄成u32,那么secret就自动变成u32。我们可以写个函数来看下random_range的默认类型。这里就是简单的用std::io来读取read_line。所以这里我们parse的时候用i32或者u32都可以。我们来看下random_range的源码。是不确定的,直到上下文需要它被确定。现在我们来生成一个随机数。然后我们来生成一个随机数。这里有一个很有意思的地方。来写一个简单的猜数游戏。
2025-06-25 09:57:43
190
原创 235-关于WebAssembly
优点缺点高性能、跨平台、安全调试困难、编译流程复杂、JS 与 Wasm 通信成本WebAssembly 是让浏览器支持更多“原生级”能力的关键技术,未来在AI、图形渲染、音视频处理、游戏、甚至数据库等领域都将越来越重要。
2025-06-25 08:36:22
642
原创 234-theGraph入门
适用于 EVM 链(如 Ethereum、Polygon、Arbitrum、Optimism、BSC 等)。The Graph 是一个去中心化协议,允许开发者为区块链数据创建可查询的 GraphQL 接口,称为。你可以在 Subgraph 的 Playground 或前端直接调用 GraphQL 接口。它可以监听链上的事件并将数据存储进一个可索引的数据库中,供前端高效查询。这是主配置文件,定义了监听的合约、起始区块、处理函数等。用于监听新的合约实例(如 Factory 创建的合约)。事件未触发就没有数据。
2025-05-16 14:14:42
832
原创 233-substreams入门
(后被 The Graph 收购)推出的数据处理框架,专为区块链数据提取和索引设计。你也可以用 Graph CLI 将 Substreams 与 Graph Subgraph 结合。:类似函数式编程,模块可以被多个 downstream 模块复用。适合处理复杂数据、事件追踪、NFT、DeFi、游戏链上数据等场景。:利用并发处理,大幅优于传统 Graph Node。模块可以引用其他模块的输出,形成数据流图。:每个模块做一件事,支持组合使用。: 控制台打印 JSON 结果。:支持以太坊及兼容链。
2025-05-16 13:54:50
690
原创 232-neon数据库入门
Neon是一个分离存储和计算的 serverless PostgreSQL 平台,专为云原生应用设计。它允许你快速启动、按需扩展,并按实际使用付费。核心特性包括:🌈 Serverless Postgres(零配置部署)🚀 自动暂停和恢复数据库🧠 多分支(Branching)功能,适合开发、测试环境隔离🧩 分离存储和计算架构(类似 Snowflake)🔒 内置备份和恢复特性说明上手难度⭐⭐(简单)Serverless 支持✅ 全自动Git 风格分支✅ 多环境开发神器数据库类型。
2025-05-13 15:32:31
741
原创 231-关于anchor账户更新
现在我想要更新StudentAccount的格式,更新为 #[account] pub struct PublicNumberAccount { pub class: u64, pub age: u64, pub color: u64, pub number: u64, }anchor合约,我的StudentAccount的格式为 #[account] pub struct PublicNumberAccount { pub class: u64, pub age: u64, }),那么之前已经创建的。
2025-03-31 21:21:37
372
原创 230-简易Kafka应用
一个简单的的示例。这个示例会包括:一个接口,用于接收评论数据。Producer 会将评论数据发送到 Kafka。Consumer 会自动监听 Kafka 中的评论数据,并将数据存入数据库(假设我们使用MongoDB来存储数据)。
2025-03-28 11:23:12
940
原创 229-Kafka
Kafka 作为一个高性能、分布式的消息队列系统,适用于大规模数据流处理。熟练掌握 Kafka 的架构、操作、优化及安全策略,可以大幅提升业务系统的可靠性和性能。
2025-03-28 11:08:46
648
原创 228-mqtt通信
MQTT 是一款轻量级、灵活的消息传输协议,适用于 IoT 和消息推送场景。通过本攻略,你可以从入门到精通,掌握 MQTT 的安装、配置、开发、调试与优化。
2025-03-28 11:04:50
801
原创 227-消息队列MQ
消息队列(Message Queue, MQ)是一种跨进程通信(IPC)或分布式系统的异步消息传递机制。它通过先进先出(FIFO)的方式存储和传输消息,使系统中的不同组件可以解耦并高效地进行通信。
2025-03-28 11:01:29
782
原创 226-关于Rust的Arc
Arc<T>是 Rust 标准库中的一个智能指针,提供了原子性引用计数(Atomic Reference Counting),允许多个线程安全地共享数据。作用:在多线程环境中提供安全的引用计数,实现共享所有权。原理:采用原子操作进行引用计数,确保在并发访问时不会发生数据竞争。主要特点适用于多线程环境(线程安全)。不能修改内部值(除非配合Mutex<T>RwLock<T>Atomic*等)。使用原子操作来管理引用计数,性能比Rc<T>低,但能保证线程安全。
2025-03-27 15:01:56
998
原创 225-SPMD模型
SPMD(Single Program, Multiple Data,单指令多数据)是一种并行计算编程模型,指。在 CUDA 中,每个 GPU 线程执行相同的代码,但使用不同的索引计算。(SIMD + SPMD 可提升 CPU 并行性能)(确保所有线程/进程有相等的计算任务)(MPI 进程间通信开销大)(如 CUDA 需要最小化。来演示 SPMD 编程。(如创建进程或线程)
2025-03-25 17:26:11
813
原创 224-什么是rpc编程
RPC(Remote Procedure Call,远程过程调用)是一种允许程序调用远程服务器上的函数,就像调用本地函数一样的技术。RPC 是分布式系统的核心技术,可以让远程调用像本地调用一样。选择合适的序列化协议(Protobuf/JSON)提高性能。(高性能 RPC,如 gRPC、Thrift、Dubbo)(RESTful 风格的 RPC,如 gRPC-Web)关注安全性(TLS、身份认证)和高可用(负载均衡)。(异步 RPC,如 RabbitMQ)(gRPC 常用,二进制格式,性能高)
2025-03-25 17:21:02
719
原创 223-关于nodejs事件循环(Event Loop)
Node.js 事件循环(Event Loop)是 Node.js 运行时的核心机制之一,它负责管理异步操作,使得 JavaScript 能够在单线程环境中执行非阻塞的 I/O 操作。事件循环(Event Loop)是 Node.js 处理异步任务的机制。由于 Node.js 是单线程的,它依赖事件循环来调度 I/O 任务、计时器和微任务等,从而实现高效的非阻塞执行。每个阶段都有一个回调队列,事件循环会按照顺序执行每个阶段的回调,并在合适的时机进入下一个阶段。Node.js 的事件循环由。
2025-03-22 13:14:35
1011
原创 222-关于python的eval
expr = input("请输入表达式: ") # 比如 "x + y"try:print("非法表达式:", e)这种方式可以限制eval()只能访问特定变量。eval()
2025-03-21 17:29:42
482
原创 221-git不小心提交大文件怎么办
如果git不小心提交了一个巨大的文件怎么办呢如果是commit,当然是没关系了但是如果是push了,那该怎么办如果你已经push。
2025-03-20 20:00:14
377
原创 219-关于rust的tokio和static生命周期
我们来看2段代码这个代码没问题但是这样就有问题了为什么呢因为要求传入'static生命周期的数据,而stu的生命周期不满足'static要求。
2025-03-19 14:37:26
256
原创 218-关于tinyproxy
TinyProxy 是一个轻量级的 HTTP 代理服务器,适用于资源有限的环境,如嵌入式系统或小型 VPS。以下是一个详细的 TinyProxy 教程,包括安装、配置、优化和故障排查。TinyProxy 是一个小型、快速的 HTTP/HTTPS 代理服务器,支持基本的访问控制,适用于低内存和低 CPU 设备。TinyProxy 只能代理 HTTP,而不能直接解密 HTTPS,但可以通过。默认情况下,TinyProxy 仅允许本机访问。这样,TinyProxy 只会转发 HTTPS 连接,但不会解密流量。
2025-03-14 22:09:28
1417
原创 217-讲讲rust的clone
Rust 的Clone该 trait 允许实现它的类型提供clone方法,从而显式地创建一个该类型的副本。Clone是一个 trait,需要显式调用clone()进行深拷贝。Copy适用于栈上的简单数据类型,而Clone适用于堆分配的数据。可以自动实现Clone,但也可以手动实现。clone()可能有性能开销,应尽量使用引用代替。Rust 通过Clone和Copy机制,确保了安全和高效的数据管理,同时避免了手动管理内存的复杂性。
2025-03-14 15:44:59
500
原创 215-node连接Sequelize
Sequelize 是 Node.js 里强大的 ORM,你可以用它轻松操作数据库!根据你的数据库选择安装对应的驱动。使用事务确保多个数据库操作要么。你现在掌握了: ✅ 连接数据库。首先,确保你已经安装了。✅ 数据操作(增删改查)如果连接成功,会显示。然后在项目根目录创建。
2025-03-14 11:35:37
460
原创 214-关于rust的async作用域
当我们想要开启一个异步任务去执行一个异步函数的时候。而如果是先clone()需要 'static。这样写的话就有问题了。
2025-03-12 11:52:56
179
原创 212-关于blockhash
getRecentBlockhash会直接返回一个string。getLatestBlockhash会返回一个object。其实这里的歧义是因为2个function产生的。有些人会说recentBlockhash。有些人会说latestBlockhash。当我们要发送一个tx的时候。要给一个blockhash。关于blockhash。也就是产生歧义的原因了。
2025-03-10 21:42:23
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人