- 博客(155)
- 收藏
- 关注
原创 分库分表的事务问题 - 怎么实现事务
保证单个事务完整性和数据最终一致性,不包含相同行的事务写入目标DB时可能乱序,可最大限度提升同步效率。事务并行(安全case)事务并行(不安全case1)trx4和trx2这两个源端mysql的事务,从binlog数据层面分析没什么关系,变更的是不同的行,但是业务逻辑上有先后顺序,业务预期trx4变更的数据先可见,trx2变更的数据后可见但是在目标端,可能被太极乱序回放,可能先可见trx2,后可见trx4(即便乱序回放,目标端数据和源端数据是保证一致的)事务并行(不安全case2)
2026-02-05 21:42:47
878
原创 Excel文件解析 - SAX startRow cell endRow 执行时机
Excel 文件结构:│ 第 1 行 ││ 第 2 行 │解析流程:第 1 行:↓startRow(0) ← 遇到第 1 行开始↓cell("A1", "...") ← 遇到 A1 单元格↓cell("B1", "...") ← 遇到 B1 单元格↓cell("C1", "...") ← 遇到 C1 单元格↓endRow(0) ← 遇到第 1 行结束↓第 2 行:↓startRow(1) ← 遇到第 2 行开始↓。
2026-02-05 15:47:28
443
原创 Excel文件解析 - SAX startRow cell endRow 执行顺序
标签新行开始初始化当前行数据结构cell遇到<c>标签单元格数据收集单元格值endRow遇到
2026-02-05 15:43:39
567
原创 MySQL磁盘碎片清理
对于大量的UPDATE,也会产生文件碎片化 , Innodb的最小物理存储分配单位是页(page),而UPDATE也可能导致页分裂(page split),频繁的页分裂,页会变得稀疏,并且被不规则的填充,所以最终数据会有碎片。在InnoDB中,删除一些行,这些行只是被标记为“已删除”,而不是真的从索引中物理删除了,因而空间也没有真的被释放回收。当执行插入操作时,MySQL会尝试使用空白空间,但如果某个空白空间一直没有被大小合适的数据占用,仍然无法将其彻底占用,就形成了碎片;
2026-02-05 13:41:01
171
原创 Excel文件解析 - SAX和DOM方式的区别
维度SAX 方式(推荐)DOM 方式(谨慎使用)内存占用⭐⭐⭐⭐⭐ 极低⭐ 极高处理大文件⭐⭐⭐⭐⭐ 优秀⭐ 容易 OOM读取速度⭐⭐⭐⭐⭐ 快⭐⭐⭐ 慢随机访问⭐ 不支持⭐⭐⭐⭐⭐ 支持代码复杂度⭐⭐⭐ 稍复杂⭐⭐⭐⭐⭐ 简单结论:如果你的场景是批量导入大 Excel 文件,一定要用第一种 SAX 方式。如果是小文件且需要随机访问,第二种方式也可以考虑。
2026-02-05 11:10:32
348
原创 Excel文件解析 - 什么是SAX和DOM
Excel文件本质是XML文件,对应两种解析方式很好的问题!让我用通俗易懂的方式解释 SAX 和 DOM 这两种 XML 解析模式。
2026-02-05 11:09:43
904
原创 ConcurrentHashMap的Value为什么不能为空
确保所有操作都是明确且线程安全的。这就像快递柜不允许空格子一样——空格子会让系统无法判断“包裹是否存在”,而禁止空格子后,所有状态都是清晰的。为什么会有这个限制?我们可以用一个通俗的例子来解释。,每个格子(键值对)可以存放一个包裹(
2026-01-29 17:08:58
579
原创 开源鼠标手势软件
poerin/Stroke: 鼠标手势(Mouse Gestures)https://github.com/poerin/Stroke
2026-01-25 21:45:14
21
原创 线程池阻塞队列选择ArrayBlockingQueue与LinkedBlockingQueue区别
注:这个队列需要注意的是,虽然通常称其为一个无界队列,但是可以人为指定队列大小,而且由于其用于记录队列大小的参数是int类型字段,所以通常意义上的无界其实就是队列长度为 Integer.MAX_VALUE,且在不指定队列大小的情况下也会默认队列大小为 Integer.MAX_VALUE。SynchronousQueue没有容量,是无缓冲等待队列,是一个不存储元素的阻塞队列,会直接将任务交给消费者,必须等队列中的添加元素被消费后才能继续添加新的元素。例如,当队列满时,插入线程阻塞,但删除线程仍可继续执行;
2026-01-22 11:07:28
297
原创 怎么理解 HttpServletRequest @Autowired注入
在你的代码中,@Autowired(required = false) private HttpServletRequest req。如果你的应用在非 Web 环境(如单元测试、批处理任务)中调用了这个异常处理器,,但实际上在正常的 Web 请求处理中,它永远不应该为。但这种情况在正常的 Web 应用中几乎不会发生。,甚至可能带来潜在问题。Spring 允许直接在方法参数中获取。
2026-01-21 16:57:10
264
原创 为什么要加@ResponseBody
而不是尝试解析为视图名称(如 Thymeleaf/JSP)。除了在URL接口上加之外,还有比如在拦截器上加。注解是为了明确告诉 Spring。是必要的,除非你明确使用了。
2026-01-21 16:49:28
208
原创 @ConditionalOnWebApplication 作用
ServletConfiguration 类使用了 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) 注解,这意味着其中的 myServletBean 方法只有在当前应用程序是Servlet类型的Web应用程序时才会创建。Web特定配置:当应用程序需要根据是否是Web应用程序来加载特定的配置或bean时,可以使用@ConditionalOnWebApplication来进行条件化配置。
2026-01-21 14:59:12
55
1
原创 @PostMapping produces 、consumes 参数
的默认值取决于上下文(如类级别注解或方法级别注解的配置),但。→ 可以,但建议明确写出,避免歧义。(取决于 Spring 配置)。在 Spring 的。
2026-01-21 14:31:41
469
1
原创 通俗易懂地讲解 NestedServletException
假设你写了一个文件上传接口,用户上传了一个非法的文件(比如格式不对),这时会抛出。),贴上标签(额外信息),然后运输。收件人(开发者)可以通过拆包裹(就像你寄快递时,快递公司会把你的物品(原始异常)装进一个标准包裹(,同时保留原始异常的完整信息(通过。直接抛出原始异常(如。)找到你最初寄的东西。
2026-01-21 14:30:35
381
原创 理解 Java21 虚拟线程
https://segmentfault.com/a/1190000046092316https://www.hikunpeng.com/forum/thread-0295203958939016236-1-1.htmlhttps://javaguide.cn/java/concurrent/virtual-thread.html#%E8%99%9A%E6%8B%9F%E7%BA%BF%E7%A8%8B%E5%92%8C%E5%B9%B3%E5%8F%B0%E7%BA%BF%E7%A8%8B%E6%80
2026-01-21 14:03:38
24
原创 Gradle疑难杂症 Execution failed for task ‘:xxxx-api:test‘.> No tests found for given includes:
Execution failed for task ':xxxx-api:test'.> No tests found for given includes:检查:
2026-01-21 14:03:19
15
原创 Dubbo 异常处理机制,调用方会感知提供方的异常吗
核心逻辑 com.alibaba.dubbo.rpc.filter.ExceptionFilter。
2026-01-14 17:06:09
41
原创 数据库读写分离和事务的关系
数据库是读写分离架构,事务中的读操作没有强制走主库,这个时候是不是会有读延迟,读的操作比写操作慢,导致没有及时读到其他事务写的数据。策略运作,确保事务的原子性和一致性。在读写操作处于同一事务时,读写分离通过。
2026-01-13 14:13:29
618
原创 通俗易懂理解数据库读写分离
就像你既当厨师又当服务员,忙不过来时,请一个服务员专门端菜,你专心炒菜,餐厅效率就提高了!收银台既要接单,又要喊号取餐,顾客排长队,收银员忙不过来,甚至可能下错单(数据混乱)。分配到不同的数据库实例上执行,以提升系统的整体性能、可扩展性和可用性。把“接单”和“取餐”分开,让收银台专注处理订单,取餐台专注服务顾客,这样效率更高!读写分离是数据库架构优化的重要手段,但需根据业务特点权衡。是一种常见的数据库架构优化策略,其核心思想是将。(性能优先),但对关键操作(比如支付后查余额)会。
2026-01-13 14:08:06
298
原创 MySQL EXPLAIN Impossible WHERE noticed after reading const tables
这两个原因是类似的,都是EXPLAIN的时候,WHERE 条件预先查询就没有任何数据能命中,要求 WHERE 能实际查到数据。
2026-01-11 22:41:56
294
原创 MySQL 查询索引最左前缀原则,如果是(a,b)的联合索引,WHERE b = ? AND a = ?会走索引吗
但是MySQL有优化器,会针对 WHERE b =?这种特定情况进行优化,使其走联合索引(a,b)从SQL原本的理解上,不会走联合索引。在 MySQL 中,
2026-01-11 22:40:38
378
原创 数据库新增字段索引,耗时很长正常吗
如果需要更具体的方案(如针对 MySQL/PostgreSQL/Oracle),可以提供数据库类型和表规模,我会进一步分析!正常, 数据量越大,新增索引越大,线上一个大表简单新增 created_at 字段索引耗时可能会有3~4个小时。新增索引也是一种DDL。
2026-01-11 17:52:55
820
原创 ES KQL 支持词频统计吗
不支持,需要写 lucene 查询DSL在中,的功能,因为 KQL 的设计初衷是提供一种简单、直观的查询语法,而不是支持复杂的词频统计或脚本计算。ANDORNOT?age: >30但如果需要在 Kibana 中实现在或的下,可以使用scriptkeywordtextsplit(' ')如果,建议在integerrangerange。
2026-01-11 14:50:48
576
原创 MySQL affectedRows 计算逻辑
是 MySQL 的历史行为,可通过配置优化。该特性在数据完整性、性能和自增主键管理上优于。这样,即使执行 UPSERT 时返回。的情况,这通常与 MySQL 的。对于upsert操作计算特殊一点。,而非先删除后插入。在 MySQL 中执行。,也能正确处理业务逻辑。
2026-01-08 17:06:48
667
原创 CSDN Markdown编辑教程
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2026-01-08 17:04:01
900
原创 Apache POI XSSFWorkbook 和 SXSSFWorkbook 的区别
如果需要读取大 Excel 文件并处理,建议直接使用 XSSFReader。读取时可能无法访问所有行(因为部分行已被写入临时文件),因此。如果项目允许引入第三方库,EasyExcel。通过以上优化,可彻底解决。或 EasyExcel。导致的 OOM 问题!
2026-01-07 17:53:18
476
原创 Apache POI XSSFWorkbook 写入Excel文件的潜在风险
否则必然面临 OOM 或性能崩溃问题。可能会遇到以下问题,尤其是在处理。
2026-01-07 17:52:36
353
原创 ExecutorService 和 ThreadPoolExecutor 关系
是 Java 并发编程中紧密相关的两个类,前者是接口,后者是实现类。创建的线程池可能隐藏了关键配置(如无界队列导致 OOM),生产环境建议直接使用。当任务队列满且线程数达到。
2026-01-05 14:56:38
883
原创 浏览器CSR和SSR渲染区别
CSR(客户端渲染,Client-Side Rendering)和 SSR(服务端渲染,Server-Side Rendering)是现代Web应用中两种主流的页面渲染方式,它们在数据加载、性能、SEO等方面有显著区别。可以通过cava_csr=true或者__csr=1来触发CSR渲染。现代框架(如Next.js、Nuxt.js)支持。可以在F12中用来查看由前端请求的接口。
2025-12-25 20:17:24
600
原创 Dubbo路由规则的实现
以便在分布式环境下实现数据分片(Sharding)或请求路由。,然后根据分片规则(如哈希取模)决定请求路由到哪个数据库节点。这样,相同租户的请求会被路由到同一个服务节点,确保数据隔离。如果默认的分片路由不满足需求,可以自定义。(Dubbo 的增强版)中,这样,Dubbox 在调用。是一个非常有用的工具。
2025-12-24 17:38:20
431
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅