自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 【canal】同步MySQL数据到Elasticsearch

通过Canal监听MySQL数据变化,利用SpringBoot将数据同步到Elasticsearch,实现了MySQL到ES的无缝数据同步。这种方式适用于实时索引构建、数据备份等场景,简化了数据同步的复杂度,并且具有很强的灵活性。

2024-07-19 10:18:00 579

原创 【单元测试】SpringBoot

编写优雅的单元测试是保证代码质量的关键。在 Spring Boot 中,我们可以使用 @SpringBootTest 和 @AutoConfigureMockMvc 等注解简化测试配置,使用 Mockito 等工具模拟依赖,编写覆盖全面的测试用例。通过遵循最佳实践,我们可以编写高效、稳定的单元测试,提高开发效率和代码质量。希望本文对您在 Spring Boot 项目中编写单元测试有所帮助。

2024-07-16 14:27:05 916

原创 【概念与实践】XXL-JOB

XXL-Job:是大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展大众点评目前已接入XXL-JOB,该系统在内部已调度约100万次,表现优异。目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,360金融 (360),联想集团 (联想),易信 (网易)等等官网地址 https://www.xuxueli.com/xxl-job/系统架构图设计思想。

2024-07-15 15:23:31 825

原创 后端程序员的Linux命令指南

如果你掌握了以上这些命令,那么你已经能够在后端开发的道路上独当一面了。这些命令覆盖了从远程登录到文件操作,从权限管理到进程管理,再到项目异常定位的方方面面。无论是日常维护还是紧急故障处理,都能让你得心应手。当然,Linux命令远不止这些,继续深入学习和实践,你会发现更多有趣且强大的工具。希望这篇指南对你有所帮助,也祝你在后端开发的世界里畅游无阻,成为一名真正的终端大师!

2024-06-21 20:40:23 641

原创 Redis如何保证数据一致性?

对于数据一致性高的场景,旁路缓存中先更新数据库再删缓存已经能保证绝大情况下的数据一致性,如果要求再高点可以考虑上延迟双删,同时加中间件避免缓存删除失败。不推荐上读写锁,因为缓存本身就是为了提高性能的,读写锁对性能的影响较大。

2024-05-08 14:47:26 1710

原创 IDEA中git的常用操作(保姆级教学)

这时我们需要去merge有冲突的文件,下方可以选择Accept Left和Accept Right,Left就是使用你本地的代码,Right就是使用远程仓库的代码,当然你也可以选择自定义合并后的代码,在中间Result修改即可,修改完点击右下方Apply就可以将代码commit到本地仓库了,接下来就跟上面一样的流程进行push即可。这个意思就是问你要不要将这个文件夹加入到git的暂存区,如果你添加的文件之后要上传到远程仓库,无脑选add就完事了,add其实就是让git管理你的文件。

2024-05-07 17:08:00 1167

原创 MongoDB分片集群搭建

config搭建复制集是为了保证config节点的高可用性,避免config挂了,mongos找不到数据存储的地方。以下是我在测试环境中虚拟机的配置,如果你的虚拟机ip不同可以对应的更改,但是要确保这三台虚拟机之间可以ping通。创建config节点配置文件:mongo-cfg.conf(同样3台虚拟机都要配置)添加复制集配置文件: mongo2.conf,同样三台虚拟机都要加。添加复制集配置文件:mongo.conf,三台虚拟机都要加。⚠️:如果配置中没有的的文件夹,需要手动创建,例如下面的。

2024-05-04 18:02:36 1265

原创 MongoDB的分片集群

​ 分片(sharding)是MongoDB用来将大型集合分割到不同服务器上采用的方法。分片这种说法起源于关系型数据库。但是实际上非关系型数据库在分片方面相比于传统的关系型数据库更有优势。​ 与MySQL分库方案对比,MongoDB的最大区别就在于,用户不需要去关心一条数据到底要存储到哪一个机器上,MongoDB会自动帮你完成所有事情,例如自动维护数据在不同服务器之间的均衡。MySQL还需要用户指定分库算法,比如Hash映射目的​ 单机的存储一定是有上限的,不论是什么数据库。

2024-05-04 17:53:12 1068

原创 Maven多模块管理

多模块管理使项目可以按照功能或者逻辑划分成多个独立的模块。每个模块可以专注于解决特定的问题或实现特定的功能,提高了代码的可维护性和可重用性。Maven可以在多模块项目中自动管理依赖关系。每个模块可以定义自己的依赖项,并且 Maven 会自动处理这些依赖项的下载和版本管理。这简化了项目配置和维护的过程,减少了依赖管理带来的问题。多模块管理使得每个模块都可以独立地进行版本控制。这意味着不同的模块可以在不同的时间点进行独立的发布和更新,而不会影响到其他模块的开发和部署。

2024-04-17 20:27:55 835

原创 MySQL执行流程

Mysql一条Select语句的执行流程是什么?连接器进行管理连接、鉴权查询缓存解析器进行语法分析,关键词提取等执行器进行预处理、优化SQL执行计划、执行SQL等执行器调用存储引擎接口获取数据返回给客户端参考链接

2024-04-03 11:56:42 968

原创 如何定位&预防死锁

简单来说就是并发环境下,两个或两个以上的线程互相等待资源,导致“永久阻塞”的现象System.out.println(Thread.currentThread().getName() + "获取resource1成功");try {System.out.println(Thread.currentThread().getName() + "获取resource2成功");System.out.println("执行成功");}).start();

2024-03-26 15:09:39 1117

原创 静态代理与动态代理

*** 定义行为*/实现MethodInterceptor接口// 目标对象// 通过构造器传入目标对象/*** 获取代理对象* @return*/// 通过Enhancer对象的create()方法可以生成一个类,用于生成代理对象// 设置父类 (将目标类作为其父类)// 设置拦截器 回调对象为本身对象// 生成一个代理类对象,并返回/*** 拦截器* 1、目标对象的方法调用* 2、增强行为* @param object 由CGLib动态生成的代理类实例。

2024-03-26 00:22:38 950

原创 如何设定线程池大小?

CPU密集型,在CPU多核情况下,建议将线程池大小设置为2Ncpu + 1I O密集型,建议将线程池大小设置为((线程等待时间+线程CPU时间)/线程CPU时间 )* Ncpu参考链接:https://cloud.tencent.com/developer/article/1806245。

2024-03-21 23:42:32 1298

原创 如何自定义异常类

在 Java 中,自定义异常是指用户根据自己的需求创建的异常类。Java 提供了一些预定义的异常类,如等,但有时这些预定义的异常类并不能完全满足我们的需求。在这种情况下,我们可以通过创建自定义异常类来表示特定的异常情况。自定义异常类通常继承自Exception类或类,以及它们的子类,并根据需要添加相应的构造方法和其他方法以满足特定的异常处理需求,自定义异常类可以包含额外的属性和方法,以提供更多的信息和功能。使用自定义异常类时,通常的做法是在方法中使用throw。

2024-03-21 07:30:00 652

原创 Java为什么是值传递?

在我们调用方法的时候,通常会传递参数,那我们到底传递的是对象本身,还是仅仅是对象的拷贝对象呢?先搞懂两个概念,形参和实参值传递是指在函数调用过程中,方法接收的是实参的拷贝对象,而不是实参的地址或引用。这意味着在函数内部对参数的修改不会影响到原始的数据引用传递是指在函数调用过程中,传递的是实参的引用或地址,而不是实际的值。这意味着在函数内部对参数的修改会影响到原始的数据a = b;b = temp;

2024-03-20 23:56:12 682

原创 Java多态性:灵活性与扩展性的杰作

在 Main 类中,通过 Animal 类型的引用分别实例化了 Dog 和 Cat 对象,并调用了它们的 sound() 方法。尽管使用的是相同的方法名,但是根据对象的实际类型,调用的方法是不同的,展现了多态性的特征。Java中的多态性是一项强大的特性,它提高了代码的灵活性和可扩展性。由于多态性支持基类引用调用派生类的方法,因此当需要新增一种实现时,只需要添加新的派生类,而不需要修改现有的代码。这种扩展性使得系统更容易维护和扩展。通过使用基类的引用,我们可以轻松地切换不同的实现,而不需要修改大量的代码。

2024-03-20 21:40:08 227

原创 RPC框架之Dubbo详解

Dubbo 是 Alibaba 开源的分布式服务框架,并被广泛应用于各互联网公司。Dubbo只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,其框架本身的成熟度以及文档的完善程度,基本都能满足各互联网公司的业务需求。

2024-03-20 12:00:18 1177

原创 SpringCloud Gateway工作流程

如果要定义的过滤器比较复杂,可以使用自定义过滤器@Component@Override// 1. 获取请求头log.info("请求唯一标识:" + request.getId());log.info("请求路径:" + path);log.info("请求方法:" + method);log.info("请求参数:" + request.getQueryParams());log.info("请求来源地址:" + sourceAddress);

2024-03-20 09:57:50 1466

原创 Redis之缓存穿透、缓存雪崩、缓存击穿

如果有人故意将请求打到未缓存的数据上,会对数据库造成巨大的压力缓存击穿:大量的请求访问不存在的数据,导致数据库的压力上升缓存雪崩:大量的缓存数据同一时间失效,导致数据库的压力上升缓存击穿:高并发下,一个热点的数据缓存过期了,所有的并发请求同时打到数据库,导致数据库的压力上升。

2024-03-20 08:00:00 1444

原创 深入浅出ConcurrentHashMap

JDK1.7和1.8下的ConcurrentHashMap的区别比较大,在1.7的版本下ConcurrentHashMap是由Segment + HashEntry分段锁的方式实现,但是在1.8的版本下,ConcurrentHashMap抛弃了Segment,转而拥抱了CAS+syncronizedHashTable:使用了syncronized关键字对put等操作进行加锁:使用分段锁机制实现:使用数组+链表+红黑树结构和CAS。

2024-03-17 22:48:11 936

原创 GET和POST方法的区别

GET主要通过参数传递,比如`http://example.com/resource?key1=value1&key2=value2`或者restful的形式``http://example.com/resource/value1/value2`。而POST主要将请求参数放在请求Body中,不会在url上直接体现

2024-03-17 02:03:21 1117

原创 MySQL事务详解

在计算机科学和数据库管理中,事务(Transaction)是一组相关的操作,被视为一个逻辑工作单元,它要么完全执行,要么完全不执行,不会出现部分执行的情况。事务通常用于确保数据库的一致性和可靠性。

2024-03-14 21:31:21 956

原创 Redis持久化详解

Redis持久化是为了确保在发生故障或服务重启时,数据不会丢失。Redis是一个基于内存的键值存储系统,它的高性能主要来自于将数据存储在内存中。然而,由于内存是易失性的,意味着在服务器断电或重启时,内存中的数据将会丢失。

2024-03-13 10:02:44 907

原创 MySQL索引详解

索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构

2024-03-13 01:16:38 777

原创 SPI机制详解

SPI:Service Provider Interface,中文直译:服务提供者接口,它通过在ClassPath路径下的META-INF/service文件夹中查找文件,并自动加载文件里所定义的类在面向对象的设计原则中,一般推荐模块之间基于接口编程,通常情况下调用方模块是不会感知到被调用方模块的内部具体实现。一旦代码里面涉及具体实现类,就违反了开闭原则。如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候不用在程序里面动态指明,这就需要一种服务发现机制。为某个接口寻找服务实现的机制。

2024-03-12 20:58:54 1123

原创 Session登陆实践

假如我们的服务端是分布式的,也就是有多台服务器同时提供服务,假如在用户登陆请求发送到服务器A,服务器A保存了;突然服务器A宕机,接下来当前用户的所有请求将要发送到服务器B,但此时服务器B中没有当前保存当前用户的登陆态,显然单机Session登陆不太适合分布式下的用户登陆。单机模式下,不同的Session对象都被保存在同一个服务器中,服务器根据保存在用户浏览器Cookie中的SessionId查找Session对象。对象,并将其与请求关联。关注一手等待后续更新更多干货🚀。

2024-03-09 21:38:20 1257

原创 List之ArrayList、LinkedList深入分析

一文带你搞懂List实现类ArrayList与LinkedList实现原理与区别

2024-03-07 21:31:26 1097

原创 Spring之Bean详解

在Spring中,Bean是指由Spring容器管理的对象,这些对象是由Spring IoC容器负责创建、组装和管理的。Bean可以是Java类的实例,也可以是其他Spring管理的组件,例如数据源、事务管理器等。Bean的生命周期是Spring框架的一个重要概念,通过生命周期管理,Spring容器能够更好地控制对象的创建、初始化、使用和销毁过程。理解Bean的生命周期有助于开发者更好地利用Spring框架的特性,编写出高质量、易维护的应用程序。

2024-03-06 23:59:15 902

原创 设计模式之策略模式实践

策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装成一个类,并使它们可以互相替换。策略模式允许客户端在运行时从可互换的算法中选择一个,而不必修改使用它们的代码。这模式提供了一种将算法独立于客户端而变化的方式

2024-03-06 20:10:48 2127

原创 设计模式之模版方法实践

模板方法模式是一种行为设计模式,它定义了一个骨架,并允许子类在不改变结构的情况下重写的特定步骤。模板方法模式通过在父类中定义一个模板方法,其中包含了主要步骤,而将一些步骤的实现留给子类。这样,子类可以在不改变算法整体结构的情况下,根据需要重新实现某些步骤。

2024-03-06 19:54:29 613

原创 SpringBoot自动装配详解

Spring Boot 的自动装配(Auto-Configuration)原理是基于Spring Framework的条件化配置和注解实现的。这种机制允许开发者在项目中引入相关的依赖,Spring Boot 将根据这些依赖自动配置应用程序的上下文和功能。SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的。

2024-03-06 08:30:42 2097

原创 SpringBoot自动装配详解

Spring Boot 的自动装配(Auto-Configuration)原理是基于Spring Framework的条件化配置和注解实现的。这种机制允许开发者在项目中引入相关的依赖,Spring Boot 将根据这些依赖自动配置应用程序的上下文和功能。SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的。

2024-03-06 01:41:10 994

原创 Spring之IOC、AOP

IOC是一种设计模式,它将对象的创建和管理交给了框架或容器,而不是由应用程序自己进行管理。AOP 是一种编程范式,它与传统的 "面向对象编程"(OOP)相辅相成。

2024-03-05 20:25:10 925

原创 CompletableFuture详解

为了解决FutureTask类的缺点,CompletableFuture除了提供了更为好用和强大的Future特性之外,还提供了函数式编程异步任务编排组合。

2024-03-04 21:28:32 841

原创 Docker部署前后端分离项目

以ubuntu为例,安装Docker:https://yeasy.gitbook.io/docker_practice/install/ubuntu。如果服务器的内存不够,可以使用交换内存,特别是内存只有2G的情况下,如果服务开多了可能导致内存溢出,服务挂掉;⚠️:请在云服务器的控制台中将一些要使用的端口开放,比如如果你要使用navicat管理mysql,请将默认的3306端口开放出来。⚠️:将xxx改为自己的jar包名称,将EXPOSE修改为自己后端设置的端口。创建 2G 的 swap,可以根据你的。

2024-03-04 20:11:22 944

原创 AQS详解

if (!/*** 中断当前线程*/调用自定义同步器的tryAcquire()尝试直接去获取资源,如果成功则直接返回没成功,则addWaiter将该线程加入等待队列的尾部,并标记为独占模式acquireQueue()使线程在等待队列中休息,有机会时(轮到自己,会被unpark())会尝试获取资源。获取到资源后才返回。如果在整个等待过程中被中断过,则返回true,否则返回false。如果线程在等待过程中被中断过,它是不响应的。

2024-02-28 10:30:36 976

原创 阻塞IO、非阻塞IO、IO多路复用、AIO的区别

I/O(Input/Output)操作指的是计算机系统与外部设备或程序之间的数据传输。I/O 操作包括读取和写入数据,用于在计算机系统和外部环境之间进行信息交换。从外部设备或其他程序读取数据到计算机系统中。例子:从键盘输入数据。从磁盘读取文件内容。从网络接收数据。将计算机系统中的数据发送到外部设备或其他程序。例子:向屏幕打印输出信息。将数据写入磁盘文件。向网络发送数据。I/O 操作是计算机系统中非常重要的一部分,因为计算机系统通常需要与外部世界进行交互。

2024-02-07 23:11:52 1117

原创 如何保证消息队列消息不丢失?

一文带你了解如何保证消息队列消息不丢失

2023-12-08 14:45:25 87

原创 TCP的粘包与拆包

一文带你搞懂TCP的粘包与拆包问题

2023-12-05 16:04:07 211

原创 不占用额外空间的交换

不用额外空间的交换骚操作

2023-12-04 23:11:49 71

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除