- 博客(79)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 rust处理非结构化数据最佳实践
我们前面介绍的csv数据都是结构化的数据,但是我们日常开发中遇到非结构化数据居多,因此我们怎么处理非结构化数据就非常重要了。
2025-01-14 20:14:05
307
原创 怎么实现一个自己的序列化了?
序列化最核心的接口就是Serialize和Deserialize两个,其中Deserialize是反序列化trait,具体的trait定义如下:给不同类型实现序列化trait我们可以为不同的数据类型实现对应的trait实现序列化和反序列化,比如说基本类型以及复合类型,比如说我们Vector中存放一个结构体和枚举例子最后希望大家多多关注我的公众号:花说编程
2025-01-06 23:03:30
175
原创 快来看rust和sqlite搞出事情来了
在我们国内我们日常开发过程中由于都是增删查改的操作,很多时间与数据库打交道,值得一提的是rust也能和数据库连接起来做一些操作,具体怎么做的呢,就是我们今天的话题。我们以sqlite为例,创建sqlite数据库,然后就是数据插入和查询,最后就是事务处理。
2024-12-26 20:38:56
351
原创 Srialize序列化你了解吗
前面我们已经介绍了serde的序列化和反序列化的一些知识,从怎么使用Serialize和以及把属性分为容器属性,变量属性,以及字段属性。那么我们如果我们想要更加灵活,根据自己的实际情况来序列化或者反序列化的时候该怎么办呢,这就是我们接下来的目的。刚好色的允许通过手动为我们自己的类型实现Serialize和traits 来完全定制序列化行为。我们先看在Serde框架中关于Serialize和。
2024-12-18 21:26:16
839
原创 带你手动实现实现Vec的插入删除和slice
前面我们已经实现了一个基础的Vec了,也就是一个栈。我们可以push和pop,也可以自动清理回收,但只有这些还是远远不够的。特别是我们已经有了一个数组,但是没有slice相关的功能,那么有什么办法能实现slice了,这个也非常的容易就是实现,这样我们的Vec神奇的可以编程了slice。我们只需要使用。它能够为我们正确的处理空slice,等到后面我们完成了零尺寸类型的支持,它们依然可以完美的配合。
2024-12-04 14:30:53
307
原创 想下自己动手能实现标准库的Vec那不得飞起啊
我们有时候最好的学习方式就是模仿别人优秀的代码,我们今天就带大家一起实现标准库中的Vec,结合我们之前学的知识串联起来。上一片我们分析了实现一个Vec的布局,本篇我们将继续讨论实现一个Vec的知识,我们知道Vec底层是一个堆分配的数组,因此Vec会有pop和push方法,往往我们Vec中存储的数据后续还要回收,不然一直在哪里占用着宝贵的内存,说不过去的。
2024-12-03 15:56:04
794
原创 自己动手实现rust中的vec(二)
我们有时候最好的学习方式就是模仿别人优秀的代码,我们今天就带大家一起实现标准库中的Vec,结合我们之前学的知识串联起来。上一片我们分析了实现一个Vec的布局,本篇我们将继续讨论实现一个Vec的知识,我们知道Vec底层是一个堆分配的数组,因此Vec会有pop和push方法,往往我们Vec中存储的数据后续还要回收,不然一直在哪里占用着宝贵的内存,说不过去的。
2024-12-02 14:08:37
346
原创 用rust实现一个贪吃蛇的小游戏
项目结构规划我们创建三个rs文件分别是:,,qjcq代码功能解释这段Rust代码主要用于将游戏逻辑中的坐标转换为屏幕坐标,并绘制游戏中的方块。常量定义:函数 :函数 :函数 :x, y开始转换游戏逻辑坐标为屏幕坐标计算屏幕坐标 gui_x, gui_y调用 rectangle 函数绘制方块结束详细解释常量 :函数 :函数 :函数 :x, y开始转换游戏逻辑坐标为屏幕坐标计算屏幕坐标 gui_x, gui_y调用 rectangle 函数绘制方块结束这是贪吃蛇游戏的上半部分,想要看下半部分点
2024-11-27 09:39:17
776
原创 Rust过程宏汇总
rust中除了声明宏以外还有过程宏,过程宏允许在执行函数的时候创建句法扩展,过程宏允许在编译时运行对rust句法进行操作的代码,他可以在消费掉一些rust句法输入的同时产生新的rust句法输出。可以把过程宏想象成从AST到另一个AST的函数映射。过程宏必须在crate类型为proc-macro的crate中定义。
2024-11-25 10:53:13
1039
原创 我不允许你还不知道宏的这些知识
匹配器和转码器,我们还介绍了在宏定义过程中的元变量,重复元等概念,通过这些知识我们能基本的认识宏这个概念,但是我们定义了宏怎么导入到其它文件或者模块中使用了?或者是它的作用域是什么?带着这些问题我们进入今天文章的话题。
2024-11-24 10:35:00
756
原创 我还不允许你不知道rust属性的用法,真的太炫了
我们平常在阅读别人的rust代码常常会在结构体或者是函数中出现属性,例如在结构体中我们常见的,这种叫做派生宏辅助属性,还有我们单元测试中会遇到#[test]这个属性,注解在函数中用来标识是个测试函数,当我们x运行cargo test的时候就会被扫描到从而进行测试操作。属性是一种通用的,格式自由的元数据,这种元数据会被编译器或者解释器一句名称,约定,语言和编译器版本进行解释。以开头方式编写,应用于它在其中声明的程序项中。以后面不跟感叹号的开头的方式编写,应用于属性后面的内容。
2024-11-23 10:25:49
739
原创 带你手动实现一个属性宏,彻底明白其原理
至此我们成功的实现了一个派生宏属性,并且展示了如何使用我们的自定义属性。我是[花说编程]一个热爱分享rust知识和数据库内核工作者。
2024-11-22 09:37:01
278
原创 rust属性知识最全的总结
我们平常在阅读别人的rust代码常常会在结构体或者是函数中出现属性,例如在结构体中我们常见的,这种叫做派生宏辅助属性,还有我们单元测试中会遇到#[test]这个属性,注解在函数中用来标识是个测试函数,当我们x运行cargo test的时候就会被扫描到从而进行测试操作。属性是一种通用的,格式自由的元数据,这种元数据会被编译器或者解释器一句名称,约定,语言和编译器版本进行解释。以开头方式编写,应用于它在其中声明的程序项中。以后面不跟感叹号的开头的方式编写,应用于属性后面的内容。
2024-11-20 14:25:49
445
原创 一文带你理解rust中的闭包
z 的声明是有效的,因为闭包的生命周期在区块结束时到期,释放了借用。闭包类型实现 `Send` 和 `Sync` 的规则与普通结构体类型实现这俩 `trait` 的规则一样,而 `Clone` 和 `Copy` 就像它们在 `derived`属性中表现的一样。上面的代码我们实现了一个字符串拼接的闭包功能,首先我们显式的定义了一个方法`f`,它的参数是一个`FnOnce`的闭包类型,接着我们创建一个可变的String类型变量`s`和一个不可变String类型的t,然后调用方法f传入一个闭包实现字符串的拼接。
2024-11-19 14:50:59
791
原创 一文带你理解闭包
rust中的闭包在rust中占据很重要的位置,它比函数要灵活,可以捕获外部的变量,可以嵌套在函数中,或者作为函数的参数。闭包的用法灵活多变,因此我们必须要掌握好闭包的知识,无论是在开发还是在阅读开源的代码都是事半功倍的效果。> 闭包可能会捕获其所捕获变量的所有权,这取决于它是如何捕获变量的。5. **迭代器和闭包:** 闭包经常与迭代器一起使用,用于处理集合中的元素。3.**捕获环境变量:** 闭包可以捕获并修改其定义环境中的变量。2.**作为变量存储:** 闭包可以存储在变量中,然后被调用。
2024-11-15 20:12:18
834
原创 初识rust中安全和非安全代码以及标准库中的运用
因为如果 Ord 的实现本身是错误的(尽管代码是安全的)将导致未定义行为,所以 `BTreeMap` 内部的非安全代码必须对那些实际上没有做到完整顺序的 `Ord` 保持足够的鲁棒性 —— 虽然完整顺序本身是我们选择 `Ord` 的唯一理由。而对于 `trait` 的声明,`unsafe` 意味着实现 `trait` 的开发者必须查阅 `trait` 的文档以确保 `trait` 的实现符合其安全要求。这时,`BTreeMap` 的内部就可以合理地信任键的类型对于 `UnsafeOrd` 的实现是正确的。
2024-11-13 14:39:20
396
原创 深入浅出rust内存对齐
在这个例子中,`AlignedStruct` 使用默认对齐,`u8`、`u32` 和 `u64` 会根据它们的大小自然对齐。由于 `a` 是 `u8` 类型,它后面会有 3 字节的填充,以确保 `b` 是 8 字节对齐的。例如,`u32`、`i32`、`f32` 和指针类型对齐到 4 字节边界;- 由于 `address`、`size` 与 `alignment` 之间存在倍数关系,程序对内存空间的利用会出现冗余与浪费,这些被浪费掉的部分被称为对齐填充 `alignment padding`。
2024-11-11 15:59:55
1052
原创 rust中的三胞胎姐妹花String,&str和str总是傻傻分不清吗?
在rust开发过程中我们常常会遇到`String`, `&str` 和 `str`三个概念,总是朦胧不清,分不清三者之间的关系以及区别,实际开发过程中总是因为分不清三者之间的用法而郁闷苦恼,今天我带你们就详细的探索三者之间的关系,让你不在朦胧不清,而让你豁然开朗。在这个例子中,`print_first_word` 函数接受一个 `&str` 类型的参数,这意味着它可以接收任何实现了 `Deref` trait 的类型,包括 `String` 和字符串字面量。
2024-11-10 12:25:35
578
原创 Rust 中那些让人眼花缭乱的类型转换
我们根据上面的as转换得出as转换会导致好精度丢失的问题,可能转换的数据和原来的差距比较的大例如:`300_i32 as i8`的结果是`44`是不是和原来的300相差很大啊,那么rust提供了另外一种解决思路就是我们现在讲到的`TryInto 转换`。- 使用`let Foo { x, y } = foo;`解构`foo`,将`foo`的`x`和`y`字段分别赋值给局部变量`x`和`y`。- 创建一个新的`Bar`实例,将`x`赋值给`Bar`的`a`字段,将`y`赋值给`Bar`的`b`字段。
2024-11-08 15:04:30
583
原创 Rust 结构体与枚举的梦幻联动,让你编程更高效
我们创建一个`Point`的结构体,里面有`x`和`y`两个属性其类型都是`i32`类型,我们再创建一个枚举名为:`Shape`,Shape枚举有两个元素`Circle`和`Rectangle`,都类似结构体里面都有元素,并且其中的元素的类型可以是结构体,在下面的代码具体体现在`center: Point`和`top_left: Point, bottom_right: Point`,就是把我们定义的结构体。/// 运行结果:Area of the circle is 32.153603。
2024-11-07 23:27:46
354
原创 揭秘rust中默认参数类型不为人知的秘密,你确定不来了解下吗?
在 Rust 中,你可以为泛型类型参数指定默认类型参数,这样在调用函数或结构体时,如果没有指定具体的类型参数,就会使用默认的类型参数。这提供了一种灵活的方式来使用泛型代码,同时保持了代码的简洁性和可读性。在使用过程中不用考虑泛型带来传入具体参数的问题。
2024-11-05 21:34:56
457
原创 Rust界的“双胞胎”:Self和self,你真的了解它们吗?别以为穿个马甲就不认识你了
在rust中我们常见到self和Self,一个是小写另一个是大写,大写的常见于trait和impl中,而小写的则常见于方法的参数声明中,很多人把它俩容易弄混淆。搞不懂什么时候使用小写的,什么时候用大写的,今天这篇文章就带你搞定两者之间的区别。
2024-11-04 10:27:05
523
原创 一文带你深入理解Rust 中的 Trait 一致性(Coherence)
Rust 中的 Trait 一致性(Coherence)是指对于任意给定的类型,对于某个特定的 Trait,最多只能有一个有效的实现。这个规则确保了代码的安全性和确定性,避免了因多个实现而导致的歧义和冲突。
2024-11-03 17:10:06
481
原创 trait组合,让你的代码升级大变身
// 1.周长traittype Item;/// 2.面积traittype Item;上面我们定义了两个trait分别是求长方形,正方形,圆的面积和周长。
2024-11-03 16:39:24
193
原创 探索Rust动态分发的奥秘:原理解读+实战技巧+性能优化
Trait 是 Rust 中一组定义方法的抽象。它类似于其他编程语言中的接口或抽象类,但在 Rust 中更为强大和灵活。Trait 定义了一系列方法的签名,但并不提供具体的实现。这使得 Trait 成为一种强大的抽象工具,允许我们在不同类型之间共享相同的行为。Trait 对象是通过虚函数表(VTable)来实现动态分发的。VTable 是一个包含了 Trait 中所有方法的函数指针表,通过它可以在运行时查找和调用相应的方法。
2024-10-30 15:45:28
660
原创 哇塞,太牛鼻了,还可以写一个数据库管理系统
Part4 我们的第一个测试我们已经能够在在我们的数据库中插入数据和查询所有的数据。让我们花点时间来测试一下!我将使用rspec 来写我们的测试,因为我比较熟悉它,而且语法是公平的。我定义一个短助手来发送一个命令集合给我们的数据库程序,然后使用断言输出:describe 'database' do def run_script(commands) raw_output = nil IO.popen("./db", "r+") do |pipe| commands.ea
2021-03-16 00:06:32
339
原创 内存中的,仅有一个数据库表的数据库
Part3 内存中的,仅有一个数据库表的数据库我们一开始就会对数据库设置很多的限制。现在,他将会:支持两个操作:插入一行数据和打印所有的行数据。保存在内存中(不持久化到磁盘)。支持一个简单的,硬编码的表。我们的硬编码表存放用户并如下表展示的:columntypeidintegerusernamevarchar(30)emailvarchar(255)这是一个简单的架构,但它使我们能够支持多种数据类型和多种数据类型的大小。insert语句就像下面的
2021-03-08 00:06:14
281
原创 如何教你从0到1实现一个简单的数据库系统(二)--世界上最简单的SQL编译器和虚拟机
我们做一个sqlite的克隆。sqlite的前端是一个SQL编译器,它是用来解析一个字符串并且输出一个称为字节码的内部表示。字节码通过虚拟机来执行它。将事物分成两个步骤具有两个优点:减少每一部分的复杂性(例如:虚拟机不需要担心语法错误)允许编译一次共同查询并缓存字节码以提高性能。在这个想法中,让我们重构我们的main()函数并支持处理两个新的关键字:int main(int argc, char* argv[]) { InputBuffer* input_buffer = new_inp
2021-02-28 23:15:54
396
原创 如何教你从0到1实现一个简单的数据库系统(一)
作为一个web从业者,我们每天都和关系型数据库打交道,但是对我们来说只是黑箱,因此我们就很想知道数据库是怎么样工作的?于是乎我就想弄明白数据库到底是怎么运作的,它的基本原理是什么?因此我决定从以下几个问题入手来弄明白数据库系统数据库中的数据在内存或者磁盘中以什么格式保存?什么时候数据从内存移动到磁盘中?(持久化)为什么数据库的每个表有且只有一个主键?数据库中事务的回滚是怎样工作的?数据库中索引是怎样格式化的?什么时候以及如何去扫描全表?已准备好的语句以什么格式保存的?换句话说,一个数据库是怎
2021-02-25 00:04:48
3301
1
原创 mysql中if多重判断使用
背景描述我们平常在使用MySQL的时候,因为if只能判断两种状态,例如if(1>2,1,2)就是说,如果1大于2则返回1,否则返回1。但是我们的业务通常有好几种状态需要来判断,这时候if两种状态不能满足我们的需求, 因此我们需要使用if嵌套if语句来实现多状态的需求,表达式为IF(expr1,expr2,IF(expr1,expr2,IF(expr1,expr2,expr3)))业务需求我一个表中的字段有三个状态,0代表未完成,1代表已完成,null代表还没有做,因此我需要在sql中判断这个三个
2020-11-18 11:42:47
13781
原创 记一次使用mybatisplus新增功能出现Could not set property ‘id‘ of class XXXXXXXX
记一次Could not set property ‘id’ of 'class com.xxxx.xxx.xxxx.entity.xxxxx’的错误我使用mybatisplus在表映射到的实体类上注明@TableName("XXXX),然后就直接开始写新增功能,发现报这个错误,我的数据库表的id设置的是自动增长,我从页面传输的对象没有包括id,折腾我大半天,我想,应该是mybatis不知道实体类映射表的哪一个字段才是主键,于是乎我在实体类的id字段上加上 @TableId(value = "id"
2020-11-17 15:10:43
12030
6
原创 springboot学习一:初识springboot是什么东东
概述使用Spring Boot可以轻松地创建独立的,基于生产级别的基于Spring的应用程序,直接运行它们。我们对Spring平台和第三方库保持开放的观点,因此您可以以最小的代价开始使用。大多数Spring Boot应用程序只需要很少的Spring配置。springboot的特征创建独立的Spring应用程序直接嵌入Tomcat,Jetty或直接运行(无需部署WAR文件)提供直接运行...
2019-10-08 14:00:04
229
原创 使用spy-debugger调试微信或者移动端的网页
背景我们开发微信或者移动端的混合开发时,需要在移动端看到效果,但时候有的时候会出现意想不到的结果,这时候需要我们像是在chrom或者其它浏览器中调试了,但是移动端的又没法像浏览器那样按F12调试,这时候我们就不知道该怎么办才好,想着要是移动端浏览器或者微信内嵌浏览器要是能调试就好了,之前我们的APP使用混合开发,在安卓显示一切正常,但是在苹果上不显示,而且后台访问正常就是不现实,干着急没办法。网...
2019-09-25 14:32:29
731
原创 使用node.ls和vue脚手架开发H5页面的上滑下拉滑动分页感悟
安装node.js安装node教程官网下载安装首先访问node.js的官方网站,下载你需要的node.js版本,然后选择安装,进入官网首页就会有下载提示,如下图所示,根据提示一步一步的来安装检查是否安装成功打开windows的命令行或者使用快捷键win + r,输入node -v出现以下信息表示安装成功,会显示你安装的node版本号通过上述两个步骤就已经完成对node.js的安装...
2019-09-25 13:42:51
514
原创 前段报错:net::ERR_CONNECTION_REFUSED
前段报错:net::ERR_CONNECTION_REFUSED报错原因分析解决问题思路报错原因分析1.有可能端口号拼写错误,导致访问不了服务器2.在本地调试的时候localhost拼写错误所致3.检查接口拼写是否正确4.检查是否存在这个接口或者这个接口的类是否存在5.访问的接口是否存在着跨域问题解决问题思路根据报错原因分析的几点,大家可以按照这几点来排查,先从1到5逐次排查,检查...
2019-09-20 13:11:50
8578
原创 在vue中axios的post请求返回的数据赋值给data()中的变量出现未定义的问题
首先我们看data()定义的变量然后我们在axios请求的then中取值这时候就会出现downdata未定义的错误,这是因为在then中this就是指向当前的对象,而无法引用data()中的变量,因此使用箭头函数就可以解决...
2019-09-11 10:04:39
10334
9
原创 dropload整合vue实现H5页面的下拉刷新分页
问题背景由于我们公司做移动端用的是混合开发,适应ios和安卓,pc,微信等,但是分页这块一直没做好,做的不是太好(毕竟都是java程序员对前端这块不是很熟,硬是头皮上的你懂得),但是分页就是用常规的web端的上下页按钮来实现的,很不符合移动端的操作,因此需要优化,自己动手写了一个下拉刷新的但是不好用,而且bug多,因此找了很长时间才发现了dropload这个框架,比较的容易上手,简单,但是文档写...
2019-08-15 13:49:46
912
原创 Json类型的String字符串转化成json数组
平常我们爬取某一个网站的页面数据时,数据通过js获取过来的json字符串或者数组需要在后台转成json对象或者数组//把字符串解析成为json数组对象JSONArray json = JSONArray.parseArray(jsonStr);//jsonStr是json字符串//循环获取json数组中的json对象for (int i = 0; i < json.size(); i...
2019-08-02 14:29:00
2191
转载 正则表达式提取某两个字符串或者字符之间的字符串
正则表达式提取某两个字符串或者字符之间的字符串假设这两个字符串或者字符为A,B匹配A,B之间的字符串,并且包括A,B表达式: A.?B(“.“表示任意字符,“?”表示匹配0个或多个)今天在使用正则表达式中,要匹配两个字符中间的内容,一时没有写出来,后来在网上找到了,记录一下。匹配两个字符串A与B中间的字符串包含A与B:表达式: A.?B(“.“表示任意字符,“?”表示匹配0个或多个...
2019-08-02 14:21:40
13591
1
数据库插入数据问题的软件
2015-11-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人