自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 资源 (15)
  • 收藏
  • 关注

原创 go如何排查某个依赖是哪里引入的

通过这些方法,可以高效定位依赖的引入路径,解决版本冲突或冗余依赖问题。的依赖是间接引入的。若输出显示是某个直接依赖引入,例如。生成所有模块间的依赖关系,结合。

2025-02-27 10:45:20 491

原创 TCP拥塞控制机制

TCP拥塞控制机制是TCP协议中至关重要的一部分,用于防止网络出现拥塞,保证网络的高效、稳定运行。

2025-02-13 15:18:45 961

原创 epoll模型

模型文件描述符数量限制数据复制开销事件遍历效率跨平台性select有(通常为 1024)每次调用都需复制低(需遍历所有描述符)好poll无每次调用都需复制低(需遍历所有描述符)较好epoll无少量复制(只需添加或删除描述符时)高(直接返回就绪描述符)

2025-02-11 20:46:45 150

原创 poll 模型

【代码】poll 模型。

2025-02-11 20:45:13 208

原创 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

原创 golangci-lint源码解析-如何从源码查看有哪些命令行参数及如何使用

golangci-lint

2025-01-08 11:04:47 394

翻译 检索增强生成(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

原创 grpcurl使用

是一个命令行工具,使用它可以在命令行中访问gRPC服务,就像使用curl访问http服务一样。

2024-09-26 18:00:15 607

原创 如何使用go生成可执行文件

在 Go 中生成可执行文件非常简单。你可以使用go build或者go install命令。

2024-09-11 10:01:42 796

原创 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

原创 golang本地缓存fastcache高性能实现原理

golang 本地缓存

2024-08-27 18:13:15 642

原创 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

原创 redis运维:sentinel模式如何查看所有从节点

【代码】redis运维:sentinel模式如何查看所有从节点。

2024-07-08 17:33:42 628

原创 go-redis源码解析:如何实现sentinel高可用

go-redis里,sentinel只用来获取master和从节点的ip地址,在获取master和replica节点ip时,如果sentinel不可用,那么会换其他的sentinel重试,并将可用的sentinel换到第一个。

2024-07-04 10:24:26 664

原创 go-redis源码解析:cluster模式如何选择节点

go-redis

2024-07-03 15:23:05 516

原创 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命令大全

【代码】redis命令大全。

2024-05-29 14:41:34 289

原创 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

原创 测试框架testify使用

● 构建更完善的测试。

2023-06-09 15:43:26 369

原创 测试框架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经典导航模式

TableBarViewContrller+NavigationViewController ios经典导航模式,以及tableview的简单demo

2014-08-06

android velocityTracker滑动速度检测器简单使用

复写onTouchEvent,里面添加四步骤即可

2014-03-05

adnroid瀑布流Demo

adnroid瀑布流Demo

2014-01-11

Android activity劫持

待续 Android activity劫持

2013-11-29

Android httpUrlConnection Post方式访问网络简单demo

web端就是一个简单的php页面,已经放在的我的sae albet.sinaapp.com上,直接使用demo中的url就行,当然,也可以把testPost.PHP放在自己的网站,把url改了就行

2013-11-11

android自定义组件简单Demo

android自定义组件简单Demo

2013-11-04

自定义view控件 canvas绘制自己的组件

自定义view控件 canvas绘制自己的组件小demo

2013-10-27

TestNotification

nf.icon = R.drawable.img1; nf.defaults = Notification.DEFAULT_SOUND;/DEFAULT_LIGHTS/DEFAULT_VIBRATE/DEFAULT_ALL nf.tickerText = "button1 nf.tickerText"; nf.setLatestEventInfo(getApplicationContext(), "hello!", "heihei", pIntent); nfmanager.notify(0, nf);

2013-09-30

android获取home键 在2.X到4.X上亲测能用

android获取home键,在最新的版本上都能用,由于home键在新版本上在framwork层即被拦截,导致应用获取不到,网上说的很多都不能用,后面采用广播方法,成功获取到home按钮,分享给大家

2013-09-29

java观察者模式demo----未使用java工具类

观察者设计模式,java语言实现,完全自己代码实现,未使用observable和observer

2013-09-28

java观察者模式Demo

设计模式----观察者模式demo,使用java自带的工具类,实现,后面会上传一个完全自己代码实现的demo

2013-09-28

android fragment超简单使用demo

android fragment超简单使用demo,只关于fragment,没有其他冗余代码

2013-09-23

android Looper详解

android looper handler 子线程 主线程详解

2013-09-03

android socket使用

android socket使用,包括客户端和服务器端,很简单,只写了socket通信部分,希望对需要的人有所帮助

2013-09-02

打车软件demo

去年国家大学生创新性比赛中申请的项目,做了一年了,最后发现实在也没做出什么东西,就剩下这些代码,希望能像个demo,给大家个参考吧,东西做的很简单,也没多少量,看看就好看看就好

2013-09-01

空空如也

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

TA关注的人

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