- 博客(33)
- 收藏
- 关注
原创 CAP原则
CAP原则是分布式系统设计中的一个重要理论,帮助开发者理解分布式系统在一致性、可用性和分区容错性之间的权衡关系。在实际设计中,需要根据业务需求和系统特性选择合适的策略,以达到最佳的系统性能和用户体验。
2025-03-07 21:30:02
409
原创 Redis 中 string 和 list 的原理说明
Redis有5种基础数据结构,对应的value分别为:string (字符串)、list (列表)、set (集合)、hash (哈希) 和 zset (有序集合)
2025-03-06 20:55:35
770
原创 Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
在Go中使用Viper将YAML配置绑定到结构体时,主要依赖 `mapstructure` 标签(而非 `json` 或 `yaml` 标签)实现字段名映射。4. **环境变量覆盖**:可通过 `viper.AutomaticEnv()` 允许环境变量覆盖配置,但需设置 `mapstructure` 兼容的键名。3. **嵌套匹配**:嵌套结构体必须通过 `mapstructure` 标签逐级指定父键。2. **标签优先级**:`mapstructure` 标签优先级高于默认的字段名转换。
2025-02-22 21:13:05
1086
原创 平板作为电脑拓展屏
pc和手机端同时下载软件,连接后可以进行远程控制或扩展屏幕。用usb线直接连接电脑和平板。手机端添加电脑的ip地址。打开usb对安卓的连接。
2025-02-18 16:05:21
409
原创 Template模板的基础使用
函数名功能描述示例and函数返回它的第一个空参数或者最后一个参数。即and x y等价于。所有参数都会执行or返回第一个非空参数或者最后一个参数。or x y等价于。所有参数都会执行not返回单个参数的布尔值的否定{{not .X}}len返回参数的整数类型长度index执行结果为第一个参数以剩下的参数为索引/键指向的值print等效于fmt.Sprintprintf等效于println等效于html返回参数文本表示的 HTML 逸码等价表示urlquery。
2025-02-16 19:28:28
535
原创 DeepSeek介绍,以及本地部署和API使用
ai智能领域的陈润生院士的观点是:人工智能的未来绝对不是一味的堆算力,芯片堆不出真正的智能,基础理论的突破才是关键。而deepseek则使用断崖式的算法优势与其持平,这一突破改变了人工智能领域的发展方向,对算力市场造成了极大的冲击。以OpenAI为首的老牌的大模型公司占据了市场主流,大数据参数动辄上亿,训练成本过高,这带来几个问题。传统的大模型依靠的是各种算力设备,通过大量的成本和数据来达到优秀卓越的性能。给以下动作排列合理的先后顺序:穿鞋,穿袜子,剪指甲,系鞋带。基于历史数据进行创造,生成全新的内容。
2025-02-09 22:10:12
929
原创 GMP底层
P是用来调度G的执行,所以每个P都有自己的一个G的队列,当G队列都执行完毕后,会从global队列中获取一批G放到自己的本地队列中,如果全局队列也没有待运行的G,则P会再从其他P中窃取一部分G放到自己的队列中。当 P 的局部队列里面的 G 运行完毕之后,会用全局队列获取 G,在获取的过程中,会加锁。P 和 M 的数量没有固定的搭配关系(默认M>P),当一个 M 阻塞了,P 会发生 hand off,与其他空闲的 M 结合,或者产生新的 M。schedt结构体用来保存调度器的状态信息和。
2025-01-25 20:28:17
1034
原创 go语言编译的初始化顺序
函数运行之前,Go会依次初始化每个被导入的包中的全局变量。按照包的导入顺序依次执行,自动调用,不能显示调用。每个包的全局变量在程序运行时都会被自动初始化。函数执行完毕后,程序会进入。函数,开始执行主程序。都会在全局变量之后和。
2025-01-18 21:54:50
249
原创 golang单元测试
默认情况下,每个基准测试至少运行1秒。如果在Benchmark函数返回时没有到1秒,则b.N的值会按1,2,5,10,20,50,…*,基准测试必须要执行b.N次,这样的测试才有对照性,b.N的值是系统根据实际情况去调整的,从而保证测试的稳定性。之前的处理不会放到执行时间里,也不会输出到报告中,所以可以在之前做一些不计划作为测试报告的操作。-benchmem**参数,来获得内存分配的统计数据)基准测试并不会默认执行,需要增加**-bench。基准测试以Benchmark为前缀,需要一个。
2025-01-11 20:14:50
888
原创 【深基18.例3】查找文献
小 K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个(也有可能没有)参考文献的链接指向别的博客文章。小 K 求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文献(如果他之前已经看过这篇参考文献的话就不用再看它了)。假设洛谷博客里面一共有nn≤105篇文章(编号为 1 到n)以及mm≤106条参考文献引用关系。目前小 K 已经打开了编号为 1 的一篇文章,请帮助小 K 设计一种方法,使小 K 可以不重复、不遗漏的看完所有他能看到的文章。
2025-01-05 17:30:55
826
原创 WebSocket编程
WebSocket简介:WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输需要安装第三方包:cmd中:go get -u -v github.com/gorilla/websocket聊天室示例:server.go文件代码package mainimpor
2024-12-08 15:14:32
684
原创 笔记选择(有道云和typora)
使用markdown时嫌弃了它的颜值,又回头使用有道云,结果发现在平台上发文章时,有道云笔记复制粘贴后格式出了不少问题再去看看markdown的复制粘贴效果,格式上没有问题了,但是图片路径还是会比较麻烦。
2024-11-20 15:10:05
268
原创 go并发知识点整理
A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中的多个线程之间可以并发执行。D.协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质上有点类似于用户级线程,这些用户级线程的调度也是自己实现的。import ("fmt"// idId int// 需要计算的随机数// 这里必须传对象实例。
2024-11-17 21:48:22
614
原创 深入理解 Python 的可变参数与关键字参数
可变参数允许我们在调用函数时传入不确定数量的参数,而不需要提前定义这些参数的具体个数。在Python中,有两种类型的可变参数:位置可变参数 (*args) 和关键字可变参数 (**kwargs关键字参数允许你将参数以「键值对」的形式传递给函数,这样可以使代码更加具有可读性。关键字参数有两种使用方式:预定义关键字参数和可变关键字参数 (**kwargsPython 中的可变参数和关键字参数极大地提升了函数的灵活性,允许我们处理不定数量的参数。通过*args,我们可以接收任意数量的位置参数;通过。
2024-11-03 17:00:35
781
原创 mod笔记
将已安装的模块更新到最新版本或指定的版本:go get -u。第三方依赖包的下载地址:$GOPATH/pkg/mod。下载第三方包,但是不依赖(不下载间接依赖)查看依赖的路径,即在哪里使用了这个依赖。下载第三方包,且依赖(下载间接依赖)清理当前模块生成的临时文件。依赖对齐(下载间接依赖)手动编辑go.mod文件。
2024-10-27 11:45:19
257
1
原创 golang使用git远程仓库下载工具包报错module declares its path as: xxx but was required as:xxx
看了网上好几个解决方法,依然报错。最后发现是项目忘记设置国内代理。设置->Go->Go模块。添加gopro,值为。然后再去下载就可以了。
2024-07-29 15:49:15
292
原创 通道的使用
通道中的数据是占用资源的,使用后及时关闭通道,可以保护数据安全,防止资源泄露;使用Go通道的一个基本原则:不要在接收方关闭通道,确保关闭通道的是唯一发送方。也可以使用``sync.Mutex`避免多次关闭同一通道。有缓冲通道赋值后,值会进入缓冲区,在缓冲区满后阻塞。发送和接收的交互行为是同步的,且无法单独存在。不要关闭(或者发送值到)已经被关闭了的通道。1、通道中的资源可能会泄露。情况1:单生产者,单消费者。情况2:单生产者,多消费者。情况3:多生产者,单消费者。优雅的关闭方案:使用。
2024-07-11 14:08:13
356
原创 golang slice知识点
diySlice2 在diySlice基础上添加两个元素,1,2,此时len为3,超出了cap的值2,所以扩容,创建新数组,diySlice2 指向新数组,len为3,cap为2 * 2 = 4, 元素8,1,2。golang的slice底层依靠数组实现,它包括三个部分:指向数组的指针、切片的长度和切片的容量,本质就是一个指向固定大小数组的指针,当大小超过数组时就创建新的,更大的数组,然后指向新数组。diySlice3 在diySlice 的基础上添加了8,len为2,内容为1,8。
2024-06-02 22:30:59
285
1
原创 golang slice的扩容大小
golang的slice扩容已经有很多文章讲解,其中主流的说法是:slice底层由数组实现,当len大于cap时,底层数组翻倍,若翻倍后超过了1024,则扩容为原来的1.25倍。但是我实际操作中,扩容并不按照这个规律,而是按照go环境文件里sizeclass.go中设定好的阈值进行增长。扩容后的字节大小,放入其中butes/obj那一列,向上取整,就是得到的新切片slice。
2024-06-02 22:01:16
260
原创 map补充
(4)hash冲突:由于输入与(key)无穷大,输出域(hash值)有限,因此必然存在不同key映射到相同hash值的情况,称之为hash冲突。(2)hash的离散型:重要两个key不相同,不论其相似度的高低,产生的hash的值都会在整个输出域内均匀的离散化。(3)采用渐进迁移,每当桶被实际操作到时都迁移一部分的元素到新桶中,避免因为一次性的大量数据迁移引发性能抖动。(3)hash的单向性:企图通过hash值反向映射回key是无迹可寻的。(1)hash的可重入性:相同的key,必然产生相同的hash值。
2024-05-26 19:48:32
256
原创 Go语言中Map的自动扩容机制
哈希表是用空间换时间的结构,但是在扩容是会非常耗时,因此在对时间性能有要求的情况下,应该预估map设定的大小,尽量避免扩容操作。的扩容操作,扩容操作会重新分配更大的哈希表,将原有的键值对重新哈希到新的哈希表中。在触发扩容后,Go 会创建一个新的哈希表,其大小默认是当前哈希表大小的两倍。中的元素数量达到当前哈希表大小的 6.5 倍时,Go 会触发扩容操作。遍历原有的哈希表,将每个键值对重新计算哈希值,并插入到新的哈希表中。扩容完成后,释放原有的哈希表内存空间,将新的哈希表作为。扩容完成后,可以继续往。
2024-05-11 12:41:18
493
1
原创 golang语言Map入门笔记
* 使用 make 函数 */ map_variable := make(map[KeyType]ValueType, initialCapacity)其中 KeyType 是键的类型,ValueType 是值的类型,initialCapacity 是可选的参数,用于指定 Map 的初始容量。Map 的容量是指 Map 中可以保存的键值对的数量,当 Map 中的键值对数量达到容量时,Map 会自动扩容。如果不指定 initialCapacity,Go 语言会根据实际情况选择一个合适的值。
2024-05-10 17:33:58
200
原创 优化VScode插件及设置(持续更新)
代码自动格式化:按下shift+alt+f快捷键,代码会自动规整为默认的标准格式,可以在设置中修改格式,比如找到Tab Size,修改默认首行缩进的制表符长度;调整字体大小:按住ctrl键,并按下+/-号可以缩放界面(是整个界面,不单是字体),在设置Font Size中可以自定义代码字体默认大小,在设置中找到Mouse Wheel Zoom勾选,可以使用ctrl+滚轮临时调整代码字体大小。标签优化:下载Auto Rename Tag插件,当修改一对标签中的开始标签时,结束标签自动修改;
2024-04-12 22:49:37
536
vs2022的c++代码无法运行
2024-08-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人