- 博客(121)
- 收藏
- 关注
原创 Rust 序列化格式的灵活切换设计与实践
然后为不同格式实现这个 Trait。这个 Trait 应该包含两个核心方法:序列化(数据转字节)和反序列化(字节还原为数据)。但关键在于,这个接口必须同时支持两种不同的使用模式——
2025-10-29 15:53:09
906
原创 Rust 中的 Work-Stealing 调度算法深度解析
而被窃取的任务通常是较老的任务,它们的缓存数据可能已经失效,迁移到其他核心的代价相对较小。:tokio 使用的 Work-Stealing Deque 实现基于 Chase-Lev 算法,这是一个精巧的无锁数据结构。:当本地队列满时,任务会被放入全局队列。这与 Rust 本身的理念高度契合:通过所有权系统实现无 GC 的内存管理,通过 Work-Stealing 实现无全局锁的任务调度。(只需单次原子操作),而窃取操作可能需要重试,但这符合"快速路径优化"的原则——大部分时间线程都在处理自己的任务。
2025-10-29 15:50:18
828
原创 Rust 异步锁(Mutex、RwLock)的设计原理与深度实践
正确的做法是将流程分解为三个阶段:快速读取配置(持有锁)、执行远程调用(释放锁)、快速更新统计(重新获取锁)。这个设计选择基于一个现实观察:在大多数系统中,写操作携带更关键的业务逻辑(如状态更新、事务提交),应该被及时处理。相比之下,某些实现可能采用"唤醒所有"策略,让任务竞争,这在高并发场景下会产生惊群效应。当你发现自己需要复杂的锁策略时,退一步重新审视架构,可能会找到更简洁的解决方案。初学者常有一个困惑:既然异步编程的核心理念是"非阻塞",为何还需要锁这种看似会"阻塞"的同步原语?
2025-10-29 09:26:52
663
原创 Rust 异步通道原理与实践深度解析
更重要的是,不同的通道选择直接影响并发逻辑的清晰度——使用 oneshot 明确表达"单次信号"的语义,代码意图更鲜明,维护者也更容易理解系统设计。发送端(Sender)可以被克隆到多个并发任务中,每个发送者都能独立地投递消息,而接收端(Receiver)必须唯一(遵循 Rust 的所有权原则)。在分布式并发编程中,Rust 的异步通道是实现 Actor 模式和消息传递并发的基础设施。这避免了内存无限增长的风险,是背压(backpressure)在异步系统中的优雅体现。接收端拥有对通道状态的完全观察权。
2025-10-29 09:03:44
886
原创 在Unix-like系统中使用netstat和lsof命令来识别进程的方法,以及如何使用kill命令停止进程的基本方法
您的问题似乎是想要识别在特定端口(例如8080)上监听的进程,并停止它,或者配置该进程以使用不同的端口。以下是在Unix-like系统中使用netstat和lsof命令来识别进程的方法,以及如何使用kill命令停止进程的基本方法。请注意,在实际操作中,需要根据实际情况选择正确的端口号和进程ID。如果您需要配置应用程序使用不同的端口,通常需要编辑应用程序的配置文件,并重新启动应用程序。配置文件的位置和如何配置端口会根据不同的应用程序而变化。
2024-05-16 23:37:26
274
原创 分布式事务是什么
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。
2023-12-26 16:21:02
1021
原创 【Nacos心跳机制】
Nacos接收到这个心跳包,首先检查当前服务在不在注册列表中,如果不在按新服务的业务进行注册,如果在,表示当前这个服务是健康状态。如果一个服务连续6次心跳(默认30秒)没有和Nacos进行信息的交互,Nacos会将这个服务从注册列表中剔除。默认情况下,服务启动开始每隔5秒会向Nacos发送一个“心跳包”,这个心跳包中包含了当前服务的基本信息。如果一个服务连续3次心跳(默认15秒)没有和Nacos进行信息的交互,就会将当前服务标记为不健康的状态。注册到Nacos的微服务项目(模块)都是会遵循这个心跳机制的。
2022-12-23 21:37:05
1560
2
原创 【加载正式项目pom文件】
所以直接使用分享给大家的完整版项目的父项目pom文件即可。因为我们学习微服务的过程中需要很多微服务相关的依赖。这些依赖都需要在父项目中进行版本的管理的。父项目完整最终pom文件如下。
2022-12-23 21:19:23
671
原创 【服务器端程序的演进过程】
3.1 什么是微服务微服务的概念是由Martin Fowler(马丁·福勒)在2014年提出的微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理能力,服务可以用不同的编程语言与数据库等组件实现。简单来说,微服务就是将一个大型项目的各个业务模块拆分成多个互不相关的小项目,而这些小项目专心完成自己的功能,而且可以调用其他小项目的方法,从而完成整体功能登录服务器。
2022-12-23 20:46:39
871
原创 【Vant相关知识】
Vant是一个轻量,可靠的移动端组件库,2017开源目前 Vant 官方提供了 [Vue 2 版本](3 版本](https://vant-contrib.gitee.io/vant)和[微信小程序版本](http://vant-contrib.gitee.io/vant-weapp),并由社区团队维护[React 版本](target=https%3A%2F%2Fgithub.com%2F3lang3%2Freact-vant)和[支付宝小程序版本](本文中我们使用Vue2版本对应的Vant学习。
2022-12-23 20:29:36
3525
原创 【在SpringBoot项目中执行修改相册数据--MSC层】
1.编辑相册--执行修改--Mapper层;2.编辑相册--执行修改--Service层 ;3.编辑相册--执行修改--Controller层
2022-12-14 22:42:25
344
1
原创 【在SpringBoot项目中编辑相册数据】
String message = "根据id查询相册详情失败,尝试访问的数据不存在!log.debug("开始处理【根据id查询相册详情】的业务,参数:{}", id);log.debug("即将返回相册详情:{}", queryResult);"message": "根据id查询相册详情失败,尝试访问的数据不存在!2. 编辑相册--显示编辑区--Service层。"description": "暂无",1. 编辑相册--显示编辑区--Mapper层。"name": "华为P50的相册",
2022-12-14 22:32:31
232
1
原创 【在SpringBoot项目中删除相册数据--Controller层】
在AlbumController中添加处理请求的方法:请求路径:/album/delete请求方式:POST请求参数:Long id响应结果:JsonResult >>> state:20000
2022-12-14 09:17:45
708
1
原创 【在SpringBoot项目中删除相册数据--Service层】
由于AlbumMapper.java中已经实现了“根据id删除数据表中的相册数据”,所以,可以直接从Service开始开发此功能。
2022-12-13 22:17:47
462
原创 【关于检查请求参数的基本有效性】
在服务器端项目中,可以通过对请求参数进行检查。在客户端项目中,Element UI的示例表单中都有对各控件(例如输入框、选择框等)的检查。服务器端的检查是必要的,所有由客户端提交过来的请求参数都应该视为“不可靠的”!因为:所以,为了保证各请求参数的有效性,必须在服务器端进行检查!需要注意:即使服务器端已经存在检查请求参数的机制,客户端仍有必要对即将提交的请求参数进行检查
2022-12-07 08:56:34
376
原创 【关于Spring MVC框架中的@RequestBody】
在Spring MVC框架中,可以在POJO类型的请求参数前添加。当服务器端接收请求参数时,使用了注解,客户端提交的请求参数必须是对象格式的!如果客户端提交的请求参数不是对象格式的,当提交请求后,客户端会收到响应码的错误,并且,会在服务器端控制台提示如下错误: 当服务器端接收请求参数时,没有使用注解,客户端提交的请求参数必须是FormData格式的!如果客户端提交的请求参数是对象格式的,则服务器端接收到的各请求参数值均是
2022-12-07 08:53:22
624
原创 【在Vue脚手架项目中使用qs框架】
安装qs框架在前端项目中,可以使用框架,实现“将对象转换为FormData格式的数据”。首先,安装此框架:如果没有权限进入C盘找到cmd的执行软件,用管理员启动,进入目录安装:2. 在中添加配置然后,在中添加配置: 在开发过程中,当需要将对象转换成FormData格式的数据时,调用的函数即可。提示:当使用后,转换得到的中,中文会是UrlEncode格式的,例如,这是正常,且服务器端可以正常接收到中文字符!
2022-12-07 08:48:10
1123
2
原创 【在前后端分离中请求跨域问题】
当尝试通过axios从前端项目(9000端口的项目)向后端项目(9080端口的项目)发起请求时,在浏览器中会提示错误信息,要解决这个问题,需要在被请求的后端项目(csmall-product)中,添加Spring MVC的配置类,重写关于跨域的配置,以实现允许跨域访问!
2022-12-07 08:43:19
565
原创 【在Vue脚手架项目中使用axios】
首先,需要安装axios,则在终端窗口中,在当前项目文件夹下,执行安装命令:如果没有权限进入C盘找到cmd的执行软件,用管理员启动,进入目录安装:
2022-12-07 08:36:06
1696
原创 【密码加密原则三】
盐值的优化为了进一步保障密码安全,可以考虑使用随机的盐值,但是,需要注意,随机的盐值必须保存下来,否则,当“注册”时使用随机盐进行编码得到密文,后续“登录”时在无法得到相同盐值的情况下,无法编码得到相同的密文,会导致注册的账号无法经过密码验证来登录!示例:但是,以上做法仍无法抵御“穷举式的暴力破解”,在这种破解手段面前,是完全无视加密时使用的算法的,而是直接通过你设计算法,一个个的去尝试,直至“试”正确的原始密码。针对暴力破解,最有效的手段就是:验证码、对恶意访问的客户端实。
2022-12-06 16:13:07
2282
原创 【密码加密原则二】
1 密码加密原则(续)如果用户的密码过于简单,使用加盐的方式可以使得“密码”(其实是盐值和真正的原始密码的组合)变得更复杂,从而降低被收录对应关系的风险!这种做法的根本思想在于“大多计算机的硬盘不足于收录特别大量的数据”。如果允许使用95种可打印字符作为密码的组成,则8位长度的密码排列组合有 6,634,204,312,890,625 种,想要收录所有可能的8位长度密码与MD5摘要结果的对应关系,大约至少需要 6,634,204,312,890,625 x (8 + 32) 个字符,如果按照每字符占2字节
2022-12-06 16:00:58
444
原创 【VUE 嵌套路由】
路由配置 / 路由对象:即配置了path和component的对象当你需要将某个视图显示在App.vue的位置,则将你的路由配置写在router/index.js的routes常量下,作为routes的数组元素即可;当你需要将某个视图显示在其它视图的位置,例如显示在HomeView.vue的位置,则在其它视图的路由配置中添加children属性,并将你的视图的路由配置在此children下即可
2022-12-05 18:44:42
1447
原创 【VUE Cli脚手架软件安装篇】
创建第1个VUE CLI工程,通常使用Vue的命令来创建VUE CLI工程,并且,会将工程创建在执行命令时的位置,所以,先在命令提示符窗口中进入Vue Workspace(自行指定的用于存放项目的文件夹)
2022-12-03 18:55:32
874
原创 【Vue脚手架项目的结构】
在Vue脚手架项目中,使用的是“单页面”的设计模式,也就是说,整个项目中只有1个HTML,而这个HTML是由多个不同的视图组合而成的,每个视图都是可以随时替换为其它视图的,并且,每个视图都由独立的文件来开发。
2022-12-02 19:49:50
1740
原创 【在SpringBoot项目中使用Validation框架检查数据格式-常用的检查注解】
所有检查注解都有message属性,用于配置检查失败时的提示文本。每个被检查参数可以同时添加多个检查注解!
2022-12-02 19:24:26
1099
原创 【密码加密原则一】
用户在使用软件时所提交的密码,不应该被记录下来,如果将用户的密码记录,这是不安全的做法!当用户提交注册信息时,密码必须被记录下来,为了保障密码安全,必须对用户提交的原始密码进行加密处理!用户提交的原始密码通常可以称之为“明文密码”,或“密码的原文”,经过编码处理后,得到的结果通常是不能被直接识别的另一个数据,称之为“密文”。当尝试对密码进行加密处理时,应该使用成熟的、已有的算法!需要注意:当需要将密码进行加密并存储下来时(例如存储到数据库中),不可以使用“加密算法”!
2022-12-01 22:46:08
823
原创 【在SpringBoot项目中使用Validation框架检查数据格式】
Validation框架有快速失败的机制,默认是未开启的,当客户端提交的请求参数有多种错误时,会进行全部的检查,发现所有错误!如果开启了快速失败,当检查出第1个错误时,就会停止检查!当需要创建某个对象并使它保存在Spring容器中,可以在配置类中添加@Bean方法,此方法返回相关对象,在启动项目时,Spring框架会自动调用此方法并将返回保存在Spring容器中。
2022-12-01 22:35:44
818
原创 【SpringBoot项目中修改Web服务的端口】
在application.properties/application.yml(或相关Profile配置文件)中可以通过server.port属性修改Web服务的端口。
2022-12-01 22:16:03
977
原创 【在Spring MVC框架和Spring Boot项目中,控制器的响应结果】
在Spring MVC框架和Spring Boot项目中,控制器的响应结果
2022-12-01 22:00:55
440
原创 【在Spring MVC框架中,关于限制请求方式】
在Spring MVC框架中,@RequestMapping注解的主要作用是配置请求路径,除此以外,还可以配置请求方式,GET:通过浏览器的地址栏发出、使用网页中的超链接(使用标签)发出的请求,或者通过表单却未指定method="post",或者使用JavaScript中的相关API显式的发出GET请求,都是GET请求,GET请求的典型特征是将请求参数体现在URL上
2022-12-01 21:51:35
1100
原创 【SpringBoot项目中Knife4j在线API文档】
Knife4j是一款基于Swagger 2的在线API文档框架。在项目中已经完成以上步骤后,启动项目,打开浏览器,通过。即可访问在线API文档。
2022-12-01 21:43:05
768
原创 【Spring项目中的统一处理异常】
Spring MVC框架提供了统一处理异常的机制!表现为每种类型的异常只需要写一段(写一次)处理此异常的代码即可,项目中无论处理哪种请求时,只要出现这种异常,都会自动执行这段代码!
2022-11-29 22:51:44
1355
2
原创 【Spring项目中的Controller理解】
首先,需要保障此项目中存在spring-boot-starter-web依赖项,否则,当前项目并不具备Web应用程序开发所需的依赖!当项目中存在以上依赖项时,就具备了Web开发的依赖,且此依赖项中内置了Tomcat,当启用项目时,会自动将当前项目编译、打包、部署到内置的Tomcat上,并启动Tomcat。关于异常的捕获处理和抛出,在典型的服务器端项目中,Mapper、Service都不能处理异常,因为它们不与客户端直接交互,如果它们处理了异常,Controller将不知道出现过错误,反而响应“成功”的结果
2022-11-29 22:39:50
609
原创 【Spring项目中的Service理解】
在项目中,关于Service的开发,通常是先定义接口,再定义类实现此接口,接口名通常使用“数据类型Service”这样格式的名称,而实现类通常是在接口名的基础上再添加。,本次的参数应该包含:相册名称、相册简介、相册的排序序号,可以将这3个数据封装到自定义的DTO类中,并使用DTO类型作为参数。,并且,在后续的编程中,当需要执行某些判断时,应该优先根据“抛出异常”或“终止当前方法的执行”来设计。通常,建议自定义异常,并且,当视为失败时,抛出此自定义异常的对象!中添加相册时,如果相册名称被使用,则抛出。
2022-11-29 22:25:02
2076
原创 【Mybatis编程:查询相册数据列表】
通常,查询列表时需要查的字段列表,与查询单个数据的字段列表,通常是不相同的,相对会更少一些,所以,查询列表和查询单个数据应该使用不同的VO类!1. 书写执行的SQL语句。
2022-11-28 22:52:11
378
原创 【Mybatis编程:根据id查询相册数据详情】
由于不需要查询表中所有的字段,则查询结果不会使用实体类来封装,应该创建与以上查询的字段列表相对应的POJO类型,则在项目的根包下创建。提示:column=(查询结果集中的)列,property=(类中的)属性。标签来配置,否则,将无法使用Mybatis框架的缓存机制。是对我最大的支持与鞭策。时,主键字段应该使用。
2022-11-28 22:47:26
754
1
原创 【Mybatis编程:统计相册表中的数据的数量】
Mybatis编程:统计相册表中的数据的数量,在设计抽象方法时,如果要执行的数据访问操作是查询类型的,只需要保证方法的返回值类型能够足以“装得下”所需的结果即可。
2022-11-28 22:34:39
654
chromedriver驱动谷歌浏览器的软件
2022-11-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅