- 博客(125)
- 资源 (15)
- 收藏
- 关注
原创 go如何排查某个依赖是哪里引入的
通过这些方法,可以高效定位依赖的引入路径,解决版本冲突或冗余依赖问题。的依赖是间接引入的。若输出显示是某个直接依赖引入,例如。生成所有模块间的依赖关系,结合。
2025-02-27 10:45:20
491
原创 epoll模型
模型文件描述符数量限制数据复制开销事件遍历效率跨平台性select有(通常为 1024)每次调用都需复制低(需遍历所有描述符)好poll无每次调用都需复制低(需遍历所有描述符)较好epoll无少量复制(只需添加或删除描述符时)高(直接返回就绪描述符)
2025-02-11 20:46:45
150
原创 linux select模型简介
在 Linux 系统中,select是一种 I/O 多路复用技术,它允许程序同时监视多个文件描述符(包括套接字、管道、终端等)的读写状态变化,从而提高程序的并发处理能力。以下是关于 Linuxselect。
2025-02-11 20:40:49
441
原创 有了测试环境,为什么还需要预发环境
预发环境是上线前的最后一道防线,通过无限逼近生产环境的真实性,解决测试环境因“简化”或“隔离”导致的盲区。● 预发环境:无限逼近生产环境,包括硬件配置、网络拓扑、负载均衡、缓存策略等,能暴露测试环境无法发现的性能瓶颈或兼容性问题。● 预发环境:连接真实数据库(镜像)和第三方服务(如支付、短信的生产级沙箱),验证数据迁移脚本或接口兼容性。例子:测试环境使用单机部署,而生产环境是分布式集群,预发环境可提前发现分布式锁或服务发现机制的缺陷。● 预发环境:演练高可用方案和回滚机制,确保故障恢复预案的有效性。
2025-02-10 10:16:56
390
原创 浅析Dubbo 原理:架构、通信与调用流程
服务提供者将自己的服务信息注册到注册中心,服务消费者从注册中心订阅所需的服务信息。服务消费者在需要调用服务时,会根据本地缓存的服务提供者地址信息,选择一个合适的服务提供者进行调用。服务提供者接收到请求后,会将请求信息进行反序列化,然后调用相应的服务方法,并将结果进行序列化后返回给服务消费者。服务消费者是指调用服务的一方,它从注册中心获取服务提供者的地址信息,然后根据这些信息发起远程调用。服务提供者是指暴露服务的一方,它将自己的服务接口和实现注册到注册中心,等待消费者调用。
2025-01-23 18:06:27
1306
翻译 检索增强生成(RAG):从理论到 LangChain 实践 [译]
检索增强生成(RAG)是一个概念,它旨在为大语言模型(LLM)提供额外的、来自外部知识源的信息。这样,LLM 在生成更精确、更贴合上下文的答案的同时,也能有效减少产生误导性信息的可能。本文详细介绍了 RAG,这是一种在 2020 年发表的论文面向知识密集型 NLP 任务的检索增强生成[1] 中提出的新概念。在讲解了其背后的理论基础,包括动机和解决方案之后,本文展示了如何用 Python 实现 RAG。实现过程中,结合了OpenAI的大语言模型 (LLM)、Weaviate的向量数据库以及OpenAI。
2024-12-17 16:27:17
96
原创 gRPC协议简介
好了,到这里请求映射的问题也分析完了。让我们回到最开始的问题。如果 gRPC 好,它好在哪里?为了这些好,它又牺牲了哪些方面?我们的业务面临什么问题?gRPC 的优点能否为我所用?gRPC 的缺点会不会给我们带来不便?这些问题在这篇文章中有过全面的分析,有兴趣的同学可以移步阅读。
2024-09-26 19:43:30
1282
原创 java try with机制
文章开头即提到,不仅是 Java 内置的资源(诸如与等)可以使用特性,只要是实现了接口的资源,都可以使用该特性。下面就自定义一个资源的实现,然后对该自定义资源使用一下特性。@Test可以看到,实现接口,只需要实现close方法即可,自定义资源与内置资源在特性的使用上并无差别。综上,本文首先介绍了在特性引入前,资源的关闭是如何做的;然后介绍了特性如何使用,以及其带来的好处;最后介绍了 Java 9 对特性的增强以及自定义资源的实现。
2024-09-06 18:21:56
1041
原创 解决哈希冲突的常用方法分析
线行探查法是开放定址法中最简单的冲突处理方法,它从发生冲突的单元起,依次判断下一个单元是否为空,当达到最后一个单元时,再从表首依次判断。从发生冲突的那个单元起,按照一定的次序,从哈希表中找到一个空闲的单元。链接地址法的思路是将哈希值相同的元素构成一个同义词的单链表,并将单链表的头指针存放在哈希表的第i个单元中,查找、插入和删除主要在同义词链表中进行。:数据经过哈希算法之后得到的集合。:由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。
2024-09-06 18:18:44
517
原创 解决哈希冲突的常用方法分析
线行探查法是开放定址法中最简单的冲突处理方法,它从发生冲突的单元起,依次判断下一个单元是否为空,当达到最后一个单元时,再从表首依次判断。从发生冲突的那个单元起,按照一定的次序,从哈希表中找到一个空闲的单元。链接地址法的思路是将哈希值相同的元素构成一个同义词的单链表,并将单链表的头指针存放在哈希表的第i个单元中,查找、插入和删除主要在同义词链表中进行。:数据经过哈希算法之后得到的集合。:由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。
2024-09-03 18:25:27
1011
原创 bigcache源码解析
Bigcache 是用 Golang 实现的本地内存缓存的开源库,主打的就是目前有许多开源的 cache 库,大部分都是基于 map 实现的,例如 go-cache,ttl-cache 等。bigcache 明确指出,当数据量巨大时,直接基于 map 实现的 cache 库将出现严重的性能问题,这也是他们设计了一个全新的 cache 库的原因。本文将通过分析 bigcache v3.1.0 的源码,揭秘 bigcache 如何解决现有 map 库的性能缺陷,以极致的性能优化,实现超高性能的缓存库。
2024-09-03 18:13:04
635
原创 Guava Cache实现原理及最佳实践
expireAfterWrite 是允许一个线程进去load方法,其他线程阻塞等待。refreshAfterWrite 是允许一个线程进去load方法,其他线程返回旧的值。在上一点基础上做成异步,即回源线程不是请求线程。异步刷新是用线程异步加载数据,期间所有请求返回旧的缓存值。Guava Cache是一个很优秀的本地缓存工具,缓存的作用不多说,一个简单易用,功能强大的工具会使你在开发中事倍功半。
2024-09-03 18:12:08
1183
原创 Guava Cache实现原理及最佳实践
expireAfterWrite 是允许一个线程进去load方法,其他线程阻塞等待。refreshAfterWrite 是允许一个线程进去load方法,其他线程返回旧的值。在上一点基础上做成异步,即回源线程不是请求线程。异步刷新是用线程异步加载数据,期间所有请求返回旧的缓存值。Guava Cache是一个很优秀的本地缓存工具,缓存的作用不多说,一个简单易用,功能强大的工具会使你在开发中事倍功半。
2024-08-30 18:27:21
1438
原创 localhost和127.0.0.1的区别
localhost和127.0.0.1的区别是什么?今天在网上逛的时候看到一个问题,没想到大家讨论的很热烈,就是标题中这个:localhost和127.0.0.1的区别是什么?前端同学本地调试的时候,应该没少和localhost打交道吧,只需要执行 npm run 就能在浏览器中打开你的页面窗口,地址栏显示的就是这个可能大家只是用,也没有去想过这个问题。联想到我之前合作过的一些开发同学对它们俩的区别也没什么概念,所以我觉得有必要普及下。
2024-08-30 15:18:55
885
原创 linux terminal文件查找
以下所有命令仅仅只做常见用法的介绍,不做详细的参数介绍如需详细介绍,可到查阅以下的显示结果均为使用oh-my-zsh的显示结果,如果是使用bash可能略有差异:zsh 默认情况下不支持通配符匹配,需要在~/.zshrc中添加即可。
2024-08-28 11:27:50
1229
1
原创 pprof使用
pprof 是 golang 自带的性能分析工具,可以查看web应用的运行状态,分析程序CPU,内存,goroutine等使用情况。golang 针对不同使用场景,提供了以下两种方式开启pprof性能分析net/http/pprof是对runtime/pprof的封装,提供了。
2024-08-13 17:46:54
990
原创 golang AST语法树解析
它包含文件中所有变量、函数、类型声明。如果文件中没有声明,则 decls 值为 nil。它包含文件中所有注释的列表。它代表包级作用域,包含所有在包内声明的变量和函数。通过上述的四个库,我们就可以实现golang代码的语法树分析。如果文件有文档,则文档会被存储在这个结构体中,否则为 nil。todo:目前没找到什么样的源代码解析成AST树后有Doc的。,表示它是一个变量值,可以看到内容为"main":词法解析,将源代码分割成一个个token。:语法分析,读取token流生成ast。常规的声明,包含以下部分。
2024-07-15 21:15:47
1068
2
原创 go-redis源码解析:连接池原理
redis也是通过hook执行命令,initHooks时,会将redis的hook放在第一个通过hook调用到process方法,process方法内部再调用_process。
2024-07-09 21:08:28
1468
原创 go-redis源码解析:如何实现sentinel高可用
go-redis里,sentinel只用来获取master和从节点的ip地址,在获取master和replica节点ip时,如果sentinel不可用,那么会换其他的sentinel重试,并将可用的sentinel换到第一个。
2024-07-04 10:24:26
664
原创 Skip list
Skip list是一个用于有序元素序列快速搜索的数据结构,由美国计算机科学家William Pugh发明于1989年。它的效率和红黑树以及 AVL 树不相上下,但实现起来比较容易。作者William Pugh是这样介绍Skip list的:Skip lists are a probabilistic data structure that seem likely to supplant balanced trees as the implementation method of choice for m
2024-05-31 11:33:08
800
1
原创 Go module包及依赖管理
版本号格式为,如v1.2.3。当有不兼容的改变时,需要增加major版本号,如v2.1.0。Go module规定,如果major版本号大于1,则major版本号需要显式地标记在module名字中,如。这样做的好处是Go module 会把和视做两个module,他们甚至可以被同时引用。
2024-05-31 11:10:09
454
原创 golang异常控制
如果 panic 和 recover 发生在同一个协程,那么 recover 是可以捕获的,如果 panic 和 recover 发生在不同的协程,那么 recover 是不可以捕获的也就是哪个协程有panic,哪个协程里必须要有recover,否则会把整个程序弄崩溃。
2024-05-31 11:05:46
389
原创 Golang Context
上下文Go 语言中用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与 Goroutine 有比较密切的关系,是 Go 语言中独特的设计,在其他编程语言中我们很少见到类似的概念。
2024-05-30 17:50:50
970
原创 Golang dlv远程debug
如果不想remote程序阻塞等debug,而是直接执行,那么可以在启动远程程序的时候添加。如果不想remote程序阻塞等debug,而是直接执行,那么可以在启动远程程序的时候添加。执行后,会一直停在这个页面,等待goland连接后再往下走。zip文件,下载后( 如果没权限,记得 执行。如果不到500M,dlv会因为内存不足启动不起来。建议使用方式2,可以启动后debug,更方便。服务启动起来后,远程debug就会生效了。服务启动起来后,远程debug就会生效了。执行后会一直停留在这里,等待客户端连接。
2024-05-30 15:50:18
1053
原创 redis-cli help使用
help @sorted_set,help @hash 等等,查看所有的分组可以通过 help 提示(即help+空格后,按tab键)help 空格之后一直按 tab, 可按顺序查看到所有可能的组和命令。也可输入需要查询的 @组或命令的前缀再按 tab 补全。help 具体命令可以查看命令的用法描述,命令从那个版本开始,命令属于哪个组等信息。help 之后按 tab 按键可提示参数。在命令行下 tab 按键相信是用的最多的一个按键。查看通用组的命令包括 del,dump…还可以查看其他组的命令如。
2024-05-29 11:07:14
898
原创 记一次dubbo provider获取不到dubbo.tag问题排查
项目里通过dubbo.tag=gray传递灰度标,但是上游consumer已经在attachment里面设置dubbo.gray了,下游却拿不到。
2024-03-29 15:52:34
508
原创 如何安装不同版本的go
可以通过在goland中preference->go->goroot中下载,选择要下载的目录,就不会覆盖了。如果直接从官网下载不同版本的go并安装,会默认安装到/usr/local/go上,覆盖之前安装的版本。
2024-03-05 17:30:03
717
原创 golangci-lint如何关闭typecheck
typecheck是go源码的校验,无法通过.golangci.yml配置关闭。可以直接在golangci-lint源码层面关闭typecheck。
2024-02-20 10:00:35
1100
1
原创 测试框架goconvey使用
结果图[外链图片转存中…(img-fuv17gA2-1686296533775)][外链图片转存中…(img-vDJdU9QE-1686296533776)]
2023-06-09 15:42:26
175
原创 mock工具GoMock使用
goMock支持对特定输入打桩和对任意输入打桩(gomock.any()),可根据具体情况使用;是官方提供的 mock 框架,同时还提供了 mockgen 工具用来辅助生成测试代码。实际项目中,可以用gomock来mock dao层和rpc层代码,隔离外部依赖。有一个DB接口,使用mockgen产生一个mock对象。在测试的使用mock对象。下面是自动生成的代码。
2023-06-09 15:41:28
855
TableBarViewContrller+NavigationViewController ios经典导航模式
2014-08-06
Android httpUrlConnection Post方式访问网络简单demo
2013-11-11
TestNotification
2013-09-30
android获取home键 在2.X到4.X上亲测能用
2013-09-29
打车软件demo
2013-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人