- 博客(97)
- 资源 (1)
- 收藏
- 关注
原创 Mastering High-Concurrency Data Processing: A Deep Dive into BufferTrigger
摘要 BufferTrigger 是一个高性能 Java 缓冲批处理工具,用于解决高并发场景下频繁写入导致的数据库过载和系统性能下降问题。它通过智能缓冲和批量触发机制,聚合离散请求,显著减少 I/O 操作和网络开销。适用于容忍轻微延迟的业务(如直播点赞统计),支持基于数量或时间的触发策略,结合回调函数实现批量处理。核心配置需平衡批处理大小、时间间隔和缓冲区容量,避免单线程消费瓶颈。该工具已在快手等高频场景验证,降低系统负载达 80%。
2025-11-30 14:39:57
690
原创 递归及其使用
递归是指在函数的定义中使用函数自身的过程。简单来说,递归是通过将大问题分解为更小的子问题来解决问题的一种方法。递归函数在执行时会反复调用自身,直到达到某个终止条件。
2025-11-29 22:59:45
1135
原创 揭秘微服务通信的三剑客——gRPC、Feign 与 HTTP Client
追求极致性能、强契约和跨语言?选择 gRPC。它是大规模、高性能内部微服务通信的终极武器。追求开发效率、沉浸在 Spring Cloud 生态?选择 Feign。它能让你用最优雅的方式完成绝大多数 HTTP API 的调用。追求极致控制或处理特殊场景?选择原生 HTTP Client。它是你手中的瑞士军刀,灵活且强大。
2025-11-26 00:29:01
715
原创 ReloadableCache:构建高可用、自更新的本地缓存解决方案
ReloadableCache是一个支持多种刷新机制的本地缓存实现,它结合了定时轮询和事件通知两种更新策略,确保缓存数据始终保持最新状态,同时提供极高的读取性能。ReloadableCache通过结合定时轮询和事件驱动的双重刷新机制,提供了一个既保证数据新鲜度又具备高性能的缓存解决方案。高可用:自动降级,刷新失败不影响服务实时性:支持事件驱动的即时更新易用性:简洁的 Builder API,易于集成可观测:内置监控支持,便于运维。
2025-10-16 02:40:00
828
1
原创 Guava LoadingCache 使用指南
LoadingCache 是 Guava 提供的高效缓存组件,具有自动加载、并发控制和灵活过期策略等核心特性。通过 CacheLoader 实现数据加载逻辑,CacheBuilder 进行链式配置,支持基于时间/引用的过期策略和异步刷新机制。其内置并发控制可防止缓存击穿,提供权重控制、批量加载等优化手段,并自带统计监控功能。
2025-06-06 18:05:53
1393
原创 浅谈单例模式
单例模式是一种常用的软件设计模式,其核心目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式在需要控制资源访问、节省系统资源、管理共享资源以及需要统一调度操作等场景下非常有用。
2024-12-10 11:20:25
1003
原创 浅谈synchronized
上次,在《浅谈Java并发编程》一文中,我们了解到,synchronized关键字可以用来解决并发编程中的原子性问题,其实,synchronized关键字不仅可以解决原子性问题,还可以解决有序性和可见性问题。那么synchronized关键字是怎么做到的呢?synchronized关键字如何使用,有什么优缺点呢?一起来看看吧。
2024-12-07 18:32:11
786
原创 浅谈Java并发编程
最近看了看并发编程相关的一些书籍和文章,想谈一谈自己对于并发编程的一些理解和看法,一些浅薄之见,如有不对的地方还请大家批评指正。想要讲清楚一件事,我认为最重要的是以下几点:what?这个东西是啥?why?为什么有了这个东西?这个东西是用来干啥的?解决什么问题?how?这个东西为了解决问题,是怎么做的?只要能把这几点讲清楚,整个事情就一目了然了。今天,我们就用这个框架,来聊一聊并发编程。
2024-12-07 18:30:42
1027
原创 使用JSON_EXTRACT匹配某个json类型字段中的某个具体字段
此外,还可以通过使用JSON_UNQUOTE函数来移除提取的结果中的引号,如果结果是一个字符串。在上面的例子中,我们使用JSON_EXTRACT函数从json_doc字段中提取了"employee"对象的"name"属性和"departments"数组的第一个元素。路径可以使用点号(.)来访问JSON对象的属性,也可以使用方括号([])来访问JSON数组的索引。需要注意的是,JSON_EXTRACT函数在MySQL 5.7版本之后才可用,并且需要在MySQL中启用JSON功能。
2024-05-27 22:50:36
1184
原创 使用tkMapper时避免传入null值导致查询数据不符合预期
因此实际的SQL会导致一些不符合预期的数据被查出来,如果查询后执行的是更新操作,会带来脏数据;如果查询后执行的是删除操作,会带来误删除;如果这个删除还是个物理删除…那么有没有什么方法能够避免这个问题呢?
2024-05-27 22:24:09
724
原创 使用Optional和直接返回null,哪个更好?
在处理不确定是否能获得对象时,使用 Optional 类型要优于直接返回 null。通过使用 Optional,我们可以明确表示可能为空的情况,强制进行空值检查,并提供链式操作。这种方式提高了代码的可读性、可维护性和安全性。尽管 Optional 类型在处理可能为空的对象时有很多好处,但在使用时也需要谨慎。过度使用 Optional 可能会导致代码变得复杂,因此应根据具体情况合理使用。
2023-09-17 02:26:02
688
原创 基于Redisson使用自定义注解实现分布式锁
基于Redisson使用自定义注解来实现分布式锁,获取不到锁时等待指定时间,并在期间不断尝试获取锁
2023-08-01 18:18:46
551
原创 在Ubuntu 22.04 LTS Jammy Linux 系统上安装MySQL
本教程将展示使用命令终端在Ubuntu 22.04 LTS Jammy 上安装MySQL数据库服务器的简单步骤。
2023-05-17 17:34:40
1801
原创 CountDownLatch:Java中的同步工具
CountDownLatch是Java中的一个同步工具,它允许一个或多个线程等待其他线程完成它们的操作后再继续执行。CountDownLatch通常用于实现等待-通知机制,其中一个或多个线程等待其他线程完成它们的操作,然后再继续执行。在多线程编程中,CountDownLatch是一种非常有用的工具,可以帮助我们实现复杂的同步逻辑.。
2023-04-12 18:04:00
612
原创 cron表达式语法规则及常见示例
cron表达式是一种用于设置定时任务的语法规则。它由6个字段组成,分别表示秒、分、小时、日期、月份和星期几。每个字段都可以设置一个数字、一组数字(用逗号分隔)、一段数字范围(用短横线分隔)、通配符(表示任意值)或者特定的字符(如星期几的英文缩写)。
2023-04-09 21:11:42
7353
原创 大规模数据量下ES如何实现高性能检索?
ElasticSearch,是基于Lucene库的搜索引擎。它提供了一个分布式、多租户的全文搜索引擎,具有HTTP web接口和无模式JSON文档。根据DB引擎排名,Elasticsearch是最受欢迎的企业搜索引擎。ES的特点是分布式、高扩展以及近实时。那么,大规模数据量下ES是如何实现高性能检索的呢?回到我们的文章标题,ES是如何实现高性能模糊查询的呢?ES通过分词然后对每一个单词及其对应文档建立倒排索引,使得能够快速根据关键词找到对应文档id;
2023-02-28 23:11:57
2667
1
原创 parallelStream() 踩坑指南,出现null元素,输出list的size不符合预期
parallelStream()踩坑指南。使用parallelStream()时出现返回的List的size不符合预期,出现null元素,以及出现IndexOutOfBounds和NPE
2022-12-24 16:30:00
2898
1
原创 MySQL中count(*)和information_schema.tables中的table_rows值不相同
前两天我还在高高兴兴地写了一篇文章《一条SQL查询出MySQL数据库中所有表的数据量大小》,心想这也太方便了,只用一条SQL就能统计出所有表的数据量,但没想到,最终还是翻车了。。。
2022-12-03 15:27:29
4508
2
原创 分布式事务之CP架构、AP架构解决方案
在分布式事务之CAP定理一文中,我们了解到一个分布式系统不可能同时满足数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)。现实情况下,我们面对的是一个不可靠的网络、有一定概率宕机的设备,这两个因素都会导致Partition,因而分布式系统实现中 P 是一个必须项,而不是可选项。对于分布式系统工程实践,CAP理论更合适的描述是:在满足分区容错的前提下,没有算法能同时满足数据一致性和服务可用性。
2022-11-10 11:38:54
5852
原创 分布式事务之BASE理论
在分布式事务之CAP定理一文中,我们了解到了分布式事务不可能同时实现Consistency、Availability 和 Partition-tolerance。Basically Available(基本可用);Soft state(软状态);Eventually consistent(最终一致性);BASE定理的核心思想:即使无法做到强一致性,但是每个应用可以根据自身的业务特定,采用合适的方式来达到最终一致性。
2022-11-10 00:58:26
424
原创 GET与POST的区别
GET和POST只是HTTP协议中的两种请求方式,而HTTP协议是基于TCP/IP的应用层协议,所以无论GET还是POST,用的都是同一个传输层协议,所以在传输上是没有区别的。
2022-11-09 17:18:12
556
原创 Undo Log、Redo Log、binlog与两阶段提交
在事务ACID与隔离级别一文中我们了解到,事务的Atomicity(原子性)是通过Undo Log来实现的。Undo Log其实就是在事务操作任何数据之前,先将要被覆盖的数据备份到Undo Log,然后才进行数据的修改。如果事务执行过程中出现了错误,或者用户执行了ROLLBACK操作,那么系统就可以根据Undo Log中备份的数据,将数据恢复到事务开始前的初始状态。Redo Log是InnoDB存储引擎特有的日志,位于引擎层;Redo Log 是一种物理日志,记录的是“在某个数据页上做了什么修改”;
2022-11-09 15:33:10
969
原创 使用tkmapper避免更新on update字段
在日常开发中,我们的MySQL数据库表都会有mtime字段,用来记录某条记录最后一次更新的时间,一般设置为on update,也就是这条记录有任何的变动,mtime字段的值就会自动更新。如何在不更新mtime的情况下,更新其他字段呢?
2022-10-17 15:54:04
641
原创 Elasticsearch倒排索引(二)深入Term Index
Term Index是一种对映射关系中的词语集合也就是Term Dictionary进行高效索引的数据结构。Term Index是以怎样的形式进行组织的呢?
2022-09-20 00:47:39
2634
1
原创 Python环境找不到vlc —— 要先安装VLC Media Player
Python环境找不到vlc —— 要先安装VLC Media Player
2022-09-19 18:17:52
3860
原创 conda list 与 pip list 命令的区别
1. `conda list`和`pip list`命令都是列出环境下所有已安装的包;2. `conda list`命令除了得到当前虚拟环境下的所有已安装的包,还会显示关联环境下的已安装的包;3. `pip list`命令只显示当前虚拟环境下的所有已安装的包;4. 当关联环境下有某个包,再用conda命令在其他虚拟环境下下载该包时,就会直接关联,无需下载;5. `pip list`命令得到的结果是`conda list`得到的结果的子集;
2022-09-19 18:11:24
8464
1
原创 Elasticsearch倒排索引(一)简介
关系数据库的索引大多是B-Tree结构,而ES使用倒排索引。倒排索引中的所有词语存储在词典中,每个词语又指向包含它的文档信息列表。在某些情况下,两种不同的数据索引方法决定了这两种产品在性能和速度上的差异。例如,在包含数亿数据的关系型数据表上执行最简单的计count查询时,关系型数据库可能需要几秒的响应时间。如果数据表的设计不合理,甚至可能拖垮整个数据库,影响其他数据服务;而ES可以在毫秒级别返回,该查询对整个集群的影响微乎其微。除此之外,ES建立在Lucene基础之上,与生俱来就能完成分词匹配,并且支持多种
2022-09-19 00:58:23
1198
原创 Python判断字符串相等
有时候两个字符串打印出来看着一样,但是判断却是`False`?如果两个字符串末尾有其他符号,比如回车`\n`,print的时候无法发现的有时候`==`判断是 `True` ,`is` 判断却是 `False`?这是因为两个字符串来自不同的内存块,内存地址不一样。`id() `函数用于获取对象的内存地址。
2022-09-16 17:22:13
14601
原创 NoSQL常用数据结构 LSM Tree 简介
LSM Tree 的全名是 Log Structured Merge Tree;顾名思义,LSM Tree是一种采用了日志追加写方式,有一定的结构,且会合并的树;LSM Tree的核心特点是:是一种分层,有序,面向磁盘的数据结构,其核心思想是充分利用磁盘批量的顺序写性能要远比随机写性能高出很多。...
2022-08-16 23:26:30
1534
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅