- 博客(747)
- 收藏
- 关注
原创 Spring Boot Actuator 生产就绪分析与配送场景监控实现
Spring Boot Actuator 提供了健康检测、应用信息暴露和指标监控等功能,是实现生产就绪的核心工具。通过自定义 HealthIndicator,可以监控接口、线程池、内存队列等关键组件;通过 Micrometer,可以实现 Gauge、Counter、Timer 等指标的收集,适用于配送场景的业务监控。结合安全性配置和性能优化,Actuator 能够满足复杂生产环境的需求。
2025-07-09 20:37:23
437
原创 Spring Boot @ConfigurationProperties 详解与 Nacos 配置中心集成
ConfigurationProperties 是 Spring Boot 配置管理的核心工具,支持类型转换、复合类型、数据校验等功能,极大提高了开发效率。在 Nacos 配置中心场景下,结合 @NacosPropertySource 和 @RefreshScope,可以实现动态配置管理,适合分布式系统。通过复杂场景示例和面试追问,读者应能深入理解其原理和实战应用。
2025-07-09 20:27:46
281
原创 工作流与Flowable入门指南:从基础概念到开发环境搭建
*BPMN 2.0(Business Process Model and Notation)**是OMG(对象管理组织)制定的业务流程建模标准,旨在提供统一的图形化符号,便于业务人员和开发人员协作。BPMN 2.0于2011年发布,相较1.x版本,新增了执行语义和元模型,支持流程的存储、交换和自动化执行。BPMN 2.0的核心元素事件(Event):表示流程中的触发点,如开始、结束、定时器等。活动(Activity):表示具体的任务或子流程,如用户任务、服务任务。网关(Gateway)
2025-07-09 20:16:42
317
原创 从技术专家到优秀管理者:架构师的团队领导与系统设计之道
这个方案明明是最优解,为什么团队就是跟不上?许多技术出身的架构师或团队负责人在转型管理时,都会遇到类似的困惑。。技术专家转型管理的常见挑战。为什么“技术强不等于管理强”?管理与技术的本质区别:术与道的结合。两者结合,才能真正玩转复杂平台。本文将从三个维度,帮助技术型管理者补齐“管理短板”,实现从技术专家到团队领袖的跨越。领导软件平台各方面的工作,对技术底蕴、思维模式、决策能力、工作风格、文化铸造等方面都有极高的要求,你可以称之为“领域智慧”。认知盲区的代价是巨大的,的后果更严重,可能导致方向性的错误。
2025-07-08 21:35:12
1092
原创 SpringBoot+Netty 300行代码实现一个简易版的微信群聊功能
在当今的软件开发中,我们经常依赖通用的应用程序或库来实现数据交互。比如,使用HTTP客户端库从Web服务器获取数据,或者通过Web服务执行远程调用,这些都是常见的做法。但是,通用协议并不总是能满足所有需求。想象一下,如果需要处理大文件传输、电子邮件、实时金融信息或多人游戏数据,标准的HTTP服务器就显得力不从心了。这时,我们需要定制化的解决方案,比如为聊天应用优化的Ajax技术、媒体流传输或大文件传输器。甚至,设计一个全新的协议来精确满足特定需求也不失为一种选择。
2025-07-08 21:10:19
367
原创 京东二面:分库分表后翻页100万条,怎么设计?答对这题直接给P7
分库分表后的深度分页,本质是“分布式数据排序”的难题。百万以内数据:二次查询法性价比最高。高并发大厂场景:ES+HBase是唯一选择。千万别硬刚: LIMIT 1000000,10 就是自杀式操作!面试被问分页,先拍桌子喊出“禁止跳页”,再掏出ES,面试官绝对眼前一亮!
2025-07-08 20:58:46
525
原创 面试官问:MySQL 为什么不能用 Docker 部署吗?答错直接挂!
简单说,有状态容器就是:运行过程中必须“记住”数据。比如 MySQL、Redis、消息队列等,这些应用必须确保数据持久、可靠,哪怕容器重启、迁移、甚至崩溃,数据也不能丢。挂载数据卷(Volumes)绑定宿主机路径(Bind Mounts)使用网络存储(如 NFS、云盘)让数据活得比容器久。典型场景:数据库、文件服务器、缓存中间件等。难点:扩容复杂,数据一致性、同步、节点状态都需要严密设计,稍有不慎就会出问题。无状态容器则完全不同:它从来不关心自己的过去。
2025-07-08 20:48:47
532
原创 深入 Java 线程池:核心线程数动态调整技术详解与实战
下面用表格总结一下关于 Java 线程池核心线程数动态调整的要点:要点说明是否支持运行时修改是,ThreadPoolExecutor 支持通过 setCorePoolSize()方法动态修改增加核心线程数的生效时机如队列中有等待任务,会立即创建新线程;否则等新任务到来时创建减少核心线程数的生效时机默认情况下核心线程不会被终止;设置 allowCoreThreadTimeOut(true)后,多余线程在空闲超时后被回收线程池状态影响RUNNING 状态可完全调整;
2025-07-07 21:43:44
313
原创 Java 并发利器:CyclicBarrier 从入门到精通
并行迭代算法:将大任务拆分成多个子任务,每轮迭代结束后同步一次多阶段并行计算:计算分为多个阶段,每个阶段都需要使用上一阶段的结果游戏同步:等待所有玩家加载完成后开始游戏分布式系统中的数据一致性:等待所有节点数据同步后进行下一步操作模拟测试:控制多个线程同时发起请求,测试系统性能特性说明核心功能允许多个线程互相等待,直到所有线程都到达某个点重用性可以被重置并重复使用,适合迭代或周期性任务屏障动作支持在所有线程到达屏障时执行预定义的操作线程安全屏障动作在单线程中执行,天然线程安全。
2025-07-07 21:38:11
676
原创 Redis String 类型的底层实现与性能优化
特性实现方式优势注意事项数据结构SDSO(1)获取长度, 内存安全, 二进制安全根据长度选择不同结构体编码方式自动选择最佳编码,优化性能和内存embstr 修改会转为 raw内存管理预分配+惰性释放减少内存操作,提高性能可能导致暂时内存浪费原子操作命令集+事务+LUA 脚本支持复杂的原子操作,减少竞态条件事务不支持回滚高可用主从+哨兵+集群提高可用性和可扩展性需注意主从一致性延迟应用场景缓存/计数器/分布式锁/位图应用丰富的应用场景支持。
2025-07-07 21:32:46
554
原创 探索 Java SPI 机制:实现灵活插件式架构的必备技术
SPI (Service Provider Interface)是 Java 提供的一种服务发现机制,允许应用程序动态地发现和加载服务实现。简单来说,SPI 提供了一种在运行时发现和加载服务实现类的标准方法,使应用程序可以在不修改现有代码的情况下扩展功能。= null?try {new InputStreamReader(in, StandardCharsets.UTF_8) // 显式指定字符集)) {= null) {
2025-07-06 20:51:49
737
原创 Java 实战:无锁方式实现高性能线程安全单例
实现方式线程安全延迟加载防反射攻击防反序列化性能(百万次/秒)实现复杂度JDK 要求适用场景静态内部类✓✓✗(可添加)✗(需添加方法)30-37低1.2+大多数场景,尤其是需要延迟加载的情况枚举方式✓✗✓✓32-38最低1.5+需要防止反射和序列化攻击的场景CAS 方式✓✓✗✗22-35中1.5+极高并发且对锁敏感的场景双重检查锁✓✓✗✗20-34中1.5+需要延迟加载且初始化过程复杂的场景分布式实现✓视情况✗。
2025-07-06 20:41:22
837
原创 MySQL 日志系统详解:binlog、redo log、undo log 核心机制分析
binlog 是 MySQL 服务层实现的一种逻辑日志,记录了所有对数据库内容的修改操作(不包括 SELECT 等查询操作)。它以二进制形式存储,可用于数据恢复、主从复制等场景。日志类型核心用途性能影响数据安全保障最佳实践binlog主从复制数据恢复审计设为 sync_binlog=1 会降低 10-20%性能防止服务器崩溃导致的数据丢失根据复制需求选择格式定期清理旧文件redo log事务持久性崩溃恢复。
2025-07-06 20:33:37
632
原创 MySQL调优到底有多难,为什么大厂面试官总是偏爱这个问题
讲到这里,为了解答 MySQL 底层架构、存储引擎、性能调优以及大厂面试等相关问题,我特别去找曾在阿里任职P7的老师傅取了趟经,师傅直接把他们内部由阿里三位大牛整理的一份GitHub98K+星神级笔记《千金良方:MySQL性能优化金字塔法则》给了我,看完我直接就被我征服了!案例篇希望通过自底向上,从硬件和操作系统到MySQL参数/SQL语句的优化,再到架构设计.上的优化,向读者展示在实际的应用中存取数据,使用结构化数据、关系数据库时可以尝试的一些优化手段。如果优化得好,每秒可高达 57 万的写入!
2025-07-04 15:30:37
900
原创 Spring Boot 数据脱敏实现
通过以上步骤,在Spring Boot 项目中实现了数据脱敏功能。使用自定义注解和处理器并结合策略模式,可以灵活地对敏感信息进行脱敏处理。
2025-07-04 15:16:41
262
原创 SpringBoot实战:七种统计方法耗时的实现方式
这种方法结合了自定义注解和AOP,可以更精确地控制哪些方法需要进行耗时统计。@Aspect@ComponentSystem.out.println("方法[" + methodDesc + "]耗时:" + stopWatch.getTotalTimeMillis() + "ms");@Service@TimeLog("查询商品详情")// 业务逻辑优点:更精细的控制,注解可携带更多信息,便于定制缺点:需要手动在方法上添加注解。
2025-07-04 14:53:24
332
原创 Spring Boot 的 20个实用技巧
每次启动 Spring Boot 应用,看到默认的启动 Banner 是不是觉得有点单调?其实,我们可以自定义这个 Banner,让启动界面充满个性。只需在src/main/resources目录下创建一个banner.txt文件,在里面写入你想要展示的内容,比如公司 logo、项目名称、版本号等。____ _ _ _这样,下次启动应用时,就能看到自定义的 Banner。
2025-07-04 14:41:07
642
原创 2025,C++面试八股文深度总结!给你不一样的惊喜~
经济下滑、裁员风波后,找工作变得艰难许多。求职责远大于岗位数量,自然而然 HR 们就开始优中选优,激化“内卷”!有需要上述图文资料的看板老爷们,麻烦关注一下小编并私信【学习】!又或者看下方【名片】即可免费获取。的汇总,非常有必要学习掌握!毕竟真题都是技术领域。
2025-07-03 16:34:11
126
原创 SpringBoot中6种自定义starter开发方法
非官方starter命名:xxx-spring-boot-starter官方starter命名:spring-boot-starter-xxx自定义starter是SpringBoot生态中重要的扩展机制,开发者可以根据不同的需求场景,选择合适的方式实现自己的starter。从简单的基础配置类方式,到复杂的模块化组合式方式,每种方法都有其适用场景和优缺点。遵循约定优于配置的理念提供合理的默认值允许用户定制化和覆盖默认行为做好错误处理和降级策略。
2025-07-03 16:30:54
658
原创 SpringBoot中4种接口幂等性实现策略
这种方案通过计算请求内容的哈希值或摘要,生成唯一标识作为幂等键,确保相同内容的请求只处理一次。// 自定义幂等性注解/*** 过期时间(秒)*/// 默认24小时/*** 幂等键来源,可从请求体、请求参数等提取*//*** 提取参数的表达式(如SpEL表达式)*/REQUEST_BODY, // 请求体PATH_VARIABLE, // 路径变量REQUEST_PARAM, // 请求参数CUSTOM // 自定义// AOP实现@Aspect。
2025-07-03 16:25:20
616
原创 Spring AI实现一个简单的问答系统
本文详细介绍了如何使用Spring AI创建一个简单的问答系统。通过Spring AI提供的抽象层,我们能够轻松地集成大语言模型,无需深入了解底层API细节。这种方式可以让开发者专注于业务逻辑,同时保持了Spring生态系统的一致性。
2025-07-03 16:20:34
238
原创 SpringBoot+WebSocket实现直播连麦
随着互联网技术的发展,直播已成为一种主流的内容传播形式。其中,连麦功能作为直播互动的重要手段,能够有效提升用户参与感和观看体验。本文将介绍如何使用SpringBoot和WebSocket技术构建一个直播连麦系统,实现主播与观众之间的实时音视频交流和文字聊天功能。为了方便DEMO的运行,本系统基于纯内存操作实现核心业务逻辑,不依赖外部数据库或者缓存组件。
2025-07-02 19:26:07
838
原创 Spring Boot Filter、Interceptor、AOP 的使用场景与选型
选择合适的技术取决于具体需求、性能考虑和团队熟悉度。在实际应用中,合理组合使用这三种技术可以构建更加模块化、可维护的应用程序。对于 Spring Boot 应用程序,推荐遵循"责任分离"原则,根据横切关注点的性质选择最合适的实现方式,让代码结构更加清晰,逻辑更加分明。
2025-07-02 17:26:30
416
原创 利用SpringBoot中的RestTemplate实现反向代理
反向代理是指以代理服务器接收客户端请求,然后将请求转发给内部服务器,并将内部服务器的响应返回给客户端。客户端只与反向代理服务器通信,不直接访问内部服务器。通过SpringBoot和RestTemplate,我们可以快速实现一个功能完备的反向代理。相比于专门的代理服务器如Nginx,这种方式更加灵活,可以与业务逻辑紧密结合,适合实现特定的代理需求。但对于大规模的代理场景,还是推荐使用专门的代理软件。
2025-07-02 17:14:15
183
原创 Spring Boot 整合 MinIO 实现全场景文件管理:从基础操作到分片上传
最近项目中需要处理大量文件存储和管理的需求,对比了 Nginx、FastDFS、阿里云 OSS 等多种方案后,最终选择了 MinIO。今天就来和大家分享一下 SpringBoot 整合 MinIO 的全过程,从为什么选择 MinIO,到各种文件操作的实现,包括简单的文件上传、批量上传、文件下载、文件预览,再到大文件分片上传和秒传功能。
2025-07-01 16:37:12
697
原创 Nginx 配置实战:从摸鱼到部署,手把手教你搞定生产级配置
反向代理:藏好后端 IP,安心摸鱼不怕攻击负载均衡:流量均分,再也不用背锅服务器崩了静态资源:让 Nginx 处理图片 JS,后端专注写接口限流防刷:恶意请求全拦下,日志清净心情好HTTPS:小绿锁一挂,产品经理笑哈哈Nginx 配置不是一次性的!上线后要根据服务器压力、用户反馈动态调整,比如大促时加大限流阈值,发现恶意 IP 及时拉黑。代码可以慢慢写,Nginx 必须稳如狗;配置写对了,摸鱼才安心!
2025-07-01 16:34:15
894
原创 为什么 ArrayList是线程不安全却在开发中被广泛使用?
ArrayList 的广泛使用,本质上是技术选型中场景适配与性价比场景适配:大多数业务逻辑运行在单线程环境,无需为极低概率的多线程问题付出额外成本。性能优先:在单线程场景下,ArrayList 的无锁设计带来显著的性能优势,远超 Vector 等线程安全集合。方案灵活:当遇到多线程场景时,Java 生态提供了成熟的解决方案(如同步包装器、写时复制容器),允许开发者按需选择。理解 ArrayList 的线程安全问题,不是为了避免使用它,而是为了在合适的场景中合理运用,并在需要时采用正确的防护措施。
2025-07-01 16:26:02
450
原创 高考放榜夜,系统别崩!聊聊查分系统怎么设计,三张表足以?
表结构是地基,得稳,得能扩展(比如以后加复核功能、通知功能,表字段早就留好位置);索引是楼梯,得让数据查找又快又准;高并发策略是钢筋,得能扛住瞬间的巨大压力。最重要的是,得从用户的真实场景出发:考生要快、要准,家长要安心,管理员要能监控和维护。技术不是炫技,是让每个查分的人,在输入信息的那一刻,都能稳稳地看到属于自己的答案。这大概就是做技术最有成就感的地方吧 —— 用代码守护千万个夏天的期待。
2025-07-01 16:22:39
532
原创 反射机制在实际业务中的深度应用解析
反射机制是 Java 语言赋予开发者的 “元编程” 能力,其价值在于解决传统静态编程无法处理的动态性问题。从通用 DAO 框架到插件化支付网关,从自动化数据映射到框架底层实现,反射的应用贯穿了系统架构的多个层面。但需要强调的是,反射并非 “银弹”。合理使用反射的关键,在于平衡灵活性与性能,知晓何时该借助动态性突破限制,何时该回归常规编程保持简单。对于初级开发者,建议从工具类实践开始;对于架构师,则需在系统设计初期评估 “动态性需求”,让反射成为提升系统扩展性的有力武器,而非带来复杂性的负担。
2025-07-01 16:20:10
885
原创 手撕面试官系列(一):如何在现在这个大时代找到一份心仪的工作
Java真的要过时了吗?翻微信朋友圈的时候,有之前一个请教过我的小伙子,发的一个秋招的情况,截图来看是很不错,他是今年刚刚毕业的那种,从他之前的朋友圈来看,是一个比较积极进取的人。其实这些都是很正常的现象,导致这个场景出现的因素有很多,就比如说大环境经济的不景气,各种大厂在削减自身的开支,特别是前几年行情还不错,就开始流行起了内卷的说法,还有一些因素的话,是在外头看的事情多了,人都会有攀比的心理(这才是人性),当所有的社交媒体都在鼓吹这些美好的东西的时候,会让人产生那种奇葩的感觉,自己好像确实很差劲。
2025-06-30 21:30:48
1713
原创 直播系统如何设计高并发推流与拉流架构?
直播系统的推流和拉流是典型的高并发实时系统,对带宽、延迟、稳定性要求极高。接入鉴权房间管理用户控制拉流分发数据上报与统计而在流媒体处理方面,则需结合 C/C++、FFmpeg、Nginx-RTMP、Media Server 等高性能组件构建混合架构。
2025-06-30 21:01:27
647
原创 MyBatis Plus 如何优化千万级数据的 CRUD?
MP 是 MyBatis 的增强工具,主打“无侵入、低门槛、强增强”,提供了一整套优雅的 CRUD 封装,尤其适合中后台系统的开发。但性能优化这件事,MP 提供了钩子,还得靠我们自己去掌握底层逻辑与场景判断。MyBatis Plus 提供了优雅的接口,但数据量上来之后,框架只是工具,根本还在底层 SQL 和设计策略上。作为一个写了 8 年 Java 的程序员,我最大的体会是:性能不是调出来的,是设计出来的。合理建模 + 规范使用 MP + 数据库调优,才能让你的系统在千万级数据面前从容应对。
2025-06-30 20:59:24
754
原创 如何实现分库分表后的全局唯一 ID?
引言:在千万级用户规模的系统中,单表数据量突破5000万行后,分库分表成为解决数据库性能瓶颈的关键手段。然而,分库分表后如何生成全局唯一ID却成为新的技术挑战——传统的自增ID在分布式环境下会出现重复,而UUID等方案又存在索引性能差、存储空间大等问题。作为一名拥有8年经验的Java架构师,我曾为多个大型电商和金融系统设计ID生成方案,深知全局唯一ID在分布式系统中的重要性。今天我将从业务场景出发,深度剖析四种主流方案,并给出生产级实现代码。
2025-06-30 20:57:07
696
原创 Docker的时代已经落幕了吗?
容器化技术正在进化而非消亡,Docker已悄然成为云原生世界的基石近两年,随着Kubernetes、Serverless、WebAssembly等技术的兴起,以及云厂商不断推出更高级别的抽象服务,一些声音开始质疑:"Docker是否已经过时?" 作为一名与Java生态共同成长八年的开发者,我见证了Docker如何彻底改变我们的开发、测试和部署流程。今天,让我们从Java开发者的视角,理性审视Docker的现状与未来。
2025-06-30 20:54:04
855
原创 为什么面试问的越详细反而没有后文了?
面试官问得越细却没了下文,往往不是问题本身太难,而是你的回答未能精准命中对方的核心诉求点。大厂在茫茫人海中寻找能成长为中流砥柱的“潜力股”,他们用深度问题探测你的天花板;而中小厂则在急切寻觅能立刻投入战斗、解决眼前问题的“熟练工”,他们用细节问题验证你的地板是否足够坚实可靠。作为求职者,看清舞台,调整策略,方能在面试的“灵魂拷问”中,交出匹配考官期待的答卷。毕竟,在技术的江湖里,找对山头,才能更好地施展拳脚。
2025-06-30 20:52:35
646
原创 手撕面试官(一):Spring微服务开发就是这么简单
其实这些都是外部的理由,处于压力去掌握,去学习,一旦没有了找工作,涨薪的压力,那学习源码可能就抛之脑后了。买了相关课程,老师讲的很好,我突然意识到学习Spring微服务开发是有简单,有价值,有意义,有乐趣的事情上边那句话,翻译下,发自内心想学Spring,那么我就应该真正的掌握Spring吧。上面四个理由,可能对大家最有帮助的是第3点,为什么意识到Spring微服务开发是有简单,有价值,有意义,有乐趣的事情。{"name":"珍珠奶茶", "price":15, "sugar":"半糖"}
2025-06-29 19:53:09
661
原创 从七年开发者视角看 Java 接口设计:那些年我们踩过的 “字段管理“ 坑
作为一名在 Java 开发领域摸爬滚打了七年的 "老兵",每次带新人时总会看到一些似曾相识的场景。看着实习生对着屏幕皱眉头的样子,常常让我想起自己初入职场时的模样 —— 那些因经验不足踩过的坑,如今都成了宝贵的教训。今天想和大家聊聊接口开发中最容易被忽视却又至关重要的 "字段管理" 问题,这可是我用多次生产事故换来的经验之谈。
2025-06-29 19:49:19
733
原创 MySQL从入门到实战:表设计、索引优化与高频面试解析
OLTP系统优先考虑索引覆盖分析型系统适当使用反范式设计定期使用pt-query-digest分析慢日志新版本优先考虑MySQL 8.0(CTE、窗口函数等新特性)
2025-06-29 15:07:32
498
原创 Java 并发编程再进阶:从实战笔记到问题攻防,7 年经验深度拆解
优先使用 JUC 包中的工具类:避免手动实现锁机制,优先使用ConcurrentHashMap、CopyOnWriteArrayList等成熟的并发集合。使用原子类替代简单锁:对于计数、累加等简单操作,优先使用AtomicInteger等原子类,避免使用重量级锁。保持锁的获取顺序一致:通过统一锁的获取顺序,避免死锁的发生。减小锁粒度:避免使用大范围的锁,将锁的范围限制到最小必要部分。警惕 ABA 问题。
2025-06-29 14:57:58
743
原创 一位 Java 七年老兵的并发编程实战笔记:锁、原子类与线程安全集合全解析
优先使用 JUC 包中的工具类:避免手动实现锁机制,优先使用ConcurrentHashMap、CopyOnWriteArrayList等成熟的并发集合。尽量使用原子类替代锁:对于简单的原子操作(如计数、累加),优先使用AtomicInteger、AtomicLong等原子类,性能更高。合理选择锁的粒度:使用细粒度锁替代粗粒度锁,减少锁竞争。例如,使用分段锁或对象锁替代类锁。避免死锁和锁饥饿保持锁的获取顺序一致使用带超时的锁获取方法考虑使用公平锁(虽然性能略低,但可避免线程饥饿)
2025-06-29 14:54:16
647
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人