- 博客(186)
- 资源 (42)
- 收藏
- 关注
原创 Spring属性自动配置原理与自定义转换
为什么呢?因为Spring默认带有的转换器,不能把Path=/api/normal/**这样的String转换为NameValue类型。config:@Data怎么办呢?我们可以自定义类型转换器。@Component@Override@ConfigurationPropertiesBinding是说明这个转换器就是用于属性绑定的转换器。
2025-12-30 16:35:28
961
原创 SpringBoot自动配置原理
于是:SpringBoot来了,它可以自动完成配置,创建并注入需要的Bean,不需要我们自己去创建了,若有的创建Bean的工作都由提供服务的服务者去创建,他们自己实现的,当然更清楚怎么用,怎么创建系列Bean。它会去扫描classpath下的META-INF/services目录下的文件,文件名是抽象层的全限定名,例如java.sql.Driver,文件内容是服务提供的具体实现类。当然,技术在不断发展,很多时候,我们再设计的时候并不能考虑到那么多,例如响应式编程,那也是发展了很多年,才有。
2025-12-29 15:52:05
781
原创 Apache Bench(ab)常用命令与结果解读
Jmeter脚本原理与实例但很多时候,我们自己做压测的时候,不需要做工程化的东西,也不会做得那么复杂,我们自己基本测试的也是HTTP协议。例如,我们做熔断限流功能、网关服务功能压测的场景。有没有什么简单一点的方式,不要像Jmeter那样重量级的处理方式呢?答案是有的:我们可以使用Apache Bench简称ab来做http的性能测试。
2025-12-27 12:24:39
547
原创 word格式原理与编号解析
这里只是一个简化版,没有处理多个ilvl、重编号、全部的编号类型等情况,不过基本够用了,如果实际情况有出入,相信有前面的知识,也能知道怎么去处理。我们先来看一个实际问题,我们有一批pdf,是通过Word转换来,因为是合同性质的资料,我们必须确保它一个字都不能变。肯定不是,其实非常复杂,有些虽然它自己没有编号,但是它的style可能会有对应的编号。以后,我们使用poi的时候,就可以对着xml文件去看有没有对应api就可以了。这其中一个很重要的问题就是编号,Word编号是单独处理的,不能简单处理。
2025-12-27 08:53:14
605
原创 Gradle核心概念与快速上手
因为gradle的升级非常快,所以不同的版本差异可能会很大,各种项目的版本都需要兼容,所以很难不像maven,同一个项目(pom.xml)不同的人使用不同版本的maven基本不会有太大问题,如果遇到问题,基本往高版本升级基本不会有太大问题,比较maven现在major版本也才3。但是gradle的major版本已经到9了,major版本不需要做向下兼容,所以升级major版本的时候一定要小心。
2025-12-26 20:13:17
909
原创 理解Gradle各种仓库
对于一个构建工具,仓库配置真的太重要了,Gradle非常灵活,可以处理远程仓库、本地仓库、可以读取本地目录、本地文件,甚至可以读取Maven仓库和ivy仓库(Groovy的Grapes中的Grab就使用的是ivy的仓库模式)。真是因为Gradle的灵活,导致一个仓库问题也比较复杂,很多时候我们只是能用就没有关心,但是遇到问题可能就只能干瞪眼了。本文就介绍一下Gradle的仓库体系。
2025-12-22 08:13:19
611
原创 理解软件版本标识含义与版本号语义
了解软件的版本标识含义、版本号语义,才能帮我们更好的选择软件版本,处理依赖等。例如,软件包gradle-9.2.0-rc-3-bin.zip中的rc代表什么意思?例如,项目中有下面的依赖,我们怎么处理呢?从哪里开始着手分析呢?我们项目->A->Z@1.4.2我们项目->B->Z@1.7.8我们项目->C->Z@2.1.0我们项目->D->E->Z@1.9.3通常Maven、Gradle这类构建工具会帮我们自动处理依赖问题。Maven会采用最短路径原则,Gradle会采用最高版本原则。
2025-12-21 11:03:09
646
原创 Jmeter脚本原理与实例
Jmeter是一个非常强大的测试工具,功能非常全,也非常灵活,灵活的地方在于几乎所有的组件都可以通过脚本自定义。本文就主要介绍一下Jmeter的脚本语言的原理,方便大家在使用Jmeter的时候,可以更好的理解和编写脚本。Jmeter支持很多语言,但是官方推荐的还是Groovy,所有我们会以Groovy为例。
2025-12-20 21:02:37
738
原创 快速上手Groovy
本来不打算单独写Groovy基本内容的,但是写Jmeter脚本的内容补充说明Groovy的东西,发现东西还比较多,就单独拿出来讲讲。对于列表和数组的操作,你能想到的基本都能直接用,Groovy基本都实现了,都在DefaultGroovyMethods类中。/regex/是一个很棒的设计,可以避免转义的问题,转义问题很常见,但是有一些会比较隐蔽。Groovy的Map字面量比较奇怪,看起来是数组,但是是列表,使用的是。我们可以看到,Java中的正则转义非常麻烦,一个\本身,需要4个\。
2025-12-20 08:22:12
656
原创 接口参数签名核心问题
服务器接收到请求,加入appSecret=123456参数计算签名,结果是:e74e6b56258b4faf6dfab41d807c1122,但中间人的签名是:a9ae57f1f46dc3f867b7048dde399fbb,显然不匹配,说明被中间人篡改,拒绝请求。不然,中间人也不傻,别人修改了参数,用新的参数签名a9ae57f1f46dc3f867b7048dde399fbb把旧的签名替换了,再发送给服务器,服务器就认为是合法的请求了。这样,客户端和服务端都不用担心参数顺序了,参数增加和减少也不会影响。
2025-12-19 14:47:47
716
原创 深入理解Groovy
本文中主要介绍Groovy的基本原理,主要是闭包。帮助理解Groovy的体系,不会有太多基础细节的。如果你了解Java想要学习一门脚本语言,那么Groovy绝对是一个很不错的选择。如果你只想了解一下Groovy,能编写Jemter脚本、更深刻的理解Gradle的配置文件等,那么本文绝对也有所帮助。
2025-12-18 14:10:59
958
原创 Nginx之location配置
本文介绍了Nginx location配置的匹配规则与优先级机制。主要内容包括: 匹配规则类型: 精确匹配(=)、前缀匹配(^~)、正则匹配(~/~*)、普通匹配等 不同符号表示不同匹配方式,如区分大小写、取反等 匹配优先级原则: 精确匹配 > 前缀匹配 > 正则匹配 > 普通前缀匹配 > 通用匹配 优先级规则优先于最长匹配规则 实际应用示例: 展示了前缀匹配、后缀匹配等配置方式 介绍了@符号用于定义命名location,可用于错误页面定向等场景 通过示例说明了当多个location
2025-12-16 14:34:18
656
原创 Python错误检查与格式化神器Ruff
之前一直习惯用PyCharm写Python,而不习VSCode的一个重要原因就是类型检查和格式化。VSCode对于Python这么常用的语言既然没有提供一个默认的格式化功能。其他插件用起来也不是特别习惯,直到最近发现了一个Python错误检查和格式化一体的神器Ruff。官方文档看着是不是比较眼熟,没错也是m大佬的项目,就是写uv的那个大佬。
2025-08-24 12:02:19
1068
原创 MCP中消息协议与传输层协议细节探索
我猜是为了避免服务端挂大量HTTP连接,因为客户端的请求的响应资源可能需要传输很多数据,要等很久,使用主HTTP传输数据就只需要保持一个HTTP层的连接挂着就可以。我们知道一个HTTP连接只能发送一次数据,客户端发送一次数据,服务端响应一次数据,服务端响应可以慢慢响应,只要不关闭流就可以一直发数据。然后服务端,就可以告诉客户端,我有哪些tool可以调用,名字是啥、参数是啥、参数类型是啥,它是干啥的…sse是基于HTTP的协议,它需要一个HTTP层的主连接,一直保持,用来接收MCP服务端的结果。
2025-08-24 10:23:44
457
原创 MCP原理与开发及与大模型交互流程
模型上下文协议(MCP,Model Context Protocol)顾名思义它是一个协议,做开发的朋友看到Protocol是不是DNA动了。TCP/IP协议、HTTP协议、UDP协议、RESP协议各种各样的协议,本质上就是定义了应用之间的交互格式和行为。MCP协议也一样,定义了就是定义了MCP Server与MCP Host(MCP Client)之间的交互标准。
2025-08-17 16:54:56
1148
原创 Python虚拟环境与包管理工具(uv、Conda)
之前一直是Python的轻度用户,主要使用Jupyter Notebook,所以安装包基本使用pip来安装。偶尔一点小项目使用PyCharm的interpreter也没有太关心包的依赖问题。但是最近做AI项目,有一些复杂的依赖,总感觉有些模糊,于是重新梳理了Python虚拟环境、包管理与包管理工具。现在分享给大家,希望能够帮助到你。
2025-08-16 19:19:24
1735
1
原创 磁盘满造成业务异常问题排查
果然,挂载日志目录/applog的分区/dev/mapper/appvg-applog只有5G已用100%了。最近遇到一个因为磁盘满导致的问题,分享一下,希望能够帮助到以后遇到同样问题的朋友。想想之前都好好的,最近又没有更新,为什么突然不能使用了呢?但是没有提示权限问题,一般也不会有人没事去改目录文件权限。早上突然收到业务老师反馈说:上传文件不能正常上传了。第一反应是是不是用人动了目录权限,导致日志不能写了。所以,猜测是日志目录磁盘占满了。删除之后,果然系统马上就正常了。图片这个是处理之后的示意图。
2025-01-10 13:32:26
685
原创 PostgreSQL索引与查询计划
我们创建索引是为了优化查询,那我们如何衡量我们创建的效果如何呢?因为我们查询的id通过索引就能查到,不用再回表了。我们可以通过explain关键字来查看查询计划。我们只需要做一点点改动,就能让查询变成索引扫描。部分测试数据可以参考后面的附录。把*改成id就可以。
2025-01-10 09:04:52
890
原创 Python包模块与模块导入查找顺序
无论是为了看懂别人的代码,还是为了更好的组织我们的个人的工程代码,了解一下Python的模块和包都非常有必要。另外,知道搜索模块的顺序,也能帮助我们更好的理解一些常见的错误,方便我们快速定位问题。
2024-12-13 10:21:52
1258
原创 Python中的特殊方法(魔术方法)
在数学中,我们的加法运算并不一定是我们通常的算术加法(+),例如群的加法、矩阵的加法,又比如说大整数加法。在Java中,就只能定义类调用对应的方法来实现。例如:xx.add(yy)在Python中我们就可以实现__add__方法来实现自定义的加法操作,这样我们可以直接使用xxx+yyy来实现我们自己对+的定义。类似的Python中还提供了大量类似的这一类方法。
2024-12-10 09:04:54
958
原创 PostgreSQL最常用数据类型-重点说明自增主键处理
- 查看第1个最后1个enum_first('超大杯'::cup_enum),enum_last('大杯'::cup_enum);-- 查看枚举值enum_range('大杯'::cup_enum,'超大杯'::cup_enum) as r3;
2024-11-29 09:13:43
2262
原创 git rebase-优雅合并与修改提交
在Git核心概念图例与最常用内容操作(reset、diff、restore、stash、reflog、cherry-pick)中我们已经介绍了git的最常用实用的命令。在上面说的那篇文章中,我们只是简单提了一下rebase。是因为rebase比较复杂,并且用的相对较少,因为我们通常更喜欢用merge。但是rebase绝对是有强迫症朋友的福音,尽管rebase非常危险,但是它非常优雅。能让我们的提交历史看起来简洁清晰。这一篇我们就来简单感受一下rebase命令的魅力吧。
2024-11-28 09:01:27
1663
原创 Java国际化时间-理解时区、ZonedDateTime、OffsetDateTime
我国现在没有实行夏令时和冬令时,但是欧洲北美很多还是会实行夏令时和冬令时,亚洲像印度、巴基斯坦也实行夏令时和冬令时。例如,美国西5区,中国东8区,中国时间-13小时就是美国时间了,这对于冬令时没有问题,对于夏令时有问题。再说,美国不像中国统一用1个时区,不管你是在上海、北京、香港、台北用的都是东8区。每个地区可能夏令时和冬令时的规定也不太一样。所以,做国际化的时候一定要注意。所以在处理有夏令时和冬令时的地区的时候,不能简单的用offset来计算。美国用多个时区,例如纽约西5区,芝加哥中部时间用的是西6区。
2024-11-27 09:07:40
1447
原创 PostgreSQL常用字符串函数与示例说明
regexp_replace(string, pattern, replacement [, flags ]): 使用正则表达式替换字符串中的子字符串。PostgreSQL除了like,还支持正则匹配,这个就慎用了,可以作为的附加条件,而不要作为过滤的主要条件,特别是大表。start从1开始,如果小于1,自动修正为1,length如果大于最大长度,自动修正为最大长度。coalesce主要用来处理空,它返回第1个不为空的值,可以接受整型或者字符串,但是不能混有。除了拆分为数组,还可以拆分为table。
2024-11-20 09:08:22
2031
原创 PostgreSQL常用时间函数与时间计算提取示例说明
主要用于计算一些特殊时间,函数说明截断成指定的精度,第1个参数指定精度select date_trunc('year',now()) as 当年第1天,date_trunc('year',now() + interval '1 year') - interval '1 day' as 当年最后1天,date_trunc('month',now()) as 当月第1天,
2024-11-18 09:23:16
3336
原创 PostgreSQL存储过程-pgAdmin
declare是用来声明变量,必须先声明才能使用。do $$DECLAREname text:='娘子';BEGINraise notice '啊哈,%',name;END$$可以使用table_name%ROWTYPE来定义和表相同结构的行可以使用table_name.column_name%TYPE来定义和指定表指定列有相同数据类型,这样表的数据类型变了,存储过程可以不用变可以通过DEFAULT关键字设置默认值可以使用CONSTANT关键字来定义常量,不允许修改。
2024-11-11 09:17:51
2078
原创 Linux sed命令详解-结构(清楚结构便于理解记忆)-选项-模式空间与暂存区(多示例、多图)
指定的命令模式不同,相当于都是独立的指令,如果我们要对同一个模式匹配,做多个动作,怎么办呢?上面这个命令也非常简单,但是它几乎包含了sed的全部结构,我们在它的基础上稍微变一下,还能一眼看穿吗?查看我们已经有grep了,sed主要用来预处理文件,所以通常是find的最佳搭档。sed命令的$表示最后1行的时候,不是只文件的最后一行,而是指命令处理的最后1行。这个在处理一些特殊字符的时候非常有用,例如后面我们要说的模式空间测试的时候。所以,我们想要一眼就可能知道sed在干什么,就一定要清楚sed结构。
2024-11-08 09:06:22
1184
原创 Linux awk命令详解-参数-选项-内置变量-内置函数-脚本(多图、多示例)
awk可以写非常复杂的命令,有时候写在1行之中不好看,可以将命令写作文件中,然后像sed一样通过-f参数来执行脚本。这个非常重要,只有理解了awk的基础结构,才能一眼看清awk在做什么,也便于记忆,不然过几天就忘了。awk中可以使用system()来调用系统命令。我们先看一些简单的示例,来理解参数、变量。例如,下面文件要如何分割其中的数字呢?注意是大写的BEGIN END。测试文件awk.txt。
2024-11-07 09:11:42
5231
1
原创 Linux grep命令详解(多图、多示例)
v参数是反选,最常用的就是在ps -ef | grep xxx的时候会把grep本身也打印出来,这时就可以用-v参数过滤掉grep。灵活应用grep能帮我们省很多事,例如很多日志可以直接在服务器查看了,就不用再单独下载下来。grep是grep、awk、sed这三剑客中最常用的命令了,相对也简单一些。扩展正则表达式(ERE)基本上和我们平常使用的正则表达式支持的元字符一样。ERE(egrep)中使用反斜杠转义表示普通字符,例如,要匹配?是不是有点乱,所以,为了避免混淆,建议正则直接使用egrep吧。
2024-11-06 10:20:56
2780
原创 Linux脚本参数、函数、函数返回值与return的区别
其实叫echo方式不太准确,因为result=$(add 100 200)是将add函数中所有的输出赋值给result,如果还有其他输出,结果就不准确了。我们看到result结果是300,sum为空,因为在add函数中我们使用local sum将sum定义为了局部变量。如果将add 100 20修改为add 100 200,那结果又是怎样的呢?在shell脚本中我们执行命令,经常需要获取结果,怎么办呢?答案是:sum的值是300,result的值是44。重点看一下$@,他可以帮我们获取指定位置的参数。
2024-11-05 09:09:23
1210
原创 Linux脚本循环(for、while、until)
seq 0 2 100表示:初始值0,步长2,结束值100。2}表示:初始值0,结束值100,步长2。这种风格最像高级程序中的for循环。计算1到100之间的偶数和。计算1到100之间的偶数和。
2024-11-04 13:09:57
432
原创 Linux脚本(if、else、case、test中括号)
shell中没有不能匹配个数,类似于正则[0-9]{3,7}这种。逻辑运算or(||、-o) and(&&、-a)如果if和then同行,得加分号(😉。可以使用test来代替中括号([])
2024-11-04 09:19:02
1018
原创 PostgreSQL安装用户、角色与权限管理
记得使用-d指定数据库,默认的超级用户和创建的数据库都是postgres,如果只修改了超级用户名称,psql的时候记得使用-d指定数据库,否则默认连接的就是和用户名同名的数据库。psql命令非常方便,提供了很多默认选项,如果没有修改过默认配置,用起来非常方便顺手,但是如果修改了默认配置,就一定要多注意。PostgreSQL中用户与角色基本是一个东西,唯一区别是角色没有登录权限,用户有登录权限,可以登录。所以,我们涉及权限的时候,可以把权限分配给角色,在为用户指定不同的角色(一个用户可以有多个角色)
2024-10-30 09:06:11
2344
原创 VScode任务配置详解(task.json与launch.json)
vscode非常强大,有很多可以自定义的东西,但是也不容易上手,例如搭建一个新环境是如何配置运行程序。本篇文章就将详细说明vscode的如何配置任务来完成编译等操作,如何配置launch来debug。tasks.json:配置和管理自动化任务,如编译、构建、运行脚本…launch.json:配置调试器,定义调试会话的启动和运行参数。
2024-10-24 09:40:36
10300
3
原创 Go环境搭建(vscode调试)
如果出现go.tools.intall not found 可以重启一下VScode,确保path中go的bin目录配置正确。推荐使用moudle模式,这样三方包就在$GOPATH/pkg/mod目录下,可以允许有多个不同的版本,多个项目都可以共享。这就有点像Java的包管理模式了,不用每个项目都去处理GOPTH,也不需要每个项目都去下载相同的三方包了。go get和go intall下载的三方包就会安装到GOPATH中。我们下载的免安装版本,直接解压就可以。
2024-10-21 09:10:51
4045
原创 Git核心概念图例与最常用内容操作(reset、diff、restore、stash、reflog、cherry-pick)
本文将介绍Git几个核心概念,和最常用的几个内容操作命令:首先我们来看一下几个非常重要的前置概念我们执行上面命令就会生成一个.git目录【工作区】add就到【暂存区】commit就到【本地仓库】objects目录中保存的是add到暂存区和commit到本地仓库的文件HEAD是一个文本文件,你们内容是HEAD当前指向的分支:ref: refs/heads/feature-view我们首先来看一下我们最常用的reset操作。reset是重置,他重置的是commit我们最最常用的reset的2个操作:res
2024-10-17 16:15:09
1378
原创 浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)
随着浏览器的发展,有很多安全方面的限制,对我们的文件下载行为产生了很大的影响。在JavaScript下载文件(简单模式、跨域问题、文件压缩)我们已经介绍了一些下载问题。文件下载安全设置浏览器和服务端如何控制文件是下载还是打开。
2024-10-11 15:09:41
2484
原创 JavaScript下载文件(简单模式、跨域问题、文件压缩)
相信各位开发朋友都遇到过下载的文件的需求,有的非常简单,基本链接的形式就可以。有的就比较复杂,涉及跨域和压缩文件,例如,文件在OSS中,有的oss不支持压缩文件,要下10个文件就得弹10个下载出来。业务老师多半是没有办法接受这种情况,怎么处理呢?这就涉及到跨域获取文件并压缩文件了。本文会介绍一下简单下载和下载OSS文件并压缩。
2024-10-10 16:56:39
2260
原创 Java GC:GC算法、GC回收器、GC日志
阶段2回收了部分空间,但是比例还是相当低的,不过G1已经知道各个Region的回收情况了。因此可以优先回收垃圾最多的Region,这些Region既包含了新生代,也包含了老年代。被清理的Region内的存活对象会被移动到其他Region,避免内存碎片。我们可以通过下面的代码和vm参数来简单看一下垃圾回收。这次回收,新生代的大小会根据实际运行情况调整。G1回收阶段2:并发标记周期。G1回收阶段3:混合回收。
2024-09-27 11:08:12
1170
effective java 中文版pdf和英文版pdf 两份
2016-11-01
jdk加密无政策限制jar包及示例
2019-01-09
ip纯真数据库与解析工具类
2020-04-08
ip4国家ip段数据库(csv格式,操作和查看都非常方便)
2020-01-09
hbase-helper.zip
2020-07-27
hive-win-bin.zip
2019-07-03
windows-openssl安装包
2019-01-08
jdk8源码.zip
2019-06-27
svn客服端服务端套装
2020-12-21
grunt学习资料
2017-10-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅