自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 收藏
  • 关注

原创 迪杰斯特拉算法总结

首先,学过数据结构的人都知道,迪杰斯特拉算法是用于计算“单源最短路径问题的”。单源最短路径就是从某一点出发,到任意点的距离。

2024-12-24 14:23:27 1007

原创 基于base64Captcha实现验证码功能

我们可能最初会想到使用redis数据库进行缓存,但是一般的使用场景中,我们其实只需要一个短暂的答案就可以了,所以并不需要,当然也可以。追问:在验证码进行验证的时候,我只是获取了用户的输入,就直接调用Verify方法进行验证了。那么之前生成的验证码的答案在哪里?答案:其实该库自己维护一个全局变量,当使用库时,就已经进行了初始化。MemoryStore用来短暂的存储当前生成的验证码。前端验证代码:(比较简陋,我直接把登录和注册放到一起,可以直接尝试)下面的代码中只有数字、字母、数字+字母的形式。

2024-12-18 22:10:24 466

原创 grpc补充机制

gRPC 进阶——Validator 验证器_protoc-gen-validate-优快云博客。

2024-12-18 21:06:51 432

原创 gRPC拦截器

做过web开发的都知道拦截器,拦截器就是一个做事先或事后处理的一个机制,使得琐碎的其他业务得到自动化式的进行。在服务端和客户端,他们的拦截器的使用目的不同。客户端:我们可能会在请求发送之前,对请求的内容做进一步的补充,比如:添加认证信息(如 JWT 令牌)到请求头中,这样服务端在接收到请求后,就可以根据请求头中的认证信息来验证客户端的身份,从而实现安全的服务访问。日志记录、服务发现等服务端:拦截请求,对请求的数据校验?认证信息身份校验等等。

2024-12-17 21:44:29 358

原创 认识GO--gRPC的metadata

元数据。他就是我们的对数据进行封装的一个单位化数据。在某些理解上,他是一个。他们是一个整体。这么说有点抽象,举例说明吧:目前我们有一个请求,请求的数据是:用户名+密码。这就是我们常说的”数据“。那么请求的方法是什么?编码是什么?token呢?cookie呢?他们提供了有关其他数据的信息,用于描述数据的特征、来源、用途、关系等诸多方面。因此,我们将他们也封装到一起,打包成我们的metadata,一起发送,一起接收......那么在go语言中,metadata又是什么?

2024-12-16 22:25:23 1138

原创 protobuf进阶

我们这里提供了代码,以及代码中的注释来理解所有进阶知识点。下面将模拟远程调用:此时,我有两个项目:1. protobuf 2.protobuf_client。

2024-12-16 19:04:45 477

原创 初识RPC

RPC(Remote Procedure Call)即,是一种计算机通信协议。它允许一台计算机(客户端)上的程序调用另一台计算机(服务器)上的子程序或函数,就好像这个调用是本地的一样,而实际上涉及到网络通信来跨越不同的地址空间。与之对应的就是本地调用,最常见的就是 函数调用。然而,远程过程调用时会面临很多问题:(原本的本地函数放到另一个服务器上去运行。但是引入很多新问题)1. Call的id映射2. 序列化和反序列化3. 网络传输1. 将这个调用映射为 Call ID。

2024-12-10 14:39:22 782

原创 GO并发编程

无缓冲channel:本质是一种同步通道,他要求读写操作紧密进行。所以,在单channel下,如果在无缓冲channel中进行读写,此时就会在第一次操作处阻塞,发生死锁。

2024-12-09 19:10:21 1352 1

原创 GO--基于令牌桶和漏桶的限流策略

漏桶,顾名思义就是一个漏斗,漏斗嘴的大小是固定的,所以不管漏斗现容量多大,都不会影响漏斗出水的速度。类比到我们的web服务中,我们可以为web服务准备一个固定速率的请求处理器(漏桶),对我们的请求,如果此时桶内请求量超过了桶的最大容量,那么就执行特定的抛弃策略(直接丢弃或者阻塞请求)。与此同时,对我们的请求 ,进行固定速率的处理。这样就会形成一种限流的效果。令牌桶的原理其实和漏桶差不多,漏桶相当于在单位时间(比如1秒内处理多少个请求)。那么令牌桶就是表现的间接了点。

2024-12-06 18:31:48 1115

原创 使用GO--Swagger生成文档

在前后端分离的项目中,后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。 是一个功能全面且高性能的Go语言实现工具包,用于处理Swagger 2.0(即OpenAPI 2.0)规范。它提供了丰富的工具集,帮助开发者在Go环境中解析、生成、验证和操作API描述文件。(OpenAPI 2.0 :用于生成、描述、调用和可视化RESTful Web服务。它允许你使用YAML或JSON格式定义API接口,包括路径、参数、请求方法、响应类型等信息。)定制化支持: 具备强大的自定义能力,通过供应商扩

2024-12-06 15:33:09 1285

原创 图的创建和基础操作(数据结构实验作业)

上面是我的实验作业要求:(看不到的同学,移步:https://gitee.com/young-lion/picture-bed/raw/master/202412051939715.png)下面的代码使用的是go语言:上面代码的最后,我结合邻接矩阵和邻接表的特点,对图的操作做了一个简单的方法总结,如果对你有用,请点个赞?收个藏?或者加个关注?

2024-12-05 19:45:37 250

原创 jwt身份验证三方库

复习:jwt是一个三方库,提供了一系列方法(JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token 实现方式,目前多用于前后端分离项目和 OAuth2.0 业务场景下。用于生成token,解析token,加密token,解密token,生成token的payload,生成token的header,生成token的signature,生成token,验证token等。

2024-12-04 02:19:24 564

原创 雪花算法生成ID

雪花算法的组成:雪花算法是由64位组成:符号位(1)、时间戳(41)、机器码(5[数据中心]+5[机器ID])、计数器(12)下面将简单介绍雪花算法的简单应用和在web应用中的使用。

2024-12-01 19:06:43 653

原创 密码加密策略

其中,由于MD5安全性较低,所以我们可以将第一次生成的密码,加入到MD5的hash计算中,再次计算出MD5的哈希校验和(Sum),将sum格式化输出(%x)就是我们的密码字符串(二次加密)其中,md5相对不安全(但是也够用了)。bcrypt是专门为密码加密设计的算法。MD5和bcrypt。

2024-12-01 18:09:14 227

原创 viper——管理配置文件

是适用于Go应用程序的完整配置解决方案。设置默认值从JSONTOMLYAMLHCLenvfile和格式的配置文件读取配置信息实时监控和重新读取配置文件(可选)从环境变量中读取从远程配置系统(etcd或Consul)读取并监控配置变化从命令行参数读取配置从buffer读取配置显式配置值。

2024-11-24 20:47:19 834

原创 validate简单入门

场景:我们写代码发现:有好多验证字段的验证规则相同,虽然可以直接CV,但是还是不够优雅,这时我们可以利用起别名的方法提高代码复用性比如:// 注册别名​Username string `json:"username" validate:"required,min=4,max=20"` // 必填字段,限制长度Password string `json:"password" validate:"required"` // 必填字段。

2024-11-17 19:29:35 1145

原创 GO语言编程之旅

所以,当您在defer语句中使用参数时,重要的是要记住这些参数是在defer语句执行时立即求值的,而不是在defer函数实际调用时。这意味着在defer语句之后的任何对参数的修改都不会影响defer函数中的参数值。切片的长度是它包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。你可以通过len(s)获取切片的长度,通过cap(s)获取切片的容量。你可以通过重新切片来扩展一个切片的长度,只要不超过它的容量。切片的长度是它包含的元素个数。

2024-10-20 20:46:00 968

原创 苍穹外卖随记(二)

这样,在请求到达 Controller 层之前,就可以先检查缓存,如果缓存命中,则直接返回缓存数据,不再调用后续的 Service 层和 Repository/DAO 层。情景:由于大量人员参与点餐,那么每一次查看商品(查看分类、查看菜品等),都会对应和数据库进行一次io,那么这样就会使得mysql数据库的负载增大,查询效率降低,数据显示的速度慢,也就是导致系统响应慢,客户的使用体验较差。不然压根就没有数据!在分类菜品的情况下,可以使用分类的ID或者名称作为Key的一部分,以确保它能够准确反映缓存的内容。

2024-09-17 21:26:13 1139

原创 苍穹外卖随记(一)

13.在项目中有管理端和客户端和服务端,那么服务端是后端,管理端和客户端是前端,那么在设计接口时有这样的:/api/admin/applications,那么后端怎么根据这个接口开始开发呢?后端开发不仅仅是关于API端点的开发,它还包括了整个Web应用的后端逻辑,确保应用的稳定性、安全性和可用性。实际上,即使是非API端点,后端通常也需要进行一定的开发工作,因为这些端点可能涉及到服务器端的逻辑处理、数据库交互、用户认证、数据检索等。因此,即使是非API端点,后端开发也是不可或缺的一部分。

2024-09-08 22:19:04 1498

原创 --考核总结--

以下的示例是 hashmap在三个线程的并发下进行添加操作结论:通过多次运行得到结果,发现hashmap是线程不安全的。如何解决?第一:直接对hashmap的操作方法进行上锁。第二:可以使用map中的ConCurrentMap,它是支持并发操作的。下面是对hashmap上锁的两种方法:1.直接使用synchronized对hashmap的各个操作修饰;2.Collections.synchronizedMap(map参数)返回一个线程安全的hashmap。

2024-08-11 15:45:13 857

原创 --每周分享--

用10个bit(比特)位来技术工作机器的ID,用来保证多个服务器上生成ID的唯一性。如果存在跨机房部署的情况,还可以把这10个比特位拆分为两组,每组5个bit(比特)位。前面的5个bit(比特)表示机房ID,后面5个bit(比特)表示机器ID。10个比特位最大值是2的10次方,也就是最多1024台机器。它的最大值为2的12次方减1,也就是4096。根据这四个部分的组成规则,生成对应Bit位的数据,然后组装到一起生成一个全局唯一ID。场景中的全局ID作为业务主键,或者生成全局唯一的订单号。

2024-08-01 15:36:52 340

原创 认识VO、DTO、Entity

其实对于vo和dto,可以简单的理解为:前端请求,后端dto接收经处理返还前端,前端根据产品和场景需要,对dto数据进行转换为vo数据并将数据渲染展示给页面。至于为什么没有非常肯定的说,dto负责接收数据,vo返还数据。这是因为业务具有灵活性。我们刚才说到了dto向vo的转换,那么怎么转换?统一视图模型:后端可以定义VO层来统一不同前端应用或不同视图所需的数据格式,简化前端的处理逻辑。中间件处理:后端可以使用VO层来实现一些中间件逻辑,比如数据的过滤、格式化或添加额外的元数据。测试和模拟。

2024-08-01 14:31:43 1531

原创 SpringMVC学习

接收参数1.路径设置@RequestMapping(value="地址",method="请求方式") 类|方法@GetMapping /@PostMapping 方法2.接收参数【重点】param(参数)举例:http://localhost:8080/ssm?直接接收 handler(类型 形参名)形参名 = 请求参数名eg: 前端请求: http://localhost:8080/param/value?

2024-08-01 13:09:27 881

原创 Mybatis学习

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。insert– 映射插入语句。update– 映射更新语句。delete– 映射删除语句。select– 映射查询语句。MyBatis 在查询和结果映射做了相当多的改进。

2024-07-30 17:31:29 990

原创 @SpingFrameWork

简单的说就是各种java程序,控制层程序:Servlet、业务层程序:Service、持久化层程序:Dao整个项目就是由各种组件搭建而成的SpringIOC容器其实就是Spring容器的核心之一,负责存储、实例化、配置、组装组件(IOC:中文是控制反转的意思)实例化这些(类)组件,本来是我们程序员的事情,new对象、赋值等等;但是现在权力交给了IOC容器;怎么实例化:容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。

2024-07-26 13:40:57 475

原创 javaweb后端学习--Maven

Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理。maven是Apache的顶级项目,解释为“专家,内行”,它是一个项目管理的工具,maven自身是纯java开发的,可以使用maven对java项目进行构建、依赖管理。

2024-07-25 13:46:12 625

原创 javaWeb学习--后端部分(一)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。HTTP 超文本传输协议。

2024-07-19 13:44:35 1289

原创 前端学习(二)

HTML 事件可以是浏览器行为,也可以是用户行为。当这些一些行为发生时,可以自动触发对应的JS函数的运行,我们称之为事件发生.JS的事件驱动指的就是行为触发代码运行的这种特点DOM(Document Object Model)编程就是通过document对象及其提供的 API 来操作整个 HTML 文档的元素,实现动态的网页内容和样式变化。这种编程方式使得网页能够根据用户的操作或其他条件动态地更新其内容和外观。或者更简单的方式:RegExp对象方法方法描述compile在 1.5 版本中已废弃。

2024-07-17 21:19:30 432

原创 javaWeb--前端基础

HTML 主要用于网页主体结构的搭建。HTML5 是HyperText Markup Language 5 的缩写,HTML5技术结合了 HTML4.01 的相关标准并革新,符合现代网络发展要求,在 2008 年正式发布。HTML5 由不同的技术构成,其在互联网中得到了非常广泛的应用,提供更多增强网络应用的标准机。与传统的技术相比,HTML5 的语法特征更加明显,并且结合了SVG的内容。这些内容在网页中使用可以更加便捷地处理多媒体内容,而且 HTML5中还结合了其他元素,对原有的功能进行调整和修改,进行。

2024-07-16 13:43:53 1026

原创 ---初始Linux---

1. Linux是一套免费使用和自由传播的类Unix操作系统。2. Linux操作系统是基于以前的Unix操作系统而开发出来的。3. 是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。4. 它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和63位硬件。5. Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

2024-06-02 19:35:55 2086

原创 java--反射

/构造器名称 + 构造器参数类型(后面的方法返回的是类型的数组,因此用Arrays.toString,Arrays中的toString方法已经被重写了)//5. 获取有参构造器(这里的参数:.class代表类型【相当于一种变量】,如果只有类型,那么参数列表的结构不对了【类型 变量】)//4. 获取有参构造器(这里的参数:.class代表类型【相当于一种变量】,如果只有类型,那么参数列表的结构不对了【类型 变量】)System.out.println(c1.getSimpleName());

2024-05-30 19:54:48 876

原创 单元测试(了解)

可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,比如IDEA)

2024-05-27 22:41:52 582

原创 网络通信--demo--群聊

客户端---->服务端(子)---->客户端(online)群聊的思想:客户端发送消息后,所有客户端都可以接收到。online的客户端:需要一个集合存储。

2024-05-26 21:32:55 217

原创 网络通信(二)

UDP通信特点:无连不是先接、不可靠通信不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了java提供了一个java.net.DatagramSocket类来实现UDP通信DatagramSocketDatagramSocket 用于创建客户端和服务器端的 UDP 通信。它提供了发送和接收 DatagramPacket 的方法。构造器: DatagramSocket(int port): 创建绑定到特定端口的 Dat

2024-05-26 18:00:43 640

原创 --java日期时间--

用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法使用于计算时间差。

2024-05-25 16:15:29 464

原创 网络通信(一)

网络编程是计算机科学中一个重要的领域,它涉及到在不同计算机之间通过计算机网络进行通信和数据交换的程序设计。网络编程的核心是实现网络通信协议,这些协议定义了数据如何在网络上发送、接收和解释。:网络通信遵循的规则。例如,TCP/IP、HTTP、FTP、SMTP等。:网络编程中的基本构建块,用于在客户端和服务器之间建立连接。:这是一种网络架构,其中客户端发起请求,服务器处理请求并返回响应。:应用程序接口,用于简化网络编程任务,如发送HTTP请求或处理网络数据。

2024-05-25 13:37:21 365

原创 线程池(三)

正在运行的程序(软件)就是一个独立的进程。线程是属于进程的,一个进程中可以同时运行很多个线程。进程中的多个线程其实是 并发和并行 执行的。进程中的线程是由CPU负责调度执行的,但是CPU能同时处理线程的数量有限,为了保证全部线程都能往前执行,CPU会轮询为系统的每个线程服务,由于CPU切换的速度很快,给我们的感觉是这些线程在同时执行,这就是并发。【“假的”同时执行】在同一时刻上,同时由多个线程在被CPU调度执行【“真的”同时执行】

2024-05-22 21:58:25 995

原创 多线程(二)

线程安全(Thread Safety)是指在多线程环境中,一个类或对象的行为符合预期,并且不会由于多线程的并发操作导致数据不一致或状态错误。简单来说,如果一个类或对象在多线程环境中使用时,不需要额外的同步措施就能保证其操作的正确性,那么它就是线程安全的。线程安全问题通常发生在多个线程访问共享资源时,如果没有适当的同步机制,可能会导致数据竞争(Race Condition),从而产生不可预测的结果。线程池是一种执行器(Executor),用于在一个后台线程中执行任务。

2024-05-19 19:40:22 1838

原创 --N数之和--

/实际上,保证不相同,nums[i]不变,nums[left]变了就已经满足了,nums[right]也变是为了优化而已。下面注释掉也可以通过!//主要思路:对数组中的每一个数进行操作,初始的map是一个空map,每次判断差值是否存在map总,如果存在,那么一定是第二个数。//相似地,nums[left] + nums[right] = nums[i];//统计剩余的两个元素的和,在map中找是否存在相加为0的情况,同时记录次数。//统计两个数组中的元素之和,同时统计出现的次数,放入map。

2024-05-19 11:38:48 825

原创 分享快乐--睡眠排序

【代码】分享快乐--睡眠排序。

2024-05-18 16:54:05 125

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除