- 博客(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关注的人
RSS订阅