自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go源码解读——Context

Go语言Context包提供了在goroutine间传递取消信号和共享值的机制。核心接口Context包含Deadline()、Done()、Err()和Value()方法。主要实现包括: cancelCtx:支持主动取消,通过WithCancel创建,取消信号会向下传播到所有子context timerCtx:在cancelCtx基础上增加超时控制,通过WithDeadline/WithTimeout创建 valueCtx:用于传递键值对,通过WithValue创建,支持链式查找

2025-08-05 10:48:17 632 1

原创 Go源码解读——互斥锁与读写锁

本文介绍了互斥锁和读写锁的实现机制。互斥锁(Mutex)通过state字段记录锁状态(Locked、Woken、Starving)和等待协程数(Waiter),使用信号量(sema)实现协程阻塞和唤醒。1.8版本引入饥饿模式防止协程长期获取不到锁。读写锁(RWMutex)通过wMutex互斥锁和readerCount、readerWait等字段实现读写互斥:写锁会阻塞读锁(readerCount变负),读锁通过readerWait确保写锁不会被饿死。写解锁时会唤醒所有等待读锁,最后一个读解锁会唤醒等待写锁。

2025-08-04 14:18:54 738

原创 Go源码解读——sync.Map

本文介绍了Go语言中sync.Map的实现原理,主要包括CAS原子操作和双map结构设计。sync.Map通过只读map和dirty map分离,实现无锁读操作和线程安全。读操作优先访问只读map,写操作先在只读map尝试更新,失败时加锁处理dirty map。当misses次数达到阈值或执行Range操作时,会将dirty map提升为只读map。该设计通过CAS+自旋重试模式保证线程安全,同时优化了并发读写性能

2025-08-03 15:36:16 892

原创 RocketMQ实现基于可靠消息的最终一致性

查找订单表中是否有此订单,如果订单表中没有此订单,说明本地事务执行失败,所以直接提交消息;如果存在此订单,说明本地事务执行成功,所以回滚消息(缺陷:订单表中没有此订单,不代表本地事务已经将库存扣减了,可能还没扣减前就已经出错了,这是提交消息会造成库存多扣减(没有保证幂等性))实现事务监听接口(此接口有两个方法:执行本地事务和检查本地事务)的结构体(方法调用者),在其中加入自定义字段,存储接口中的方法结束后,需要返回的信息(直接将信息存储到方法调用者中的相应字段里,以便在新建订单方法中可以直接查看)

2025-04-20 17:46:40 1032

原创 grpc(一)

服务定义文件(通常以.proto结尾)用于定义服务的接口。以下是一个简单的.proto在这个示例中,Greeter是服务的名称,SayHello是服务的方法,和HelloReply是方法的输入和输出消息类型。服务定义文件用于定义服务的接口和消息类型。这个文件定义了一个名为Greeter的服务,它有一个SayHello方法,该方法接受一个消息并返回一个HelloReply消息。

2024-12-15 19:27:43 932

原创 Docker(一)

Dockerfile是一个文本文件,其中包含一个个的指令,用 指令来说明要执行什么操作来构建镜像,将来Docker可以根据Dockerfile帮我们构建镜像。Dockerfile构建过程dockerfile的关键字建议使用大写,它是从上往下按照循序执行的,在dockerfile中,#代表注释。我们可以通过这个脚本来生成镜像,脚本中的每一个命令,都是一层镜像。我们先通过下面这张图片来理解一下镜像的构成以及运行过程。dockerfile是面向开发的,发布项目做镜像的时候就要编写dockerfile文件。

2024-12-08 19:26:50 1300

原创 双指针与滑动窗口

双指针可以用来优化暴力枚举,题目中有某种隐式限定排除条件,利用此条件来操作双指针进行排除优化例如:当最小两边之和大于第三边时,此三边一定可以构成三角形,反之当最小两边之和小于第三边时,此三边一定不可以可以构成三角形:当两边可以和第三边构成三角形时,两边中其中一边增大,也都还可以构成三角形;两边不可以和第三边构成三角形时,两边其中一边减小,也还不可以构成三角形已排序数组发现随着第一个元素的递增,第二个元素是递减的枚举的时间复杂度从 O(N^2) 减少至 O(N)。

2024-12-01 20:04:52 788

原创 go-web项目通用脚手架

介绍go-web项目较为通用的脚手架的搭建

2024-11-24 17:51:43 1298

原创 gorm框架

在GORM中模型(Models)通常是正常定义的结构体、基本的go类型或它们的指针。同时也支持sql.Scanner及driver.Valuer接口(interfaces)。

2024-11-17 19:52:19 1007

原创 Gin框架

Gin中的中间件必须是一个gin.HandlerFunc类型。可以在r.GET()等方法中加入中间件,对请求进行拦截也可以在r.Use()方法中注册全局中间件函数,对全局的所有请求进行拦截。

2024-11-10 19:53:53 958

原创 GO语言基础(三)

介绍go语言的range,反射,结构体标签,错误处理和并发编程

2024-11-03 19:16:06 1133

原创 Go语言基础(二)

详细介绍go语言的派生类型

2024-10-27 19:04:12 921

原创 Go语言基础(一)

go语言语法基础,包括数据类型、语句、关键字等

2024-10-19 15:41:17 991

原创 Java项目——苍穹外卖总结

对第一个Java项目苍穹外卖进行大致的总体总结

2024-09-27 21:47:56 2256

原创 Java项目——苍穹外卖(二)

介绍Redis基础操作以及使用Java操作Redis

2024-09-17 20:47:48 1370

原创 Java项目——苍穹外卖(一)

介绍了dto、entity、vo的区别,讲解了公共字段填充和文件上传的实现方法

2024-09-07 17:56:58 4023 1

原创 Java基础——多线程(二)

讲解线程安全问题和锁以及相关练习

2024-08-29 17:50:23 759

原创 ​JavaWeb入门——Servlet(二)

HttpServletRequest是什么HttpServletRequest是一个接口,其父接口是ServletRequestHttpServletRequest是Tomcat将请求报文转换封装而来的对象,在Tomcat调用service方法时传入HttpServletRequest代表客户端发来的请求,所有请求中的信息都可以通过该对象获得HttpServletResponse是什么HttpServletResponse是一个接口,其父接口是ServletResponse。

2024-08-03 16:37:01 1027

原创 JavaWeb入门——Servelet(一)

用Java技术来解决相关web互联网领域的技术栈.使用JAVAEE技术体系开发企业级互联网项目. 项目规模和架构模式与JAVASE阶段有着很大的差别. 在互联网项目下,首先需要明白客户端和服务器的概念客户端:与用户进行交互,用于接收用户的输入(操作)、展示服务器端的数据以及向服务器传递数据服务端:与客户端进行交互,接收客户端的数据、处理具体的业务逻辑、传递给客户端其需要的数据请求客户端向服务端传递数据的主要方式之一,客户端主动向服务端发送请求,可以携带数据,交给服务端处理. 请求只能是客户端向服务端响应。

2024-08-03 15:43:33 1726

原创 Mybatis——动态SQL

MyBatis 的 XML 映射文件是 MyBatis 框架中用于定义 SQL 语句、映射规则等配置的重要文件。它允许开发者将 SQL 语句与 Java 对象映射关系进行分离,使得数据库操作更加灵活和方便。XML 映射文件通常以.xml作为文件扩展名,并且需要遵守 MyBatis 定义的 XML 格式和规则。随着用户的输入或外部条件变化而变化的SQL语句,称为动态SQL场景:查询时,不一定每次都指定全部条件,可能指定个别条件,其余条件设置为null。

2024-07-27 21:34:35 902

原创 Mybatis——快速入门

讲解了如何基于sptingboot和maven创建mybatis项目,并对数据库进行增删改查

2024-07-24 21:29:25 770

原创 MySQL基础(二)

MySQL约束、多表查询、事务

2024-07-20 19:03:32 957

原创 MySQL基础(一)

MYSQL基础概念、SQL语言、函数

2024-07-18 20:47:32 960

原创 Java基础——网络编程(一)

网络编程:在网络通信协议下,不同计算机上运行的程序,进行的数据传输应用场景:即时通信、网游对战、金融证券、国际贸易、邮件……BS架构的优缺点:1、不需要开发客户端,只需要页面+服务端2、用户不需要下载,打开浏览器就能使用3、如果应用过大,用户体验收到影响CS架构的优缺点:1、画面可以非常精美,用户体验好2、需要开发客户端,也需要开发服务端3、用户需要下载和更新的时候太麻烦。

2024-06-16 19:19:23 1055

原创 Java基础——多线程(一)

setName方法:1、如果没有给线程设置名字,线程也是有默认名字的,格式:Thread-X(X序号,从0开始)2、如果我们要给线程设置名字,可以用set方法进行设置,也可以用构造方法设置currentThread方法:获取当前线程的对象,哪条线程执行到这个方法,此时获取的就是哪条线程的对象当JVM虚拟机启动后,会自动启动多条线程其中有一条线程叫main线程,它的作用是调用main方法,并执行里面的代码sleep方法:1、哪条线程直行到这个方法,那么哪条线程就会在这里停留对应的时间。

2024-06-10 16:28:21 1052

原创 Java基础——IO流(一)

字符流的底层起始就是字节流,字符流=字节流+字符集特点:输入流:一次读一个字节,遇到中文时,一次读多个字节输出流:底层会被数据按照指定的编码方式进行编码,变成字节再写到文件中使用场景:对于纯文本文件进行读写操作。

2024-06-02 16:50:05 793

原创 算法学习——位运算

二进制中的位数:从最右边开始,第一个数记为第0位,第二个数记为第1位,以此类推。(为了方便与右移操作相匹配)

2024-05-23 19:54:05 981 1

原创 Java基础——单列集合(二)

HashSet集合底层采用哈希表存储数据哈希表是一种对于增删改查数据性能都较好的结构哈希表组成:JDK8之前:数组+链表JDK8开始:数组+链表+红黑树链表和红黑树都是为了解决哈希冲突而存在的。

2024-05-19 16:53:49 630 1

原创 Java基础——单列集合(一)

简要介绍Collection及List系列集合

2024-05-12 16:49:09 441 1

原创 Java基础——接口

1、接口要用关键字interface来定义格式:publicinterface接口名{}2、接口不能实例化3、接口和类之间是实现关系,通过implements关键字表示格式:public class 类名implements接口名{}接口中成员的特点1、成员变量:只能是常量,默认修饰符:public static final2、构造方法:没有3、成员方法(不同JDK要求不同):只能是抽象方法,默认修饰符:public abstract (JDK7以前)

2024-05-08 19:14:05 657

原创 深度优先搜索基础篇(DFS算法)

深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。你可以把深度优先搜索想象成一个人在森林中探险。这个人从入口开始,选择一条路径一直走,直到走到这条路径的尽头。

2024-04-28 16:05:46 2006

原创 二叉树力扣刷题(递归法)

递归法是二叉树算法题中一种很常见的解法,由于二叉树的特殊结构,用递归法解题时往往会比迭代法省时省力很多。先来明确一下递归通用的三步法:确定递归函数的参数和返回值确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

2024-04-25 20:21:50 918 1

原创 洛谷 P1011 车站 题解(C语言)

m。

2024-04-21 22:07:50 1487 1

原创 两道动态规划算法题解(力扣leetcode918.环形子数组的最大和 309.买卖股票的最佳时机含冷冻期)

初步研究动态规划

2024-04-21 16:37:17 819 1

原创 五道简单算法题题解

5道适合练手的简单算法题详细题解

2024-04-17 17:54:44 806 1

原创 栈和队列C语言实现(基础篇)

本文为基础篇,只探讨顺序栈和链式队列的实现。

2024-04-06 21:12:16 425 1

原创 Java面向对象之继承与多态详解(超详细)

继承可以把子类中重复的代码抽取到父类中,减少代码冗余。继承后子类可以得到父类的属性和行为,也可在其基础上新增其他功能而变得更强大格式:public class 子类extends父类 {}形象化理解:例如我们要创建一个猫类和一个狗类,这两个类中都有年龄、颜色等成员变量,也有吃饭,玩耍等方法,那么我们就可以把这些重复的代码抽取到同一个父类中,也就是创建一个父类动物类,其中包含年龄、颜色等成员变量和吃饭,玩耍等方法,然后让猫类和狗类继承动物类这个父类即可。父类动物类的创建。

2024-03-21 20:15:02 1278 1

原创 就地逆置法反转链表(详解)

就地逆置法与头插法的区别:头插法类似于创建一个新链表来就行反转链表,而就地逆置法则是在原有链表上直接改动。

2023-12-14 16:19:14 339 1

原创 快速排序C语言实现

在学完冒泡排序和选择排序这两个入门级别的排序方法后,打算挑战一下自己,尝试一下快速排序。第一次只是看了别人的博客和视频,没有动手在草稿本上验算,所以学的云里雾里。这次自己一步一步分析,并拿笔大量验算,总算大概理解了快速排序的本质及其中的重难点。

2023-11-15 20:26:46 57

原创 scanf函数详解(本质理解)

格式化字符串地址表。

2023-11-13 18:30:07 1142

空空如也

空空如也

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

TA关注的人

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