自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学习笔记框架目录

学习笔记目录Java基础1)变量和字符串:变量和字符串2)类、对象、接口和继承:类、对象、接口和继承容器1)集合框架基础:集合框架2)ArrayList源码:ArrayList源码3)LinkedList源码:LinkedList源码4)HashMap源码:HashMap源码并发JVM设计模式:1)单例模式:单例模式2)观察者模式:观察者模式3)代理...

2020-03-17 20:49:27 1058 1

原创 【Sql】查询逻辑案例汇总

省的总店和分店为第三层,上级为大区的总店;给一个日期,例如2026-04-03,sql通过函数获取:上月月末、上季季末、去年年末、当月月初、当季季初、当年年初、当周、当月、当季、当年、上月、去年、昨日、去年同期、去年同月、近3天、近7天、近1个月、近3个月等周期的开始日期和结束日期。销售记录表字段包含:id-主键、sale_money-销售金额、sale_count-销售数量、org-店铺机构、product-商品名称、biz_date-业务日期、sale_person-销售人员工号。

2026-04-08 10:14:35 429

原创 【Canal】监听mysql的binlog日志,同步数据到redis和es

canal.adapter,相当于canal的客户端,会从canal-deployer中获取数据,然后对数据进行同步,可以同步到MySQL、Elasticsearch和HBase等存储中去。(1)全局配置:conf/application.properties(也可以是conf/application.yml,连接 Canal-Server、配置同步目标、全局参数)下载canal.deployer,可以直接监听MySQL的binlog,把自己伪装成MySQL的从库,只负责接收数据,并不做处理。

2026-03-13 20:24:35 489

原创 【线程池】优化等待队列和拒绝策略

适合中小并发、简单业务,基于 SpringBoot+Redis 实现,无需额外部署中间件,完美兼顾 OOM 防护 + 任务不丢失。/*** 可持久化任务基类(必须序列化)// 任务唯一标识(用于去重) String getTaskId();/*** 可持久化任务基类(必须序列化)// 任务唯一标识(用于去重) String getTaskId();/*** 可持久化任务基类(必须序列化)*/// 任务唯一标识(用于去重)/**

2026-03-13 16:21:03 451

原创 【Linux】配置服务自启动

在 Linux 环境下,给 Redis 设置开机自启动 + 进程异常挂掉自动重启,避免服务挂掉后不方便手动重启带来的问题。redis-server 启动程序路径(如 /usr/local/redis/bin/redis-server)redis.conf 配置文件路径(如 /usr/local/redis/conf/redis.conf)输出 Created symlink …(2)粘贴以下配置(替换路径为你自己的 Redis 路径)(1)重载 systemd 配置(让系统识别新服务)

2026-03-13 11:42:44 208

原创 【redis】redis重新创建集群

检查防火墙(开放 6379 和 16379 端口)、redis.conf中bind配置(建议设为 0.0.0.0)、protected-mode设为no。Redis 集群的元数据、槽位信息、数据会存在数据目录和集群配置文件中,必须全部删除,否则重新创建集群会读取旧数据。先查看redis.conf,确认数据存储路径(每台节点都要查),确定数据存储路径后,删除data目录下的文件。创建连接会话的时候,勾选cluster,标识连接redis集群,这样所有节点槽位的数据都可以查到了。

2026-03-11 18:23:38 444

原创 【minIo】对象存储

MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 设置 MinIO 的 root 用户名与密码。9001:9001 映射 MinIO 控制台(Web UI)端口,可以通过浏览器访问 http://localhost:9001。./minio/data:/cdata 挂载本地存储目录到容器内部的 /data,用于存储 MinIO 数据。container_name 指定容器名称为 minio,便于管理和日志查看。使用了官方的 minio/minio 镜像。ip就是minIo的ip。

2026-03-03 22:20:58 438

原创 【Doris】视图和物化视图

如果是多表、支持直接查询,就要使用异步物化视图如果物化视图的基表有分区,就使用分区增量刷新,效率更快同步物化视图是将预先计算(根据定义好的 SELECT 语句)的数据集,存储在 Doris 中的一个特殊的表。Doris 会自动维护同步物化视图的数据,无论是新增数据还是删除数据,都能保证基表(Base Table)和物化视图表的数据同步更新并保持一致,只有同步完成后,相关命令才会结束,无需任何额外的人工维护成本。查询时,Doris 会自动匹配到最优的物化视图,并直接从物化视图中读取数据。

2026-02-10 11:44:05 653

原创 BeanUtil.copyProperties和MapStruct的性能对比

BeanUtil.copyProperties(通常指Apache Commons BeanUtils、Spring BeanUtils等)和MapStruct都是Java中用于对象属性复制的工具,但它们在实现机制和性能上有显著差异。

2025-12-24 17:52:54 451

原创 【Linux】用户管理和配置免密登陆

我们通过一台 Linux 服务器远程另外一台服务器时,每次远程都需要输入对端机器的密码,如何实现不用输入密码就可以远程别的服务器?在远程机,我们会发现,同样在用户家目录创建了一个隐藏文件夹 .ssh,这个目录下面多了一个文件 authorized_keys,这就是刚才传过来的公钥,这样下次客户机远程过来,就不用再输入密码,这种方式在集群中用得比较多。在客户机键入下面的命令,在应答的位置输入 yes,接着输入远程机的密码,之后就可以免密码登录。输入密码回车,使用root用户可以编辑覆盖原来的密码。

2025-12-22 12:08:02 942

原创 【Hikari】数据库连接池

HikariCP是当前最快的JDBC连接池,在日语中"光"的意思,寓意着像光一样快速。它被Spring Boot 2.0+版本默认采用。@Primary@Bean// 连接池基本配置// 连接测试// 连接泄漏检测// 连接保持活跃// 连接初始化SQL// 事务配置// 监控配置(集成Prometheus)// 连接获取优化@Primary@Bean// 设置数据库连接信息。

2025-12-17 09:42:30 789

原创 【Git】分支管理

用于生产紧急修改,从release切出,开发完后要合并到上述所有分支。(2)频繁合并:定期将develop合并到功能分支,减少冲突。(3)将测试完的feature代码合到develop。(1)分支生命周期要短:功能分支应在1-2周内完成。(1)从develop创建功能分支feature。(2)develop分支【来自release】(3)feature分支【来自develop】(4)hotfix分支【来自develop】(5)bugfix分支【来自develop】(4)发布上线从develop拿包。

2025-12-05 17:47:31 332

原创 【Doris】运维命令

远程Fragment:在分布式数据库和大数据处理系统中,“Fragment”(片段)通常指的是查询执行计划中的一个单元,它代表了查询的一部分,需要在数据所在的节点上执行。数据库允许的最大运行事务数:数据库允许的最大运行事务数是指在任何给定时间点,数据库系统能够同时处理的事务(即一组操作,要么全部成功,要么全部失败)的最大数量。由于物理时钟的不完美,以及网络延迟等因素,这些差异是难以避免的。注意,在 1.1 版本之前,设置全局生效后,后续新的会话连接中会沿用设置值,但当前会话中的值不变。

2025-12-05 17:21:09 798

原创 【算法】图相关算法和递归

每个类对象的id是唯一的,对应的relyDepIdList有多个,表示一个部门可以依赖于多个部门。递归通常用于解决可以分解为相同问题的子问题的问题。理解递归的关键在于理解如何将问题分解为更小的相同问题,并设置递归终止条件,避免无限递归。(3)缩小问题规模:将原问题分解为一个或多个子问题,这些子问题与原问题具有相同的结构,但规模更小。(3)当节点开始处理深度计算的时候,把节点加入visited,用来判断是否出现循环依赖。(4)组合子问题的结果:将子问题的结果组合起来,形成原问题的解。(1)明确的终止条件。

2025-11-05 10:21:04 449

原创 【系统安全】DDoS攻击

DDoS​ 的全称是 ​Distributed Denial-of-Service,即 ​分布式拒绝服务攻击。(1)拒绝服务(DoS)​​:目标​:攻击者的目的不是窃取数据或入侵系统,而是让正常的用户无法访问目标服务,也就是“拒绝”提供“服务”。​比喻​:这就像你开了一家商店,攻击者不是来偷东西,而是雇了成百上千人堵在你的店门口。真正的顾客根本无法进门,你的生意也就瘫痪了。

2025-10-28 10:57:12 805

原创 【Springboot】接口post请求和get请求的区别

在 Spring Boot 中,GET 请求通过 @GetMapping 注解定义,参数接收方式有两种:用 @RequestParam 接收 URL 中的键值对参数(如 public User getUser(@RequestParam Long id));用 @PathVariable 接收 URL 路径中的参数(如 public User getUser(@PathVariable Long id),对应 URL http://localhost:8080/user/1)。

2025-09-22 12:43:37 1037

原创 【Doris】集群的搭建配置和介绍

路径 | 角色 | 作用 || fe/bin/| FE | 启动/停止控制脚本 || fe/conf/fe.conf| FE | ​核心配置文件,定义元数据目录、端口、JVM参数等 || fe/doris-meta/| FE | ​极其重要,存储集群元数据,​必须备份​ || fe/log/| FE | 存放日志文件,排查问题首要查看位置 || be/bin/| BE | 启动/停止控制脚本 |

2025-09-12 22:55:50 1217

原创 【Springboot】介绍启动类和启动过程

(1)​作用​:表明当前类是一个配置类。它的底层是 @Configuration,这意味着Spring容器会从该类中加载Bean定义(@Bean注解的方法)。(2)​为什么不用 @Configuration​:@SpringBootConfiguration是Spring Boot提供的,语义上更明确地指出这是主配置类,但在功能上与 @Configuration无异。

2025-09-11 23:57:18 1380 1

原创 【Linux】常用命令汇总

(9)​解压特定文件:​​ 从 big_archive.tar.gz中只解压 dir/subdir/file.txtbash。​(3)解压并解压缩 (bzip2):​​ 解压 images.tar.bz2到当前目录​bash。(5)​解压并解压缩 (zstd):​​ 解压 backup.tar.zst到当前目录​bash。(4)​解压并解压缩 (xz):​​ 解压 archive.tar.xz到当前目录​bash。

2025-09-10 22:24:15 789

原创 【Linux】jar文件软链接和硬链接的操作区别

(1)​硬链接在 ZIP/JAR 中是敌人:​​ Spring Boot JAR 本质是 ZIP。硬链接在 ZIP 中会变成独立副本,浪费空间。​在构建 Spring Boot JAR 前,确保项目目录中没有硬链接。​​(2)​软链接路径:​​ JAR 内的软链接使用相对路径最安全(相对于链接在 JAR 中的位置)。绝对路径在容器化或不同部署环境中容易失效。(3)​解压环境:​​ 打包时保留的软链接,其能否在解压后正确工作(尤其是在 Windows 上)取决于解压工具。

2025-09-10 21:25:56 1313

原创 【Spring】ApplicationListener监听器

(1)定义自定义事件​(2)创建事件监听器​@Component@Override// 发送通知// 更新库存// 记录审计日志System.out.println("发送订单确认邮件至: " + order.getCustomerEmail());System.out.println("更新库存,订单ID: " + order.getId());System.out.println("记录审计日志,订单金额: " + order.getAmount());

2025-08-31 19:37:57 991

原创 【Arthas】线上监控诊断

(3)很多时候我们只想看到某个方法的rt大于某个时间之后的trace结果,现在Arthas可以按照方法执行的耗时来进行过滤了,例如trace *StringUtils isBlank '#cost>100’表示当执行时间超过100ms的时候,才会输出trace的结果。结果的输出顺序和事件发生的先后顺序一致,和命令中 -s -b 的顺序无关。有一个接口,测试连接的时候,需要对方调用你的接口进行测试,那么tt可以记住这个进程,请求一次以后,就可以自己反复的进行调用测试了,就不用麻烦别人来帮你调用测试了。

2025-08-29 02:03:36 506

原创 【Nacos】优雅规范的使用和管理yml配置文件

这个配置管理方案提供了:(1)​清晰的环境隔离​:通过Nacos命名空间和Spring Profile实现(2)​公共配置抽离​:共享配置集中管理,避免重复(3)敏感信息保护​:密码等敏感数据通过环境变量注入(4)配置优先级管理​:本地配置 < 共享配置 < 扩展配置 < 环境特定配置(5)动态刷新支持​:配置变更实时生效(6)健康监控​:配置中心连接状态监控通过这种方式,可以实现配置的集中化管理和环境隔离,提高系统的可维护性和安全性。

2025-08-28 13:35:58 1491

原创 【Redis】数据分片机制和集群机制

这是一个临时重定向。(3)​可接受程度的可用性​:遵循 CAP 理论,在网络分区(Split-brain)发生时,优先保证数据一致性(C)​​ 和分区容错性(P)​,可能会牺牲部分可用性(A)。2-如果集群中超过半数的主节点都认为节点 B 处于 PFAIL状态(即也联系不上节点 B),那么节点 A 就会将节点 B 的状态升级为 ​FAIL(客观下线)​。(2)​重定向 (MOVED)​​:如果键所在的槽不由当前节点负责,节点会向客户端回复一个 ​MOVED错误,并附上该槽所在的正确节点的 IP 和端口。

2025-08-27 23:31:48 960

原创 【ConcurrentHashMap】实现原理和HashMap、Redis哈希的区别

(1)关键特性:多线程协助扩容。(2)当一个线程触发扩容时,它会负责分配转移任务(将旧数组划分为多个“ stride ”块)。(3)其他正在执行 put或 remove操作的线程如果检测到当前桶正处于转移状态(遇到一个特殊的 ForwardingNode节点),​不会阻塞等待,而是会协助完成转移工作。转移完成后,再继续完成自己的操作。(4)这种设计极大地利用了并发性能,加快了扩容过程。​ConcurrentHashMap的扩容过程是一个极其精巧的分布式协作算法。

2025-08-27 23:07:59 951

原创 【Kafka】重点概念和架构总结

默认错误处理器的重试次数以及时间间隔是由 FixedBackOff 控制的,FixedBackOff 是 DefaultErrorHandler 初始化时默认的。所以自定义重试次数以及时间间隔,只需要在 DefaultErrorHandler 初始化的时候传入自定义的 FixedBackOff 即可。重新实现一个 KafkaListenerContainerFactory ,调用 setCommonErrorHandler 设置新的自定义的错误处理器就可以实现。@Bean。

2025-08-27 21:56:52 825

原创 【ElasticSearch】原理分析

(3)Refresh​:默认每 1 秒,将内存缓冲区中的文档创建一个新的、不可变的​ Lucene ​段 (Segment)​​ 并放入文件系统缓存(OS Cache)。(3)每个分片在本地执行查询(在各自的倒排索引中查找),并创建一个优先级队列(根据相关性评分排序),将结果(from+size条文档的 _id和 score)返回给协调节点。Elasticsearch 的性能取决于 ​计算(CPU)、内存(Memory)、磁盘 I/O(Disk I/O)和网络(Network)​​ 的平衡。

2025-08-27 20:47:07 1032

原创 【Kafka】项目整合使用案例

数据丢失避免需要从生产者和消费者两端配置。生产者必须确保消息成功提交到Kafka(acks=all),并启用重试机制。消费者则需要手动提交偏移量,并在处理完成后才提交,避免消息丢失但可能重复消费(因此消费者逻辑要幂等)。将生产者和消费者的通用操作抽象出来。主题枚举有助于管理主题名称,避免硬编码。消费失败处理通常采用重试机制,比如Spring Kafka的RetryTemplate,但要注意无限重试可能阻塞消费,所以需要设置最大重试次数并最终转移到死信队列(DLQ)进行人工干预。顺序消费是Kafka的难点,因

2025-08-27 17:32:36 830

原创 【ElasticSearch】springboot整合搭建ELK日志分析系统

ELK 是三个开源软件的缩写,分别表示:(1)E:Elasticsearch - 一个分布式搜索和分析引擎,提供存储和搜索功能。(2)L:Logstash - 一个服务器端数据处理管道,用于从多个来源采集数据,转换数据,然后将数据发送到存储库(如Elasticsearch)。(3)K:Kibana - 一个数据可视化和管理工具,用于操作Elasticsearch中的数据,提供图表、表格、地图等可视化方式。作用:(1)日志管理:集中式日志收集、分析和展示。

2025-08-27 00:36:30 741

原创 【ElasticSearch】数据同步

(1)追求实时性和解耦​:选择CDC方案(如Debezium+Kafka),适合大型项目。(2)简单业务,快速实现​:选择应用层异步双写或定时任务同步。(3)已有大数据平台​:使用Flink、Spark等工具同步。(4)需要简单ETL且实时性要求不高​:Logstash是较好选择。

2025-08-26 21:52:07 920

原创 【ElasticSearch】客户端选择

这是Spring Data Elasticsearch提供的一个接口,类似于Spring Data JPA的Repository。它提供了基本的CRUD操作和简单的查询方法(通过方法名或注解定义查询)。适用于简单的CRUD操作和查询,能够快速开发。(1)ElasticsearchTemplate是Spring Data Elasticsearch早期版本中的主要类,基于TransportClient(已弃用)。(2)ElasticsearchRestTemplate是Spring Data Elastic

2025-08-26 20:02:05 1241

原创 【Springboot】项目启动数据预热缓存和布隆过滤器

需要在Spring Boot项目启动时执行数据预热操作,包括将数据加载到Redis缓存和布隆过滤器中。通常,我们可以使用Spring的ApplicationRunner或CommandLineRunner接口来实现,它们在Spring容器启动完成后执行。(1)实现ApplicationRunner或CommandLineRunner接口,重写run方法。(2)在run方法中编写数据预热的逻辑。(3)注意异常处理,避免启动失败。

2025-08-26 00:23:13 925

原创 【Springboot】依赖注入方式

Lombok提供了几个用于生成构造器的注解,它们在不同场景下使用,主要区别在于生成的构造器的访问权限和包含的字段。

2025-08-25 23:38:55 928

原创 【ElasticSearch】json查询语法

它提供了更底层的操作,可以执行复杂的查询和聚合,适用于需要高度自定义查询的场景。(3)如果Spring Data Elasticsearch提供的功能无法满足需求(例如,使用一些非常新的Elasticsearch特性),可以考虑直接使用Elasticsearch的Java API Client,但这样会失去Spring Data的便利性。适用于简单的CRUD操作和查询,能够快速开发。​布尔查询(Bool Query)​​:组合多个查询条件(must, should, must_not, filter)。

2025-08-25 21:50:28 1381

原创 【ElasticSearch】springboot整合es案例

(1)Elasticsearch 依赖于JDK, 并且JDK 版本1.8+(2)下载Elasticsearch安装包去官网下载:官网注意ES和JDK的对应版本要求查看连接:注意ES和JDK的对应版本要求(3)解压安装(4)启动(5)检验是否启动成功http://127.0.0.1:9200/(6)网址访问报错received plaintext http traffic on an https channel, closing connection Netty4HttpChannelES

2025-08-24 21:14:22 740

原创 【线程池】ThreadPoolTaskExecutor和redis的配置案例

(3)线程中断处理(Thread.currentThread().interrupt())(2)支持超时控制(latch.await(10, TimeUnit.SECONDS))(2)使用executor.submit()提交有返回值的任务(返回Future)(3)使用executor.execute()提交无返回值的任务。(3)缓存设置随机过期时间(5-10 分钟),避免缓存雪崩。(3)收集所有线程的Future结果,统一处理。(1)线程任务中使用try-catch捕获异常。

2025-08-23 11:30:57 984

原创 【Dubbo】高性能的 RPC

/ 接口需单独打包,供消费者引入(1)Dubbo 基于 RPC 协议,性能优异,适合对通信效率要求高的内部服务,需单独处理服务治理。(2)OpenFeign 基于 HTTP 协议,依赖 Spring Cloud 生态,适合简单的跨服务调用,整合成本低。两者均可通过 Nacos 实现服务注册与发现,Nacos 作为注册中心时,需在配置中指定其地址,并确保服务启动后成功注册。

2025-08-22 23:02:24 950

原创 【Linux】项目部署可用的shell脚本

功能描述:项目部署从内网拿包,需要根据每个项目的前端后端的文件路径拿到对应的包,增量包或者全量包,然后分别打成一个tar.gz的压缩包,放进一个文件夹,最后整个文件夹压缩成名称带时间戳的完整包要求:(1)脚本中配置项目的枚举,对应不同的路径,执行脚本后提示传参,并提示可选的参数,参数为项目名称的枚举code,参数使用逗号分隔(2)脚本拿到参数后先遍历判断枚举code对应的包路径是否存在,不存在则提示并停止(3)然后在脚本的同路径下新建一个格式为“打包标识前缀_日期_时分“的最终包文件(4)然后在最终

2025-08-20 01:52:55 1083

原创 【Java】注解的设计和使用

通过@interface关键字定义注解,并通过元注解(Java 内置的用于描述注解的注解)指定其适用范围、生命周期等。常用元注解:(1)@Target:指定注解可修饰的元素(如METHOD方法、TYPE类、FIELD字段等)。(2)@Retention:指定注解的生命周期(SOURCE源码级、CLASS编译级、RUNTIME运行时,自定义注解通常用RUNTIME,允许运行时通过反射解析)。(3)@Documented:生成 API 文档时包含该注解。

2025-08-16 00:32:45 1035

原创 【Docker】安装kafka案例

Kafka 连接 ZooKeeper 正常:ZooKeeper 中存在/brokers节点 + Kafka 日志无连接错误 +kafka-brokers.sh能列出 broker。Kafka 依赖 ZooKeeper 存储元数据(如主题、分区信息),两者连接正常的核心标志是:Kafka 成功在 ZooKeeper 中注册元数据。(1)保存和管理 Kafka 集群的元数据信息。在生产者终端输入消息(如hello kafka),消费者终端应实时收到消息,说明 Kafka 服务正常。

2025-08-14 23:19:36 2024

空空如也

空空如也

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

TA关注的人

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