- 博客(157)
- 收藏
- 关注
原创 Elasticsearch 正排索引
Elasticsearch 的正排索引(Forward Index)主要用于支持高效的字段值访问和分析操作,与倒排索引(Inverted Index)形成互补,共同满足搜索、聚合、排序等复杂场景的需求。Elasticsearch 中的正排索引(正向索引)主要通过两种机制实现:Doc Values 和 Stored Fields。设计目标:支持高效的列式存储(Column-oriented),用于聚合(Aggregations)、排序(Sorting)、脚本计算等。Doc Values 结构(列式存储)
2025-04-02 23:16:49
935
1
原创 Elasticsearch 评分机制
Elasticsearch 提供了多种方式来实现自定义评分,使您能够超越默认的相关性算法,根据业务需求定制搜索结果的排序。最强大的自定义评分工具,允许修改原始_score或完全替换它:{"query": {},],"score_mode": "sum", // 函数结果如何组合:sum, multiply, avg, max, min, first。
2025-03-31 23:46:52
1221
2
原创 Elasticsearch 优化方案
Elasticsearch 优化是一个系统工程,需要根据实际业务场景、数据特点和查询模式进行针对性调整。多字段(Multi-fields)策略。使用Indexing Buffer调优。使用 Bulk API 批量写入。nested(嵌套)类型。
2025-03-27 22:57:08
796
1
原创 Elasticsearch DSL查询语法
Elasticsearch DSL 提供了极其丰富的查询功能,从简单的全文搜索到复杂的地理空间查询、嵌套文档查询和聚合分析。"query": { ... }, // 查询条件(核心部分)"aggs": { ... }, // 聚合分析"sort": [ ... ], // 排序规则"from": 0, // 分页起始位置"size": 10, // 返回结果数量"_source": { ... }, // 返回字段控制"script_fields": { ... }, // 脚本字段。
2025-03-25 21:57:29
1185
1
原创 Elasticsearch 文档
Elasticsearch 中的文档生命周期管理(Document Lifecycle Management)是指对文档从创建到删除的整个生命周期进行管理和优化的过程。随着数据量的增长和业务需求的变化,文档的生命周期管理变得尤为重要。Elasticsearch 提供了多种工具和功能来帮助用户有效地管理文档的生命周期,包括索引生命周期管理(ILM)、快照和恢复、以及数据保留策略等。索引生命周期管理(ILM)是 Elasticsearch 提供的一种自动化管理索引生命周期的功能。
2025-03-24 20:16:22
617
原创 Elasticsearch 分词器
在 Elasticsearch 中,分词器(Analyzer) 是文本处理的核心组件,用于将文本拆分为词项(Terms),并对词项进行标准化处理。分词器在索引和搜索过程中起着至关重要的作用,直接影响搜索的准确性和性能。如果内置分词器不能满足需求,可以通过组合字符过滤器、分词器和词项过滤器来自定义分词器,以实现更灵活的文本分析。自定义分词器可以在索引设置中配置。配置说明type:指定分词器类型为 custom。char_filter:指定字符过滤器(如 html_strip)。
2025-03-22 10:16:13
725
原创 Elasticsearch 倒排索引
在 Elasticsearch 中,正排索引(Forward Index) 也称为 行式存储(Row-based Storage) 或 文档存储(Document Store),用于存储完整的文档内容,以便在搜索完成后快速返回文档的原始数据。在 Elasticsearch 中,倒排索引(Inverted Index) 和 正排索引(Forward Index) 是两种不同的数据结构,分别用于支持不同的搜索和检索功能。正排索引的结构可以理解为以文档为中心的存储方式,每个文档的所有字段值存储在一起。
2025-03-21 21:05:14
945
原创 Elasticsearch 索引
在 Elasticsearch 中,索引(Index)是存储相关文档的地方,类似于关系数据库中的数据库。索引是 Elasticsearch 中最重要的概念之一,用于组织和存储数据。
2025-03-19 21:20:10
759
原创 Elasticsearch 基础
Elasticsearch是一个分布式、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建,能够处理大规模数据的实时搜索和分析。Elasticsearch是基于Lucene,使用Java语言开发的企业级搜索引擎。广泛应用于全文搜索、日志分析、实时应用监控等场景。
2025-03-17 20:49:27
682
原创 Spring Boot 定时任务以及异步任务的实现
在 Spring Boot 中,实现异步任务非常简单,主要通过 @Async 注解和 TaskExecutor 接口来实现。异步任务适用于需要并发执行的场景,例如发送邮件、处理文件、调用外部 API 等。在 Spring Boot 中,实现定时任务非常简单,主要通过 @Scheduled 注解和 TaskScheduler 接口来实现。使用 @Async 注解创建异步任务。处理异步任务的返回值。
2025-03-16 13:40:06
681
原创 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
1331
原创 Java常用算法
贪心算法在每一步选择中都采取当前状态下最优的选择,希望导致全局最优解。回溯算法通过尝试所有可能的解来解决问题,通常用于组合、排列等问题。动态规划用于解决具有重叠子问题和最优子结构性质的问题。排序算法是计算机科学中最基础的算法之一,用于将一组数据按照特定顺序排列。字符串匹配算法用于在文本中查找特定模式的子串。查找算法用于在数据结构中查找特定元素。数论算法用于解决与整数相关的数学问题。位运算算法利用位操作来高效解决问题。图算法用于处理图结构数据。
2025-03-14 20:37:07
730
原创 Java 枚举
Java 枚举是一种强大的工具,其本质上是一个继承自 java.lang.Enum 的类,用于定义一组固定的常量,每个枚举常量都是该枚举类的一个实例。枚举不仅提供了类型安全性,还可以像普通类一样拥有字段、方法和构造函数。枚举的使用场景非常广泛,包括表示一组相关的常量、实现单例模式等。通过合理使用枚举,可以使代码更加清晰、安全和易于维护。
2025-03-13 19:56:49
796
原创 MySQL 优化方案
MySQL 查询过程是指从客户端发送 SQL 语句到 MySQL 服务器,再到服务器返回结果集的整个过程。这个过程涉及多个组件的协作,包括连接管理、查询解析、优化、执行和结果返回等。索引是提高查询性能的核心手段,但需要合理使用。查询缓存(MySQL 8.0 之前)优化查询语句本身可以显著提升性能。使用 LIMIT 时避免高偏移量。合理使用 IN 和 EXISTS。使用 EXPLAIN 分析查询。避免 SELECT *
2025-03-12 20:57:04
867
原创 Java 泛型
Java的泛型(Generics)是Java 5引入的一项重要特性,允许在定义类、接口和方法时使用类型参数,从而增强代码的类型安全性和重用性。泛型的主要目的是在编译时提供类型检查,减少运行时的类型转换错误。
2025-03-12 11:39:30
1113
原创 Java 代理
Java中的代理(Proxy)是一种设计模式,允许通过代理对象控制对另一个对象的访问。Java提供了两种主要的代理机制:静态代理和动态代理。静态代理在编译时就已经确定代理类和被代理类的关系。代理类和被代理类实现相同的接口,代理类内部持有被代理类的引用,并在调用被代理类的方法前后执行额外的操作。动态代理在运行时动态生成代理类,Java提供了两种实现动态代理的方式:JDK动态代理和CGLIB代理。代理可以用于隐藏远程调用的复杂性,使客户端像调用本地方法一样调用远程服务。
2025-03-11 10:54:33
780
原创 Java 序列化和反序列化
可以通过实现 readObject 方法来自定义反序列化过程。例如,可以在反序列化时对字段进行额外的验证或初始化。// 不会被默认序列化// 自定义反序列化逻辑// 默认反序列化// 手动反序列化 age// 自定义序列化逻辑// 默认序列化// 手动序列化 age@Override// 序列化// 反序列化。
2025-03-10 15:57:32
953
原创 Java I/O
在 Java 中,I/O 模型主要分为三种:BIO(Blocking I/O,同步阻塞 I/O)、NIO(Non-blocking I/O,同步非阻塞 I/O) 和 AIO(Asynchronous I/O,异步非阻塞 I/O)。它们分别代表了不同的 I/O 处理方式,适用于不同的应用场景。Java 的 I/O(输入/输出)是 Java 编程中非常重要的一部分,用于处理数据的读取和写入。在 Java 的 I/O 中,同步/异步和阻塞/非阻塞是两个重要的概念,它们描述了 I/O 操作的行为模式和性能特性。
2025-03-09 13:48:38
589
原创 Java 基础
Java 的三大特性是 封装(Encapsulation)、继承(Inheritance) 和 多态(Polymorphism)。在 Java 中,多态(Polymorphism) 是面向对象编程的核心特性之一,而 向上转型(Upcasting) 和 向下转型(Downcasting) 是实现多态的重要机制。它们分别用于不同的场景,具有不同的规则和特点。在 Java 中,接口(Interface) 和 抽象类(Abstract Class) 都是实现抽象化的工具,但它们的设计目的和使用场景有所不同。
2025-03-08 10:24:02
661
原创 Java中的锁机制
Synchronized是JVM层面的锁,是Java关键字,通过monitor对象来完成。如果这个对象没被锁定,或者当前线程已经拥有了那个对象锁,把锁的计算器加1,相应的,在执行monitorexit指令时会将锁计算器就减1,当计算器为0时,锁就被释放了。在 Java 多线程编程中,锁机制是确保线程安全的重要手段,为了解决多线程环境下对共享资源的访问冲突而设计的一系列同步控制机制。为了减少锁的开销,JVM 通过偏向锁、轻量级锁、自旋锁、锁消除和锁粗化等技术优化 synchronized 的性能。
2025-03-07 09:47:13
874
原创 Java线程池的分析和使用
根据核心线程的源码分析,在 ThreadPoolExecutor 的 getTask 方法中,核心线程会根据 allowCoreThreadTimeOut 和 keepAliveTime 决定是否阻塞等待任务或超时退出。Java 的线程池(Thread Pool)是一种管理和复用线程的机制,它可以有效地控制并发线程的数量,减少线程创建和销毁的开销,提高系统的性能和稳定性。可以通过 ThreadPoolExecutor 构造函数创建自定义线程池,也可以使用 Executors 工厂类创建预定义的线程池。
2025-03-06 21:17:19
836
原创 JVM字符串常量池和运行时常量池解析
字符串常量池(String Pool) 和 运行时常量池(Runtime Constant Pool) 是 JVM 中两个重要的概念,它们都与常量数据的存储和管理有关。
2025-03-06 13:28:36
489
原创 SpringMvc与Struts2
Spring MVC 是 Spring 框架的一部分,是一个基于 MVC 设计模式的轻量级 Web 框架。它提供了灵活的配置和强大的扩展能力,适合构建复杂的 Web 应用程序。Struts2 是 Apache Struts 项目的第二代框架,是一个基于 MVC 设计模式的 Web 框架。它继承了 Struts1 的优点,并引入了 WebWork 的设计理念,提供了更强大的功能和更灵活的配置。
2025-03-05 21:03:30
923
原创 Java多线程
在 Java 中,线程的调度是由 JVM 和 操作系统 共同管理的。线程调度的目标是合理地分配 CPU 资源,使多个线程能够高效地并发执行。在 Java 多线程编程中,wait() 和 sleep() 是两个常用的方法,它们都可以让线程暂停执行,但它们的用途、行为和使用场景有显著的区别。Java 中的多线程是 Java 并发编程的核心部分,它允许程序同时执行多个任务,从而提高程序的效率和性能。多线程环境下,共享资源的访问可能导致数据不一致。Java 提供了多种同步机制来解决这个问题。
2025-03-05 16:09:15
473
原创 Java并发性质
Java 多线程中的并发性质是确保多线程程序正确性和高效性的核心概念。这些性质主要包括 原子性、可见性 和 有序性。性质定义问题来源解决方案原子性操作不可分割非原子操作导致数据不一致synchronized、原子类、锁可见性修改对其他线程可见缓存导致读取旧值有序性代码执行顺序符合预期指令重排序导致意外结果。
2025-03-05 14:08:18
853
原创 Java集合--Collection
Java 中的 Collection 是集合框架的根接口,定义了一组操作集合元素的方法。它是所有集合类的基础接口,包括ListSet和Queue。Collection 接口提供了对集合元素的添加、删除、遍历等操作,是 Java 集合框架中最核心的部分之一。
2025-03-05 10:29:09
481
原创 Java实现大数据量导出报表
创建一个 Java 类表示导出的数据模型。// 构造方法、Getter 和 Setterreturn id;创建一个 Java 类表示导出的数据模型。// 构造方法、Getter 和 Setterreturn id;创建一个 Java 类表示导出的数据模型。// 构造方法、Getter 和 Setterreturn id;
2025-03-04 19:56:16
585
原创 OutOfMemoryError异常解析
OutOfMemoryError异常又叫内存溢出,简称(OOM),是 Java 程序中常见的严重错误之一。程序中出现 OutOfMemoryError 异常表示 JVM 的内存资源已经耗尽,无法再分配更多的内存。这种错误通常是由于内存泄漏、不合理的内存配置或程序设计问题导致的。在JVM的运行时区域中,除了程序计数器外,其他几个区域都有可能发生OutOfMemoryError异常,尤其是在堆内存中出现的频率时最高的。PermGen Space(JDK 8 之前)
2025-03-04 15:14:00
588
原创 JVM基本概念及内存管理模型
JVM(Java Virtual Machine)的内存管理模型是 Java 程序运行的核心基础。它负责管理 Java 程序的内存分配、垃圾回收以及运行时数据的存储。当 JVM 加载一个类时,会解析类文件中的常量池表,并将其内容加载到 运行时常量池(Runtime Constant Pool) 中。在类加载的 解析(Resolution) 阶段,JVM 会处理常量池表中的字符串字面量,并将其加载到字符串常量池中。JVM的主要组成部分包括类加载器、运行时数据区、执行引擎、本地方法接口、本地方法库等。
2025-03-04 11:24:50
728
原创 Spring Boot 处理CORS以及CSRF
CORS 是一种机制,允许浏览器向不同域(协议、域名或端口)的服务器发起请求。在 Spring Boot 中,处理跨域请求(CORS,Cross-Origin Resource Sharing)可以通过以下几种方式实现。CSRF 是一种攻击方式,攻击者诱导用户在已认证的 Web 应用中执行非预期的操作。Spring Security 提供了内置的 CSRF 防护机制。使用 Spring Security 配置 CORS。使用 @CrossOrigin 注解。
2025-03-03 09:12:50
925
原创 SpringBoot 常见问题
在 Spring Boot 中,默认的最大连接数取决于使用的嵌入式服务器(如 Tomcat、Jetty 或 Undertow)以及相关的配置。Spring Boot 默认推荐使用基于 Java 的配置(即通过 @Configuration 注解和 @Bean 方法进行配置),但它仍然支持传统的 XML 配置。在 Spring Boot(或 Spring)中,@Autowired 是一种常用的依赖注入方式,但确实存在一些不推荐使用 @Autowired 的情况。Spring:是核心框架,提供了基础功能。
2025-03-02 14:38:11
476
原创 Arthas 使用教程
Arthas 是阿里开源的一款 Java 诊断工具,支持动态监控和诊断 Java 应用。它可以在不重启应用的情况下,实时查看 JVM 状态、方法调用、线程信息等,非常适合生产环境中的问题排查和性能优化。
2025-03-01 10:56:29
811
原创 Spring Boot 事件机制
Spring Boot 的事件机制基于 Spring 框架的事件发布-订阅模型,允许应用在不同组件之间通过事件进行松耦合的通信。开发者可以发布自定义事件,并由监听器处理这些事件,从而实现业务逻辑的解耦,增强了代码的可维护性和扩展性。定义事件:继承 ApplicationEvent。发布事件:使用 ApplicationEventPublisher。@Autowired监听事件:实现 ApplicationListener 或使用 @EventListener 注解。
2025-02-28 11:09:42
997
原创 Kubernetes集群Pod调度策略
Kubernetes 集群中,Pod 的分配并不是简单地在每个节点上运行,也不是完全随机分配,而是由 调度器(Scheduler) 负责的。调度器会根据集群的状态、Pod 的资源需求、节点的资源可用性以及调度策略,将 Pod 分配到合适的节点上运行。Kubernetes 提供了丰富的调度策略,包括资源请求、节点选择器、亲和性、污点和容忍、优先级和拓扑分布约束等。通过合理配置这些策略,可以优化 Pod 的分配行为,提高集群的资源利用率和应用的运行性能。
2025-02-24 13:38:03
800
原创 Kubernetes 集群部署
Kubernetes 官方建议在所有集群节点上禁用 swap 分区,以确保容器可以充分利用主机的物理内存,并避免因为交换空间导致的性能问题。关闭 SELinux 可以简化 Kubernetes 集群的配置和维护,避免潜在的权限问题。关闭防火墙可以避免阻碍节点之间的网络通信,确保集群的正常运行。
2025-02-23 18:07:11
566
原创 Mybatis-plus
MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上只做增强而不做改变,目的是简化开发、提高效率。MyBatis-Plus提供了许多便捷的功能,如强大的CRUD操作、支持多种主键策略、内置代码生成器、分页插件、性能分析插件等。
2025-01-03 16:31:23
960
原创 Kafka 常见问题
相同的键会被路由到同一个分区,从而保证了同一键的消息在同一分区内的顺序性。确保主题只被一个消费者组订阅,这样每个分区只会被 该消费者组中的一个消费者实例消费,就可以避免多个消费者同时处理同一分区的消息,从而保持消息的顺序性。Kafka 是一个高性能的分布式消息队列系统,但在某些情况下,它的性能可能会受到一些瓶颈的影响。,Kafka 保证同一分区内的消息是有序的。因此,为了保证消息的顺序性,生产者需要将相关的消息发送到同一个分区。Kafka 通过多种机制来防止消息丢失,确保消息的可靠性和持久性。
2024-12-19 16:53:03
1324
原创 redis基本语法
1.Redis简介Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 非关系型数据库。相比其他非关系型数据库有以下三个特点:支撑数据的持久化,可以将内存中的数据保存到磁盘中,重启的时候可以再次加载进行使用。不仅仅支持简单的String类型的数据,同时还提供list,set,zset,hash等数据结构的存储。支持数据的备份。2.Redis优点纯内存操作,性能极高,能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型,支持string(
2024-12-17 17:18:37
905
原创 RPC 详解
RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,允许程序在不同的计算机上执行过程或服务。RPC 使得开发者能够像调用本地函数一样调用远程服务,简化了网络编程的复杂性。使得开发者能够专注于业务逻辑,而不必过多关注底层的网络通信细节。首先,需要定义一个 gRPC 服务。// 定义请求消息// 定义响应消息// 定义服务。
2024-12-10 15:33:07
1481
原创 MySQL 分库分表
在MySQL中,分库分表是一种常用的数据库优化策略,特别是在数据量巨大时,可以有效提高查询性能和系统的可扩展性。分库:将数据分散到多个数据库中,每个数据库可以放在不同的物理服务器上。分表:将一个大表拆分成多个小表,这些小表可以在同一个数据库中,也可以分布在不同的数据库中。
2024-10-29 14:40:20
1293
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人