- 博客(81)
- 收藏
- 关注
原创 6.824 Lab 2C raft 学习记录
最后10s,开始的时候,恢复网络,插入一个数据,等待这个数据被提交,如果超过这10s就报错。2C的test中的unreliable figure8算是给博主的迎头一棒,需要根据raft论文的figure8进行解决,leader。根据前任及博主自己的经验,unreliable figure8的除了上述这一点以外,需要对。博主由于之前的不严谨,给自己留下了很大的改进困难,最后不得不重构代码。进行一定的设计,可以参考课程里老师提出的意见。一下为博主的github仓库,需要的可以参考。有一定的考验,那么就需要对。
2024-09-29 20:06:12 348
原创 6.824 lab2B raft 记录
Start(),applyChconfig.goconfig.go您需要一个单独的长期运行的 goroutine,在 applyCh 上按顺序发送已提交的日志条目。它必须是单独的,因为在 applyCh 上发送可能会阻塞;而且它必须是一个单独的 goroutine,否则可能难以确保按日志顺序发送日志条目。推进 commitIndex 的代码需要启动 apply goroutine;为此,使用条件变量(Go 的 sync.Cond)可能是最简单的方法。
2024-08-30 11:01:41 931
原创 Go-Gin-Example 第八部分 优化配置接口+图片上传功能
这里基本是对底层代码的二次封装,为了更灵活的处理一些图片特有的逻辑,并且方便修改,不直接对外暴露下层。而在实践里的话肯定是本地搭建了,更多内容可以查看源码进行学习,到这里可以自行进行验证,访问。在这里为止,针对本需求的配置优化就完毕了,你需要执行。本次需求中,需要增加图片的配置项,总体就有些冗余了。路径映射到我们指定的文件目录中,这里为。将散落在其他文件里的配置都删掉,统一在。对图片进行加密,防止图片名暴露。本身对此就有很好的支持,而。,即我们放置图片的文件夹下。(建立setting模块)
2024-03-26 14:49:23 1966
原创 Go-Gin-Example 第七部分 定制GORM CallBacks 实现软删除
这里我们就与gorm自带的gorm.model一致了,最后的deletedon就是为了软删除设置的。到这里,大家可以进行自行进行删除操作,查看deletedOn字段是否存在删除时的时间戳。使用新建文章或包含这两个字段的表格,可以看到这两个字段功能都正常。本身是由回调驱动的,所以我们可以根据需要完全定制。中都设置这两个方法,为了避免出现更多的表而再次。,这里有两个涉及以下字段的表,我们在两个。上面我们定义好回调方法,这一部分我们将其。当然,如果您的模型包含了一个。函数中,增加以下删除的回调。
2024-03-19 17:49:31 1018 2
原创 GO-Gin-Example 第六部分 将Golang应用部署到Docker
这里多出的一句是将宿主机的目录/home/wang2/docker_rep,挂载到容器的/var/lib/mysql,即mysql默认存储数据的位置,完成数据持久化。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。,如果不存在会自动创建,首次出现,为进入容器后默认的工作目录,不需要cd。这里即相当于在创建的容器的工作目录中编译当前文件夹内的go文件,
2024-03-19 00:42:53 1080
原创 GO sync.pool学习笔记
是 Go 语言标准库中提供的一个对象池,用于管理临时对象的分配和重用,以减少内存分配的开销。提供了一种简单而有效的方式来管理临时对象,减少了频繁创建和销毁对象所带来的性能开销。这样,对象就被归还到了对象池中,供下一次使用。字段的值,该函数用于生成新的对象。在上面的示例中,我们创建了一个。在这里,我们将获取的对象断言为。类型的返回值转换为期望的类型。注意,需要通过断言将。,并指定了一个匿名函数作为。
2024-03-14 16:35:28 543
原创 [Golang]K-V存储引擎的学习 从零实现 (RoseDB mini版本)
对的学习,从零实现一个k-v存储引擎原项目的github地址为rosedb的mini版本,博主借此了解k-v存储,该项目通过对一个数据文件进行读写以进行简单示意,而非rosedb的多个数据文件的机制,这里也提供rosedb的github地址。
2024-03-14 16:32:52 768
原创 Go-Gin-example 第五部分 加入swagger
Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。号称世界上最流行的api框架Restful Api文档在线自动生成工具==》api文档和api定义开发。
2024-03-07 21:17:26 1042
原创 Go-gin-example 第三部分 编写一个简单的文件日志系统
我们自定义的logging包,已经基本完成了,接下来让它接入到我们的项目之中吧。我们打开先前包含log打开routers目录下的article.gotag.goauth.go。2。将log包的引用删除,修改引用我们自己的日志包为。将原本的改为。
2024-03-04 21:26:05 1308
原创 Golang leetcode459 拼接+kmp算法
如果有一个子字符串重复可以构成原字符串,则两个字符串拼接后其中一定包含一个原字符串。abc=s,则s+s=a|bcab|c,其中bca,cab一定不为s。nnn=s,则s+s=nn|nnn|n中也包含一个s。
2024-01-21 20:54:47 587
原创 Golang leetcode28 找出字符串中第一个匹配项的下标 KMP算法详解
因此我们可以对模式字符串建立一个数组,分别记录当第几个开始不对应时,下次从第几个再开始比较,也就是常说的。前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。第4个字母不一致,但前三个字母是一致的,那么当我们继续寻找时,没有必要再从第一个字母开始对应。那么,从这里我们又能够发现,下次从第几个数字开始进行比较,只跟这次重复的子串有关系,,也就是以字符串第一个字符作为开头,同时不包括最后一个字符的所有子串,续接我们提到的前后缀的概念,前三个字符为aba,则前缀为。
2024-01-21 17:12:18 1154
原创 Golang 卡码网55 右旋字符串 切片拷贝问题补充
通过[:]的方式进行赋值的方式,如b:=a[:2],由于其共享底层的数组,所以说修改其中之一,另一个也是受影响的,为。切片如果想要实现深拷贝,需要使用**
2024-01-20 13:42:46 688
原创 Go-gin-example 个人注释添加学习版 第三部分 编写一个简单的文件日志
我们自定义的logging包,已经基本完成了,接下来让它接入到我们的项目之中吧。我们打开先前包含log打开routers目录下的article.gotag.goauth.go。2。将log包的引用删除,修改引用我们自己的日志包为。将原本的改为。
2024-01-19 18:28:29 863
原创 Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶
【代码】Golang leetcode151 翻转字符串中的单词 双指针 常规+进阶。
2024-01-17 21:24:32 525 1
原创 Linux shell美化 zsh+oh-my-zsh+power10k
通过如下命令即可进入配置power10k主题,根据自己的喜好选择即可。,使用广泛且兼容性较好,但是这里是完整安装,文件较大。当想重新进行设置时再次输入该命令即可重新配置。一次下载四个字体包,打开进行安装。从ubuntu外观里修改字体即可。进入插入模式,将以上完成后,按。或者第二种方法就为图中的字体。
2024-01-17 13:17:57 941
原创 Go-gin-example 第二部分 jwt验证
作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到。并且,由于签名是使用标头和有效负载计算的,因此还可以。),它定义了一种紧凑和自包含的方式,用于在各方之间作为JSON对象安全地传输信息。的编写,但是,还存在一些非常严重的问题,例如,我们现在的。的一项功能,因为它的开销很小,并且能够跨不同域轻松使用。是可以随意调用的,这显然还不安全全,在本文中我们通过。结构的(加密处理后的)原始字符串,通过消息认证码(
2024-01-16 00:10:13 1223
原创 Golang 替换数字卡码54题
单引号’',表示byte类型或rune类型,对应int8和int32类型,默认是rune类型。go中string时无法直接修改的,但我们这里采取[]byte进行读取的话则可以针对进行修改。这里我们不在输入获得的[]byte类型上直接修改,而是保存在新建的[]byte上。但在实际使用的过程中,第二部分所需的运行存储反而更多。,起为acm模式的答题。
2024-01-15 20:48:50 552
原创 Golang 三数之和+ 四数之和 leetcode15、18 双指针法
知识补充:map的key值必须是可以比较运算的类型,不可以是函数、map、slice。
2024-01-14 14:24:15 530
原创 JWT的实现原理|一分钟快速了解
作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到。并且,由于签名是使用标头和有效负载计算的,因此还可以。),它定义了一种紧凑和自包含的方式,用于在各方之间作为JSON对象安全地传输信息。声明格式,,常见的场景如HTTP授权请求头参数和URI查询参数。的一项功能,因为它的开销很小,并且能够跨不同域轻松使用。结构的(加密处理后的)原始字符串,通过消息认证码(是在各方之间安全传输信息的比较便捷的方式。
2024-01-12 12:55:21 898
原创 Golang 四数相加 leetcode454 map哈希表
本题如果直接进行四次for循环,则时间复杂度为O(N^4),超出运行时间限制。因此我们这里使用两个分别的for循环进行遍历,则时间复杂度为O(N。
2024-01-10 16:38:57 615 1
原创 Golang 快乐数 leetcode202 map哈希表 快慢指针法
对于本体中快乐数的检测,如果非快乐数,应该会在循环中有的数出现。当为3位数时,即使为999,每位的平方和仅为243,所以能循环的数肯定是有限的。我们使用map进行数据的记录,当检测到重复时,说明不是快乐数。
2024-01-09 22:57:32 577
原创 Go-gin-example 添加注释 第一部分 新建项目及api编写
Demo 的router.GET等路由规则可以不写在main包中吗?我们发现router.GET等路由规则,在 Demo 中被编写在了main包中,感觉很奇怪,我们去抽离这部分逻辑!import (//创建新的router而不是默认。//定义router的配置//将处理函数搬到这里})})return r修改main.go文件内容import ("fmt""net/http"├── conf├── models├── pkg│ ├── e│ └── util。
2024-01-07 21:26:02 1195
原创 golang leetcode349两个数组的交集 map 双指针+排序
对数组进行排序后,就可以通过双指针的方式从小到大开始比较两个数组。以下两种方法都是采取的这个思路,只是循环的方式不同,复杂度相同。由于golang中没有set,这里算是模拟的一种方式。当然这里也可以用数组来代替map。
2024-01-07 19:03:48 422
原创 Golang leetcode142 环形链表 暴力map 快慢指针法
的情况:刚进入节点时,慢指针此时在相交节点上,快指针在慢指针前面一个。由于快指针的移动速度为2,慢指针的移动速度为1, 二者相对速度为1。什么如果成环,快指针一定会再慢指针没有转完一圈之前追上满指针?我们可以通过map进行记录,没到新的节点查询是否经过原有节点。若有入环节点,则一定能检测到;若没有,则总会到达最后节点。得到二者一定相遇时,我们如何确定到底哪个节点是入环节点?所以当快指针跟在慢指针后面时有以下几种情况。假设环的长度为n,慢指针走完环的步数为n。入环节点,上两个节点的next相同。
2024-01-06 13:44:02 2244
原创 Golang leetcode160相交链表 map 双指针迭代
则由于两个链表没有公共节点,两个指针也不会同时到达两个链表的尾节点,因此两个指针都会遍历完两个链表,在指针。次之后,两个指针会同时到达两个链表相交的节点,该节点也是两个指针第一次同时指向的节点,此时返回相交的节点。前面陷入思维误区,相交节点之后两个链表是完全一致的,所以我们可以忽略长链表比短链表长的一部分,如果 a=b,则两个指针会同时到达两个链表相交的节点,此时返回相交的节点;,则两个指针会同时到达两个链表的尾节点,然后同时变成空值。,两个指针不会同时到达链表的尾节点,然后指针。
2024-01-04 22:44:35 1091
原创 Golang Leetcode19 删除链表的倒数第N个节点 递归 双指针法+迭代
由于本体是倒数第几个节点,非常适合递归 从终到始 的运行方式。
2024-01-03 17:31:00 532
原创 Golang leetcode206 翻转链表 迭代 递归 双指针
下面的几行代码,我明显是head,下一个就是head->next,由于要反转链表,我的下一个要变成我的上一个,因此head->next->next = head,我的上一个(递归)等到这层递归出去再解决。可以看到newHead在递归结束返回后是没有进行任何操作的,也就是返回的是最底层的那个,起到传递尾(新首)结点的作用。其实在初始时也曾考虑过,最后没有直面的勇气,抽自己两个大嘴巴子,必须醒悟,fuckmyself。链表的操作需要记住三个东西,上一个是谁,我是谁,下一个是谁。
2024-01-01 18:12:57 889
原创 Golang leetcode707 设计链表 (链表大成)
由于在go语言中都为值传递,(注意这里与值类型、引用类型的而区别),所以即使我们直接在方法中传入指针,但是我们在方法里是不能直接修改指针所改的地址,其在方法中只会复制一份副本进行操作,而不会影响到原变量。所以我们这里可以设置一个结构体,在mylinkedlist中在定义链表节点进行解决。这里放一个经典的愚蠢案例以作警戒,妄想通过副本直接影响原链表。题目要求我们通过实现几个方法来完成对链表的各个操作。
2024-01-01 11:05:03 612
原创 golang leetcode203移除链表元素
如果当前节点的值不等于 val,那么我们需要保留这个节点,并将其 next 指针指向递归调用的结果。但在递归中,我们没有直接的方式来访问父节点,因此我们通过返回下一个节点(head.next)来实现这一点。:递归的最终结果是新的链表头节点,它可能与原始链表的头节点不同,尤其是当原始头节点的值等于 val 时。:对于每个节点,调用递归函数处理它的下一个节点(即,调用自身传递 head.next 和 val)。如果是,我们需要删除这个节点,这意味着需要将其父节点(递归中的上一个节点)连接到它的下一个节点。
2023-12-28 18:36:11 805 1
原创 Golang leetcode977 有序数组的平方 双指针法
这里仍旧有瑕疵,比如我们这里在寻找最小正数时,可以将判断n是否等于L加入到判断条件中,而不使用break。后面的填入数字过程中也可以使用多个if else进行判断,不使用continue。已经想到双指针法,但是对于循环的边界条件仍然找不明白,对于特殊情况没有适应性,很容易出错。而且在更改的过程中喜欢钻牛角尖,不更改现有的惯性思维,后续需要更正这些缺点。
2023-12-20 16:02:19 506 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人