- 博客(156)
- 收藏
- 关注
原创 SpringBoot+XXL-JOB:高效定时任务管理
在现代应用程序中,定时任务是不可或缺的一部分。Spring Boot 和 XXL-Job 为你提供了一个强大的工具组合,以简化任务调度和管理。本文将带领你探索如何将这两者集成在一起,实现高效的定时任务管理。无论你是初学者还是有经验的开发者,本文都将提供你所需要的知识,让你轻松掌握这一技术。让我们开始吧!1、什么是XXL-job官网地址:https://www.xuxueli.com/xxl-job/XXL-Job是一个开源的分布式任务调度平台,主要用于解决大规模分布式系统中的任务调度和管理问题。
2025-06-03 15:38:23
988
原创 不服不行,这才是后端API接口应该有的样子!
在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。怎么做全局的异常处理,篇幅原因,老顾这里就不做介绍了,只要思路理清楚了,自行改造就行。
2025-05-21 15:06:14
496
原创 JVM是如何创建对象的?你了解吗?
假设JVM堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存放在另一边,已使用与未使用内存之间使用一个指针作为内存分界点的指示器,在这种情况下为新生对象分配内存只需要将指针朝着空闲内存的方向移动一段空间与新生对象内存大小相等的距离即可,这种分配方式称为指针碰撞(Bump The Pointer)。1)如果使用句柄访问的方式,Java堆中可能会划分出一块内存空间来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自具体的地址信息。
2025-05-13 14:45:32
536
原创 订单服务拆分库表迁移实践
随着业务的不断发展,有些功能模块适合沉淀为通用的基础能力。作为通用基础能力,这些功能模块对服务的可用性和稳定性有较高要求。因此,将这部分功能模块拆分为一个独立的服务是一个较好的选择。为了更好地实现与业务服务的物理隔离,不仅需要在代码层面进行拆分,还需要在数据库层面进行拆分。在设计技术方案时,需要解决以下几个问题:迁移过程中是否允许停服?如果需要停服,如何尽量缩短停服时间窗口?如何将旧库表的数据迁移到新库?迁移后如何保证旧库表数据与新库表数据的一致性?
2025-05-13 14:28:08
957
原创 MySQL 如何实现将数据实时同步到 ES ?
1)数据双写是最简单的实现方式,可以最大程度的保证数据的同步写入,不过问题很明显,就是代码侵入性太强了,而且容易因为中间件故障导致写入失败。2)MQ 异步同步,这个方案引入了消息队列,实现了业务的解耦合,而且性能较高,吞吐量也比较大,并且支持多数据源的数据同步,不过由于 MQ 是异步消费模型,所以可能出现数据同步延迟的情况,所以实时性要求比较高的场景可能没办法实现。
2025-05-13 14:09:01
956
原创 10亿数据如何最快速插入MySQL?
1、要首先确认约束条件,才能设计方案。确定面试官主要想问的方向,例如1T文件如何切割为小文件,虽是难点,然而可能不是面试官想考察的问题。2、从数据规模看,需要分库分表,大致确定分表的规模。3、从单库的写入瓶颈分析,判断需要进行分库。4、考虑到磁盘对并发写的支持力度不同,同一个库多个表写入的并发需要限制。并且支持动态调整,方便在线上环境调试出最优值。5、MySQL innodb、myisam 存储引擎对写入性能支持不同,也要在线上对比验证6、数据库批量插入的最佳阈值需要反复测试得出。
2025-05-09 11:06:05
914
原创 100G内存下,MySQL查询200G大表会OOM么?
我的主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光?逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光,逻辑备份不是早就挂了?所以大表全表扫描,看起来应该没问题。这是为啥呢?
2025-05-08 14:24:48
728
原创 30s到0.8s,记录一次接口优化成功案例!
Sql查询时间0.8秒,代码中平均1秒8左右,还有优化的空间。“这个业务场景牵扯到了海量数据的统计,并不适合使用关系型数据库,如果想要真正的做到毫秒级的查询,需要从设计上改变数据的存储结果。因为mybatis不知道数组的大小,先给数组设定一个初始大小,如果超出了数组长度,因为数组不能扩容,增加长度只能再复制一份到另一块内存中,复制的次数多了也就增加了计算时间。在Java层面,每条数据都创建了一个Map对象,对于200万+的数据量来说,这显然是非常耗时的操作,速度是被创建了大量的Map集合给拖垮的。
2025-05-06 16:36:03
742
原创 深入理解分布式锁——以Redis为例
1、什么是分布式锁分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性。
2025-05-06 16:14:14
720
原创 @Transactional(readOnly=true)真的是提高性能的灵丹妙药吗?
我在服务层测试了两个方法,一个是@Transactional(readOnly = true),另一个是存储库层中的@Transactional (readOnly = true)(在 SimpleJpaRepository 中,它是 Jpa Respitory 的默认实现,在类的顶部有@Transformational(ready Only),因此 findAll()方法在默认情况下有@transactional(read only = True))。此外,只读实体的更改也不会持久化。
2025-05-06 15:44:36
986
原创 一些老程序员不愿教的工作小技巧
沟通纪要、会议纪要、周报、工作总结、需求文档、总体设计文档、详细设计文档、单元测试文档、测试用例文档、需求变更文档、产品说明书、项目总结文档等等,这些无一不需要实践训练。它们虽然不致命,但却是精益求精的好机会,很多warning的含义是:你的代码勉强能运行,但有很多优化的地方,比如运行速度、资源开销等等。看看Spring,hibernate,Struts等最流行的开源软件的文档就知道,他们的文档写的多么的易懂。把功能实现只是程序员的第一步,甚至是最基础的一步,更多时候,你需要解决各种稀奇古怪的问题。
2025-05-06 15:12:53
220
原创 幂等设计的8种实现方式
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。比如:公交车刷卡,用户上车后刷码支付扣款成功,如果用户再次点击按钮刷卡并扣款成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。因此,当你重复刷卡时,会提示:刷码重复。注意:数据库可能产生幂等性问题,但是幂等性问题不只发生在数据库。
2025-05-06 14:41:44
1117
原创 架构师能力模型
优化关系意味着管理团队的情绪,毕竟项目的核心是团队,有士气的团队才能高效达成目标。因此,一个杰出的架构师需要能够区分需求的真伪,并且具备强大的业务抽象思维,以便洞察客户的真实需求。工程师们需要掌握使用持续集成(CI)和持续部署(CD)的工具,以便能够实现自动化的编译测试和部署流程,这样不仅提高效率,也能减少人为错误,确保更加稳定和可靠的产品交付。对于初级工程师而言,积极编写和审视代码是技术提升的重要方式,而参与Code Review,特别是那些由经验丰富的同行进行的,将大大加速这一成长过程。
2025-05-05 09:51:12
971
原创 《哪吒面经》4万字102道Java多线程经典面试题
1、创建线程的有哪些方式?(1)通过继承Thread类定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。创建Thread子类的实例,即创建了线程对象。调用线程对象的start()方法来启动该线程。(2)通过实现Runnable接口定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Th
2025-05-05 09:43:57
920
原创 如何设计一个实时数据同步方案
随着大数据时代的到来,企业对数据的实时性、准确性和可用性的要求越来越高。但在现实操作中,传统数据同步技术常常难以满足这些需求,在处理日益增长的数据量和实时性需求方面显得力不从心。企业在数据同步和管理过程中遇到的问题和痛点,不仅影响了决策的时效性,也对业务的连续性和稳定性构成了挑战。
2025-04-23 17:36:46
761
原创 ThreadLocal的那些杂事
在正常情况下,ThreadLocal对象使用完之后会要把Entry对象进行回收,假设在线程池中使用ThreadLocal的时候,由于线程池中的核心线程不会被回收,这就导致了Entry上的value不会被回收,从而出现内存泄漏问题。>>),那么Entry对象中的Key可以被GC自动回收。ThreadLocal底层是通过ThreadLocalMap来实现的,每个Thread对象中都存在一个ThreadLocalMap,这个Map的可以是ThreadLocal对象,value存储的是需要缓存的值。
2025-04-21 14:52:25
780
原创 终于有人把数据架构讲明白了
数据架构描述如何管理从收集到转换、分发和使用的数据。它为数据及其在数据存储系统中流动的方式设定了蓝图。它是数据处理操作和人工智能 (AI) 应用程序的基础。数据架构的设计应该由业务需求驱动,数据架构师和数据工程师使用这些需求来定义相应的数据模型以及支持它的底层数据结构。这些设计通常有助于满足业务需求,例如报告或数据科学计划。随着物联网 (IoT) 等新兴技术的出现,新的数据源不断涌现,良好的数据架构可以确保数据易于管理且具有利用价值,从而支持数据生命周期管理。
2025-04-21 14:42:50
816
原创 虚拟内存、用户空间 、内核空间、用户态、内核态
虚拟内存:在多任务系统系统中,多任务并行,大大提升了 CPU 利用率,但却引出了多个进程对内存操作冲突的问题,虚拟内存 概念的提出就是为了解决这个问题,每个进程都运行在属于自己的 虚拟内存 中。如上图,虚拟内存通过MMU将自己映射到物理内存上,使程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片。至于具体使用的物理内存是哪块他们不需知道。所以保证了进程之间不会互相影响。
2025-04-21 14:22:24
623
原创 瞧瞧别人家的判空,那叫一个优雅!
Java 中的判空问题,从传统的多层 if 判空到 Java 8 引入的 Optional,再到现代化框架的帮助,已经有了不少优雅的解决方案。程序员不再需要一遍遍地写冗长的 if 判断,代码也变得更简洁、可读性更高。但是,正如代码中的每一行都能传递我们的设计思路一样,优雅的判空也需要我们在写代码时保持思考。毕竟,写出来的代码是给自己看的,是要长期维护的,不仅仅是让“别人家”的代码更美。
2025-04-16 14:31:32
656
原创 【无标题】
通过以上步骤,你就成功地将 DeepSeek 集成到了 IDEA 中。在今后的编程工作中,你可以尽情享受 DeepSeek 带来的便利和高效,感受它为你带来的那些温暖治愈的瞬间,领略编程世界的无限魅力。
2025-04-16 14:13:45
789
原创 【无标题】
在大模型技术迅速普及的当下,如何在本地环境中以低成本部署高性能AI服务,成为了广大开发者关注的焦点。本文将结合Spring AI、Ollama和DeepSeek-R1模型,通过Docker容器化部署和Redis持久化存储,手把手教你构建一个支持连续对话的AI应用。这一方案特别适合需要私有化部署、数据安全可控的场景,如企业内部知识库、教育问答系统等。环境搭建: 从安装Docker开始,到通过Docker安装Redis、Ollama,并部署DeepSeek模型,一步步带你搞定环境配置。
2025-04-15 15:25:30
996
原创 程序员到架构师,遇到的80个经典架构问题
技术选型,接入层架构,架构性能优化,微服务架构,数据库架构,缓存架构,架构解耦,架构分层,架构进阶,典型架构,把控住这些,应该能成为一名合格的架构师吧?(1)写给,有志于成为架构师的工程师,开篇的话第1章,技术选型。(10)TCP接入,架构设计第3章,快速性能优化。(50)写给,有志于成为架构师的工程师,结尾的话。(26)数据库如何秒级扩容?(37)IP耦合,公共库耦合,如何解耦?(45)服务网格,下一代微服务架构(上)(46)服务网格,下一代微服务架构(下)(5)伪分布式架构,快速扩容的必备方案。
2025-04-11 14:18:16
376
原创 面试提问:数仓设计不分层可以吗?
场景:最近有求职者在面试中被问到数仓设计可不可以不分层?当求职者回答不可以的时候,面试官似乎对这一回答并不满意。分析:针对该问题其实面试官并不是不懂数仓分层的意义,而是想要求职者讲明白什么样情况下需要分层,该如何分层,看看求职者是否真正对分层掌握,能在不同情形和环境下做出对策。数仓的面试其实就是一场思辨的过程,更像是哲学上的讨论,没有绝对的好坏,只有在某种场景、条件下的合不合适。数据仓库是否分层取决于具体的业务场景、团队规模、数据复杂度以及维护需求。
2025-04-11 14:07:46
377
原创 Spring AOP和AspectJ的区别是什么?
我们分析了 Spring AOP 和 AspectJ 的实现原理,并且通过示例展示了两者如如何使用它们。Spring AOP:Spring AOP 集成简单,适用于大多数基于 Spring 的应用,易于集成和配置,适合实现常见的横切关注点,如事务管理和日志记录。AspectJ:AspectJ 提供更强大的 AOP 功能和更灵活的织入机制,适用于需要深入字节码级别操作或在非 Spring 环境中实现 AOP 的场景。
2025-04-11 14:02:30
943
原创 你还在使用websocket实现实时消息推送吗?
在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。本文主要介绍SSE的使用场景和如何使用SSE。服务端向客户端推送数据的实现方案有哪几种?1、SSE比websocket更轻2、SSE是基于http/https协议的3、websocket是一个新的协议,ws/wss协议4、如果只需要服务端向客户端推送消息,推荐使用SSE5、如果需要服务端和客户端双向推送,请选择websocket。
2025-03-25 09:12:56
755
原创 MySQL 主从同步一致性详解
主从同步一致性是 MySQL 数据库架构中一个至关重要的问题。影响主从同步一致性的因素有很多,包括网络延迟、主从配置差异、事务处理和锁机制等。通过优化网络环境、统一主从配置、事务处理优化和合理使用锁机制等方法,可以有效地保证主从同步的一致性。在实际应用中,需要根据具体的案例场景进行分析和处理,及时发现并解决问题,确保数据库系统的稳定运行。
2024-12-02 15:42:04
1444
原创 推荐一下,比Spring-Retry还快的百万级任务重试框架Fast-Retry
推荐一下,比Spring-Retry还快的百万级任务重试框架Fast-Retry
2024-09-20 11:03:44
903
原创 互联网十万个为什么之什么是缓存?
缓存(Caching)是一种存储机制,旨在提供高速访问已保存的数据或计算结果。通过将数据存储在临时存储位置,当再次需要这些数据时,可以迅速从缓存中检索,而不是重新进行原始数据的昂贵或时间耗费的获取和计算过程。缓存可以存在于各种层次,如硬件(CPU缓存)、软件(Web浏览器缓存)、也可作为专门的存储系统(如内存中的分布式缓存)。有效的缓存策略可以显著提高应用程序的响应速度和性能。
2024-09-14 09:26:38
796
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人