- 博客(470)
- 收藏
- 关注
原创 Elasticsearch-4--倒排索引的原理?
定义:以文档为单位组织数据。记录每个文档中包含了哪些词语。文档(Document) → 词语列表(Term List)。(如数据库的行式存储)。示例:Doc1 → [“lucene”, “search”, “engine”]结构直观,类似于文档的原始内容表示。在搜索引擎中,通常作为构建倒排索引的中间步骤。查询效率低:当需要查找包含某个特定词(如 “search”)的所有文档时,必须遍历所有文档的词语列表,时间复杂度高。FST(有限状态转换器)是一种有向图。
2025-11-12 23:04:42
888
原创 Elasticsearch-3--什么是Lucene?
Lucene是一个Java编写的全文检索引擎库,而非完整的搜索引擎。它提供了一个可扩展的架构,开发者可以基于Lucene构建自定义的搜索系统。索引引擎:将文本数据转换为倒排索引(Inverted Index)。查询引擎:支持复杂的全文搜索和过滤。文本分析引擎:提供分词、词干提取、停用词过滤等文本处理功能。示例:Lucene = 搜索引擎的“发动机”,你需要自己造一辆“车”来搭载它,如ES就相当于是一辆车。
2025-11-10 22:56:41
1153
原创 Elasticsearch-2--ES的架构和工作原理
倒排索引是Elasticsearch实现全文搜索的核心数据结构,将文档中的关键词映射到包含该词的文档列表。(1)、分词处理使用分析器(Analyzer)将文本拆分为词条(Term例如,文档“The quick brown fox jumps over the lazy dog”会被拆分为[“the”, “quick”, “brown”, “fox”, …]。(2)、词汇表所有唯一词条的集合,每个词条对应一个倒排列表(Posting List)。(3)、倒排表。
2025-08-26 10:41:57
1397
原创 Elasticsearch-1--什么是ES?
Elasticsearch以其分布式架构、实时搜索、灵活的数据模型和丰富的生态系统,成为大数据领域不可或缺的工具。无论是日志分析、搜索引擎还是实时监控,ES都能提供高效、可扩展的解决方案。然而,其复杂性和资源消耗也要求开发者具备一定的运维和调优能力。随着云原生和实时分析需求的增长,Elasticsearch的应用场景将持续扩展。Elasticsearch是当前最流行的分布式搜索与分析引擎,特别适合:需要快速搜索 + 复杂分析 + 实时响应的场景。
2025-08-26 09:29:39
1095
原创 Nacos-12--扩展:@RefreshScope和@ConfigurationProperties实现热更新的原理
RefreshScope:通过代理和缓存机制实现Bean级别的热更新,适合动态刷新单个Bean的属性。@ConfigurationProperties:通过属性绑定和事件监听实现配置对象的热更新,适合管理复杂配置结构。两者结合:在需要动态刷新复杂配置对象时,同时使用两者可以达到最佳效果。向阳前行,Dare To Be!!!
2025-08-23 23:33:49
1296
原创 Nacos-11--Nacos热更新的原理
Nacos1.x通过长轮询 + 事件监听实现配置的热更新,结合Spring Cloud的@RefreshScope和@ConfigurationProperties注解,可以动态更新大部分配置。注意:1、优先使用@ConfigurationProperties:适合管理复杂配置对象。2、手动处理复杂逻辑:通过监听器回调实现自定义更新逻辑。3、避免滥用热更新:非关键配置或静态参数建议通过重启生效。通过合理使用Nacos的热更新机制,可以实现服务配置的动态调整,提升系统的弹性和运维效率。
2025-08-23 23:19:29
1599
原创 Nacos-10--认识Nacos中的Raft协议(Nacos强一致性的实现原理)
Nacos中的Raft协议通过领导者选举、日志复制、安全性保证等机制,确保了持久化服务实例和关键配置的强一致性。它适用于对数据可靠性要求极高的场景(如金融、支付系统),但在性能和可用性上需权衡。通过灵活选择Raft(CP)或Distro(AP)协议,Nacos能够满足不同业务场景的需求。向阳前行,Dare To Be!!!
2025-08-21 23:36:16
852
原创 Nacos-9--认识Nacos中的Distro协议(Nacos高可用的实现原理)
Distro协议是Nacos实现高可用服务注册与发现的核心机制,通过平等节点、异步复制、最终一致性的设计,平衡了性能与可用性。它适用于临时实例的动态管理场景,但在需要强一致性的场景(如持久化配置、金融系统)中,需切换到基于Raft的CP模式。通过灵活选择AP/CP模式,Nacos能够满足不同业务场景的需求。向阳前行,Dare To Be!!!
2025-08-21 23:15:11
1304
原创 Nacos-8--分析一下nacos中的AP和CP模式
AP模式:适合高可用性、容忍短暂不一致的场景,如微服务注册与发现。CP模式:适合强一致性、数据持久化的场景,如配置管理和金融系统。AP模式通过Distro协议实现最终一致性,CP模式通过Raft协议实现强一致性。通过合理选择模式,Nacos能够满足不同业务场景的需求,在一致性和可用性之间取得平衡。向阳前行,Dare To Be!!!
2025-08-19 23:55:44
1378
原创 Nacos-7--扩展一下:0-RTT和1-RTT怎么理解?
RTT(Round-Trip Time):往返时间,指数据从客户端发送到服务器,再收到响应所花费的时间。比如:RTT = 100ms,表示一次“问-答”需要100毫秒。建立连接、加密握手都需要消耗RTT。RTT越少,连接建立越快,用户体验越好。Nginx、Apache、Cloudflare、阿里云CDN都支持。需启用TLS 1.3和0-RTT选项。1-RTT:第一次见面,聊一次就达成合作。0-RTT:老朋友再见,不用寒暄,直接说事。0-RTT是性能优化的巅峰,但需谨慎使用,避免安全风险。
2025-08-19 23:30:25
1320
原创 Nacos-6--Naco的QUIC协议实现高可用的工作原理
QUIC = UDP + TLS 1.3 + HTTP/3 + 多路复用 + 连接迁移,在0-RTT或1-RTT内完成安全连接并传输数据。QUIC核心要点:QUIC协议通过基于UDP的多路复用、0-RTT连接、内置加密和智能拥塞控制,解决了传统TCP+TLS的性能瓶颈。其工作流程分为连接建立、数据传输和终止三个阶段,核心**优势在于低延迟、高安全性和强抗丢包能力。**随着HTTP/3的普及,QUIC将成为下一代互联网传输协议的主流选择。向阳前行,Dare To Be!!!
2025-08-18 23:49:54
1110
原创 HTTP协议-4-浏览器是怎么抉择HTTP版本的?
HTTP/3使用QUIC协议(基于UDP),不再依赖TCP。优势:减少连接建立时间(0-RTT恢复)避免队头阻塞(TCP的痛点)更适合移动网络支持者:Google、Cloudflare、Facebook、部分国内大厂(如腾讯、阿里云逐步支持)(1)、浏览器端确保服务器启用HTTPS和HTTP/2(如Nginx或Apache配置)。如果需要支持HTTP/3,需使用支持QUIC的反向代理(如Nginx QUIC模块)。(2)、服务端开发。
2025-08-18 23:29:17
1475
原创 HTTP协议-3-HTTP/2是如何维持长连接的?
HTTP/1.1的请求和响应使用纯文本格式(如GET /index.html HTTP/1.1),解析效率低,且冗余信息多(如重复的头部字段)。数据切片:HTTP/2将每个请求/响应拆分成多个帧(Frame),每个帧是二进制格式的小数据块。HEADERS帧:存放请求头或响应头(如Host、User-Agent)DATA帧:存放请求体或响应体(如 HTML 内容)。SETTINGS帧:配置参数PING帧:心跳探测RST_STREAM帧:取消某个流GOAWAY帧:优雅关闭连接。
2025-08-17 17:54:26
927
原创 力扣经典算法篇-52-零钱兑换(动态规划)
本题为求取最优值的问题,可以使用贪心或动态规划的算法策略。对于本题,贪心无法获取全局最优的结果,需要使用动态规划的思路。校验某一个硬币时,需要减去当前硬币的价值,验证减去后的值是否满足调价,如果满足条件,该硬币需要校验,否则直接跳过。要对一个新的值,要校验这组硬币能否满足组合目标价值的情形,需要遍历这个硬币的集合。输入:coins = [1, 2, 5], amount = 11。输入:coins = [2], amount = 3。输入:coins = [1], amount = 0。
2025-08-17 17:08:20
346
原创 HTTP协议-2-HTTP1.1是如何实现长连接的?
HTTP/1.1的长连接是通过keep-alive实现多个串行请求复用一个TCP连接。使用连接池管理后端服务连接(如数据库、HTTP客户端)。推荐使用HTTP/2或HTTP/3来获得更高效的连接复用和更低延迟。向阳前行,Dare To Be!!!
2025-08-17 14:17:50
1059
原创 HTTP协议-1-认识各个HTTP协议版本的主要特点
HTTP/0.9到HTTP/1.1:解决了基础功能和性能瓶颈(如短连接、头部冗余)。HTTP/2:通过二进制分帧和多路复用大幅提升性能。HTTP/3:基于QUIC协议,彻底解决TCP的局限性,适应未来网络需求。选择合适的HTTP版本需根据具体场景权衡性能、兼容性和部署成本。对于现代应用,HTTP1.1还是比较常见的,如果性能要求较高的话推荐优先使用HTTP/2或HTTP/3以获得最佳体验。向阳前行,Dare To Be!!!
2025-08-16 18:30:06
1080
原创 力扣经典算法篇-51-单词拆分(动态规划)
需向前遍历,找出d之前的一个位置f,该位置f需要满足[0,f]串符合题意,且向后到新位置[f,d]串也符合题意。输入: s = “catsandog”, wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]解释: 返回 true 因为 “applepenapple” 可以由 “apple” “pen” “apple” 拼接成。输入: s = “applepenapple”, wordDict = [“apple”, “pen”]向阳前行,Dare To Be!
2025-08-16 17:58:46
501
原创 Nacos-5--Nacos2.x版本的通信原理
Nacos 2.x的gRPC实现通过长连接、双向流通信、事件驱动模型和轻量化的注册表,解决了1.x版本中HTTP长轮询的性能瓶颈和实时性问题。高性能:减少连接开销,支持大规模客户端连接。实时性:服务端主动推送变更,降低延迟。稳定性:心跳机制和断线重连保障连接可靠性。通过gRPC的升级,Nacos 2.x成为了更适合云原生和微服务架构的注册中心和配置中心。向阳前行,Dare To Be!!!
2025-08-15 16:47:34
1199
原创 Nacos-4--Nacos1.x长轮询的理解
Nacos客户端通过长轮询(Long Polling)机制的核心原理,是在传统轮询基础上优化了服务器响应策略,既能保证配置更新的实时性,又能减少无效请求的开销。
2025-08-14 12:48:14
583
原创 Nacos-3--扩展:长轮询的实现原理
HTTP长轮询的核心原理是通过阻塞请求实现服务器端的数据等待,利用操作系统的线程管理、事件驱动和I/O多路复用技术实现“伪实时”通信。其优势在于兼容性强(基于HTTP协议),但资源消耗较高。随着WebSocket等更高效技术的普及,长轮询逐渐被取代,但在某些受限环境中(如不支持WebSocket的环境)仍有应用场景。向阳前行,Dare To Be!!!
2025-08-14 12:40:06
940
原创 力扣经典算法篇-50-单词规律(双哈希结构+正反向求解)
摘要:本文介绍了如何判断字符串s是否遵循给定pattern的双向匹配规律。通过使用两个哈希表分别存储字符到单词和单词到字符的映射关系,进行双向校验。当出现映射不一致时返回false,否则返回true。Java代码实现了这种双向校验的解决方案,能够正确处理pattern字符与s中单词的一一对应关系。
2025-08-12 23:32:03
391
原创 Nacos-2--Nacos1.x版本的通信原理
HTTP长轮询:用于配置管理,返回配置内容,客户端无需重新拉取节点列表。UDP推送:用于服务发现,返回实例列表变更,解决长轮询的延迟问题。两者不是一回事:协议、数据内容、适用场景完全不同,但共同目标是实现动态更新的实时感知。最终结论:通过这种分层设计,Nacos 1.x在保证兼容性的同时,满足了不同场景下的实时性需求。在Nacos 2.0中,这些机制被gRPC长连接统一优化,进一步提升了性能和可靠性。向阳前行,Dare To Be!!!
2025-08-12 22:47:19
1470
原创 Nacos-1--什么是Nacos?
Nacos是阿里巴巴开源的动态服务管理平台,专为微服务架构设计,提供四大核心功能:服务注册发现(支持AP/CP模式)、动态配置管理(实时推送/灰度发布)、健康检查机制(主动/被动探测)和元数据管理。采用Client-Server架构,2.x版本引入gRPC提升性能,支持集群部署与多环境隔离。相比传统方案(如Eureka+Config),Nacos实现服务治理与配置管理的统一,具备高可用、易扩展、多语言支持等优势,适用于微服务治理、云原生应用等场景。其活跃社区和持续迭代使其成为现代化分布式系统的基础设施首选。
2025-08-11 23:33:26
1009
原创 力扣经典算法篇-49-三角形最小路径和(二维动态规划)
相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1。即:当前行下标i,下一行的i或i+1与其相邻。本题要求在二维数组上寻找最优解获取最小和的问题,属于求最优解的问题,适用动态规划的思路求解。输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]当i在1到last-1之间时,可以从上方相同位置i,或前一个位置i-1进行传递。
2025-08-11 01:08:56
410
原创 力扣经典算法篇-48-打家劫舍(动态规划)
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。以上是标标准动态规划的解题示例,只需要遍历一次数组,时间复杂度为O(n),使用了一个相同大小的临时数组,时间复杂度为O(n)。解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
2025-08-10 13:35:22
484
原创 力扣经典算法篇-47-Pow(x, n)(快速幂思路)
对于起始入参x,将前一次的计算的结果作为下一步的计算入参。是2的4次幂可以直接使用2的2次幂结果相乘;本题求解x的n次幂,简单来说就是n个x相乘,但作为算法考察的目题目,肯定不会那么简答,下面通过快速幂的方法优化一下。实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。解释:2-2 = 1/22 = 1/4 = 0.25。输入:x = 2.00000, n = 10。输入:x = 2.00000, n = -2。输入:x = 2.10000, n = 3。如:2的64次方求解。
2025-08-10 11:17:17
389
原创 SkyWalking-3--Java Agent开发和集成示例
创建一个包含premain方法的类,即:Agent类。该类中的premain方法会在JVM启动时被调用,该方法的主要作用是注册类转换器ClassTransformer对象。// JVM 启动时自动调用// 添加类转换器premain是JVM启动时加载Agent的入口方法。Instrumentation inst参数由JVM提供,是操作类定义的核心工具。通过inst.addTransformer(…)注册一个转换器,相当于告诉JVM:“后续加载的类,你可以让我先处理一下”。
2025-08-09 14:09:41
618
原创 SkyWalking-2--Java Agent是什么?
Java Agent:动态字节码修改技术 Java Agent是一种基于JVM的动态字节码修改技术,允许在类加载时或运行时监控和修改程序行为。核心通过Instrumentation接口和ClassFileTransformer实现字节码增强,提供premain(启动时加载)和agentmain(运行时附加)两种入口方式。典型应用包括性能监控、热修复、AOP和安全防护等场景。开发流程涉及编写Agent类、配置MANIFEST.MF和打包JAR。虽然具备非侵入性优势,但也面临兼容性和性能开销等挑战。作为现代Ja
2025-08-09 12:51:26
1343
原创 力扣经典算法篇-46-阶乘后的零(正向步长遍历,逆向步长遍历)
我们一定不能上来计算阶乘和,因为在Java中int的最大值是2147483647即2的31次方-1,最多能计算12的阶乘;long的范围是9223372036854775807(2^63-1),最大只能计算到20的阶乘,很显然求阶乘和的方式不可取。第一种情况,如果末尾是0,那就末尾0的个数就加1,但是要注意100这种末尾有2个0,1000有3个0的情况。= n * (n - 1) * (n - 2) * …从5到n正向遍历,在满足不超过n的条件下计算结果。题目要求对n的阶乘结果,校验末尾0的个数。
2025-08-07 23:58:29
1076
原创 SkyWalking-1--SkyWalking是什么?
Apache SkyWalking是云原生时代不可或缺的观测性工具,通过分布式追踪、性能监控、日志管理、告警等功能,帮助团队全面掌控微服务和云原生系统的运行状态。其多语言支持、轻量高效、模块化设计和自研数据库BanyanDB使其在同类工具中脱颖而出。无论是中小规模的微服务架构,还是大规模云原生集群,SkyWalking都能提供高效的监控和诊断能力。向阳前行,Dare To Be!!!
2025-08-07 23:08:21
1779
原创 力扣经典算法篇-45-回文数(数字处理:求余+整除,字符串处理:左右指针)
本文介绍了判断整数是否为回文数的三种方法:1) 使用字符串反转直接比较;2) 将数字转为字符串后采用左右指针法比较;3) 通过数学运算(求余和整除)反转数字进行比较。其中方法一简单但效率较低,方法二和方法三效率更高,尤其方法三完全基于数字运算,适合算法考察。所有方法都排除了负数和非零的10的倍数这些明显非回文的情况。
2025-08-06 23:37:59
228
原创 力扣经典算法篇-44-组合总和(回溯问题)
本文介绍了使用回溯算法解决组合总和问题。给定一个无重复元素的整数数组和目标值,找出所有和为目标的数字组合,允许数字重复使用。提供了两种回溯方法:方法一通过全排列后去重,但效率较低;方法二通过指定遍历起始位置,避免重复计算,提高效率。两种方法都遵循回溯框架:添加元素、递归、回溯删除元素。关键区别在于如何避免重复组合,方法二通过限制起始位置更高效。文章包含Java代码示例,适合解决类似组合问题的回溯算法实现参考。
2025-08-06 22:24:48
541
原创 力扣经典算法篇-43-全排列(经典回溯问题)
注意本例要求的元素不能有重复,所以临时动态变量,除了要添加元素的下标,本趟的结果集,还要添加一个set集合用于验证是否重复添加元素。所以在循环递归前,不仅要添加当前元素,还要添加记录下标;在回溯的时候添加的什么,就要删除什么。怎么添加的元素进行向后递归,就要怎么删除元素进行回溯。输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列。找到固定不变的量,每趟递归动态变化的量,结果集。
2025-08-05 23:46:06
1714
原创 Prometheus-4--Prometheus采集的常见指标
通过Micrometer注册自定义指标。@Service// 每次调用时增加计数器通过拦截器记录接口调用次数(业务处理这个指标):@Component@Override// 每次请求时增加计数器Prometheus默认指标覆盖了系统资源、JVM、HTTP请求、线程池、数据库连接池等核心监控维度。通过Micrometer或Exporter暴露指标,Prometheus Server以Pull模型定期拉取数据并存储为时间序列。
2025-08-05 01:10:51
1613
原创 Mysql-场景篇-2-线上高频访问的Mysql表,如何在线修改表结构影响最小?-5--INSTANT DDL,gh-ost,pt-osc三种在线DDL方案对比分析
仅支持InnoDB存储引擎。不支持修改主键、索引结构、外键约束。修改列类型必须通过重建表实现(如gh-ost或pt-osc)。优先使用INSTANT DDL:对于支持的操作(如添加/删除列),原生方案性能最优。复杂DDL操作:选择gh-ost(高并发场景)或pt-osc(低并发场景)。始终测试与备份:任何DDL操作前需在测试环境验证,并保留旧表或数据备份。向阳前行,Dare To Be!!!
2025-08-04 23:50:11
1153
1
原创 Prometheus-3--Prometheus是怎么抓取Java应用,Redis中间件,服务器环境的指标的?
摘要: 本文介绍了如何通过Prometheus监控Java应用、Redis中间件和服务器运行环境的指标数据。对于Java应用,需要引入Prometheus客户端库并在代码中定义指标,通过HTTP暴露/metrics接口;对于Redis等中间件,需部署对应的Exporter组件(如redis_exporter)转换指标格式;服务器环境指标则通过node_exporter采集。三种场景均需在Prometheus配置文件中添加对应的抓取任务。实现步骤包括:1)引入依赖或部署Exporter,2)验证指标暴露,3)
2025-08-04 23:37:37
1253
1
原创 力扣经典算法篇-42-矩阵置零(辅助数组标记法,使用两个标记变量)
想一下,如果在遍历时就将后面行的元素修改成了0,那么之后行的遍历时,就会将改行全部变为0,进而导致整个列也全部都变成0,最终形成全0的局面。将第0行和第0列作为辅助空间,先标记在修改元素。但第0行和第0列的元素不能根据被修改后的值进行修改,所以还要添加两个变量先记录第0行和第0列是否包含0的存在。输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]输出:[[1,0,1],[0,0,0],[1,0,1]]
2025-08-03 18:14:45
340
原创 力扣经典算法篇-41-旋转图像(辅助数组法,原地旋转法)
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]假设n=4,规律:3,0–>0,0 2,0–>0,1 1,0–>0,2 0,0–>0,3。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]需要结合当n=3和n=4的简单场景下,自己找规律,不能懒。输出:[[7,4,1],[8,5,2],[9,6,3]]
2025-08-03 16:56:51
407
原创 力扣经典算法篇-40-螺旋矩阵(方向遍历:方向数组+已访问元素集合)
第三,方向的控制需要借助一个固定的二维数组{0, 1}, {1, 0}, {0, -1}, {-1, 0}代表右,下,左,上的四个方向。思路:遍历数组,沿着一个方向添加数据,当达到切换方向条件时,切换方向添加数据,直到最终达到最大次数。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]输出:[1,2,3,6,9,8,7,4,5]
2025-08-03 14:07:52
484
原创 力扣经典算法篇-39-有效的数独(二维数组和三维数组的应用)
其实不难发现,对于下标为[i][j]的元素,其[i/3][j/3]如果值相同,那么这些元素就处于同一个宫格之中;因为比较的规则有3种,行比较,列比较,宫格比较,所以我建议使用三个临时数组来保存已有的特征数据,这样可以在一次遍历中去校验三个维度的规则是否满足。即:行上不能存在重复的元素,列上能存在重复的元素,每个宫格上不能存在重复的元素。如果要比较目标元素是否符合要求,很显然要有一个对应的参考物记录下已有数据的特征,通过元素和参考物的比较才能知道当前元素是否满足要求。请你判断一个9 x 9的数独是否有效。
2025-08-03 11:12:36
673
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅