- 博客(79)
- 收藏
- 关注
原创 揭秘!GitLab CI/CD 配置优化的秘诀
,以支持 Docker-in-Docker(DinD)或挂载宿主机 Docker socket。启动 Docker-in-Docker 容器,Runner 以特权模式连接它执行构建与推送。:确认 CI 变量无误,Harbor 支持的认证方式(如 LDAP、OIDC)是否与凭证匹配。:在项目设置中适当增加 pipeline 超时时间,或拆分镜像层次以复用缓存。:尽量使用专用的 CI 账号和最小权限,避免在脚本中硬编码密码。:你的 Harbor 域名,例如。:Harbor 中的项目名,如。
2025-04-10 09:39:17
267
原创 go语言的语法糖以及和Java的区别
选择哪种语言取决于具体需求:如果需要轻量级、并发高效的系统,Go 是理想选择;如果开发企业级、成熟生态要求较高的系统,Java 依然是不错的选择。:Go 提供了短变量声明、多返回值、defer、range 循环、隐式接口实现和闭包等语法糖,使得代码更加简洁高效。:Go 的接口实现是隐式的,一个类型只要实现了接口声明的方法,就自动满足该接口,无需显式声明实现关系。Go 具有内置的并发支持(goroutine、channel),并发编程非常轻量;:支持直接定义和使用匿名函数,也可以捕获外部变量,形成闭包。
2025-04-08 09:34:18
562
原创 常见的字符编码有哪些?有什么区别?
编码字节数兼容性优点缺点ASCII7/8 位向后兼容简单、广泛使用只支持基本英文字符ISO-8859-11 字节仅局部语言适用于西欧语言字符覆盖范围有限UTF-81~4 字节向后兼容 ASCII节省空间,国际化支持良好亚洲文字可能占用 3 个字节UTF-162 或 4 字节不兼容 ASCII对于东亚文字存储效率高处理时需考虑字节顺序(BOM问题)UTF-324 字节直接映射 Unicode固定长度,随机访问简单占用空间大1~2 字节。
2025-04-07 18:54:48
607
原创 接口和抽象类的区别如何选择
接口(Interface)纯抽象:在 Java 8 之前,接口中的所有方法都是抽象的(Java 8 及以后可以有默认方法和静态方法)。接口仅用于声明行为规范,不提供任何实现细节。多重继承支持:Java 类可以实现多个接口,这解决了多继承的限制。常量定义:接口中定义的变量默认都是常量。抽象类(Abstract Class)部分抽象:抽象类可以包含抽象方法(不提供实现)和非抽象方法(有具体实现)。单继承限制:一个类只能继承一个抽象类,这限制了其复用方式。状态和实现。
2025-04-07 13:46:03
445
原创 数据校验-validation-中@NotNull groups 详细用法以及示例
NotNull(message = "用户名不能为空", groups = {CreateGroup.class, UpdateGroup.class})@NotNull(message = "密码不能为空", groups = CreateGroup.class)// 省略 getter 和 setterusername字段在创建和更新时均不能为空。password字段仅在创建时不能为空。
2025-04-01 16:19:35
321
原创 k8s常用总结
运行 Pod 和容器,包含 kubelet、kube-proxy 以及容器运行时(如 containerd、CRI-O)。提供对一组 Pod 的稳定访问,通过 ClusterIP、NodePort、LoadBalancer 等方式实现服务暴露。负责集群管理,包括 API Server、Controller Manager、Scheduler 和 etcd 存储。最小的调度单位,一个 Pod 内可包含一个或多个紧密关联的容器,通常共享网络命名空间和存储卷。
2025-04-01 15:53:16
916
原创 OpenSearch日志管理系统搭建
购买阿里云 ECS 服务器至少准备一台用于部署 OpenSearch 集群(建议至少3台节点实现高可用)另一台或多台服务器用于部署 Logstash 和 Filebeat(Filebeat可部署在日志产生端,也可作为容器或DaemonSet部署于 Kubernetes 集群中)网络要求所有组件(OpenSearch、Logstash、Filebeat、Dashboards)需处于同一 VPC 内,确保内网通信顺畅配置安全组,开放必要端口(如:OpenSearch 默认 9200、Dashboards 默认
2025-04-01 09:46:27
908
原创 zsh安装以及安装配置oh-my-zsh&安装zsh-autosuggestions&zsh-syntax-highlighting
通过以上步骤,你应该可以成功安装并启用 zsh-autosuggestions 和 zsh-syntax-highlighting 插件。oh‑my‑zsh 是一个流行的 zsh 配置框架,提供了许多主题、插件以及易于定制的功能。如果遇到问题,可以查看终端输出的错误信息,根据提示修改配置文件或安装缺少的依赖。此时,oh‑my‑zsh 应该能够找到并加载这两个插件,错误信息也会消失。检查是否启用了 oh‑my‑zsh 以及配置的主题和插件是否生效。oh‑my‑zsh 附带了一系列插件,你可以在。
2025-03-28 16:53:59
624
原创 @Timed注解的使用方法以及与监控系统集成
Timed注解用于自动记录方法执行时间和调用次数,降低手动采集指标的复杂度。它与 Micrometer 集成,可以将数据上报到 Prometheus 等监控系统。配置 Spring Boot Actuator 和相应的监控后端后,你就可以实时监控方法性能,为系统优化和故障排查提供数据支持。
2025-03-27 18:20:23
482
原创 kubectl安装以及自动补全工具安装
下面提供 kubectl 的安装步骤以及自动补全工具的安装和配置方法,适用于 Linux/MacOS Bash 或 Zsh 环境。
2025-03-25 16:18:11
430
原创 groovy和java
Groovy 是一种运行在 JVM(Java Virtual Machine)上的动态语言,兼具和。它可以无缝与 Java 代码互操作,并且在构建脚本、DSL(领域特定语言)、测试以及 Web 开发中被广泛使用。
2025-03-25 10:53:04
253
原创 EasyExcel自定义合并单元格多行合并根据自定义字段RowWriteHandler以及CellWriteHandler实现方式
原文转载自这里在此基础上进行了调整。
2025-03-17 17:06:38
380
原创 Caffeine+Redis 实现百万 QPS技术方案
多级缓存方案可以有效降低数据库访问压力,提高响应速度,并支持百万级 QPS。通过利用 Caffeine 的本地高速缓存和 Redis 的分布式扩展能力,可以在高并发场景下获得较高的缓存命中率,同时通过延时双删等策略保证数据的一致性。此方案适用于需要实时数据访问和高并发查询的大型分布式系统。
2025-03-14 11:13:18
337
原创 Apache Flink介绍
Flink 工作流程:从数据输入(Source)到数据转换处理(Transformations)、状态管理与 Checkpoint,再到数据输出(Sink),构成完整的流处理体系。基础组件:包括 JobManager、TaskManager、状态后端、Checkpoint 机制、Source/Sink Connectors、以及 Watermark 机制等。优点:Flink 提供统一的流批处理 API、强大的状态管理和容错能力,非常适合实时数据分析、流式 ETL 和事件驱动应用。使用场景。
2025-03-14 10:16:43
280
原创 新生代只有一个 Eden 和一个 Survivor 可以吗
这个参数会让 Survivor 区极小,甚至接近 0,但这样会导致大多数对象直接晋升到老年代。是经过长期优化的方式,能够提供最佳的垃圾回收效率。除非有特殊需求,否则不建议减少到。,但这种做法会影响 GC 性能,并增加对象晋升老年代的风险。在某些特殊情况下,你可以通过调整 JVM 参数让新生代只有。在某些特定的 JVM 参数配置下,确实可以让新生代只包含。,这些收集器对 Survivor 区的管理更加智能化。如果你对 GC 性能有更高的要求,可以考虑使用。在 Java 的垃圾回收机制中,新生代通常由。
2025-03-13 10:48:20
300
原创 缓存数据一致性问题,延迟双删策略
延迟双删策略通过在数据库更新后延时第二次删除缓存,来降低并发环境中缓存不一致的风险。推荐的延迟窗口通常在 100 毫秒到 500 毫秒之间,初始设置可以为 200-300 毫秒,具体值需根据实际数据库更新延时、系统并发情况和缓存响应时间进行调优。通过这种策略,可以尽可能保证缓存与数据库数据的一致性,减少“脏数据”问题。具体设置窗口时间可以根据实际情况判定。
2025-03-13 10:44:52
495
原创 在高并发系统中如何保证一条消息只能被消费一次
中间件层如果条件允许,使用支持事务的消息系统(如 Kafka 的事务机制)以减少重复消息发送。配置手动提交 offset 和合适的重试机制。消费者端幂等设计强制每条消息携带全局唯一标识,并在业务处理前做去重检查。利用分布式锁或数据库事务确保同一消息只被一个消费者处理。业务处理设计确保业务逻辑具有幂等性,即使同一消息被处理多次,结果也不会重复或冲突。监控与日志配置完善的监控和日志系统,实时监控消息消费情况和重复消费情况,以便快速定位和解决问题。
2025-03-10 20:57:52
435
原创 clickhouse和cassandra数据库介绍
在大数据时代,不同的数据库针对不同场景有着各自的优势。ClickHouse 和 Apache Cassandra 分别代表了 OLAP 分析型数据库和高并发写入的 NoSQL 数据库。下面将详细介绍这两者的基本特性、主要优势与劣势,并通过对比表展示两者的关键区别。类型:开源的列式存储数据库,专为在线分析处理(OLAP)设计。开发者:由俄罗斯搜索引擎公司 Yandex 开发,并开源。核心目标:极速处理海量数据的聚合、过滤和分析查询,适合大规模数据分析场景。类型。
2025-03-10 20:37:26
464
原创 mybatis JSqlParser&hibernate StatementInspector做数据隔离
方案,结合 CRUD(增删改查)操作,演示如何动态修改 SQL,实现。JSqlParser 是一个 SQL 解析库,它可以将 SQL 解析为。在 MyBatis 拦截器中,我们可以使用 JSqlParser。在多租户(Multi-Tenant)系统或。接口,并使用 JSqlParser。是 Hibernate 提供的。类,实现 MyBatis。,并支持 SQL 语句的。,注入数据隔离逻辑。
2025-03-06 15:10:47
357
原创 ShardingSphere的优缺点
ShardingSphere 为分库分表和分布式数据库访问提供了一个统一而强大的解决方案,在高并发、大数据量场景下具有明显优势,如透明化路由、灵活的分片策略、读写分离和分布式事务支持。然而,这种中间件也带来了配置复杂、运维成本高、SQL 重写性能开销以及分布式事务一致性管理等挑战。在选择使用 ShardingSphere 时,需要根据具体业务需求和系统规模进行权衡,充分评估开发、运维和性能等多方面的成本与收益。
2025-03-06 10:02:18
705
原创 Spring boot分库分表方案
高并发处理能力:通过水平扩展、多节点部署和负载均衡,实现海量并发请求的处理。高可用与容错:采用分布式架构和冗余设计,确保单点故障不会影响整体系统运行。分库分表策略:对大数据量表进行水平分库分表,降低单库单表的访问压力,提高查询和写入性能。缓存层:利用分布式缓存(如 Redis)存储热点数据,减少对数据库的直接访问。异步处理:利用消息队列和异步机制,解耦业务处理,提高系统响应速度。| 客户端/网关层 |v| 负载均衡器 (Nginx) || | |v v v。
2025-03-06 09:45:45
615
原创 spring 启动过程中AOP初始化过程是在什么阶段
主要是在应用上下文刷新期间,注册 AOP 相关的 BeanPostProcessors,并在 Bean 实例化过程中通过这些处理器对目标 Bean 进行代理包装。方法),检查当前 Bean 是否需要代理。如果需要,自动代理创建器会创建代理对象,从而完成 AOP 的织入。这样,在容器启动完成后,所有需要 AOP 支持的 Bean 都已经通过代理被织入了横切逻辑。),它负责在后续的 Bean 实例化过程中对需要 AOP 代理的 Bean 进行包装。
2025-03-04 09:46:21
433
原创 日志监控告警系统方案设计
一个完整的日志监控告警系统的设计方案包含了日志的采集、传输、存储、分析、可视化以及告警等多个部分。通过日志收集工具(如 Filebeat、Logstash、Fluentd)、高效的存储和搜索引擎(如 Elasticsearch)、实时分析与展示工具(如 Kibana、Grafana)、告警工具(如 Watcher、Alertmanager)和安全措施,可以实现一个高效、灵活且高可用的日志监控告警系统。:实时监控日志中的异常并通过告警系统通知相关人员。
2025-02-26 17:39:04
591
原创 Spring中谨慎使用@Async
尽管@Async提供了简单的方式来实现异步任务,但它并不适用于所有场景。直接使用@Async线程池配置不当导致线程耗尽。异常处理不透明,可能导致异常被吞掉。线程安全问题。无法保证任务执行顺序。难以获取上下文信息。调试难度增加。在高并发场景下,建议使用更细粒度的控制,如 CompletableFuture消息队列(如 Kafka、RabbitMQ)或其他专门的异步框架(如Akka),它们提供了更多的功能,如异步任务的合并、错误处理、线程上下文的传递等,更适合复杂的异步场景。
2025-02-26 17:22:37
429
原创 如何设计一个高并发系统 需要考虑哪些
负载均衡和水平扩展数据库设计:读写分离、分库分表缓存:分布式缓存、数据预加载异步处理:消息队列、事件驱动线程池与并发控制:限流、线程池管理服务治理:服务注册与发现、熔断、负载均衡容错和高可用性:冗余设计、自动故障恢复性能监控:监控、日志、瓶颈分析安全性:身份验证、授权、防御攻击。
2025-02-26 16:27:53
652
原创 4C8G的机器,各项系统指标,什么范围算是正常指标
在一台4C8G机器上,正常的系统指标范围如下表所示。保持这些系统指标在合理范围内,有助于确保机器稳定运行,避免瓶颈和性能下降。如果发现某个指标超过了正常范围,可能需要进行优化,例如增加内存、优化数据库、增加磁盘性能等。
2025-02-24 20:53:45
444
原创 Spring如何控制bean的加载顺序
Spring 本身会自动管理 Bean 的加载顺序,但在某些情况下,你可能需要显式地控制它。通过@DependsOn@Order等注解,或者通过实现接口如等,开发者可以灵活地控制 Bean 加载顺序。@DependsOn用于确保某些 Bean 先加载。@Order用于排序 Bean(通常在列表或集合中)。
2025-02-24 20:30:41
476
原创 spring中如何定义一个starter
在模块中,首先定义你需要的依赖项。这些依赖项可以是 Spring Boot 和其他库。要使用自定义的 Starter,只需在目标应用程序中添加对该 Starter 模块的依赖。此时,Spring Boot 会自动加载你定义的自动配置类(),并将自动注入到应用程序中。依赖和依赖版本管理:定义 Starter 需要的依赖。自动配置类:提供默认配置,并与应用程序集成。属性配置类:允许用户定制配置。服务或功能实现:封装 Starter 提供的具体功能。打包发布。
2025-02-24 19:46:59
810
原创 有哪些常用的JVM启动参数
JVM 启动参数是调优和配置 JVM 行为的重要工具。通过调整堆内存大小、垃圾回收器的选择、JIT 编译策略等,可以显著提升应用的性能。在生产环境中,合理设置这些参数,特别是在内存管理、垃圾回收和线程管理方面,是确保 Java 应用高效运行的关键。
2025-02-24 15:22:55
864
原创 Springboot 项目中的 http 接口出现大量超时,你会去从哪些方面诊断和分析并解决这个问题?
日志分析:查看是否有异常信息或超时日志。数据库性能:检查是否存在慢查询或数据库连接问题。服务器资源:监控 CPU、内存、磁盘等服务器资源。HTTP 请求处理:检查请求处理时间和线程池配置。网络延迟和负载均衡:检查网络延迟或负载均衡配置是否合理。应用程序配置:根据实际需求调整 Spring Boot 配置。代码优化:优化不必要的计算和业务逻辑,使用异步处理。
2025-02-19 10:22:09
441
原创 spring容器启动过程都做了什么简述版
Spring 容器启动时会先根据指定的配置源(XML 配置文件、Java 配置类、注解等)加载 Bean 定义,了解哪些类应该作为 Bean 进行管理。
2025-02-18 10:19:33
529
原创 设计一个Redis分布式锁需要考虑哪些问题
设计一个Redis 分布式锁锁的唯一性:确保锁在分布式环境中是全局唯一的。原子性操作:确保加锁和解锁的操作原子性。锁的过期时间:避免死锁的发生。锁的释放:只有锁的持有者才能释放锁。可重入性:可以考虑是否支持重入锁。公平性:是否需要实现公平锁。锁的超时控制和重试机制:合理的超时和重试机制,避免系统资源浪费。容错和网络分区:应考虑网络故障和 Redis 集群的影响。通过使用 Redis 的基本命令(如SETNX。
2025-02-17 20:48:29
530
原创 Redis为什么这么快?Redis为什么引入多线程?Redis多线程实现机制是怎样?
Redis 为什么这么快单线程模型:避免了多线程的上下文切换和锁竞争,简化了并发控制。内存数据库:所有数据存储在内存中,避免了磁盘 I/O 延迟。高效数据结构:Redis 使用高效的 SDS、跳表、哈希表等数据结构,优化了查询和修改操作。异步操作:持久化和数据同步操作是异步的,避免了阻塞主线程。为什么引入多线程Redis 的单线程模型在 I/O 密集型操作(如持久化、主从复制等)上存在瓶颈,特别是无法充分利用多核 CPU 的性能。引入多线程可以将 I/O 密集型操作并行化,提高整体性能。
2025-02-17 18:00:39
682
原创 Redis数据类型有哪些
Redis 提供了多种底层数据类型,每种类型都基于不同的数据结构实现,适用于不同的应用场景。通过选择合适的数据类型,能够提升应用的性能和可扩展性。字符串(String):通过 SDS 实现动态扩展和高效的内存管理。哈希(Hash):使用哈希表和字典实现,适合存储结构化数据。列表(List):通过双向链表实现,适合实现队列、栈等场景。集合(Set):通过哈希表实现,元素唯一且无序。有序集合(Sorted Set):通过跳表和哈希表实现,支持分数排序。位图(Bitmap)
2025-02-17 17:53:21
1003
原创 redis内部同步方式
单线程事件循环模型:Redis 采用单线程处理请求,避免了多线程并发问题。通过 I/O 多路复用技术,支持高并发的请求处理。持久化机制(RDB/AOF):数据持久化操作是异步的,采用子进程方式将数据写入磁盘。主从复制:主节点与从节点的数据同步是异步的,采用非阻塞的方式,主节点继续提供服务。异步操作:持久化和复制等操作不会阻塞主线程,而是通过子进程异步执行。Redis 的单线程和异步操作设计使得它在高并发场景下非常高效,但也需要合理配置、管理资源,避免由于单线程的阻塞而影响整体性能。
2025-02-17 14:45:00
1454
原创 MySQL设置了索引可还是很慢怎么分析并解决
查询未能有效利用索引,或者索引设计不合理。数据量过大,导致查询慢。数据库配置不当,缓存、内存不足,导致查询性能差。查询语句设计不合理,导致不必要的计算或数据加载。使用EXPLAIN分析查询执行计划,确认是否使用了索引。优化索引设计,确保索引适合查询条件。使用覆盖索引减少回表,优化查询性能。优化数据库配置,增加缓存和连接池。使用分区、数据归档等方式处理大数据量。通过硬件优化提升查询性能,尤其是在高并发场景下。
2025-02-17 11:21:21
897
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人