- 博客(356)
- 收藏
- 关注
原创 学习笔记框架目录
学习笔记目录Java基础1)变量和字符串:变量和字符串2)类、对象、接口和继承:类、对象、接口和继承容器1)集合框架基础:集合框架2)ArrayList源码:ArrayList源码3)LinkedList源码:LinkedList源码4)HashMap源码:HashMap源码并发JVM设计模式:1)单例模式:单例模式2)观察者模式:观察者模式3)代理...
2020-03-17 20:49:27
965
1
原创 BeanUtil.copyProperties和MapStruct的性能对比
BeanUtil.copyProperties(通常指Apache Commons BeanUtils、Spring BeanUtils等)和MapStruct都是Java中用于对象属性复制的工具,但它们在实现机制和性能上有显著差异。
2025-12-24 17:52:54
352
原创 【Linux】用户管理和配置免密登陆
我们通过一台 Linux 服务器远程另外一台服务器时,每次远程都需要输入对端机器的密码,如何实现不用输入密码就可以远程别的服务器?在远程机,我们会发现,同样在用户家目录创建了一个隐藏文件夹 .ssh,这个目录下面多了一个文件 authorized_keys,这就是刚才传过来的公钥,这样下次客户机远程过来,就不用再输入密码,这种方式在集群中用得比较多。在客户机键入下面的命令,在应答的位置输入 yes,接着输入远程机的密码,之后就可以免密码登录。输入密码回车,使用root用户可以编辑覆盖原来的密码。
2025-12-22 12:08:02
729
原创 【Hikari】数据库连接池
HikariCP是当前最快的JDBC连接池,在日语中"光"的意思,寓意着像光一样快速。它被Spring Boot 2.0+版本默认采用。@Primary@Bean// 连接池基本配置// 连接测试// 连接泄漏检测// 连接保持活跃// 连接初始化SQL// 事务配置// 监控配置(集成Prometheus)// 连接获取优化@Primary@Bean// 设置数据库连接信息。
2025-12-17 09:42:30
432
原创 【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
273
原创 【Doris】运维命令
远程Fragment:在分布式数据库和大数据处理系统中,“Fragment”(片段)通常指的是查询执行计划中的一个单元,它代表了查询的一部分,需要在数据所在的节点上执行。数据库允许的最大运行事务数:数据库允许的最大运行事务数是指在任何给定时间点,数据库系统能够同时处理的事务(即一组操作,要么全部成功,要么全部失败)的最大数量。由于物理时钟的不完美,以及网络延迟等因素,这些差异是难以避免的。注意,在 1.1 版本之前,设置全局生效后,后续新的会话连接中会沿用设置值,但当前会话中的值不变。
2025-12-05 17:21:09
577
原创 【算法】图相关算法和递归
每个类对象的id是唯一的,对应的relyDepIdList有多个,表示一个部门可以依赖于多个部门。递归通常用于解决可以分解为相同问题的子问题的问题。理解递归的关键在于理解如何将问题分解为更小的相同问题,并设置递归终止条件,避免无限递归。(3)缩小问题规模:将原问题分解为一个或多个子问题,这些子问题与原问题具有相同的结构,但规模更小。(3)当节点开始处理深度计算的时候,把节点加入visited,用来判断是否出现循环依赖。(4)组合子问题的结果:将子问题的结果组合起来,形成原问题的解。(1)明确的终止条件。
2025-11-05 10:21:04
403
原创 【系统安全】DDoS攻击
DDoS 的全称是 Distributed Denial-of-Service,即 分布式拒绝服务攻击。(1)拒绝服务(DoS):目标:攻击者的目的不是窃取数据或入侵系统,而是让正常的用户无法访问目标服务,也就是“拒绝”提供“服务”。比喻:这就像你开了一家商店,攻击者不是来偷东西,而是雇了成百上千人堵在你的店门口。真正的顾客根本无法进门,你的生意也就瘫痪了。
2025-10-28 10:57:12
754
原创 【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
975
原创 【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
1026
原创 【Springboot】介绍启动类和启动过程
(1)作用:表明当前类是一个配置类。它的底层是 @Configuration,这意味着Spring容器会从该类中加载Bean定义(@Bean注解的方法)。(2)为什么不用 @Configuration:@SpringBootConfiguration是Spring Boot提供的,语义上更明确地指出这是主配置类,但在功能上与 @Configuration无异。
2025-09-11 23:57:18
1283
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
711
原创 【Linux】jar文件软链接和硬链接的操作区别
(1)硬链接在 ZIP/JAR 中是敌人: Spring Boot JAR 本质是 ZIP。硬链接在 ZIP 中会变成独立副本,浪费空间。在构建 Spring Boot JAR 前,确保项目目录中没有硬链接。(2)软链接路径: JAR 内的软链接使用相对路径最安全(相对于链接在 JAR 中的位置)。绝对路径在容器化或不同部署环境中容易失效。(3)解压环境: 打包时保留的软链接,其能否在解压后正确工作(尤其是在 Windows 上)取决于解压工具。
2025-09-10 21:25:56
1266
原创 【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
925
原创 【Arthas】线上监控诊断
(3)很多时候我们只想看到某个方法的rt大于某个时间之后的trace结果,现在Arthas可以按照方法执行的耗时来进行过滤了,例如trace *StringUtils isBlank '#cost>100’表示当执行时间超过100ms的时候,才会输出trace的结果。结果的输出顺序和事件发生的先后顺序一致,和命令中 -s -b 的顺序无关。有一个接口,测试连接的时候,需要对方调用你的接口进行测试,那么tt可以记住这个进程,请求一次以后,就可以自己反复的进行调用测试了,就不用麻烦别人来帮你调用测试了。
2025-08-29 02:03:36
427
原创 【Nacos】优雅规范的使用和管理yml配置文件
这个配置管理方案提供了:(1)清晰的环境隔离:通过Nacos命名空间和Spring Profile实现(2)公共配置抽离:共享配置集中管理,避免重复(3)敏感信息保护:密码等敏感数据通过环境变量注入(4)配置优先级管理:本地配置 < 共享配置 < 扩展配置 < 环境特定配置(5)动态刷新支持:配置变更实时生效(6)健康监控:配置中心连接状态监控通过这种方式,可以实现配置的集中化管理和环境隔离,提高系统的可维护性和安全性。
2025-08-28 13:35:58
1406
原创 【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
905
原创 【ConcurrentHashMap】实现原理和HashMap、Redis哈希的区别
(1)关键特性:多线程协助扩容。(2)当一个线程触发扩容时,它会负责分配转移任务(将旧数组划分为多个“ stride ”块)。(3)其他正在执行 put或 remove操作的线程如果检测到当前桶正处于转移状态(遇到一个特殊的 ForwardingNode节点),不会阻塞等待,而是会协助完成转移工作。转移完成后,再继续完成自己的操作。(4)这种设计极大地利用了并发性能,加快了扩容过程。ConcurrentHashMap的扩容过程是一个极其精巧的分布式协作算法。
2025-08-27 23:07:59
898
原创 【Kafka】重点概念和架构总结
默认错误处理器的重试次数以及时间间隔是由 FixedBackOff 控制的,FixedBackOff 是 DefaultErrorHandler 初始化时默认的。所以自定义重试次数以及时间间隔,只需要在 DefaultErrorHandler 初始化的时候传入自定义的 FixedBackOff 即可。重新实现一个 KafkaListenerContainerFactory ,调用 setCommonErrorHandler 设置新的自定义的错误处理器就可以实现。@Bean。
2025-08-27 21:56:52
766
原创 【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
975
原创 【Kafka】项目整合使用案例
数据丢失避免需要从生产者和消费者两端配置。生产者必须确保消息成功提交到Kafka(acks=all),并启用重试机制。消费者则需要手动提交偏移量,并在处理完成后才提交,避免消息丢失但可能重复消费(因此消费者逻辑要幂等)。将生产者和消费者的通用操作抽象出来。主题枚举有助于管理主题名称,避免硬编码。消费失败处理通常采用重试机制,比如Spring Kafka的RetryTemplate,但要注意无限重试可能阻塞消费,所以需要设置最大重试次数并最终转移到死信队列(DLQ)进行人工干预。顺序消费是Kafka的难点,因
2025-08-27 17:32:36
783
原创 【ElasticSearch】springboot整合搭建ELK日志分析系统
ELK 是三个开源软件的缩写,分别表示:(1)E:Elasticsearch - 一个分布式搜索和分析引擎,提供存储和搜索功能。(2)L:Logstash - 一个服务器端数据处理管道,用于从多个来源采集数据,转换数据,然后将数据发送到存储库(如Elasticsearch)。(3)K:Kibana - 一个数据可视化和管理工具,用于操作Elasticsearch中的数据,提供图表、表格、地图等可视化方式。作用:(1)日志管理:集中式日志收集、分析和展示。
2025-08-27 00:36:30
689
原创 【ElasticSearch】数据同步
(1)追求实时性和解耦:选择CDC方案(如Debezium+Kafka),适合大型项目。(2)简单业务,快速实现:选择应用层异步双写或定时任务同步。(3)已有大数据平台:使用Flink、Spark等工具同步。(4)需要简单ETL且实时性要求不高:Logstash是较好选择。
2025-08-26 21:52:07
771
原创 【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
1037
原创 【Springboot】项目启动数据预热缓存和布隆过滤器
需要在Spring Boot项目启动时执行数据预热操作,包括将数据加载到Redis缓存和布隆过滤器中。通常,我们可以使用Spring的ApplicationRunner或CommandLineRunner接口来实现,它们在Spring容器启动完成后执行。(1)实现ApplicationRunner或CommandLineRunner接口,重写run方法。(2)在run方法中编写数据预热的逻辑。(3)注意异常处理,避免启动失败。
2025-08-26 00:23:13
876
原创 【Springboot】依赖注入方式
Lombok提供了几个用于生成构造器的注解,它们在不同场景下使用,主要区别在于生成的构造器的访问权限和包含的字段。
2025-08-25 23:38:55
802
原创 【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
1324
原创 【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
692
原创 【线程池】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
952
原创 【Dubbo】高性能的 RPC
/ 接口需单独打包,供消费者引入(1)Dubbo 基于 RPC 协议,性能优异,适合对通信效率要求高的内部服务,需单独处理服务治理。(2)OpenFeign 基于 HTTP 协议,依赖 Spring Cloud 生态,适合简单的跨服务调用,整合成本低。两者均可通过 Nacos 实现服务注册与发现,Nacos 作为注册中心时,需在配置中指定其地址,并确保服务启动后成功注册。
2025-08-22 23:02:24
883
原创 【Linux】项目部署可用的shell脚本
功能描述:项目部署从内网拿包,需要根据每个项目的前端后端的文件路径拿到对应的包,增量包或者全量包,然后分别打成一个tar.gz的压缩包,放进一个文件夹,最后整个文件夹压缩成名称带时间戳的完整包要求:(1)脚本中配置项目的枚举,对应不同的路径,执行脚本后提示传参,并提示可选的参数,参数为项目名称的枚举code,参数使用逗号分隔(2)脚本拿到参数后先遍历判断枚举code对应的包路径是否存在,不存在则提示并停止(3)然后在脚本的同路径下新建一个格式为“打包标识前缀_日期_时分“的最终包文件(4)然后在最终
2025-08-20 01:52:55
1010
原创 【Java】注解的设计和使用
通过@interface关键字定义注解,并通过元注解(Java 内置的用于描述注解的注解)指定其适用范围、生命周期等。常用元注解:(1)@Target:指定注解可修饰的元素(如METHOD方法、TYPE类、FIELD字段等)。(2)@Retention:指定注解的生命周期(SOURCE源码级、CLASS编译级、RUNTIME运行时,自定义注解通常用RUNTIME,允许运行时通过反射解析)。(3)@Documented:生成 API 文档时包含该注解。
2025-08-16 00:32:45
974
原创 【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
1667
原创 【线程池】压测确定线程池合适的参数
通过 “控制变量法” 压测,重点关注核心线程数、最大线程数、队列大小三个参数,结合 IO 密集型任务特性(线程数可略高于 CPU 核心数),最终找到 “吞吐量高、响应时间短、资源占用合理” 的配置。对于 100 万条数据导出场景,典型最优配置可能为:corePoolSize=CPU核心数×2、maximumPoolSize=CPU核心数×3、queueCapacity=1000~2000,具体需根据实际压测结果调整。
2025-08-10 00:09:39
941
原创 【Doris】实时分析型数据库
Apache Doris 是一款基于 MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询结果。Doris 既能支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于这些优势,Apache Doris 非常适合用于报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等场景。用户可以基于 Doris 构建大屏看板、用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。
2025-08-09 18:34:00
1871
原创 【JVM】流程汇总
① 开启堆 dump(-XX:+HeapDumpOnOutOfMemoryError)→ ② 用 MAT/JProfiler 分析 dump,定位泄漏对象 → ③ 检查代码中不合理的引用(如静态集合未清理、长生命周期对象持有短生命周期对象)→ ④ 修复并验证。
2025-08-08 13:42:34
5624
原创 【SpringSecurity&&JWT】搭建认证服务
搭建一个单独的认证的服务,注册到Nacos,使用ddd分层springboot2.7.7SpringCloud2021.0.5选择自己需要的依赖导入,重点是版本要兼容【2】yml配置bootstrap.ymlbootstrap-dev.ymlnacos里配置了mysql和redis等信息,这里并不规范,按需要配置自己的信息用来确认bootstrap.yml配置读取成功,因为bootstrap依赖要手动导入,否则bootstrap.yml里的配置信息不会生效【4】常用常量【5】SpringSe
2025-08-08 00:59:19
564
原创 【Java】Predicate使用案例
需求:根据动态条件查询用户(如可选条件:年龄范围、姓名包含特定字符)。// 根据条件查询用户new User("张三", 20),new User("张四", 22),new User("李四", 17)// 查询:名字包含"张"且年龄>18Predicate<User> query = u -> u.getName().contains("张")// 输出:[张三(20), 张四(22)](1)Predicate 用于条件判断,核心方法 test(T t) 返回布尔值。
2025-08-07 23:52:59
525
原创 【Java】使用模板方法模式设计EasyExcel批量导入导出
如果下一个功能要实现导入导出的功能,就可以继承抽象父类,然后重写和调用方法即可,开发人员只需要关注校验逻辑、导出逻辑、导入逻辑即可,而整个方法的流程模板已经实现封装,开发人员不用关注如何配置流程,且实现了大量代码的灵活复用用到的知识点细节(1)模板方法设计模式(2)反射获取errorMsg字段值(3)泛型参数传参(4)Java对象多态(5)抽象类和抽象方法的使用(6)EasyExcel通过注解校验表头和实体类是否一致。
2025-08-04 15:55:40
1039
原创 【Java】泛型的使用案例
泛型可作用于类、接口、方法,分别称为泛型类、泛型接口、泛型方法。在类名后添加<类型参数>(如),类型参数可在类的字段、方法参数、返回值中使用。与泛型类类似,在接口名后添加<类型参数>,实现类需指定具体类型或继续保留泛型。在方法返回值前添加<类型参数>(如),该类型参数仅作用于当前方法,与类的泛型无关(即使类不是泛型类,也可定义泛型方法)。泛型参数属于实例级别的信息(每个实例的类型参数可能不同),而静态字段属于类级别,无法关联具体的泛型参数。// 错误:静态字段不能使用泛型参数// 编译错误。
2025-08-03 16:28:48
1394
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅