- 博客(1645)
- 资源 (33)
- 收藏
- 关注
原创 AI Agent 十问十答,降低认知摩擦
以上来自 Langchain 的观点,信仰 LLM 的人一定不认可“ LLM 是门槛低,上限也低,容易上手,但对于复杂用例来说不够用”的论断,随着 LLM 更加智能,并通过对话的方式帮助用户来完善指令,并借助画布等产品交互方式,降低指令的优化难度。之所以业内有这样的争论,也许是因为 LLM 派信仰的是智能本身,可以通过指令来提升智能的确定性(参考第6个 Q&A 中的对话案例),Workflow 派信仰的是智能无法覆盖所有场景,必然有场景需要通过 Workflow 来精确决定数据的流动方式。
2025-05-08 08:13:12
593
原创 都说 SpringBoot 启动慢,知道慢在哪吗?
前段时间体验了几个开源的开发框架 ,发现他们的亮点主要集中在启动快 ,内存低上面。随之回想 SpringBoot ,发现自己并不能准确的说出 SpringBoot 启动慢的详细原因,所以才有了这篇文章。来,让我们详细的理解一下 ,SpringBoot 启动这么慢 ,是做了什么?整个过程中 ,Client 端的连接是最耗时的,其次是配置读取。也就是外部资源的加载更耗时。所以后面看看新版本的时候 ,来看一下他们是怎么解决的 ,以及其他优秀的开源组件又是怎么解决的。
2025-05-08 08:11:50
459
原创 10行代码,实现你的OpenAPI MCP Server
同时,可以看到,即便本文所提出的方案降低了MCP Server开发的门槛,简化了操作流程,但是仍局限于一个API对应一个工具的思想,未来将会尝试设计通用方案,不再针对单个API进行工具适配,而是提供基准且通用的工具,AI能够借助通用工具进行自动找寻目标API,自动检索API信息,自动填入必需参数并调用检索到的API,真正实现:固定的工具--通用的API调用。未来,我们希望能够拓展场景,不止局限于阿里云的OpenAPI,只要是具备标准格式,包含API必要信息的。
2025-05-07 08:15:17
347
原创 阿里开源的一款数据同步工具 DataX,稳定又高效
我们公司有个项目的数据量高达五千万,但是因为报表那块数据不太准确,业务库和报表库又是跨库操作,所以并不能使用 SQL 来进行同步。不仅备份需要时间,同步也需要时间,而且在备份的过程,可能还会有数据产出(也就是说同步等于没同步)这个效率太慢了,要是数据量少还好,我们使用这个方式的时候,三个小时才同步两千条数据…后面在网上查看后,发现 DataX 这个工具用来同步不仅速度快,而且同步的数据量基本上也相差无几。DataX 是阿里云 DataWorks 数据集成 的开源版本,主要就是用于实现数据间的离线同步。
2025-05-07 08:14:12
547
原创 简化Maven项目依赖:优雅去除未使用Jar包
由于对项目的不熟悉,贸然删除依赖可能会引发一系列难以定位的问题,从而浪费大量的时间和精力。在出租屋内,我自学了一个月的前端技术,竟意外地获得了进入某知名企业的机会,从而开启了全新的前端探索之旅。你可以根据分析结果进行相应的操作,如添加缺失的依赖或删除未使用的依赖等。在创建新项目并添加依赖时,务必谨慎选择所需的jar包,避免盲目复制旧项目的依赖配置,从而减少后续不必要的清理工作。通过以上步骤,你可以在IntelliJ IDEA中轻松管理项目的依赖关系,确保项目的稳定性和可维护性。
2025-05-06 14:36:44
929
原创 RAG 2.0 深入解读
相比之下,全文搜索和稀疏向量主要表达精确的语义。LLM横行的年代,大多数人言则Agent,事实确实如此,LLM的落地一定是Agent,RAG也不例外。在具体实践过程中,除了将多路查询结果进行归一化之外,在将相关的文本分段交给大模型之前,我们一般会限制传递给大模型的分段个数(即 TopK,可以在重排序模型参数中设置),这样做的原因是大模型的输入窗口存在大小限制(一般为 4K、8K、16K、128K 的 Token 数量),你需要根据选用的模型输入窗口的大小限制,选择合适的分段策略和 TopK 值。
2025-05-06 14:35:37
496
原创 什么是负载均衡?NGINX是如何实现负载均衡的?
负载均衡(Load Balancing)是指在多个服务器之间分配传入的网络流量,从而提高网站或应用的可用性、可靠性和响应速度。负载均衡的核心目的是优化资源使用,避免某一台服务器过载,同时确保系统的高可用性。DNS负载均衡:通过DNS解析返回不同的IP地址,达到负载均衡的目的。硬件负载均衡:使用专门的硬件设备来分配请求流量。软件负载均衡:使用软件来实现流量分配,如Nginx、HAProxy等。轮询(Round Robin):请求被均匀地分配到各个服务器上。
2025-05-05 16:53:04
1017
原创 都说 SpringBoot 启动慢 ,你知道慢在哪里吗?
前段时间体验了几个开源的开发框架 ,发现他们的亮点主要集中在启动快 ,内存低上面。随之回想 SpringBoot ,发现自己并不能准确的说出 SpringBoot 启动慢的详细原因,所以才有了这篇文章。来 ,让我们详细的理解一下 ,SpringBoot 启动这么慢 ,是做了什么?整个过程中 ,Client 端的连接是最耗时的,其次是配置读取。也就是外部资源的加载更耗时。所以后面看看新版本的时候 ,来看一下他们是怎么解决的 ,以及其他优秀的开源组件又是怎么解决的。
2025-05-05 16:52:19
988
原创 mysql中int(1) 和 int(10) 有什么区别?
int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,如果mysql没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。
2025-05-04 18:07:49
758
原创 只用了一招,让Spring Boot 项目性能提升了200%,妙啊!
虚拟线程由 JVM 管理,而非操作系统,因此它们的内存占用和创建成本远低于传统线程。在 Spring Boot 中配置虚拟线程非常简单,只需几行代码即可启用虚拟线程,带来显著的性能提升。在高并发场景下,虚拟线程的优势尤为明显。:虚拟线程能处理更高并发的场景,特别是 I/O 密集型的应用,适合开发高并发、响应式的应用程序。:无需手动管理线程池,JVM 会根据负载自动调整虚拟线程的调度,简化了并发编程的复杂性。创建虚拟线程非常简单。是 Java 并发编程的革新,它简化了线程管理,提升了高并发场景下的性能。
2025-05-03 17:13:06
245
原创 10 种微服务设计模式
ACL 在系统架构中的作用类似于一个保护层,隔离了外部系统的变化对内部系统的影响。Event Sourcing Pattern(这个可以翻译成 “事件朔源模式“) 的核心是将系统中的状态变更以事件序列的形式记录下来,并存储在事件存储中,而不是直接保存当前状态。总的来说,Sidecar 模式适用于微服务架构,尤其是在需要处理跨服务的通用功能时,如安全、日志或监控。以下设计模式主要就是为了解决上述说的微服务面临的挑战(感觉翻成中文后不好理解了,还是直接放英文吧,大家可以结合后续的介绍来理解这些模式的含义)。
2025-05-02 10:25:56
934
原创 分库分表的 21 条军规
本文介绍了关于分库分表架构的21个通用概念,有一定的了解之后,接下来我们将进入更深度的内容,包括读写分离数据脱敏分布式主键分布式事务配置中心注册中心Proxy服务等实战案例的讲解和源码分析。
2025-05-02 10:24:32
677
原创 二维码扫码登录原理,其实比你想的要简单的多
实际上,知道了也没有影响, 因为设备信息是唯一的,只要你的设备信息别人不知道, 别人拿其他设备来访问,验证也是不通过的。前面我们说过,为了安全,手机端它是不会存储你的登录密码的。但是在日常使用过程中,我们应该会注意到,只有在你的应用下载下来后,第一次登录的时候,才需要进行一个账号密码的登录, 那之后呢 即使这个应用进程被杀掉,或者手机重启,都是不需要再次输入账号密码的,它可以自动登录。二维码其实与条形码类似,只不过它存储的不一定是数字,还可以是任何的字符串,你可以认为,它就是字符串的另外一种表现形式,
2025-03-26 10:47:30
758
原创 一次有意思的 SQL 优化实操,30248.271s 到 0.001s
将会更高,从另外一个角度看,该表的数据是300w,以后会更多,就索引存储而言,都是不小的数目,随着数据量的增加,索引就不能全部加载到内存,而是要从磁盘去读取,这样索引的个数越多,读磁盘的开销就越大,因此根据具体。发现没有用到索引,type全是ALL,那么首先想到的就是建立一个索引,建立索引的字段当然是在where条件的字段。快了3w多倍,大大缩短了查询时间,看来索引能极大程度的提高查询效率,建索引很有必要,很多时候都忘记建。的结果是897,即这两个字段联合起来的区分度是比较高的,因此建立联合索引查询效率。
2025-03-15 10:26:38
871
原创 0.0015 秒内启动一个应用,这个框架可以封神了!
为了解决这个问题,Quarkus的Spring 兼容性扩展将 Spring API 映射到现有扩展中的 API,这些扩展已经针对快速启动、降低内存利用率和原生编译进行了优化,例如 RestEasy 和 CDI。需要明确的是,Quarkus 中的 Spring API 兼容性并非为了作为一个完整的 Spring 平台来重新托管现有的 Spring 应用程序。这些 API 是使用了前面提到的 Spring Boot 和 Quarkus 的反应式方法实现的,数据库使用的是PostgreSQL。
2025-03-15 10:16:22
247
原创 终于把深度学习中的知识蒸馏搞懂了!!
知识蒸馏是一种模型压缩技术,旨在将一个大规模的、性能较好的 “教师模型”(Teacher Model)所学到的知识迁移到一个小规模的 “学生模型”(Student Model)中,从而提高学生模型的性能,同时减少计算和存储需求。
2025-03-14 10:03:11
417
原创 SpringBoot + ResponseBodyEmitter 实时异步流式推送,优雅!
ChatGPT 的火爆,让流式输出技术迅速走进大众视野。在那段时间里,许多热爱钻研技术的小伙伴纷纷开始学习和实践 SSE 异步处理。我当时也写过相关文章,今天,咱们换一种更为简便的方式来实现流式输出,那就是 。其实, 并非新技术,早在 Spring Framework 4.2 版本就已被引入。直到最近,我们在开发一个滚动日志输出功能时,才深入了解到它的强大之处。
2025-03-14 10:02:01
484
原创 SQL 中写 in 和 not in? 慎用!
如果id2只有1和2, 那么3<>1 且 3<>2 所以3输出了,但是 id2包含空值,那么 3也不等于NULL 所以它不会输出。单独查询 select id1 from test2 是一定会报错: 消息 207,级别 16,状态 1,第 11 行 列名 'id1' 无效。并没有,一位大神曾经说过,如果是确定且有限的集合时,可以使用。如 IN (0,1,2)。十几分钟,检查了一下 phone在两个表都建了索引,字段类型也是一样的。我想要查询,在test2中不存在的 test1中的id。
2025-03-13 09:49:45
215
原创 高并发实战:海量数据的计数器要如何实现?
与此同时,计数的访问量级也有质的飞越。而 Redis 基于通用性的考虑,对于内存的使用比较粗放,存在大量的指针以及额外数据结构的开销,如果要存储一个 KV 类型的计数信息,Key 是 8 字节 Long 类型的 weibo_id,Value 是 4 字节 int 类型的转发数,存储在 Redis 中之后会占用超过 70 个字节的空间,空间的浪费是巨大的。不过,即使经过上面的优化,由于计数的量级实在是太过巨大,并且还在以极快的速度增长,所以如果我们以全内存的方式来存储计数信息,就需要使用非常多的机器来支撑。
2025-03-13 09:47:16
831
原创 四种 API 架构风格及对比
这些观点的问题在于,它们的出发点只是为某种技术背书,而不是去考虑它实际的属性和特性如何与当前的需求相匹配。SOAP 严格的消息结构,安全性和授权功能使其成为在 API 和客户端之间执行正式软件协议的最合适的选择,同时又符合 API 提供者与 API 使用者之间的法律合同。复杂的系统和微服务。服务端在接受到消息后,将信息的内容反序列化,执行所请求的操作,然后将结果发送回客户端。归根结底,去针对一些小型的用例来尝试某种特定 API 架构,并去了解它是否适合你的用例以及是否解决了你的问题,这样做是比较合适的。
2025-03-12 10:21:57
863
原创 一次 诡异 的 JVM OOM 事故 原创
上面的流程是我解决过内存溢出的套路,虽然很糙,但很实用,比如曾经帮助艺龙支付团队解决过订单查询内存溢出问题、西南某航空公司用户中心内存溢出问题等等。2、通过 top -p Pid (进程号)分析进程资源占用,判断是爆炸性的内存增长,还是缓慢的内存增长。我的第一反应是:非常明显的 JVM 内存溢出表现 ,不过不知道是爆炸性的内存增长,还是缓慢的内存增长。最后,我有点担心,是不是 JVM 内存分配小了才导致 OOM 了,同学的回复是 :12 G。定时任务这四个字如电光火石般在我眼前闪过,基本八九不离十了。
2025-03-12 10:21:00
902
原创 为什么程序员不应该长期留在一家公司?
最近,我最近在和两个月前加入公司的一位程序员交谈。他以初级程序员的身份加入,在公司呆过的时间从未超过一年半。这并不是个例情况。我见过的大多数优秀程序员都会在 1-3 年后离职,除非他们是公司的股东。对软件开发者来说,这样做的原因有很多,也是很正常的一件事。我们将讨论开发人员为什么会这样做,我们可以从关于“如今跳槽是很正常的事”的一些统计数据开始。
2025-03-02 08:43:20
506
原创 SpringBoot中15个常用启动扩展点,你用过几个?
我们从这些spring&springboot的扩展点当中,大致可以窥视到整个bean的生命周期。在业务开发或者写中间件业务的时候,可以合理利用spring提供给我们的扩展点,在spring启动的各个阶段内做一些事情。以达到自定义初始化的目的。此篇总结,如果有错误或者疏漏的地方,恳请指正。👦小2,近10年程序员,国内互联网大厂资深工程师,新晋奶爸一枚。爱写作爱分享。🍀分享:技术成长、程序员生活、职场经验、育儿心得等内容。,有想法,可以评论区留言交流。
2024-12-26 09:56:56
781
原创 MyBatis中的 10 个宝藏技巧!
说到 MyBatis,很多小伙伴都会用,但未必用得“惊艳”。实际上,这个轻量级的持久层框架还有很多隐藏的“宝藏技巧”。如果你能掌握这些技巧,不但能让开发更高效,还能避免掉入一些常见的“坑”。今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。有些小伙伴会遇到这样的问题:数据库表字段是下划线命名,但 Java 对象是驼峰命名。比如 对应 userName。如果直接用默认的 。
2024-12-25 09:58:38
263
原创 SpringBoot + minio + kkfile 实现文件预览
3.1中返回一个文件名,该文件名为上传文件在minio中的唯一名称,使用该名称请求minio文件预览地址。3.2中的接口返回一个地址,将地址放到kkfileviewer文件预览服务中,可以预览文件。这里以kkfile 4.4.0-beta版本为例。
2024-12-24 10:02:15
575
1
原创 大厂的Git代码规范
master 为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。develop 为开发环境分支,始终保持最新完成以及bug修复后的代码,用于前后端联调。一般开发的新功能时,feature分支都是基于develop分支创建的。线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支。 开头的为修复分支,它的命名规则与 feature 分支类似。 开头,后面可以加上开发的功能模块, 命名示例:。文件,减少不必要的文件提交和冲突,净化代码库环境。
2024-12-23 12:57:41
595
原创 订单超时自动取消的7种方案
在电商、外卖、票务等系统中,订单超时未支付自动取消是一个常见的需求。这个功能乍一看很简单,甚至很多初学者会觉得:"不就是加个定时器么?" 但真到了实际工作中,细节的复杂程度往往会超乎预期。这里我们从基础到高级,逐步分析各种实现方案,最后分享一些在生产中常见的优化技巧,希望对你会有所帮助。每种方案都有自己的适用场景,大家在选择的时候,记得结合业务需求、订单量、并发量来综合考虑。如果你的项目规模较小,可以直接用延时队列或 Redis;而在大型高并发系统中,消息队列和事件流处理往往是首选。
2024-12-22 09:27:28
1143
原创 MySQL 中 Varchar(50) 和 varchar(500) 区别是什么?
大家好,我是小2,一个程序员,也是一个奶爸~为什么这么规定?我在网上查了一下,主要基于两个方面网上说和存储空间上是一样的,真的是这样吗?基于性能考虑,是因为过长的字段会影响到查询性能?本文我将带着这两个问题探讨验证一下。
2024-12-16 11:35:45
785
原创 详解CompletableFuture
CompletableFuture在JDK1.8提供了一种更加强大的异步编程的api。它实现了Future接口,也就是Future的功能特性CompletableFuture也有;除此之外,它也实现了CompletionStage接口,CompletionStage接口定义了任务编排的方法,执行某一阶段,可以向下执行后续阶段。
2024-12-16 11:10:33
972
原创 基本功 | 一文讲清多线程和多线程同步
一个进程内多个线程并发执行的情况就叫多线程,每个线程是一个独立的执行流,多线程是一种编程模型,它与处理器无关、跟设计有关。并行计算:充分利用多核,提升整体吞吐,加快执行速度。后台任务处理:将后台线程和主线程分离,在特定场景它是不可或缺的,如:响应式用户界面、实时系统等。我们用2个例子作说明。
2024-12-14 10:59:38
1104
原创 全域用户建模在美团首页推荐的探索与实践
总的来说,我们通过多阶段递进式探索验证的方式,在美团首页推荐召排模块引入多展位、多应用渠道的多源用户交互数据,并在落地过程中解决美团多展位、多业务、时空场景强相关性的特点导致的严重跨域信号负迁移挑战。全域用户建模经过多期算法落地已经取得显著业务收益,缓解了首页推荐用户行为稀疏导致的模型训练不充分及用户兴趣预估有偏问题,大幅提升了首页猜喜推荐系统在全面理解用户行为模式上的能力。此外,我们在排序模块的部分创新成果也已在CIKM2024会议上发表。
2024-12-14 10:58:47
781
原创 用线程池,注意避坑
线程池是 Java 中处理多线程的强大工具,但它不仅仅是“直接用就完事”的工具。很多小伙伴在用线程池时,因为配置不当或忽略细节,踩过许多坑。今天跟大家一起聊聊线程池中容易踩的 10 个坑,以及如何避免这些坑,希望对你会有所帮助。线程池是强大的工具,但如果我们日常工作中用得不好也非常容易踩坑。这篇文章通过实际代码示例,我们可以清楚看到线程池的问题所在及改进方法。希望这些内容能帮你避免踩坑,写出高质量的线程池代码!线程池用得好,效率杠杠的;用得不好,程序天天崩!
2024-12-13 19:09:27
710
原创 使用 try-catch 捕获异常会影响性能吗?大部分人都会答错!架构文摘
不知道从何时起,传出了这么一句话:Java中使用try catch 会严重影响性能。然而,事实真的如此么?我们对try catch 应该畏之如猛虎么?
2024-12-13 19:07:33
1225
原创 MySQL中这14个神仙功能,惊艳到我了!!!
我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。
2024-12-11 16:35:56
963
原创 Spring Boot性能提升的核武器,速度提升500%!
大家好,我是小2,一个程序员,也是一个奶爸~虚拟线程是 Java 21 引入的一个新特性,用于简化并发编程。
2024-12-11 10:04:59
720
原创 SkyWalking 和 ELK 链路追踪实战
SkyWalking和 ELK 各自在 APM 与日志管理领域发挥着重要作用,尽管原生 ELK 不直接支持链路追踪,但通过与 SkyWalking 的集成,可以互补优势,共同提升微服务架构下的可观测性。
2024-12-10 10:02:37
1428
原创 公司大佬对 Excel 导入、导出的封装,那叫一个妙啊!
最近在封装公司统一使用的组件,主要目的是要求封装后开发人员调用简单,不用每个项目组中重复去集成同一个依赖l,写的五花八门,代码不规范,后者两行泪。为此,我们对EasyExcel进行了二次封装,我会先来介绍下具体使用,然后再给出封装过程。
2024-12-10 09:52:23
232
Java 并发编程实战(英文版)
2017-01-07
Java RESTful Web Service实战 高清完整.pdf版下载
2017-01-01
Java RESTful Web Service实战 [韩陆著]
2016-12-31
大型网站技术架构:核心原理与案例分析+李智慧
2016-12-31
Spring 3.x 企业应用开发实战】完整高清扫描版).pdf
2016-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人