- 博客(37)
- 收藏
- 关注
原创 lombok 工具类注解
摘要:@UtilityClass和@NoArgsConstructor(access = AccessLevel.PRIVATE)都是用于防止工具类实例化的注解。前者自动生成私有构造器并强制所有方法静态化,适用于纯工具类;后者仅生成私有构造器,允许非静态方法存在。@UtilityClass提供更严格的安全检查,而后者更灵活。建议纯工具类使用@UtilityClass,需要保留非静态方法时用@NoArgsConstructor。两者均通过Lombok实现,但@UtilityClass属实验性功能需注意启用状态
2025-06-11 13:00:45
592
原创 Spring Boot缓存组件Ehcache、Caffeine、Redis、Hazelcast
本文分析了Spring Boot缓存架构的核心组件与主流缓存工具特性对比。通过表格和图表详细比较了Ehcache、Caffeine、Redis和Hazelcast在性能、存储方式、集群支持等关键维度的差异,并提供了本地缓存(Caffeine)和分布式缓存(Redis)的配置实现案例。针对不同应用场景,提出技术选型决策树:小数据量高性能场景推荐Caffeine,大数据量分布式场景选择Redis或Hazelcast。最后对比了各方案的高级特性,为开发者提供全面的缓存技术选型参考。
2025-06-05 15:52:29
1429
原创 SpringBoot EhCache 缓存
摘要: EhCache作为高效Java缓存框架,通过堆内/堆外/磁盘多级存储实现纳秒级响应,支持LRU/LFU等过期策略。Spring Boot集成仅需添加依赖、配置XML及启用注解,核心注解如@Cacheable、@CacheEvict简化缓存管理。其优势在于轻量、低延迟,但分布式支持较弱。案例演示图书查询服务,首次访问模拟3秒延迟,后续命中缓存瞬时返回。适用于高频读场景,显著提升QPS(实测120→4500+),但不适合大数据或频繁更新场景。调试时可结合JMX监控命中率,根据业务需求平衡缓存策略。
2025-06-05 09:02:11
1306
原创 HTTP、WebSocket、SSE 对比
HTTP、WebSocket与SSE特性对比及选型指南 本文对比了HTTP、WebSocket和SSE三种网络协议的核心特性。HTTP采用请求-响应模式,适合传统API交互但实时性差;WebSocket支持全双工通信,适合实时应用但实现复杂;SSE允许服务器单向推送,简单易用但不支持双向交互。三者各有优劣:HTTP兼容性好但效率低,WebSocket实时性强但需手动管理连接,SSE轻量但功能有限。文章通过Java示例演示各协议实现,并给出选型建议:WebSocket适合双向实时场景(如聊天),SSE适用于服
2025-06-02 11:59:31
658
原创 Java Duration 类
Java 8的Duration类用于精确表示时间间隔,支持秒级和纳秒级计算。主要特性包括:基于ISO-8601标准格式(如"PT2H30M15.5S")、不可变且线程安全、最高纳秒精度。典型应用场景包括代码耗时测量、超时控制、时间单位转换和任务调度。通过between()方法计算时间间隔,提供加减乘除运算和单位转换(如toMillis()),优于传统TimeUnit。注意Duration仅处理时间量,日历日期需用Period类。结合Instant使用可构建精确计时逻辑。
2025-06-02 11:54:46
301
原创 Mysql时间函数
通过上述方法,可高效处理 MySQL 中的时间格式化和比较需求。:按单位(秒、分钟、小时、天等)计算时间差。:将日期/时间值格式化为字符串。:将字符串转换为日期/时间类型。:返回两个日期相差的天数。:对日期进行加减操作。
2025-05-28 14:24:52
269
原创 开发过程中慢SQL 监控手段、分析工具、优化方法
判断慢 SQL:通过数据库日志、执行计划、APM 工具定位问题。优化核心:索引设计、SQL 改写、绑定变量、分库分表。持续优化:建立 SQL 审核流程,定期分析慢查询日志,结合业务演进调整设计。
2025-04-23 09:09:45
468
原创 Java 线程池概念理解
Java 线程池是并发编程的基石,其高效性源于对线程生命周期的精细管理和任务调度的智能决策。正确配置参数(核心线程数、队列类型、拒绝策略)需结合具体业务场景,同时通过监控和动态调整应对流量波动。进阶实践中,应注重线程命名规范化、异常处理、资源泄露防范,并合理利用 Java 8+ 的新特性提升系统性能。当任务提交到线程池时,空闲线程直接从队列中获取任务执行,避免反复创建新线程的开销。线程执行完任务后不会销毁,而是继续等待下一个任务。超时等待),实现“线程-任务”的解耦和复用。循环从队列中获取任务
2025-04-22 14:55:41
863
原创 WITH 临时表 SQL优化
CTE 是一个命名的临时结果集,通过WITH关键字定义,仅在当前 SQL 语句中有效。语法如下:sqlSELECT statement -- 子查询或表表达式-- 后续使用cte_name作为表名CTE 是 SQL 优化的重要工具,尤其在复杂查询场景中,通过拆解逻辑、复用中间结果、简化递归处理,既能提升代码可读性,又能借助数据库优化器提升性能。在 Oracle 中,结合索引优化、执行计划分析和合理的物化策略,CTE 可显著减少子查询重复计算,降低 IO 和 CPU 消耗。
2025-04-22 14:53:51
896
原创 HashMap 初步理解 put 操作流程 HashMap 的线程安全问题
通过源码级分析,可以深入理解 HashMap 的设计哲学与工程实现细节,为高性能编程奠定基础。HashMap 是 Java 中最常用的哈希表实现,基于。
2025-04-20 00:05:12
863
原创 Java中常见的锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
在Java中,锁是实现多线程同步的核心机制。不同的锁适用于不同的场景,理解其实现原理和使用方法对优化性能和避免并发问题至关重要。
2025-04-19 23:53:47
1211
原创 Tomcat、Jetty、Undertow 对比
SpringBoot web服务器对比选择自定义配置:(2) Jetty依赖配置:需排除 Tomcat 并添加 Jetty 依赖。自定义配置:(3) Undertow依赖配置:排除 Tomcat 并添加 Undertow 依赖。自定义配置:9. 性能调优建议Tomcat优化线程池:调整 和 。开启 NIO 模式(默认已启用):Jetty异步处理:利用 Jetty 的异步
2025-04-15 22:22:21
1256
原创 Spring @Autowired VS @Resource
是两种常用的依赖注入注解,但它们在来源、注入机制和使用场景上存在差异。:字段注入不符合构造器注入的最佳实践,建议重构为构造器注入以提高代码健壮性。在IntelliJ IDEA等IDE中,字段注入的。建议改用构造器注入或Setter方法注入。Spring团队建议优先使用。在Spring框架中,
2025-04-13 22:49:22
436
原创 git push超过100MB大文件推送失败(write error: Broken pipe)
使用git push推送超过 100MB 的大文件时,Git 会因默认限制或远程仓库(如 GitHub、GitLab)的限制而报错。
2025-04-13 00:56:43
511
原创 Docker快速搭建MQTT服务指南
Mosquitto:适合轻量级、单节点场景,配置简单。EMQX:适合企业级需求,支持集群和扩展。通过 Docker,您可以在 5 分钟内完成 MQTT 服务的部署,并快速验证功能!
2025-04-09 15:25:22
790
原创 Docker 安装 RabbitMQ 指南
首先拉取官方 RabbitMQ 镜像(包含管理界面):2. 运行 RabbitMQ 容器基本运行命令带持久化存储的运行命令3. 访问管理界面容器启动后,可以通过浏览器访问管理界面:设置时区5. 常用管理命令启动容器: 停止容器: 查看日志: 进入容器: 6. 使用 Docker Compose 部署创建 文件:然后运行:注意事项生产环境中不要使用默认的 guest/guest 凭证如果需要外网访问,建议修改默认端口并配置防火墙规则重要数据务必配置持久化存储
2025-04-09 14:45:57
230
原创 Ubuntu安装WebStorm
前提:必须正确安装 JDK下载:https://www.jetbrains.com/webstorm/?fromMenu安装过程:解压tar zxvf WebStorm-172.3544.10.tar.gz移动sudo mv WebStorm-172.3544.10/ /opt/WebStorm-172.3544.10/*创建链接sudo ln -s /opt/WebStor...
2019-07-07 17:36:21
434
原创 私有化、import、封装、继承、多态
私有化xx: 公有变量_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到),子类不继承,子类不能访问,如果在子类中向__xx名字赋值,那么会在子类中定义的一个与父类相同名字的属性xx:双前后下划线,用户名字空间的魔法对象或属性。例...
2019-07-07 17:19:14
288
原创 Ubuntu 中 pycharm 汉化
1.看pycharm位置whereis pycharm2.分别进入2.进入相应文件夹中找到 lib 文件夹3.下载汉化包链接:https://pan.baidu.com/s/1EKNUbEDIu-Jb7MwGtG0QBg 密码:0mex4.将汉化包拷贝到相应文件夹中sudo cp ~/Desktop/resources_zh_CN_PyCharm_2019.1_r...
2019-07-07 08:51:01
889
原创 深拷贝、浅拷贝
1.浅拷贝浅拷贝是对于一个对象的顶层拷贝通俗的理解是:浅拷贝只拷贝了引用,并没有拷贝内容2.深拷贝模拟测试切记用深拷贝深拷贝是对于一个对象所有层次的拷贝(递归)3. 注意点浅拷贝对不可变类型和可变类型的copy不同不可变类型如果copy.copy 、copy.deepcopy对一个对一个全部都是不可变类型的数据进行拷贝,那么它们结果相同,都只是引用指向...
2019-07-06 19:53:34
154
原创 Ubuntu 安装pygame
简介pygame 是基于对 SDL库的python 封装,提供python接口。SDL(Simple DirectMedia Layer) 是一个跨平台的游戏开发库,方便游戏开发和移植。目前最新版本SDL1.2.14. 下载地址:http://www.libsdl.org/download-1.2.php. SDL库作者Sam Lantinga,采用C语言开发。SDL还有perl, erl...
2019-07-06 14:35:00
777
1
原创 Sublime Text 汉化
安装Package Control1.打开Sublime Text 使用“Ctrl+~”打开命令行2.在浏览器打开网址“https://packagecontrol.io/installation”3.安版本所需复制代码粘贴到Sublime Text命令行并回车安装中文汉化包1.在Preferences打开Package Control2.搜索Install Package,并点...
2019-07-06 14:18:25
197
原创 Ubuntu 18.04安装谷歌浏览器
1.打开终端添加了一个源在我们的Ubuntu系统中sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/ 2.添加chrome密钥,直到出现 OK 表示命令执行完成wget -q -O - https://dl.google.com/linux/linux_sig...
2019-07-06 13:54:06
449
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人