- 博客(41)
- 收藏
- 关注
原创 HTTPS在信息传输时使用的混合加密机制,以及共享、公开密钥加密的介绍。
HTTPS在信息传输时使用的混合加密机制,其中包括了共享密钥加密和公开密钥加密,我们还是先来将一些这两种加密方式。
2025-04-07 09:27:24
678
原创 【GoLang】etcd初始化客户端时不会返回错误怎么办
但是,描述了错误原因的这条日志,他只是自动打印在控制台了,并不是打印在日志文件中,这样我们日后还是不方便排查问题,那我们如何将其打印在日志文件中呢?有需求的小伙伴可以继续往下看。clientv3.New 在创建客户端时,不会立即验证端点的有效性或是否可连接,而是将验证推迟到实际使用客户端(比如执行 Put、Get 等操作)时。今天遇到一个奇怪问题,我在初始化一个etcd客户端时,传入了一个错误的端点,然后就水灵灵的初始化成功了,没有触发err。这样一来,错误的端点就会在此被检查出来,我们就成功实现了验证。
2025-04-03 15:56:41
422
原创 【GoLang】调用llm时提示词prompt的介绍以及使用方式
提示词是一种与大模型交互的对话格式,它以 JSON 格式定义了一个消息列表(messages),包含了系统消息和用户消息。我们向AI提问时,其实发给AI的都是提示词,别看我们只是简单输入了一句话,但大模型内部其实自动帮我们把这句话转换为提示词的形式了。但是我们现在如何手动来设置提示词呢?请看下文。
2025-03-24 17:23:20
486
原创 redis zset基本介绍以及底层实现
这两种数据结构的设计目标,就是尽可能地保持压缩列表节省内存的优势,同时解决压缩列表的内存重新分配的问题。而当新插入的元素较大时,可能会导致后续元素的 prevlen 占用空间都发生变化,从而引起「连锁更新」问题,导致压缩列表占用的内存空间要多次重新分配,这就会直接影响到压缩列表的访问性能。这使得 e1 节点的 prevlen 属性从原来的 1 字节大小扩展为 5 字节大小,但因为 e1 节点的 prevlen 属性原本只有 1 个字节大小,此时无法保存新节点的长度,所以需要对压缩列表的空间重分配操作。
2025-03-16 11:39:12
1149
原创 gRPC实现简单通信案例
里面存放着根据 greeter.proto 中的结构体生成的结构体及对应方法。主要存储了请求、响应结构体,及其对应方法。主要进行了接口的实现。
2025-03-09 09:58:46
332
原创 Redid分布式锁
value: fmt.Sprintf("%d", time.Now().UnixNano()), // 唯一标识符。key: "my_distributed_lock", // 锁的名称。value string // 锁的持有者,通常是一个唯一的标识符,例如客户端的 ID 或时间戳。Password: "", // Redis 密码(没有则为空)fmt.Println("获取锁失败,锁已被其他客户端持有")
2025-02-26 10:15:50
865
原创 docker部署go简单web项目(无mysql等附加功能)
代码表示当访问主机上8080端口下的/hello路径时,会返回hello,world。
2025-02-25 20:22:29
387
原创 Docker入门学习
Docker 是一种容器化技术,允许将应用及其依赖打包成一个轻量级、可移植的容器。镜像(Image):只读模板,包含运行应用所需的文件系统(如 Ubuntu + Nginx)。容器(Container):镜像的运行实例,可启动、停止、删除。仓库(Registry):存储镜像的地方(如 Docker Hub)。用docker部署mysql用docker下载的是镜像,下载好就可以直接运行镜像可以理解成是绿色免安装的一个包,里面只具备能保证镜像对应服务运行的最小化配置。
2025-02-23 13:58:48
728
1
原创 【GoLang】切片的面试知识点
只要两个切片的长度相等并且指向数组内所有元素及顺序都相等,那么两个切片就相等。两个数组可以不是同一个数组。append 可以增加切片,通过在切片后面加上...,就可以进行添加。nil切片是只声明但未初始化,没有分配底层数组的内存空间,判断依据:1. 切片长度;2. 切片指向数组的所有元素。空切片是初始化了的,有分配数组内存,只是数组内没有元素。使用[a:b]对切片进行截取得到的新切片,新切片的长度是。二者都可以正常扩容、遍历。新切片与旧切片共用一个底层数组。
2025-02-07 22:42:32
432
原创 【GoLang】利用validator包实现服务端参数校验时自定义错误信息
这里我用的方法是我自创的,比较土,主要是在map中通过错误字段、错误标签映射到自定义的信息。首先声明两个map然后在遍历中通过map的映射关系获取到自定义信息。import ("fmt"Username string `validate:"required,numeric"` // numeric 必须是数字Password string `validate:"required,alphanum"` // alphanum 必须是数字字母组合。
2025-01-24 23:35:00
695
原创 【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则
首先按照从左到右的顺序,比较第一个字符"a"和"a"的unicode码点值,相同,则比较下一个字符,"b"和"b",还相同,继续比较下一个,以此类推。当比较到第4个字符时,字符串"app"的字符为空了,故"apple" > "app"。首先按照从左到右的顺序,比较第一个字符"a"和"b"的unicode码点值,"a"为97,"b"为98,97
2025-01-09 16:43:07
312
原创 为什么Mysql用B+树作为索引
而且,在我们查询位于底层的某个节点(比如 A 记录)过程中,「非 A 记录节点」里的记录数据会从磁盘加载到内存,但是这些记录数据是没用的,我们只是想读取这些节点的索引数据来做比较查询,而「非 A 记录节点」里的记录数据对我们是没用的,这样不仅增多磁盘 I/O 操作次数,也占用内存资源。我们通过索引来查询数据时,先从磁盘读取索引到内存,再通过索引从磁盘中找到某行数据,然后读入到内存。优点:用数组可以实现二分查找,时间复杂度从On降到Ologn。数据和索引都是存储在磁盘里的。优点:(解决了数组的2个缺点)
2024-12-30 20:07:46
596
原创 3个关于协程的题目
题目3:现在有从1-10总共10个数,最多同时只能有3个协程去读,每个协程读1个数并输出,并且sleep1秒,直到读完这10个数为止。题目1:启动2个协程,1个管道,每隔1秒交替输出1次1-10和a-j。题目2:启动2个协程,2个管道,每隔1秒交替输出1次1-10和a-j。
2024-12-15 17:23:37
248
原创 【GoLang】文件操作中perm参数的用法
7的位置代表所有者:值是7代表权限为可读、可写、可执行(4+2+1)第一个5的位置代表用户组:值是5代表权限为可读、可执行(4+1)5(读、执行): r-x = 4 + 0 + 1。3(写、执行): -wx = 0 + 2 + 1。6(读、写): rw- = 4 + 2 + 0。1(只执行): --x = 0 + 0 + 1。4(只读): r-- = 4 + 0 + 0。2(只写): -w- = 0 + 2 + 0。0(无权限): — = 0 + 0 + 0。编号4:代表文件对于其他用户的权限。
2024-12-08 22:50:22
265
2
原创 【GoLang】编译时报错:exec:“....\\exe\\main“: file does not exist
我是 Windows系统,今天我使用黑窗口运行代码的时候,报了下图这个错误。
2024-11-17 21:52:09
300
原创 【GoLang】socket网络编程传输数据包时如何进行长度校验
来进行校验,思路如下:发送端先发送数据长度len1,再发送数据本体。接收端先接收到数据长度len1,再接收到数据本体,然后将数据本体的程度与数据长度len1进行比较,若二者相等则确认数据传输成功。),这时就需要在发送和接受时对数据进行校验来确保交互的稳定性和安全性。众所周知,Read()函数和Write()函数都可以实际传输了多少长度(字节),所以我们可以根据这个来完善一下数据的校验。思路:在每次传输数据(Read或Write)时,我们根据返回的传输长度进行判断。这样,就实现了对数据的长度的校验。
2024-11-03 18:27:31
248
原创 前后端分离项目——后端如何使用Token
token的意思是“令牌”,本质上是一种字符串,是用户身份的验证方式。token中间件用于判断token是否有效,并将用户信息注入到gin.Context中// AuthMiddleware 中间件检验token是否合法// 获取请求头中的token//验证token格式,不为空,开头为Bearerresponse.ResponseErrorWithMsg(c, 400, "token不合法")c.Abort()return//验证通过,提取有效部分(除去Bearer)
2024-10-13 23:14:41
580
原创 解决github登录验证 Enable two-factor authentication (2FA)
3. 点开身份验证器,点击扫码,选中页面中的二维码扫描。4. 接着就会出现验证码了,填入框中即可完成验证。下方是不同浏览器的下载地址,点击进入即可下载。1. 下载身份验证器(浏览器拓展插件)2. 进入github待验证的页面。在登录github时出现。
2024-09-06 15:13:17
1431
2
原创 sql多条件查询,当某个条件值为空时忽略该条件
具体实现:初始化一个sql语句,接着对各个条件进行判断,若该条件为空,则不做处理,若该条件不为空,则给sql语句拼接上查询条件即可。原理:直接用string的特性进行sql语句拼接即可。
2024-08-11 22:23:00
653
原创 Git 如何对远程分支里的内容进行修改(增、删、改)
我们将 11111.txt 删去,新增 22222.txt, 33333.txt 两个文件。接下来 ,本地文件夹内进行的任何修改,都可以通过push同步到远程分支。示例:远程分支名为xun,分支内容如图所示,只有一个11111.txt。接着创建一个新的本地分支,并切换到该分支。本地分支名与远程分支名相同。至此,远程分支里的内容以全部同步到本地文件夹内了。在该文件夹内打开Git,对齐进行初始化。最后就可以看见远程分支也同步更新啦。接着将远程分支合并到本地分支。接着拉取远程分支到本地。
2024-08-04 23:00:47
503
2
原创 【GoLang】协程练习题
WaitGroup 对象内部有一个计数器,最初从0开始,它有三个方法:Add(),Done(),Wait()用来控制计数器的数量。Add(n)把计数器的值设置为n,Done() 每次把计数器的值 -1,wait()会阻塞代码的运行,直到计数器地值减为0。杆子抬起,输出数字,杆子落下。但是在本题中,channel的发送数量和接收数量都确定且相等,所以不会出现内存泄漏问题,故不关闭也行。的原则,杆子抬起表示从channel中取出数据,杆子落下表示无法从channel中取出数据(阻塞)。
2024-07-15 17:15:47
506
原创 【计算机网络】关于物理层、数据链路层、网络层、传输层
所以默认网关,就是 A 在自己电脑里配置的一个 IP 地址,以便在发给不同子网的机器时,发给这个 IP 地址。A 在发送的数据包中增加一个序号(seq),同时 B 要在 ACK 包上增加一个确认号(ack),这样不但解决了停止等待协议的效率问题,也通过这样标序号的方式解决了顺序问题。假如拥塞窗口的大小为 cwnd,上一部分流量控制的滑动窗口的大小为 rwnd,那么窗口的右边界受这两个值共同的影响,需要取它俩的最小值。有的时候,B 主机的相应进程还没有准备好或是挂掉了,A 就开始发送数据包,导致了浪费。
2024-07-14 23:06:05
937
原创 【GoLang】关于Module
编程语言一般都提供依赖库管理工具,Go 最为一门新生代语言,自然也有其自己的库管理方式。Go的库管理方式经历过3次变革,从最初的GOPATH,到vendor,再到如今的Module。前2次的管理方式都有着各种问题(如版本管理),饱受使用者的诟病。直到 2018 年 Go 1.11 开始,Go 官方推出了 Go Module,很好地解决了之前的各种问题,Go的库管理才变得好用起来。
2024-06-24 20:36:54
363
原创 【GoLang】slice切片常见特征介绍及实现原理
切片(slice)又称动态数组,依托数组实现,可以方便的进行扩容、传递等,实际使用中比数组更灵活。
2024-05-29 11:47:44
740
1
原创 【GoLang】如何在高并发情况下保证map的安全
Go语言中的map是一种关联容器,它存储键值对,并且键是唯一的。在高并发情况下,如果多个goroutine同时对同一个map进行读写操作,可能会引发数据竞争,导致不可预知的行为,比如数据丢失、不一致性,甚至程序崩溃。
2024-05-11 18:25:33
500
2
原创 【GoLang】string入门
字符串的内容是不可变的,这是因为字符串类型的设计目标是提供高效的字符串操作,并且避免不必要的内存分配和复制。如果字符串是可变的,那么每次对字符串进行修改时都需要重新分配内存,并复制原有的数据。在实际编程中,我们可以通过字符串替换、对转换后的切片进行修改等方式来实现字符串的修改操作,这些操作会返回新的字符串值。因为 ‘哦’ 这个字符在Unicode字符集中的编号在进行UTF-8编码后得到的是3个字节的二进制编码。在上述案例中,“nb哦” 有3个字符,5个字节,所以遍历结果才会不同。用到 len() 函数。
2024-05-03 21:09:17
415
1
原创 【GoLang】关于字符的表示与存储
不同于别的语言,Go没有专门的char类型可以用于表示字符,那么Go应该如何表示一个字符呢?首先要知道,在go语言中,字符本身的值并无法存储,字符在经过ASCII码表变换后得到的一个整数值才可以存储。那么一个整数值,可以用哪些数据类型来存储呢?
2024-05-01 17:25:27
416
原创 【GoLang】3种创建空切片方式的区别
当我们需要创建空切片时,一般有以下3种方式这三种方式创建的切片的长度和容量都为0,但切片的类型,而是分为nil切片和空切片,切片的指向数组也分为有和没有。指向数组:不指向任何底层数组切片长度:0切片容量:0切片类型:nil切片指向数组:指向一个长度和容量都为 0 的底层数组。切片长度:0切片cap:0切片类型:空切片指向数组:指向一个长度和容量都为 0 的底层数组。切片长度:0切片容量:0切片类型:空切片。
2024-04-17 11:52:29
465
原创 eclipse的下载和 jdk的配置(面向备战2025蓝桥杯)
本文面向于备战2024蓝桥杯java组,且之前一直使用IDEA进行学习的同学。根据蓝桥杯大赛的要求,本文下载的eclipse为2020.06版本,jdk为1.8版本。
2024-04-07 23:48:39
2454
12
原创 【GoLang】将项目部署在服务器上
Xshell下载完成之后,打开它,会自动弹出一个会话窗口,这里我们点击新建,接着在名称这里填入自己想取的名称,主机这里填入刚刚新建服务器的公网IP,其余不填,接着点击连接。作者制作此项目时用的是本地的mysql,但项目部署在服务器上就需要用到服务器上的mysql,于是需要将本地的mysql数据导入到服务器的mysql中。这里我用的是NaviCat,进入首页,选中项目的数据库,右键点击,接着选中转储SQL文件、结构和数据。注:这里的main指的是项目打包成的文件的名称,可以填别的名称,不一定非得叫main。
2024-03-13 20:45:17
2538
2
原创 CSS实现超简单三角形
1、以上下左右为4个参照位置,将待实现的三角形的底边所在的位置视为a;1、盒子的四条边框只有颜色不相同,其余属性(大小、样式)都相同。2、可以通过对边框的大小进行设置,来调整三角形的大小。3、可以通过对边框的颜色进行设置,来调整三角形的颜色。3、将盒子的剩余3个位置的边框设置为透明边框。例如:实现一个底边在上,颜色为红色的大三角形。2、将盒子的a位置的边框设置为有色边框;接着就可以看到一个三角形了。
2024-01-10 00:32:35
487
1
原创 JavaFx—TableView控件的创建以及增删查改功能实现(MySql同步)
接着再fxml文件中创建一个AnchorPane布局,然后在Controls(控件)中找到TableView并将其拖到布局中,再找到TableColumn控件,对其设置好id名称后并将其拖到布局中的TableView中即可。接着在MasterController类中,我们需要声明控件(TableView和TableColumn),创建集合,编写lodaDate()方法用于初始化TableView,并将loadDate()方法添加到initialize()方法中。在User类中,我们需要按下图方式创建变量。
2023-11-22 16:12:47
3083
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人