Blog Posts

Rust 实现二进制转换

Rust 实现二进制转换

fn divide_by_two(mut dec_num: u32) -> String { // save rem with Stack let mut rem_stack = Stack::new(); while dec_num > 0 { let rem = dec_num % 2; rem_stack.push(rem); dec_num /=2; } // connect stack items to String let mut bin_str = "".to_string(); while !rem_stack.is_empty() { let rem = rem_stack.pop().unwrap().to_string(); bin_str += &rem; } bin_str } 那么二进制实现了,八进制,16进制也容易实现

Read More
使用 栈 实现括号匹配

使用 栈 实现括号匹配

使用 栈数据结构 实现括号匹配的功能 rust 实现 将所有符号依次存储到Vec 使用 balance 判断是否平衡 ‘(’ 入栈 否则 出栈 Stack.is_empty && balance 匹配成功 // par_check.rs fn par_checker(par:&str) -> bool { let mut char_list = Vec::new(); for c in char_list { char_list.push(c) } let mut index = 0; let mut balance = true; let mut stack = Stack::new(); while index < char_list.len() && balance { let c = char_list[index]; if '(' == c { stack.push(c); } else { if stack.is_empty() { balance = false; } else { let _r = stack.pop(); } } index += 1; } balance && stack.is_empty(); } 当前程序有弊端就是只能适配小括号,那如何处理三种括号呢?是有一个匹配函数

Read More
rust 实现线性数据结构

rust 实现线性数据结构

线性数据结构 数组、栈、队列、双端队列数据项的顺序由添加或者删除的顺序决定 栈 - LIFO 先进后出原则 根据栈的特性可以抽象以下数据操作: new() push(item) pop() peek() is_empty() size() RUST 实现栈 // stack.rs #[derive(Debug)] struct Stack<T> { top: usize, data: Vec<T> } impl <T> Stack <T> { fn new() -> Self { Stack { top: 0, data: Vec::new() } } fn push(&mut self, val: T) { self.data.push(val); self.top += 1; } fn pop(&mut self) -> Option<T> { if self.top == 0 {return None;} self.top -= 1; // 使用Vec数据结构的pop() self.data.pop(); } fn peek(&self) -> Option<T> { if self.top == 0 { return None; } self.data.get(self.top - 1); } fn is_empty(&self) -> usize { 0 == self.top } fn size(&self) -> usize { self.top } }

Read More
使用 axum 构建微服务(-)

使用 axum 构建微服务(-)

一直想使用 axum 完成工作中的一些服务功能,发现版本已经更新到了 0.8.x 重新梳理并学习一步一实现一个小的功能 开始 axum is a web application framework that focuses on ergonomics and modularity

Read More
Rust:智能指针Box<T>

Rust:智能指针Box<T>

BOX<T> 是一个用于在堆上分配内存的智能指针,提供对堆内存的所有权管理。 核心概念 堆分配 Box<T> 将数据存储在堆 Heap 而非栈 Stack 上,栈上仅存储指向堆数据的指针

Read More
HTML to Markdown 用TS实现思路

HTML to Markdown 用TS实现思路

根据 typescript 项目实战一书,整理的的实现一个markdown预览器的实现思路 核心数据结构: TagType 枚举定义支持的标签类型 TagTypeToHtml 类实现标签类型到HTML的映射 文档管理:

Read More
工厂方法模式

工厂方法模式

工厂方法模式 是一种创建型设计模式,在父类中提供一个创建对象方法,允许子类 决定实例化对象的类型 动态分派 动态分派和运行时有关,也就是 运行时多态 ,比如java中的 方法重写 具体创建类型由子类在运行时决定 延迟绑定 扩展性强: 秩序添加新的子类工厂 解偶:依赖抽象工厂和抽象产品,与具体实现解偶 运行时决策:通过多态机制,实际调用的工厂方法在运行时确定 静态分派 静态分派则是在编译时确定,比如 方法重载

Read More
摆脱CRUD-实现数据库(一)

摆脱CRUD-实现数据库(一)

设计实现一款怎么样的数据库 实现几款基本的关系型数据库 能够执行基本的查询语句 能够支持基本的事务 如何快速实现 使用什么语言实现 尽量不要将精力放在编程语言上,应该在数据库的技术实现和工程化方面,并且尽量简单和流行 python rust/go (备选) 要点和难点有哪些 理解数据库的执行计划 对数据库事务实现机制的理解 项目目录结构 sql: sql 引擎

Read More
Rust TDD 错误处理

Rust TDD 错误处理

rust zuowei sdlfjskafjlsjfksjflsjfksjf TODO Rust cli crate cli crate use clap

Read More