- 博客(93)
- 资源 (3)
- 收藏
- 关注
原创 Redis-布隆过滤器
Redis布隆过滤器使用需注意三个关键点:1)底层由两个key组成(配置key和bitmap数据key),仅设置过期时间无法完全清理;2)在日活等临时场景下需手动调用delete()彻底清除,避免内存泄露;3)容量规划要合理,tryInit参数需预估业务量。建议配合监控、定期清理策略(如定时任务)使用,确保内存友好。完整实现需包含初始化、过期设置和显式删除三个步骤。
2025-08-27 14:49:37
720
原创 Java-LoadingCache的罪
文章摘要:本文分析了Guava LoadingCache在多线程环境下的问题和不足,重点讨论了缓存刷新时机和并发场景下的性能问题。作者通过实际代码示例展示了LoadingCache的使用方式,指出其在高并发场景下可能导致的重复加载、性能开销和数据一致性问题,特别是在缓存失效时遇到流量突增的情况。最后建议在高并发ToC场景下避免使用该方案,或者采用更短的定时任务来手动刷新缓存。
2025-08-19 18:41:55
230
原创 Java-Scheduled问题
【摘要】程序员小A发现订单定时关闭功能出现延迟,经排查发现是Spring默认单线程执行定时任务导致的。同事指出问题根源在于未配置线程池,默认情况下所有定时任务会串行执行。解决方案是自定义线程池配置,通过实现SchedulingConfigurer接口设置16个核心线程,确保多个定时任务能并行执行。该案例揭示了Spring定时任务的底层机制:使用@Scheduled注解时需注意默认单线程执行的局限性,对于需要处理大量或耗时任务的场景,必须显式配置线程池才能保证任务准时执行。
2025-08-19 15:05:10
565
原创 Java-Spring启动扩展点
摘要 Spring6/SpringBoot3对Bean初始化顺序和循环依赖处理更严格,若在初始化阶段调用其他Bean可能导致空指针异常。建议改用应用启动完成后的处理方式,如: 初始化阶段:@PostConstruct(依赖注入后)、InitializingBean、init-method(仅处理本Bean数据); 启动完成后: 事件监听:ContextRefreshedEvent(需处理多次触发问题); 接口实现:CommandLineRunner(支持参数顺序)、ApplicationRunner(参数封
2025-08-19 11:02:18
745
原创 Java-Redission限流器
本文介绍了使用Redisson实现Redis限流器的完整方案,重点揭示了潜在的内存泄漏问题及解决方案。文章详细展示了基于Spring Boot的接入流程,包括注解定义、拦截器实现和控制器使用。核心风险在于Redisson不会自动为限流器的辅助key设置过期时间,导致大量无用数据堆积。作者通过分析Redis内存异常现象,指出必须手动为限流器key设置过期时间,并针对新旧版本Redisson分别给出了规范写法:新版本可直接调用expire()方法,旧版本需手动设置key过期时间。文章特别强调这一内存管理问题的重
2025-08-18 19:14:19
941
原创 Java-批处理BufferTrigger
BufferTrigger是phantomthief开源的高并发批量处理工具,支持时间间隔和缓冲大小两种触发条件。它通过批量处理数据减轻数据库压力,减少锁竞争,适用于高并发场景。提供两种使用方式:直接创建方式(简单配置)适用于基础需求,使用List存储数据;队列方式(simple+setContainer)支持多策略触发,使用LinkedBlockingQueue存储,配置更灵活。通过pom引入依赖后,开发者可根据业务需求选择合适的方式实现高效批量处理。
2025-08-18 18:04:23
270
原创 Java-FCM批处理
FCM服务在升级到9.2.0版本后取消了sendAll批处理API,导致系统处理压力增大。文章分析了三种解决方案:单独建立推送服务、改造业务使用Topic主题批处理、设置推送优先级。重点介绍了Topic和设备组两种批处理方式,包括API使用、线程池配置和代码示例。Topic方式适合大规模相同内容推送(最多2000个订阅),设备组方式适合小规模认证推送(最多20台设备)。文章还指出了FCM免费服务的实际限制问题,并提供了相关文档参考。
2025-08-18 17:55:23
761
原创 Java-Scheduler-Mysql分布式锁
摘要:本文介绍在已有MySQL环境下的分布式锁实现方案。基于Java21+SpringBoot3.4.4+MySQL8,采用ShedLock框架实现分布式定时任务锁。方案包括:1)引入shedlock-spring和shedlock-provider-jdbc-template依赖;2)配置MySQL数据源代理并启用@EnableSchedulerLock注解;3)创建shedlock表记录锁状态;4)通过@SchedulerLock注解实现任务锁定。该方案无需Redis,仅依赖现有MySQL即可实现分布式
2025-08-18 17:13:39
209
原创 Java-穷酸版RedisZset数据结构
摘要:TimestampSortContainer类是一个模拟Redis zset功能的并发容器实现,适用于没有Redis服务的个人项目。它使用ConcurrentSkipListMap按时间戳存储元素,并配备ConcurrentHashMap索引加速查询。主要功能包括:添加元素时关联时间戳、按时间戳删除元素、删除小于等于指定时间戳的所有元素、获取全部元素等。该实现线程安全,通过两个并发集合的配合,既保证了时间戳排序功能,又提供了高效的查询性能。示例代码展示了基本使用方法,适合需要时间排序集合功能的轻量级应
2025-08-18 17:03:35
154
原创 Java-拦截安全扫描攻击
摘要:本文记录了服务器安全防护实践,针对Nginx日志中发现的XSS攻击、目录遍历、Log4j注入等安全威胁,提出了多层次的防御方案。首先在Nginx配置中通过正则表达式拦截异常请求,包括特殊字符、路径穿越、注入攻击等;其次在Tomcat层面通过Valve组件过滤恶意请求;最后在Java应用层通过Filter、ControllerAdvice等多重机制进行防护。文章提供了详细的配置示例,强调通过Web服务器、应用服务器和代码层的协同防护来构建纵深防御体系。
2025-08-18 16:45:30
207
原创 Java-苹果开发者账号迁移
摘要:本文详细分析了苹果开发者账号迁移过程中Sign in with Apple导致的用户ID不一致问题。当应用迁移到新开发者账号后,苹果登录生成的唯一标识变化会导致用户数据丢失。文章提供了完整的解决方案:1)开发者后台申请账号迁移;2)通过三个苹果API接口(old ID→transfer_sub→new ID)实现ID转换;3)给出了Java核心工具类代码实现,包含ClientSecret生成、AccessToken获取及ID转换方法。迁移过程中需注意暂停苹果登录功能,避免脏数据产生。该方案成功解决了因
2025-08-18 15:28:09
889
原创 Java-OpenCV过滤无意义图
【摘要】本文介绍了使用OpenCV检测无效图像(如摄像头被遮挡时拍摄的图片)的Java实现方案。文章提供了三种JavaCV集成方式:1)全平台完整包(400M+);2)按需加载平台相关组件;3)精细化控制各模块。核心代码展示了通过高斯模糊+Canny边缘检测算法计算边缘像素占比,当占比低于0.001%时判定为无效图像。重点提示:1)Mat对象使用堆外内存需手动release();2)建议使用计算型机型处理CPU密集型操作。方案已通过线上验证,适用于本地和网络图像检测场景。
2025-08-18 14:59:33
350
原创 SpringAI之MCP接入
本文详细介绍了基于SpringAI的MCP服务接入流程,重点包含:1)基础环境配置(Java SDK 21+SpringBoot 3.4.4);2)核心实现方案,包括POM依赖、application.yml配置、工具类开发(使用@Tool注解暴露服务)及工具注册;3)针对分布式部署的SSE连接管理方案,通过自定义CustomSseTransportProvider替代原生实现,结合Redis发布订阅机制解决会话漂移问题。文中提供了完整的代码示例和配置说明,特别强调了分布式场景下会话保持的关键处理逻辑,为实
2025-08-15 19:07:53
1286
原创 数组求交集
本文介绍了在Java中快速判断两个List是否存在交集的几种方法:1)使用contains()遍历检查;2)转换为HashSet利用其O(1)查询特性;3)使用Stream的anyMatch()。重点分析了当数据量大时,将List转为HashSet可显著提升性能,因为HashSet的contains操作是O(1)复杂度,而List是O(n)。最后推荐使用Stream+HashSet的组合方式,既简洁又高效,特别适合处理大规模数据时的交集判断需求。
2023-08-15 16:43:50
301
原创 经纬度计算距离
本文介绍了三种地理距离计算方法:1. 精确计算法基于椭球体模型,使用GeodeticCalculator计算大地线段距离,精度高但计算复杂;2. 近似计算采用勾股定理简化,速度快但精度低;3. Haversine公式基于球体模型,平衡速度与精度,适用于小范围计算。其中精确计算运用大地测量学原理,考虑地球椭球体形状和WGS84等模型参数,通过复杂数学运算计算大地线段的长度、方向等信息。三种方法各具特点,可根据实际需求在计算精度和效率之间进行权衡选择。
2023-08-15 16:34:57
397
原创 webflux-1-概念的理解
本文探讨了WebFlux响应式编程框架的特点和挑战。作者指出WebFlux通过函数式流编程降低了程序员间的技术差距,但也带来了调试复杂、反射支持不足等问题。文章介绍了WebFlux三大组件及其流式编程思想,用南水北调工程作比喻解释"数据流不可中断"的核心概念。作者建议初学者理解流式编程思想,避免在代码中中断数据流,最后强调所有操作都应返回流并由Spring统一订阅执行。
2021-03-09 19:00:09
683
原创 webflux-2-项目搭建
本文介绍了使用SpringBoot 2.3.1和JDK1.8搭建WebFlux项目的基本步骤。首先在pom.xml中添加spring-boot-starter-webflux依赖,然后创建FluxRouter类进行路由配置,以及FluxHandler类处理业务逻辑。项目还实现了统一的异常捕获机制和返回结果封装,通过ResultModel类统一API响应格式。文章省略了常规项目搭建细节,主要展示了WebFlux项目的核心配置和结构设计。
2021-03-09 18:59:04
406
1
原创 RESP协议知识点
摘要:本文介绍了Redis的RESP协议(Redis Serialization Protocol),这是一种简单高效的通信协议。RESP通过特定前缀(如"+"、"-"、"$"等)区分不同类型的数据响应,采用二进制安全的字符串格式,具有易解析、高性能和人类可读的特点。文章通过实例演示了RESP协议的格式,并展示了如何基于该协议手动实现一个Redis客户端,包括建立Socket连接、构建RESP协议命令和解析服务器响应等关键步骤。该实现验证了RESP
2020-05-13 16:53:37
2109
2
原创 深入浅出AOF功能和AOF重写两个知识点
本文默认你是使用过redis并了解redis的基础概念,学习redis入门并不难,给你介绍各种API使用也没啥意思。在这里 不会给你堆各种专业词汇,只有我个人理解的大白话这里没别的 先来张总原理图,花10秒时间记一下,跟游戏打副本一样,先看下地图 做到脑子里有个大概的脉络,这里也是平时工作中比较常用的一种工作思考方式,遇到难的问题如果没思路就先忙别的,我们的大脑会在后台保持这个问题并且会时不时的激活一下,同样的时间做了多件事。高考时老师说拿到试卷先看一遍最后的作文题目在开始答题,一样的思想AOF功能
2020-05-13 14:08:24
4348
3
原创 记录 对供货商财务报表的导出的优化
摘要:本文介绍了供货商结算报表系统的三次优化过程。初版采用串行生成方式性能较差;第二版引入生产者-消费者模式和多线程并发处理,使用CompletionService优化任务执行顺序,并采用ConcurrentHashMap实现缓存机制;第三版改用内存效率更高的ConcurrentLinkedHashMap,支持LRU缓存淘汰策略,并优化了线程池参数。通过分阶段数据收集与报表生成、多级缓存和并发控制,系统处理效率显著提升,尤其在订单高峰时段表现更优。优化后系统实现了高效的内存利用和稳定的并发处理能力。
2020-04-25 23:04:36
252
原创 redis哨兵选举条件
Redis哨兵模式通过监控主节点实现高可用。哨兵定期检测节点状态,当主节点主观下线(SDOWN)时,会询问其他哨兵确认是否客观下线(ODOWN)。超过半数哨兵确认后,哨兵集群会选举leader进行故障转移:从存活的从节点中选择优先级最高(slave-priority值最小)、复制偏移量最大或runid最小的节点作为新主节点。整个过程确保主节点故障时能自动切换,保障系统持续可用。
2020-03-25 20:04:20
3748
原创 redis的过期策略在持久化时的处理
rdb1。生成rdb文件:生成时,程序会对键进行检查,过期键不放入rdb文件。2。载入rdb文件:载入时,如果以主服务器模式运行,程序会对文件中保存的键进行检查,未过期的键会被载入到数据库中,而过期键则会忽略;如果以从服务器模式运行,无论键过期与否,均会载 入数据库中,过期键会通过与主服务器同步而删除。aof1。当...
2020-03-25 19:58:37
407
原创 redis-server和redis-benchmark使用简略
redis-server详解./redis-server ./redis.conf & //指定配置文件启动./redis-server --test-memory 1024 //检测操作系统能否提供1G内存给redis, 常用于测试,想快速占满机器内存做极端条...
2020-03-25 19:57:17
251
原创 synchroized和Lock的初级笔记
本文对比了Java中synchronized和Lock的主要区别:1)Lock是接口需手动加解锁,synchronized是关键字自动管理;2)Lock功能更丰富,支持多种获取方式、公平性设置和状态查询;3)synchronized锁会升级(偏向锁->轻量级锁->重量级锁),在线程少时不真正加锁;4)两者都是可重入锁,但线程状态不同。此外还讨论了公平/非公平锁的优缺点,以及自旋锁的适用场景:适用于锁竞争不激烈且耗时短的代码块,能减少上下文切换开销,但不适合竞争激烈或耗时长的场景。
2020-02-12 23:48:21
368
1
原创 ExecutorService 的使用
摘要:ExecutorService是Java并发编程中的重要接口,但使用不当会导致严重问题。Executors提供的四种线程池(newSingleThreadExecutor、newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool)在默认配置下存在OOM风险。特别需要注意的是,线程池不会随main方法结束自动关闭,必须手动调用shutdown()方法,并配合awaitTermination()设置超时时间,最后用shutdownNow()
2020-02-06 16:10:11
1204
原创 关于小程序上传 java服务端的接收
昨天调试微信小程序的上传,记录下 也能帮其他人少点弯路。看小程序文档 上传的API里有下面这个参数java服务端的接收" title="关于小程序上传 java服务端的接收" style="margin:0px; padding:0px; border:0px; list-style:none">其实很明白就是给上传的文件起个别名,关键是java服务器怎么去获取。文档里说了
2017-09-27 11:01:53
629
原创 一次神奇的图片“消失“的事件
摘要:用户反馈APP图片加载异常,4G网络下需反复进出才能显示。经测试发现CDN回源不稳定,时而中断。排查发现是运营商节点迁移不彻底导致图片加速失效,超时严重。最终运营商调整节点后问题解决。整个排查涉及客户端超时分析、CDN回源监控和运营商网络检测,最终恢复正常的图片加载体验。
2017-05-27 16:51:40
491
原创 微信页面登录授权和分享那些事
微信现在在我们的生活中已经是必须品了,很多公司都会基于微信做很多的推广活动,就例如 投票吧,一个页面分享出去让好友来帮忙投票,为了保证投票的准确性往往需要投票先登录自己的微信号完成登录授权后再进行投票,保证 一个用户只能投票一次,这里就要涉及到微信的网页登录和授权和分享,关于分享主要是分享时的链接/标题/描述文字/分享图标我们可以自定义,因为如果你不配置微信分享分享就是你当前页的信息,虽然微信提供
2015-06-26 11:20:26
7948
3
原创 jfreechart产生饼状图,折线图,柱状图
本文介绍了使用JFreeChart生成三种统计图(饼图、柱状图、折线图)的完整实现步骤。首先需要导入必要的JAR包,然后创建ChartUtil工具类封装图表生成方法。接着分别展示了三种图表的数据集封装方式,包括饼图的DefaultPieDataset、柱状图和折线图的DefaultCategoryDataset。在JSP页面中通过工具类生成图表并引用显示,最后在web.xml中配置DisplayChart Servlet以支持图表渲染。文章提供了从开发到部署的完整流程,并建议统一使用UTF-8编码格式。
2015-06-02 15:50:04
744
原创 DisplayTag汉化
1.在SRC下新建displaytag.properties,名字不要写错2.将下面的代码复制到displaytag.properties中保存(这里的编码格式都是用的unicode)paging.banner.items_name=\u6d88\u606fpaging.banner.no_items_found=\u6ca1\u6709\u627e\u5230{0}\u8bb0\u5
2015-06-02 15:49:02
818
原创 android中的ellipsize
最近为了解决某个bug,textview中内容过长的话自动换行,但是调用measureText函数时发现返回值很不准确,单位也不确定,是 pixel还是dip,都不准。后来想起textview中有个内容过长加省略号的属性,即ellipsize,可以较偷懒地解决这个问题,哈哈~用法如下:在xml中android:ellipsize = "end" 省略号在结尾a
2015-06-02 15:47:01
428
转载 Android EditText 的属性
EditText的属性很多,这里介绍几个:android:layout_gravity="center_vertical"设置控件显示的位置:默认top,这里居中显示,还有bottomandroid:hint="请输入数字!"设置显示在空间上的提示信息android:numeric="integer"设置只能输入整数,如果是小数则是:decimalandroid:s
2015-06-02 15:45:49
448
原创 android获取当前经纬度,并用地图显示跟踪
最近做了一个android的小东西(愁了一星期):通过手机获取当前经纬度,通过线程(异步)时时通过socket向服务器发送定位数据,并调用google地图来追踪,并用textView来显示运行时的日志。关于怎样试用google地图这里就不啰嗦了,还用到了一些协议的解析和封装的,也就省略了在配置文件中添加的权限: 1.<!-- 声明链接换联网的权限 -->2.在app
2015-06-02 15:44:41
1178
转载 使用BigDecimal进行加、减、乘、除
import java.math.BigDecimal;//使用BigDecimal进行加、减、乘、除void BigDecimal(){BigDecimal a=new BigDecimal(new String ("1234567890123456789012345678901234567890123456789012345678901234567"));BigDecima
2015-06-02 15:43:21
1477
原创 android Button美化
四个配置文件: 放入res/drawable目录中:android:state_enabled="" 是否有效android:state_focused="" 是否聚焦android:state_pressed="" 是否被按下button_bg.xml android
2015-06-02 15:40:47
1374
原创 Spring2.5+struts2.0+ibatis整合
本文介绍了Spring2、Struts2和iBatis三大框架的整合应用。Spring2负责IoC和事务管理,Struts2实现MVC框架和数据校验,iBatis作为ORM工具提供灵活的数据映射。文章详细说明了整合步骤:首先手动配置Struts2,包括相关jar包和web.xml设置;然后通过MyEclipse自动导入Spring;最后配置iBatis。重点展示了applicationContext.xml等核心配置文件的编写,包括数据源、SQL映射和属性配置等。通过User.xml示例说明了iBatis的
2015-06-02 15:38:07
643
原创 JasperReports学习
最近使用了JasperReports和iReport制作了几个报表,这片文章是我的一些总结。JasperReports是一个开源的java报表制作引擎http://jasperreports.sourceforge.netiReport是JasperReports的一个GUI工具,用来生成JasperReports的jrxml文件。http://ireport.source
2015-06-02 15:37:17
869
原创 SSI框架整合成功,后与xfire 整合
Struts2 + spring2.5 + ibatis 框架整合已成功。(前面已经说明)XFire是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用。相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在目前的Web Service开源社
2015-06-02 15:36:17
590
原创 SSI2整合,spring和xfire 整合之后,加入Struts2 上传下载功能
SSI的整合和Spring跟XFIRE整合之后,接下来带来是的上传下载:下面直接加入上传下载功能。项目目录:整合之后,加入Struts2 上传下载功能" title="继SSI2整合,spring和xfire 整合之后,加入Struts2 上传下载功能" height="452" width="264" style="margin:0px; padding:0px; border:
2015-06-02 15:35:29
476
原创 使用jasperreports制作报表(导出pdf excel html)
最近项目需要制作报表类操作,所以在网上查了查资料找了找朋友帮我整了整,现在已经能跟顺利跑起来了,所以将这些东东写成文档,以备忘记。首先需要下载 ireport ,这个是进行报表设计的,如果不会使用,可以上网查查具体用法,等会我会贴上我自己做的一个简单的小例子。需要下载的资源:ireport http://jasperforge.org/plugins/project/pro
2015-06-02 15:35:17
1178
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅