自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呜呼哈

怎么大风越狠 我心越荡 我会变成巨人 踏着力气 踩着梦

  • 博客(101)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 Redis6.2+ Stream 安全清理:避免内存爆炸的最佳实践

Redis Stream 安全清理指南摘要 Redis Stream作为轻量级消息队列,默认不自动删除消息,长期运行会导致内存爆炸。本文提出安全清理策略: 核心原则:只删除所有消费者组都已确认的消息,通过计算各组的last_delivered_id和pending消息最小ID,确定全局安全删除点。

2025-12-26 13:46:18 453

转载 约定式分支

本文介绍了约定式分支1.0.0规范,旨在通过标准化分支命名提高代码管理的可读性和自动化效率。规范建议使用小写字母、数字和连字符构成"类型/描述"格式的分支名称,包括feature/、bugfix/、release/等6种主要类型。基本规则要求名称简洁明确,避免特殊字符,建议包含工单编号。该规范能提升团队协作效率,便于CI/CD集成,同时支持使用commit-check等工具进行自动化检查。规范强调分支命名应保持简单实用,避免过度复杂化。

2025-12-12 10:16:31 25

原创 Function Calling VS MCP

摘要: Function Calling是LLM的决策行为,决定调用哪个工具及参数;MCP是工具与模型间的执行协议,确保可靠、安全的调用流程。二者抽象层次不同:Function Calling关注模型意图,MCP规范工具使用方式。简单场景可用Function Calling独立实现,复杂动态环境需结合MCP。两者非强制绑定,但协同使用效果更佳——Function Calling是“大脑指令”,MCP是“执行通路”,共同构建强大可扩展的AI Agent系统。

2025-10-24 20:17:24 390

原创 架构师的必备素养:不止于技术

一名优秀的软件架构师需要具备多维度能力:扎实的技术功底(精通编程语言、系统设计原则和分布式系统等)、系统思维与抽象能力、深刻理解业务需求、卓越的沟通协作能力、对工程质量的坚持、持续学习的技术敏感度,以及责任担当意识。架构师不仅是技术专家,更是技术与业务的桥梁,需要在复杂环境中做出平衡决策,推动系统长期稳健发展。真正的架构设计不是为了炫技,而是要让业务跑得更快更稳。

2025-10-22 22:25:54 462

原创 MySQL 两阶段提交(Two-Phase Commit, 2PC

这个阶段完成后,事务处于“准备就绪”状态,但还未真正提交,仍可回滚。,尤其在崩溃恢复时能够确保事务的原子性和持久性。这个顺序就是 MySQL 实现两阶段提交的核心。不过 MySQL 默认的两阶段提交主要是为了解决。MySQL 的两阶段提交主要用于。,而非分布式场景。

2025-10-14 14:59:13 332

原创 Nginx proxy_pass 末尾斜杠(/)

Nginx反向代理配置中,proxy_pass指令末尾斜杠的有无直接影响请求路径转发规则。不带斜杠时完整转发请求URI,带斜杠则执行路径替换(用proxy_pass路径替换location匹配部分)。正则表达式location和变量场景下规则有例外。实际配置需注意:1)location匹配精确性;2)后端服务路径依赖;3)通过测试工具验证。核心差异可概括为:无斜杠=完整转发,有斜杠=路径替换。正确理解这一机制可避免90%以上的转发问题。

2025-09-28 13:17:32 884

原创 Nginx root 和 alias

Nginx 中 root 与 alias 的区别 root 和 alias 是 Nginx 配置中用于指定文件路径的两个指令,主要区别在于路径处理方式: 路径拼接逻辑不同 root:将完整 URI 拼接到指定路径后(保留 location 部分) alias:用指定路径替换 location 匹配的 URI 部分

2025-09-28 12:51:09 513

原创 Java 队列的核心方法

Java队列(Queue)是遵循FIFO原则的数据结构,广泛应用于任务调度、缓冲和线程通信。核心方法分为两组:add/remove/element(失败抛异常)和更安全的offer/poll/peek(推荐)。双端队列(Deque)扩展支持两端操作,可模拟栈和双向队列。常用实现类包括非线程安全的LinkedList/ArrayDeque和线程安全的阻塞队列(如LinkedBlockingQueue)。阻塞队列特有的put/take方法支持生产者-消费者模型,是并发编程的关键。面试重点包括方法区别、线程安全实

2025-09-15 09:28:53 665

转载 MySQL大表优化方案

MySQL单表优化指南摘要:针对大表性能下降问题,建议从字段选择(如使用合适的数据类型、避免NULL)、索引优化(按需创建、避免冗余)、SQL查询规范(避免全表扫描、拆分大语句)入手。InnoDB适合写密集型场景,MyISAM适合读密集型。系统调优参数包括连接数、缓存大小等设置。读写分离和缓存策略(MySQL内部、应用层、Web层)可进一步提升性能。硬件升级也是有效方案。遵循这些方法可支撑千万级数据量。(150字)

2025-08-27 11:05:40 114

原创 深入理解 MySQL 主从同步

MySQL主从同步通过主库记录binlog、从库主动拉取并重放日志的机制实现数据异步复制,是构建高可用数据库架构的核心技术。本文详细解析了主从同步原理,包括主库dump线程与从库IO/SQL线程的协同工作流程,并提供了基于MySQL 5.7+的搭建指南,涵盖环境准备、配置参数、数据备份导入等关键步骤。特别推荐使用GTID复制简化管理,同时针对主从延迟、同步中断等常见问题给出优化方案,如并行复制、大事务拆分等。最佳实践包括定期监控状态、设置从库只读、合理保留binlog等,为构建稳定高效的数据库架构提供完整解

2025-08-19 20:54:47 925

原创 MySQL 三大日志:redo log、undo log、binlog 详解

MySQL的三大日志系统(redo log、undo log、binlog)共同保障了数据库的事务安全和可靠性。redo log作为InnoDB特有的物理日志,通过预写日志机制确保数据持久性;undo log记录数据修改前的状态,支持事务回滚和MVCC机制;binlog是服务器层逻辑日志,用于主从复制和时间点恢复。三者协同工作,通过两阶段提交等机制确保数据一致性。理解这些日志的工作原理和差异,对于数据库性能优化和故障恢复至关重要,需根据业务需求合理配置相关参数以平衡安全性和性能。

2025-08-19 20:34:29 1298

原创 UML 关系说明

1.泛化(generalize)实线空心三角箭头。2.实现(realize)虚线空心三角箭头。3.聚合(aggregation)实线空心菱形箭头。4.组合(composition)实线实心菱形箭头。5.关联(association)实线(直线),普通箭头(“<”,“>”)可选。如果强调方向,则加一个普通箭头。否则只需要一条实线。6.依赖(dependency)虚线普通箭头(“<”,“>”)。...

2025-07-13 15:41:07 194

原创 软件交付工程化实践

本文介绍了某公司前后端分离项目的技术架构与部署方案。后端采用Spring Boot+Dubbo,前端使用Vue框架。部署方面,前端静态页面通过SFTP上传至Nginx,后端采用Docker Swarm集群部署在多台阿里云ECS上。项目采用云端构建方式,通过dockerfile-maven插件实现自动化镜像构建和推送。环境管理分为测试和正式环境,采用基于Git分支的工作流:feature分支用于功能开发,fix分支处理线上问题,最终合并到dev或release分支。该方案针对中小规模项目,简化了Kuberne

2025-07-13 15:35:58 361

原创 docker swarm 中 dubbo服务注册IP问题

在docker swarm 中 Service 提供内置的 DNS 解析和负载均衡能力,注册时使用docker swarm 中的服务名注册,这样也就能实现dubbo服务的正常调用了。如果容器是多网卡的情况,在不手动指定注册服务的ip时都是不太稳定的,也就是说只能通过人为手动指定IP。因为 docker swarm 环境下部署服务没法指定注册到注册中心的服务IP地址,此时dubbo注册服务的IP地址使用的是。大致的原因是新服务注册后,旧服务后注销导致,因为新旧服务的ip都是使用的域名 ucs。

2025-06-12 00:42:21 702

原创 Docker Swarm overlay 和 docker_gwbridge

在 Docker Swarm 中,容器需要同时连接和,这是为了满足不同层面的通信需求,并确保服务的高可用性和外部可达性。

2025-06-11 23:32:50 1181

原创 ThreadLocal 源码

此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。例如,下面的类生成每个线程本地的唯一标识符。线程消失后,线程本地实例的所有副本都受到垃圾回收 (除非存在对这些副本的其他引用)。实例通常是类中的私有静态字段,这些类希望将状态与线程关联(例如,用户 ID 或事务 ID)。每个线程都持有对其线程局部变量副本的隐式引用,只要线程处于活动状态并且。适用于需要子线程继承父线程上下文状态的场景,避免显式传参。

2025-06-09 23:01:36 427

原创 Nginx server_name 配置说明

Nginx的server_name指令是虚拟主机配置的核心,用于匹配客户端请求的Host头。它支持精确匹配、通配符(如*.example.com)和正则表达式三种方式,遵循从精确到模糊的匹配优先级。

2025-06-09 17:48:05 1176

原创 Java并发编程:读写锁与普通互斥锁的深度对比

本文对比了Java中的普通互斥锁(synchronized/ReentrantLock)和读写锁(ReentrantReadWriteLock)。普通锁适用于读写均衡或写多场景,提供简单互斥;读写锁在读多写少时性能更优,允许多线程并发读。通过测试数据表明,读多场景下读写锁吞吐量可提升246%。文章还分析了锁的粒度、适用场景、饥饿问题,并给出锁降级/升级的实践建议。最后总结不同场景下的锁选择策略:读写锁适合缓存系统,普通锁适合计数器,强一致性系统推荐互斥锁。建议结合JMH测试和监控工具选择最优方案。

2025-06-03 23:59:22 1359

转载 时间复杂度和空间复杂度的概念

算法性能评估涉及时间复杂度和空间复杂度两个关键指标。时间复杂度反映算法的执行时间,采用大O记法表示,如O(n)、O(n²),其估算方法是统计执行次数后去除低阶项和系数。空间复杂度衡量算法内存占用情况,同样用大O表示法。实际应用中需根据场景权衡这两个指标:大数据处理时优先考虑时间复杂度,内存受限时则更关注空间复杂度。通过预先分析算法步骤进行估值,可以高效选择最优算法方案。常见复杂度排序为:O(1)<O(logn)<O(n)<O(n²)<O(2ⁿ)。

2025-06-03 16:14:43 75

原创 为什么 Docker 建议关闭 Swap

项目是否推荐关闭 SwapDocker 生产环境推荐关闭测试环境/内存充足可保持启用(用于调试或开发)Kubernetes 集群节点推荐关闭(尤其在 v1.22 之前)

2025-05-17 17:58:40 1321

原创 `ParameterizedType` 和 `TypeVariable` 的区别

特性表示类型已经被参数化的类型泛型类型变量(未指定具体类型)常见形式Map<K, V>TEK是否有实际类型参数✅ 有 (❌ 没有是否代表泛型变量❌✅使用场景获取具体泛型类型信息获取泛型变量本身信息是否能直接用于创建对象❌(运行时被擦除)❌(只是一个变量)

2025-05-16 21:40:29 827

原创 Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?

Java 泛型是编译时特性。在编译后会变为原始类型List。泛型类型参数(如String)仅在编译阶段进行类型检查。场景是否保留泛型原因直接访问List变量的泛型❌ 否类型擦除后运行时无信息解析完整对象(如Event✅ 是类字段的泛型信息保存在元数据中,可通过反射获取使用✅ 是匿名内部类的泛型参数通过父类类型保留Java 的类型擦除机制虽然带来了限制,但通过类结构的元数据和框架的智能处理,我们仍然能在关键场景下“找回”泛型信息。

2025-05-16 21:38:21 1090

原创 Docker Compose 的历史和发展

这张图表展示了Docker Compose从V1到V2的演变过程,并解释了不同版本的Compose文件格式及其支持情况。

2025-05-11 20:28:07 950

原创 MyBatis 核心类详解与架构解析:从入门到源码级理解

类名职责简述构建创建SqlSession提供数据库操作 APIExecutorSQL 执行引擎单条 SQL 的封装全局配置管理器JDBC Statement 操作设置 SQL 参数Java 与 JDBC 类型转换结果集处理。

2025-05-04 09:50:10 1028

原创 @Validated与@Valid的正确使用姿势

场景是否生效原因基本类型 + 类级别@Validated✅类级别启用校验,参数约束生效。基本类型 + 参数级别@Valid/@Validated❌缺少类级别支持,无法触发校验。对象类型 + 参数级别@Valid/@Validated✅Spring MVC自动处理对象参数校验。对象类型 + 无参数注解❌需要显式标记@Valid或@Validated以触发校验。

2025-04-19 16:09:19 496

原创 JSON 中的反斜杠 `\`

通过上述示例代码和解析,我们可以清楚地看到 JSON 中反斜杠的使用和处理方式。在 JSON 字符串中,反斜杠用于转义特殊字符,确保 JSON 数据的正确解析和表示。在 Java 中,反斜杠也需要使用两个反斜杠进行转义。正确处理这些转义字符对于开发人员来说非常重要,尤其是在处理复杂的 JSON 数据时。

2025-04-03 14:00:38 1139

原创 深入解析 JDK 动态代理

JDK 动态代理是 Java 内置的一种代理机制,它允许我们在运行时动态创建一个代理对象。这个代理对象可以拦截对目标对象方法的调用,并在方法调用前后插入额外的逻辑。动态代理的核心是通过类和接口来实现。动态性:代理类的字节码在运行时生成,不需要提前编写代理类的代码。基于接口:只能代理实现了接口的类。灵活性:可以在运行时动态插入额外逻辑,无需修改目标类的代码。首先,我们定义一个login和logout。

2025-04-03 10:36:33 916

原创 @Transactional 注解的行为规则

Spring @Transactional 注解的行为规则

2025-03-04 21:30:00 380

原创 对接扣子双向流式 TTS Demo

对接扣子双向流式语音合成 Demo

2025-02-21 15:56:52 692

原创 优化线程池关闭机制以避免无限循环

方法并设置合理的超时时间,可以有效地避免线程池关闭过程中的无限循环和资源浪费。同时,捕获和处理中断异常可以提高程序的健壮性。希望本文的建议能帮助你在实际开发中更好地管理线程池,确保程序的稳定运行。在多线程编程中,正确关闭线程池是一个重要的任务,以确保程序的稳定性和资源的有效利用。本文将探讨一种常见的线程池关闭机制,并提出优化建议,以避免无限循环和资源浪费。这段代码的目的是等待线程池中的所有任务完成,然后关闭线程池。方法来等待线程池关闭,并设置合理的超时时间。调用 shutdown。

2025-02-13 20:00:00 1010

原创 域名的分层结构

域名的分层结构是指域名系统中域名的组织方式,它由不同级别的标签(labels)组成,这些标签通过点(.)分隔。域名的这种分层结构使得域名系统既灵活又可扩展,能够适应不同用户的需求,同时也便于管理和导航。一个完整的域名可以包含多个层级,每个层级都可以进一步细分。

2024-11-14 15:45:17 1124

转载 SSE:服务器发送事件

服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE)。本文介绍它的用法。

2024-10-29 17:47:33 366

原创 通用软件版本标识

在软件开发和发布过程中,版本号和标识扮演着重要的角色。它们不仅帮助开发者追踪软件的演变,还让用户了解软件的稳定性和功能。以下是一些常见的软件版本标识,以及它们的含义和用途。

2024-10-21 23:53:57 843

原创 处理Hutool的Http工具上传大文件报OOM

实际上就是把文件全部都加载到了Byte数组中,如果上传的文件过大必定会导致OOM。这里自己写一个服务端的接口看看StreamingMode的header有什么区别。先来测试一下 setChunkedStreamingMode 的效果。header, 来告诉服务端当前请求主体内容的字节数。Hutool 的 HttpRequest中只提供了。方式其实感觉上会更好,不会出现服务端不支持的情况,从异常堆栈信息中可以看出这里使用了。这是修改前会出现OOM的客户端代码。

2024-10-21 11:26:44 2152

转载 kubernetes安装详解

3.关闭防火墙4.修改主机名5.添加hosts解析6.设置k8s内核参数设置内核参数加载内核模块使内核参数生效7.关闭系统swap修改fstab文件,关闭swap的自动挂载。9.安装依赖包10.时间同步11.安装docker-ce软件提示:master节点不需要安装删除自带的docker安装依赖包安装yum源安装docker-ce启动,并设置开机自启[安装设置好flanneld后,再启动docker]11.安装CFSSLcfssl三:创建CA证书

2024-08-15 09:35:05 938

原创 字符集和字符编码

字符集是一个系统,它为每个字符分配一个唯一的编码值。字符集定义了一组字符(如字母、数字、标点符号、控制字符等)。

2024-08-07 12:42:32 619

转载 Spring Boot搭建AI原生应用

什么是「AI原生应用」?简单一句话就是,AI带来应用的最核心价值,如果脱离开 AI,应用将不存在。AI原生应用是指在设计、开发、部署、运营和维护过程中,具有内在安全、可信的AI能力应用,其中AI是功能的自然组成部分。实现一个AI原生应用的过程,往往需要利用数据驱动和基于知识的生态系统,在这一过程中,数据与知识将被消费和生产,以实现新的基于AI的原生功能。在需要时通过学习和自适应的AI增强能力,来替代以往静态的、基于规则的机制。

2024-07-31 16:13:55 424

转载 一个简洁的 YAML 教程

【代码】一个简洁的 YAML 教程。

2024-05-30 14:14:23 184

原创 无缝前端部署

保留旧版本文件:利用 Vue 构建时生成的包含哈希值的静态文件名。分阶段上传:先压缩文件,再上传并解压。监控和自动化部署:使用和 Docker 实现实时监控和自动化部署。通过上述策略,我们可以实现 Vue 应用的无缝部署,减少部署过程中对用户的影响。这种方法不仅适用于 Vue,也可以扩展到其他前端框架和应用。

2024-05-18 22:34:00 627

原创 Dockerfile中的CMD和ENTRYPOINT

与Exec格式不同,使用Shell格式的指令总是使用命令shell。Shell格式不使用JSON数组格式,而是一个常规的字符串。在使用shell格式时系统会自动选择一个命令shell来执行指令,而在使用exec格式时,需要明确指定使用哪个命令shell或其他可执行文件来执行命令。exec格式使得避免使用shell字符串处理成为可能,并且可以使用特定的命令shell或任何其他可执行文件来调用命令。当使用Exec格式并直接执行shell时,就像Shell格式一样,是由shell进行环境变量替换,而不是构建器。

2024-05-05 23:31:21 3617 2

Maven实战(许晓斌著)完整高清版PDF

《Maven实战》是国内首本公开出版的Maven专著。它内容新颖,基于新发布的Maven 3.0,不仅详尽讲解了 Maven 3.0的所有新功能和新特性,而且还将这些新功能和新特性与Maven 2.0版本进行了对比,以便于正在使用Maven 2.x版本的用户能更好地理解。本书内容全面,以从专家的角度阐释Maven的价值开篇,全面介绍了Maven的安装、配置和基本使用方法,以便于初学者参考;详细讲解了坐标和依赖、Maven仓库、生命周期和插件、聚合与继承等Maven的核心概念,建议所有读者仔细阅读;系统性地阐述了使用Nexus建立私服、使用Maven进行测试、使用Hudson进行持续集成、使用Maven构建Web应用、Maven的版本管理、Maven的灵活构建、生成项目站点和Maven的m2eclipse插件等实用性较强的高级知识,读者可有选择性的阅读;扩展性地讲解了如何Maven和 Archetype插件,这部分内容对需要编写插件扩展Maven或需要编写Archetype维护自己的项目骨架以更便于团队开发的读者来说尤为有帮助。它实战性强,不仅绝大部分知识点都有相应的案例,而且本书还在第4章设计了一个背景案例,后面的很多章节都是围绕这个案例展开的,可操作性极强。   《Maven实战》适合所有Java程序员阅读,无论你是从未使用过Maven,亦或是已经使用Maven很长一段时间了,相信你都能从本书中获得有价值的参考。本书也适合所有项目经理阅读,它能帮助你更规范、更高效地管理Java项目。

2017-05-29

精通Spring 4.x 企业应用开发实战

Spring 4.0是Spring在积蓄4年后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域**开源平台的翘楚地位。Spring 4.0引入了众多Java开发者翘首以盼的基于Groovy Bean的配置、HTML 5/WebSocket支持等新功能,全面支持Java 8.0,*低要求是Java 6.0。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升应用开发的优雅性。本书是在《精通Spring 3.x――企业应用开发详解》的基础上,历时一年的重大调整改版而成的,延续了上一版本“追求深度,注重原理,不停留在技术表面”的写作风格,力求使读者在熟练使用Spring的各项功能的同时透彻理解Spring的内部实现,真正做到知其然并知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书内容体现“从实际项目中来,到实际项目中去”的写作原则。

2017-06-03

HttpClient4.x 教程 PDF

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

2017-06-25

疯狂Spring Cloud

《疯狂Spring Cloud微服务架构实战》以Spring Cloud为基础,深入讲解微服务开发的相关框架,包括服务管理框架Eureka、负载均衡框架Ribbon、服务客户端Feign、容错框架Hystrix、消息框架Stream等。除了介绍这些微服务相关的框架外,在《疯狂Spring Cloud微服务架构实战》的第11章,还介绍了如何使用Spring Data框架操作各个主流数据库(MySQL、MongoDB、Redis)。在第12章,以一个案例为基础结束本书内容,在该章中讲解了模板引擎Thymeleaf,整本书将会为大家提供一整套微服务应用开发的解决方案。本书适合有一定Java开发基础的技术人员,尤其是正在使用或准备使用微服务构建高并发、大数据应用的技术人员及团队。 https://gitee.com/yangenxiong/SpringCloud/blob/master/《疯狂Spring Cloud》电子书(一).pdf 这里也可以下载哦!

2018-04-22

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

TA关注的人

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