自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go slice切片的详细知识(包含底层扩容)

本篇文章是之前我在学习切片时遇到的一些问题,也在网上搜索了许多材料+实践。下面的代码不敢说一定正确,但一定是亲自实践过的。

2024-05-26 10:00:00 2595

原创 Reids 的io并发模型

异步 I/O 模型(Asynchronous I/O,AIO):在异步 I/O 模型中,应用程序发起 I/O 操作后,不需要主动去查询操作的状态,而是由操作系统在 I/O 操作完成后通过回调函数或信号等方式通知应用程序。例如,在读取文件或网络数据时,线程会被挂起,直到数据准备好或操作完成,期间线程不能执行其他任务,这会导致线程资源的浪费,在处理多个 I/O 操作时效率较低。由于主线程是单线程的,命令的执行是串行的,这保证了 Redis 的数据一致性和事务、Lua 脚本等功能的正确性。

2025-04-05 08:06:21 583

原创 Unix/Linux 系统下的文件权限

drwxr-xr-x 是一个常见的 Unix/Linux 文件系统中的权限表示法,用于描述文件或目录的访问权限。每组三个字符可以转换为一个八进制数字,rwx 表示 7,r-x 表示 5,所以 drwxr-xr-x 可以转换为 0755。这个命令将设置 mydir 目录的权限,使得所有者具有读、写、执行权限,而组和其他用户具有读和执行权限。接下来的九个字符:权限位,分为三组,每组三个字符,分别表示文件所有者、文件所属组、其他用户的权限。第一个字符 (d):表示这是一个目录。第一个字符:文件类型。

2025-03-28 11:47:11 1060

原创 路由限流(Gin框架)

也就是说令牌桶是允许一定程度的并发的,比如同一个时刻,有100个用户请求,只要令牌桶中有100个令牌,那么这100个请求全都会放过去。令牌桶算法的原理是系统以恒定的速率产生令牌,然后把令牌放到令牌桶中,令牌桶有一个容量,当令牌桶满了的时候,再向其中放令牌,那么多余的令牌会被丢弃;当想要处理一个请求的时候,需要从令牌桶中取出一个令牌,如果此时令牌桶中没有令牌,那么则拒绝该请求。令牌桶是匀速向桶中添加令牌,服务请求时需要从桶中获取令牌,令牌的数目可以按照需要消耗的资源进行相应的调整。

2025-03-04 09:00:00 996

原创 Mac/Linux 下的趣味命令大盘点:从蒸汽火车到彩虹数字雨

如果你也想试试这些“无用但有趣”的命令,赶紧安装 Homebrew(Mac 必备工具),在终端中玩一玩!如果在服务器上遇到这些“惊喜”,别紧张,可能只是你的学长在恶作剧,哈哈哈。让我们来看一看如何下载蒸汽火车吧。当你运行这个命令时,终端会显示一列蒸汽火车从左到右驶过的 ASCII 动画,特别有趣且复古。模拟《黑客帝国》中的“数字雨”效果,让终端显示绿色(或自定义颜色)的流动数字,营造出高科技、黑客氛围,非常酷炫!是一个经典的命令,会生成一个 ASCII 艺术形式的奶牛,并“说”出你输入的文本,萌趣又有趣。

2025-03-01 17:12:35 961

原创 熔断降级(Go语言实现)

虽然这会导致暂时停电,但避免了更大的损失。一个简单的商品详情查询服务,优先从 Redis 缓存读取,如果缓存不可用,则查询数据库,但通过熔断降级防止数据库过载。降级处理:停电后,你可能只能用应急灯或手电筒,而不是所有电器,这是一种“降级”措施,等到电路恢复正常再逐步恢复使用。完全熔断状态:如果故障持续,熔断器“完全切断”,所有请求不再访问 Redis,而是直接触发降级逻辑,保护后端服务。恢复过程:几分钟后,Redis 恢复,熔断器进入半开状态,测试成功后关闭熔断,系统重新使用缓存,恢复正常功能。

2025-02-28 13:00:00 682 5

原创 Redis缓存读写策略、一致性、雪崩、击穿、穿透

假设「请求 A 」和「请求 B 」两个请求,同时更新「同一条」数据,则可能出现这样的顺序:A 请求先将缓存的数据更新为 1,然后在更新数据库前,B 请求来了, 将缓存的数据更新为 2,紧接着把数据库更新为 2,然后 A 请求将数据库的数据更新为 1。举个例子,比如「请求 A 」和「请求 B 」两个请求,同时更新「同一条」数据,则可能出现这样的顺序:A 请求先将数据库的数据更新为 1,然后在更新缓存前,请求 B 将数据库的数据更新为 2,紧接着也把缓存更新为 2,然后 A 请求更新缓存为 1。

2025-02-27 15:22:57 802

原创 Go map 底层分析

所谓等量扩容,实际上并不是扩大容量,buckets数量不变,重新做一遍类似增量扩容的搬迁动作,把松散的键值对重新排列一次,以使bucket的使用率更高,进而保证更快的存取。每个哈希表的实现对负载因子容忍程度不同,比如Redis实现中负载因子大于1时就会触发rehash,而Go则在在负载因子达到6.5时才会触发rehash,因为Redis的每个bucket只能存1个键值对,而Go的bucket可能存8个键值对,所以Go可以容忍更高的负载因子。,达不到第1点的临界值,就不能触发扩容来缓解这种情况。

2025-02-15 10:00:00 593

原创 超详细配置本地的DeepSeek模型,以及DeepSeek的了解

就像美国推出安卓系统,中国不断完善,但安卓系统还是美国的,deepseek反过来让所有国家共同完善,但还是中国的。不同模型名称中的 1.5B、7B、14B 等数字代表模型的参数量,这里的 B 是“Billion”(十亿) 的缩写。参数量的多少直接影响模型的“聪明程度”、计算资源需求和适用场景,也不是说越多越好,因为越多其硬件的资源消耗也会越多,要根据自己电脑的情况来定。第一次运行该命令会下载 1.5b 的版本,下载完成以后,再执行该命令就无需下载,可以直接运行了。再一次选择:Ollama API。

2025-02-09 11:14:52 1067

原创 用Go实现 SSE 实时推送消息(消息通知)——思悟项目技术4

SSE(Server - Sent Events)是一种允许服务器向客户端实时推送更新的 Web 技术。是一种基于 HTTP 协议的单向通信机制,服务器可以在客户端建立连接后,持续不断地向客户端发送事件流。客户端只需发起一次请求,服务器就能随时向客户端推送新的数据,无需客户端反复请求。

2025-02-08 09:00:00 858

原创 TCP 三次握手四次挥手

TCP三次握手(Three-Way Handshake) 是建立TCP连接时,客户端和服务器之间为了保证可靠的数据传输而进行的三次消息交换。三次握手的目的是通过交换序列号,确认通信双方都准备好建立连接,并且双方都能进行数据的发送和接收。注意:三次握手只在TCP连接建立时进行一次,而不是在每次发送消息时都进行。因为TCP是一个 面向连接的协议,这意味着在发送数据之前,客户端和服务器需要建立一个持久的连接。这个连接在数据传输过程中保持开放,直到完成数据交换或者关闭连接。

2025-01-25 10:30:49 1328

原创 go chan底层分析

和分别是接收(

2025-01-16 21:32:36 1273

原创 chrome浏览器中 F12 查看接口请求与响应

打开页面,点击F12。

2025-01-14 09:00:00 1387

原创 go 协程练习例题

创建一个程序,计算一个大数组的和,使用多个 goroutine 分担计算任务。将数组分成若干部分,每个部分由一个 goroutine 计算其部分的和,然后将部分和合并得到最终结果。思路:两个协程并发,一个协程读完然后往通道里写数据,另一个协程写完然后读数据,两个协程交替进行,交替阻塞。使用并发/并行的方式,将统计素数的任务分配给多个(4 个)goroutine 去完成。3、要保证任务按照添加的顺序依次执行,即每个任务在前一个任务完成后才能开始执行。2、函数 Start():启动任务调度器并开始执行任务。

2024-12-15 15:05:25 450

原创 go 使用unsafe包实现string和[]byte的转换

特性通过无类型指针转换内存分配分配新的内存无额外分配,共享底层数据数据安全数据独立,修改互不影响修改返回的 []byte 会影响原字符串性能较低:需要分配内存和复制数据较高:直接操作底层指针易读性和维护简单易读较复杂适用场景通常是首选方法,安全易用用于对性能要求极高且可控的场景。

2024-12-08 10:00:00 740

原创 Go 语言文件操作

如果你尝试执行写入操作(如 file.WriteString),会返回一个错误,因为文件没有写入权限。指定新创建文件的权限模式(如果该文件已经存在那么这个文件权限不会起作用,只有在创建文件的时候才起作用)。使用 ioutil.ReadFile 一次将整个文件读入到内存中,适用于文件比较小的情况。os.O_RDWR 表示以读写模式打开文件,这样你就可以在文件上执行读和写操作;表示要打开或创建的文件的路径和名称。注意:用这个方法打开文件,只能读内容,不能写入内容。指定文件打开的模式或操作类型。

2024-12-05 10:00:00 1543

原创 TCP 粘包问题

粘包指的是在基于流的协议(如 TCP)中,由于数据的传输特性导致接收方无法明确区分多条消息的边界,从而将多条消息粘合在一起接收,或者将一条消息拆分成多次接收。

2024-12-05 09:00:00 415

原创 go语言静态资源打包——思悟项目技术3

Go 语言默认情况下打包并不会将静态文件直接包含在可执行文件中。Go 编译器只会打包 .go 源代码文件,静态文件(如 HTML、CSS、JS 或图片等)并不会自动包含在生成的二进制文件中。

2024-10-29 09:32:23 735 1

原创 go语言gin框架平滑关闭——思悟项目技术2

平滑关闭(graceful shutdown)是指在停止服务时,能够让现有的连接、任务或者操作优雅地完成,而不是直接中断。平滑关闭的核心思想是在系统接收到停止信号后,不再接收新请求,只处理当前正在执行的请求,确保所有请求完成后,系统才正式关闭。

2024-10-29 09:27:58 629

原创 golang qq邮件发送验证码——思悟项目技术1

这个例子中我使用的是 gopkg.in/gomail.v2 包,发送邮件也可以用 github.com/jordan-wright/email 包。通过编码的方式发送邮件,就是调用qq邮箱提供的接口来进行邮件的发送,我们在编写该功能前,需要拿到qq邮箱的POP3/SMTP服务的授权码。我们开启SMTP/IMAP服务,生成授权码,保存一下授权码,后面要用到。因为涉及到数据库,所以我省略掉了这部分的代码,读者自行添加。

2024-09-26 10:30:00 1028

原创 计算机网络——2

计算机网络整个体系有两个大的分类:一个是国际组织制定的OSI七层模型,一种是实际使用中的TCP/IP四层模型。

2024-08-05 09:04:53 811 1

原创 计算机网络——1

下面详细介绍局域网的覆盖范围和拓扑结构,以太网和局域网交换机,以及广域网(Wide Area Network,WAN),包括其覆盖范围和传输介质,以及路由器和调制解调器。它将数据分割成小的数据段,并通过三次握手建立连接,确保数据在源和目标之间的可靠传输。由于没有额外的开销,UDP具有低延迟和高效率的特点,适用于对实时性要求较高且对数据传输的可靠性要求不高的应用。IP协议是无连接的,它不提供可靠性传输和流量控制,主要关注数据包的正确传递。TCP提供面向连接的可靠传输,而UDP提供无连接的不可靠传输。

2024-07-21 20:40:26 754

原创 Go 协程通道使用注意

当一个 channel 已经关闭而且其中的元素已经全部被取出时,再从管道中取出数据会返回该元素类型的零值,并且 ok 会被设置为 false。因为在已关闭的 channel 上进行接收操作会立即返回零值,但如果不进行检查,可能会误认为是从 channel 中接收到了有效的数据。因此,通过检查 ok,我们可以确定是否成功接收到了有效的值。close(chan):关闭通道并不会丢失里面的数据,只是让读取通道数据的时候不会读完之后一直阻塞等待新数据写入。这五个管道的关闭时间都是在:所在函数运行完毕的时候关闭的。

2024-07-16 17:17:14 754

原创 go mod 依赖管理补充2

go.sum文件记录了每个依赖包的哈希值,在构建时,如果本地的依赖包 hash 值与go.sum文件中记录得不一致,则会拒绝构建。go.mod文件是Go模块系统中的核心文件,用于定义和管理一个 Go 项目的依赖关系和模块信息(如依赖包的路径和版本号)。总结:go.sum 文件引入依赖包的路径和版本号,而go.sum校验引入的依赖包。go.sum 文件的目的是为了确保依赖包的一致性,防止依赖包错误、被黑客篡改等。

2024-07-08 17:25:30 227

原创 go slice切片的详细知识(包含底层扩容)——2

Go 语言的切片扩容机制是相当复杂的,它考虑了多种因素来确定新的容量,以便在性能和内存使用之间找到平衡。Go 语言的 runtime 库在执行切片扩容时,有时会为了减少频繁的内存分配而使用稍大的倍数。最后两行代码:对 newcap 作了一个内存对齐,这个和内存分配策略相关,所以最终结果不一定是 1.25的整数倍(有时候扩容和元素类型的字节数有关系)。最终的结果可能会比严格的1.25倍略大一些,具体取决于当前的容量和内存分配的优化策略。切片在被截取时的另一个特点是,被截取后的数组仍然指向原始切片的底层数据。

2024-06-02 19:36:32 1192 2

原创 go map与哈希表的那些事——map底层数据结构(详细+图解)

扩容操作会使得桶的数量翻倍,并重新计算每个元素的哈希值,将其分配到新的桶中。在发生哈希冲突时,Python中dict采用的开放寻址法,Java的HashMap采用的是链地址法,而Go map也采用链地址法解决冲突,具体就是插入key到map中时,当key定位的桶填满8个元素后,将会创建一个溢出桶,并且将溢出桶插入当前桶所在链表尾部。等量扩容,实际上并不是扩大容量,buckets数量不变,重新做一遍类似增量扩容的搬迁动作,把松散的键值对重新排列一次,以使bucket的使用率更高,进而保证更快的存取。

2024-05-30 10:00:00 1224

原创 Go map的增删改查

golang map的增删改查

2024-05-10 10:00:00 280 1

原创 Mac goland上传项目到gitee

准备工作:创建一个gitee仓库。

2024-04-15 11:06:30 540 1

原创 Go语言中的new和make的区别

Go语言中new和make都是用来内存分配的原语(allocation primitives)。简单的说,new只分配内存,不初始化内存;make用于slice,map,和channel的初始化make和new都是golang用来分配内存的內建函数,且在堆上分配内存,make 即分配内存,也初始化内存。new只是将内存清零,并没有初始化内存。make返回的还是引用类型本身;而new返回的是指向类型的指针。make只能用来分配及初始化类型为slice,map,channel的数据;

2024-04-05 14:00:00 612 1

原创 go mod 依赖管理

vendor其实就是将原来放在GOPATH/src的依赖包放到工程的vendor目录中进行管理,不同工程独立地管理自己的依赖包,相互之间互不影响,原来是包共享的模式,通过vendor这种机制进行隔离,在项目编译的时候会先去vendor目录查找依赖,如果没有找到才会再去GOPATH目录下查找;使用 go mod download 路径,只会下载当前的包,但是如果这个包也要依赖其他的依赖,那么第二个依赖就没有下载,我们可以通过go mod tidy,所有间接要依赖的东西都会被下载。go.sum 文件。

2024-04-01 10:00:00 1506

原创 golang 连接 mysql

【代码】golang 连接 mysql。

2024-02-04 09:00:00 460 1

原创 golang channel有无缓冲区的区别

取的速度较慢,放了5个才开始取,由于缓冲区已经满了,所以取出一个之后,才能再次放入;放完了之后虽然缓冲区关闭了,但是缓冲区的内容还保留,所以还能继续取出。有缓冲是异步的,例如 make(chan int, 1),就是一个送信人去你家仍到你家的信箱,转身就走,除非你的信箱满了,他必须等信箱空下来,有缓冲的保证信能进你家的邮箱。无缓冲是同步的,例如 make(chan int),就是一个送信人去你家门口送信,你不在家他不走,你一定要接下信,他才会走,无缓冲保证信能到你手上。

2024-01-28 10:23:33 361

原创 Go中打开文件却显示“no such file or directory”

2.在终端运行(A_practice 是我的文件夹名,你需要换成你的文件夹名)我们用一个例子演示:我想读取 Aardvarks.txt 里面的内容。go项目中的文件路径太长了,系统无法识别。1.在终端进入到 A_practice 文件夹中。这时我们就可以成功运行 a.go 了。

2023-12-21 15:46:26 1473

原创 Go 使用append的一些坑

【代码】使用append的一些坑。

2023-12-19 10:12:41 557 1

原创 javaFX + mysql 学生管理系统---超详细

代码和教师管理学生基本一致,只是教师管理的是教师自己的学生,管理员管理的是全部学生,后面有完整全部代码。提示窗口使用的十分频繁,所以我把它封装了一下放到utils中,以后使用可以直接调用函数。我将学生密码进行加密存放到数据库中,该加密是不可逆加密,无法逆推。这个柱状图是实时变化的,更改了数据库中的数据,柱状图也会变化。输入ID后会自动显示原先的数据,教师无法更改学生的密码。查询学生之后,我们点击刷新可恢复表格中的学生数据。教师增加学生和学生自己注册基本一致。教师只能增删改查属于自己的学生。

2023-10-25 11:17:07 250 2

原创 JavaFX + Mysql学生信息管理系统

在文章上面(管理员管理学生和教师管理学生代码相同)管理员管理教师和管理员管理学生代码大致相同。删除学生和删除教师的代码基本相同。

2023-10-08 22:38:32 130 1

原创 上传本地代码到gitee上的两种方法

在终端输入:git clone 仓库的路径这样我们就在我们的电脑上克隆了一个仓库(看起来就是一个文件夹)(在克隆过程中,如果仓库是一个私有仓库,将会要求用户输入 Gitee 的账号和密码。按照提示输入即可。

2023-09-09 08:23:35 1762 1

原创 用Java实现三国战纪小游戏

包含四个主角(关羽,张飞,赵云,魏延),每个主角攻击力,血量,技能,移动速度,被动都不相同。1.关羽:血量:4000,攻击:100,速度:5被动:过五关斩六将:随着击杀敌人的数量增加,攻击力不断增加,每击杀一个敌人,增加2点攻击力2.张飞:血量:3400,攻击:80,速度:5被动:愈战愈勇: 随着生命的降低,攻击力不断增加,每损失100生命值,增加1点的攻击力3.赵云:血量:2800,攻击:120,速度:6被动:单枪匹马:在场的敌人数量越多,攻击力越高,场上每多1个敌人,攻击力增加5;

2023-08-17 09:00:00 866 3

原创 阿里iconfont字库如何使用字体图标

2.把上面下载的文件都放在一个文件夹内,然后放在项目目录中,再在项目中引入iconfont.css文件(具体代码在下面的图片中)3.给盒子添加两个类名,一个固定的是iconfont,另一个是你想要的那个图标所对应的类名(类名不能出错)方法一:unicode 引用(下载到本地)方法一:unicode 引用(下载到本地)方式二、unicode 引用(在线链接)

2023-08-06 09:49:03 380

原创 拉开和别人敲代码的速度,Mac你不得不知道的快捷键

拉开和别人敲代码的速度,Mac你不得不知道的快捷键

2023-07-28 10:54:40 165 1

空空如也

空空如也

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

TA关注的人

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