- 博客(180)
- 收藏
- 关注
原创 Docker 搭建单节点MySQL服务
在 /usr/local/src/mysql/conf 目录下创建一个名为 my.cnf 的文件,用于设置MySQL的配置。[mysqld]# 基础设置# 字符集设置# 存储引擎# 连接设置# 缓冲区设置# InnoDB 设置# 日志设置# 二进制日志(主从复制用)[mysql][client]EOF。
2025-11-21 18:15:09
626
原创 Synchronized、ReentrantLock、volatile 和 ThreadLocal
编译时:被转换为 monitorenter 和 monitorexit 字节码指令。运行时:锁信息存储在 Java 对象头的 Mark Word 中。锁升级:为了平衡性能和功能,JVM 采用了精细的锁升级策略:无竞争:偏向锁(已逐步淘汰)。轻度竞争:轻量级锁 + 自旋,避免线程阻塞。激烈竞争:升级为重量级锁,通过操作系统的 Monitor 进行线程调度。
2025-11-20 23:26:23
1036
原创 Java SOLID 原则
SOLID原则是面向对象设计中的重要原则,旨在使软件设计更易于理解、维护和扩展。这些原则由Robert C. Martin提出,并由Michael Feathers用首字母缩略词SOLID表示。S - 单一职责原则(Single Responsibility Principle, SRP)O - 开放封闭原则(Open/Closed Principle, OCP)L - 里氏替换原则(Liskov Substitution Principle, LSP)
2025-11-17 10:47:38
941
原创 Java 8 Lambda表达式详解
Lambda表达式是Java 8引入的最重要的新特性之一,它允许我们将函数作为方法参数,或者将代码作为数据来处理。本质上,Lambda表达式是一个匿名函数,它没有名称,但有参数列表、函数体和返回类型。
2025-11-15 17:10:12
773
原创 Canal实时同步MySQL数据到Elasticsearch
目标:将MySQL中的 orders 表的任何变更(INSERT, UPDATE, DELETE)近实时地同步到Elasticsearch的对应索引中,并确保数据一致性和处理效率。MySQL: 数据源,需开启Binlog。Canal Server (Canal-Deployer): 模拟MySQL Slave,解析Binlog,将数据变更事件投递出去。
2025-11-08 17:12:40
609
原创 微服务 - 网关统一鉴权
网关统一鉴权,顾名思义,就是将原本分散在各个微服务中的身份验证和权限校验逻辑,抽取出来并集中到API网关这一层来统一处理。传统方式(无网关): 每个微服务(如用户服务、订单服务、支付服务)都需要自己实现一套鉴权逻辑,检查Token是否有效、用户是否有权限访问等。这会导致以下一系列问题:代码重复与维护困难:每个服务都需要编写和维护相似的鉴权代码,违反了“Don‘t Repeat Yourself”原则。标准不一:不同的开发团队可能实现不同的鉴权逻辑或安全标准,导致系统整体安全性不一致。
2025-11-04 23:30:05
710
1
原创 Flowable 工作流引擎
工作流引擎的核心是将业务逻辑与流程控制逻辑分离。开发者无需在代码中硬编码复杂的流程跳转和状态判断,而是通过流程定义文件(如 BPMN 2.0 标准)来描述业务流程,由引擎来解析和执行这个流程。
2025-11-02 17:17:41
981
原创 JVM 调优方案
一切依赖于数据和场景:调优必须基于监控数据(GC 日志、堆快照、性能分析工具),并根据应用类型(Web 服务、大数据计算、交易系统)来制定策略。-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize。通常将参数分为堆内存、垃圾收集器、GC 日志、其他性能相关几大类。详细 GC 日志(JDK 8 及之前)统一日志框架(JDK 9+ 推荐)ZGC 收集器(极致低延迟)并行收集器(吞吐量优先)CMS 收集器(低延迟)-Xms 和 -Xmx。jmap - 内存分析。G1 收集器(推荐)
2025-11-01 15:21:36
908
原创 SSO 单点登录
单点登录(SSO)在微服务架构中是一个核心概念,它允许用户在一个应用中登录后,无需再次登录即可访问其他相互信任的应用。在微服务架构中,由于系统被拆分成多个独立的服务,如果用户每访问一个服务都要登录一次,那对用户的体验太不友好,而单点登录就是为了解决这个问题而生。简而言之,单点登录其本质就是多个系统之间的会话共享。
2025-10-31 20:37:32
739
原创 Java HashMap 详解
HashMap 是 Java 集合框架中最常用的 Map 实现类之一,基于哈希表实现,用于存储键值对(Key-Value Pair)。它提供了快速的查找、插入和删除操作,是许多 Java 应用程序的核心数据结构之一。版本扩容策略优点缺点Java 7头插法,重新hash所有元素实现简单多线程下可能产生死循环Java 8尾插法,位运算优化定位避免死循环,性能更好实现相对复杂。
2025-10-31 10:22:13
839
原创 OAuth 2.0 安全授权
OAuth 2.0 是一个授权框架,它允许第三方应用程序在获得用户授权后,代表用户访问该用户在另一个服务提供商上存储的资源,而无需分享用户的密码。重要区别:OAuth 2.0 是关于授权,而非认证。认证:是确认“你是谁”的过程。(例如:用账号密码登录)授权:是确认“你被允许做什么”的过程。(例如:授权一个App来管理你的QQ邮箱)
2025-10-30 17:43:40
724
原创 Spring--Security
Spring Security 是一个功能强大、高度可定制的身份认证和访问控制框架,它是保护基于 Spring 的应用程序的事实标准。它的核心目标是为一套 Java 应用程序提供全面的安全服务。核心思想:通过一系列的 过滤器(Filter) 来拦截进入应用程序的请求,并在这些过滤器中执行身份验证和授权检查。核心特性:全面的安全服务:身份验证、授权、防护攻击等。高度可配置:基于注解、Java Config 或 XML。
2025-10-29 18:29:52
583
原创 分布式Session会话实现方案
分布式 Session 是一种在微服务架构中,保证用户会话(Session)数据能够在多个独立的、无状态的服务实例之间共享和保持一致的机制。以下是传统单体架构中的 Session与微服务架构中的 Session之间的对比:单体架构 Session:应用部署在一台服务器上。用户登录后,服务器会在本地内存中创建一个 Session 对象,存储用户ID、用户名等数据,并给浏览器返回一个唯一的 Session ID(通常保存在 Cookie 中)。
2025-10-29 16:14:48
919
原创 Spring Boot Actuator & Admin
Spring Boot Actuator 是 Spring Boot 的一个子项目,为应用提供了生产级别的功能。它提供了一系列的端点(endpoints),允许我们通过HTTP或JMX来监控应用的健康状况、指标、日志等。/actuator/health: 应用健康状态,通常由HealthIndicator实现。/actuator/info: 应用信息,可以来自Maven项目信息、自定义信息等。/actuator/metrics: 应用指标,如内存使用、HTTP请求计数等。
2025-10-28 18:41:24
883
原创 SpringCloud--Sleuth 分布式链路追踪
Sleuth 是 Spring Cloud 生态系统中的一个组件,它提供了分布式追踪的解决方案。在微服务架构中,一个请求可能会经过多个服务,Spring Cloud Sleuth 可以帮助我们跟踪这些请求,为每个请求生成一个唯一的追踪ID,并在日志中记录这些ID,从而使得我们可以轻松地追踪请求在各个微服务中的流转情况。@Service// 创建自定义Span// 业务逻辑// 模拟数据库查询throw e;@Bean// 自定义采样策略:只追踪重要接口。
2025-10-28 16:39:42
794
1
原创 服务发布策略
服务发布策略,也称为部署策略或发布模式,是指在将新版本软件部署到生产环境时,所采用的技术方法和流程。其核心目标是:在保证系统整体稳定性和用户体验的前提下,安全、平滑、高效地发布新功能或修复问题。策略核心思想优点缺点适用场景停机发布先停后更简单服务中断低要求内部系统蓝绿发布冗余切换零停机、快速回滚资源成本高高可用无状态服务滚动发布逐步替换节约资源版本共存、回滚慢云原生、K8s 默认金丝雀发布小范围试水风险极低、实时验证周期长、技术复杂核心业务、高风险变更。
2025-10-25 14:30:04
939
原创 DDD 领域驱动设计
领域驱动设计(Domain-Driven Design,简称DDD)是一种软件设计方法,由Eric Evans在他的著作《Domain-Driven Design: Tackling Complexity in the Heart of Software》中提出。它主要关注于复杂系统的设计,强调通过领域模型来捕获业务逻辑和规则,并将软件系统的设计重心放在业务领域上。
2025-10-24 10:00:00
927
原创 设计模式详解
设计模式是可重用的解决方案,用于解决在软件设计中常见的问题。它们不是具体的代码,而是最佳实践的模板。通常将设计模式分为三类:创建型、结构型和行为型。实现方式:2.2 工厂方法模式 (Factory Method)目的:定义一个创建对象的接口,但让子类决定实例化哪个类。案例:日志记录器、数据库连接工厂。实现方式:2.3 抽象工厂模式(Abstract Factory)目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。案例:GUI工具包,跨平台UI组件。实现方式:
2025-10-19 21:55:24
403
原创 MySQL锁机制
MySQL的锁机制是数据库并发控制的核心组成部分,用于管理多个事务对共享资源的并发访问,确保数据的一致性和完整性。MySQL的锁机制大致可以分为全局锁、表级锁、行级锁和意向锁。表级锁是MySQL中最基本的锁策略,它锁定整张表,包括表共享读锁和表独占写锁。意向锁是表级锁,分为意向共享锁(IS)和意向排他锁(IX)。自增锁是一种特殊的表级锁,用于自增列。行级锁是InnoDB存储引擎支持的锁,包括记录锁、间隙锁、临键锁等。记录锁,也叫行锁,是一种精确锁定索引记录的锁。临键锁 是 记录锁 和 间隙锁 的组合。
2025-10-11 18:39:24
1061
原创 SpringBoot+Redis实现电商秒杀方案
/ 秒杀活动实体@Data// 0-未开始 1-进行中 2-已结束// 秒杀订单实体@Data// 0-待支付 1-已支付 2-已取消Redis原子操作// 关键代码:原子扣减库存Lua脚本原子性将库存检查、扣减、用户记录等多个操作封装在一个Lua脚本中Redis单线程执行,保证原子性分布式锁// 防止极端情况下的并发问题用户防重// 记录用户参与记录异常恢复机制// 下单失败时恢复库存。
2025-10-09 21:08:10
481
1
原创 Elasticsearch 故障转移及水平扩容
Elasticsearch 的水平扩容(Horizontal Scaling)是通过增加节点数量来扩展集群的处理能力和存储容量,以应对数据量增长或高并发请求的场景。其核心思想是利用分布式架构的特性,将数据和负载均匀分配到更多节点上。Elasticsearch 的故障转移(Failover)机制是其高可用性的核心,通过分布式设计、自动检测和恢复策略确保集群在节点故障时持续服务。分片强制分配(自动恢复失败时)延迟分片分配(应对短暂故障)步骤 2:调整分片分配策略。步骤 3:调整索引分片数。心跳检测(Ping)
2025-04-13 22:43:09
1073
1
原创 Elasticsearch 集群搭建
可以使用docker 依次启动多个节点,也可以使用Docker Compose一次启动全部节点。Elasticsearch 8.x 默认启用安全功能。首次启动容器时,控制台会输出默认密码。在创建索引的时候,在 settings 中进行分片及副本数量设置。使用 Docker Compose 一次启动。设置监控告警(如 Watcher):、docker 依次启动。
2025-04-09 23:44:40
2755
3
原创 Elasticsearch DSL 的结果处理
在 Elasticsearch 的 DSL 中,_source 参数用于控制返回的原始文档内容,类似于 SQL 中的 SELECT 字段列表。在 Elasticsearch 的 DSL 中,highlight 功能用于标记搜索结果中与查询条件匹配的文本片段,通常以高亮、加粗或颜色变化的形式展示,帮助用户快速定位关键内容。在 Elasticsearch 的 DSL 中,script_fields 允许你通过脚本动态计算并返回新字段,这些字段不会存储在索引中,而是在查询时实时生成。
2025-04-08 22:00:05
1139
原创 Elasticsearch DSL 中的 aggs 聚合分析
Elasticsearch 的 聚合(Aggregations) 功能用于对数据进行多维分析和统计,支持从简单的指标计算到复杂的分组分析。"aggs": { // 也可以使用"aggregations""agg_name": { // 自定义聚合名称"agg_type": { // 聚合类型"agg_body": ... // 聚合体。
2025-04-06 22:58:40
1242
1
原创 Elasticsearch 正排索引
Elasticsearch 的正排索引(Forward Index)主要用于支持高效的字段值访问和分析操作,与倒排索引(Inverted Index)形成互补,共同满足搜索、聚合、排序等复杂场景的需求。Elasticsearch 中的正排索引(正向索引)主要通过两种机制实现:Doc Values 和 Stored Fields。设计目标:支持高效的列式存储(Column-oriented),用于聚合(Aggregations)、排序(Sorting)、脚本计算等。Doc Values 结构(列式存储)
2025-04-02 23:16:49
1257
1
原创 Elasticsearch 评分机制
Elasticsearch 提供了多种方式来实现自定义评分,使您能够超越默认的相关性算法,根据业务需求定制搜索结果的排序。最强大的自定义评分工具,允许修改原始_score或完全替换它:{"query": {},],"score_mode": "sum", // 函数结果如何组合:sum, multiply, avg, max, min, first。
2025-03-31 23:46:52
1695
2
原创 Elasticsearch 优化方案
Elasticsearch 优化是一个系统工程,需要根据实际业务场景、数据特点和查询模式进行针对性调整。多字段(Multi-fields)策略。使用Indexing Buffer调优。使用 Bulk API 批量写入。nested(嵌套)类型。
2025-03-27 22:57:08
1109
2
原创 Elasticsearch DSL 中的 Query 查询条件
Elasticsearch DSL 提供了极其丰富的查询功能,从简单的全文搜索到复杂的地理空间查询、嵌套文档查询和聚合分析。"query": { ... }, // 查询条件(核心部分)"aggs": { ... }, // 聚合分析"sort": [ ... ], // 排序规则"from": 0, // 分页起始位置"size": 10, // 返回结果数量"_source": { ... }, // 返回字段控制"script_fields": { ... }, // 脚本字段。
2025-03-25 21:57:29
1539
1
原创 Elasticsearch 文档
Elasticsearch 中的文档生命周期管理(Document Lifecycle Management)是指对文档从创建到删除的整个生命周期进行管理和优化的过程。随着数据量的增长和业务需求的变化,文档的生命周期管理变得尤为重要。Elasticsearch 提供了多种工具和功能来帮助用户有效地管理文档的生命周期,包括索引生命周期管理(ILM)、快照和恢复、以及数据保留策略等。索引生命周期管理(ILM)是 Elasticsearch 提供的一种自动化管理索引生命周期的功能。
2025-03-24 20:16:22
931
原创 Elasticsearch 分词器
在 Elasticsearch 中,分词器(Analyzer) 是文本处理的核心组件,用于将文本拆分为词项(Terms),并对词项进行标准化处理。分词器在索引和搜索过程中起着至关重要的作用,直接影响搜索的准确性和性能。如果内置分词器不能满足需求,可以通过组合字符过滤器、分词器和词项过滤器来自定义分词器,以实现更灵活的文本分析。自定义分词器可以在索引设置中配置。配置说明type:指定分词器类型为 custom。char_filter:指定字符过滤器(如 html_strip)。
2025-03-22 10:16:13
910
原创 Elasticsearch 倒排索引
在 Elasticsearch 中,正排索引(Forward Index) 也称为 行式存储(Row-based Storage) 或 文档存储(Document Store),用于存储完整的文档内容,以便在搜索完成后快速返回文档的原始数据。在 Elasticsearch 中,倒排索引(Inverted Index) 和 正排索引(Forward Index) 是两种不同的数据结构,分别用于支持不同的搜索和检索功能。正排索引的结构可以理解为以文档为中心的存储方式,每个文档的所有字段值存储在一起。
2025-03-21 21:05:14
1231
原创 Elasticsearch 索引
在 Elasticsearch 中,索引(Index)是存储相关文档的地方,类似于关系数据库中的数据库。索引是 Elasticsearch 中最重要的概念之一,用于组织和存储数据。
2025-03-19 21:20:10
1644
原创 Elasticsearch 基础
Elasticsearch是一个分布式、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建,能够处理大规模数据的实时搜索和分析。Elasticsearch是基于Lucene,使用Java语言开发的企业级搜索引擎。广泛应用于全文搜索、日志分析、实时应用监控等场景。
2025-03-17 20:49:27
800
原创 Spring Boot 定时任务以及异步任务的实现
在 Spring Boot 中,实现异步任务非常简单,主要通过 @Async 注解和 TaskExecutor 接口来实现。异步任务适用于需要并发执行的场景,例如发送邮件、处理文件、调用外部 API 等。在 Spring Boot 中,实现定时任务非常简单,主要通过 @Scheduled 注解和 TaskScheduler 接口来实现。使用 @Async 注解创建异步任务。处理异步任务的返回值。
2025-03-16 13:40:06
1086
原创 Spring Boot 实现多数据源配置
在application.properties或application.yml中配置多个数据源的连接信息。在 Spring Boot 中实现多数据源配置通常用于需要连接多个数据库的场景。首先,在pom.xml中添加MyBatis、数据库驱动和Spring Boot的JDBC依赖。在Spring Boot中,通过@Configuration类来配置多个数据源的Bean。将Mapper接口和XML文件分别放在不同的包中,以区分不同的数据源。主数据源Mapper XML文件。次数据源Mapper XML文件。
2025-03-15 10:18:47
5346
原创 Java 常用算法
贪心算法在每一步选择中都采取当前状态下最优的选择,希望导致全局最优解。回溯算法通过尝试所有可能的解来解决问题,通常用于组合、排列等问题。动态规划用于解决具有重叠子问题和最优子结构性质的问题。排序算法是计算机科学中最基础的算法之一,用于将一组数据按照特定顺序排列。字符串匹配算法用于在文本中查找特定模式的子串。查找算法用于在数据结构中查找特定元素。数论算法用于解决与整数相关的数学问题。位运算算法利用位操作来高效解决问题。图算法用于处理图结构数据。
2025-03-14 20:37:07
970
原创 Java 枚举
Java 枚举是一种强大的工具,其本质上是一个继承自 java.lang.Enum 的类,用于定义一组固定的常量,每个枚举常量都是该枚举类的一个实例。枚举不仅提供了类型安全性,还可以像普通类一样拥有字段、方法和构造函数。枚举的使用场景非常广泛,包括表示一组相关的常量、实现单例模式等。通过合理使用枚举,可以使代码更加清晰、安全和易于维护。
2025-03-13 19:56:49
1172
原创 MySQL 优化方案
MySQL 查询过程是指从客户端发送 SQL 语句到 MySQL 服务器,再到服务器返回结果集的整个过程。这个过程涉及多个组件的协作,包括连接管理、查询解析、优化、执行和结果返回等。索引是提高查询性能的核心手段,但需要合理使用。查询缓存(MySQL 8.0 之前)优化查询语句本身可以显著提升性能。使用 LIMIT 时避免高偏移量。合理使用 IN 和 EXISTS。使用 EXPLAIN 分析查询。避免 SELECT *
2025-03-12 20:57:04
973
原创 Java 泛型
Java的泛型(Generics)是Java 5引入的一项重要特性,允许在定义类、接口和方法时使用类型参数,从而增强代码的类型安全性和重用性。泛型的主要目的是在编译时提供类型检查,减少运行时的类型转换错误。
2025-03-12 11:39:30
1195
原创 Java 代理
Java中的代理(Proxy)是一种设计模式,允许通过代理对象控制对另一个对象的访问。Java提供了两种主要的代理机制:静态代理和动态代理。静态代理在编译时就已经确定代理类和被代理类的关系。代理类和被代理类实现相同的接口,代理类内部持有被代理类的引用,并在调用被代理类的方法前后执行额外的操作。动态代理在运行时动态生成代理类,Java提供了两种实现动态代理的方式:JDK动态代理和CGLIB代理。代理可以用于隐藏远程调用的复杂性,使客户端像调用本地方法一样调用远程服务。
2025-03-11 10:54:33
914
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅