- 博客(131)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 【案例解析】一次 TIME_WAIT 导致 TPS 断崖式下降的排查与优化
维度建议原因RestTemplate 构建使用单例 Bean避免重复创建连接池OkHttpClient 配置显式配置和Dispatcher控制最大连接数与请求并发度系统内核参数(可选)调整和提高本地端口复用能力(仅作兜底)下游配合下游服务需支持keep-alive否则连接池复用无效监控指标TIME_WAIT数、连接池状态、TPS 曲线实时观测变化,辅助优化TIME_WAIT这是一个典型的“连接未复用 → TIME_WAIT 滥发 → 系统资源耗尽 → TPS 周期性下降”的问题。
2025-06-09 16:41:38
611
原创 《深入理解 Nacos 集群与 Raft 协议》系列五:为什么集群未过半,系统就不可用?从 Raft 的投票机制说起
Raft 是为了保证数据一致性而牺牲了可用性的一种协议。所有操作都要过半节点参与确认未过半时,为防止脑裂,系统主动进入保护性不可用在 Nacos 中体现为:Leader 无法选举、写请求挂起、读请求可能失败。
2025-06-08 16:04:09
820
原创 《深入理解 Nacos 集群与 Raft 协议》系列四:日志复制机制:Raft 如何确保提交可靠且幂等
Raft 中,该日志由 Leader 追加,且已被超过半数节点确认持久化。即使 Leader 崩溃,仍有过半节点持有该日志下次选主,一定会选出有这条日志的节点为新 Leader(见第 3 篇)→已提交的日志,不会丢。所有写请求必须经 Leader 统一调度复制必须超过半数成功才算提交提交后才能执行,确保所有节点状态一致Follower 校验 + 回退机制保证了幂等性下一篇,我们将以 Nacos 为例讲解:💡 如果集群未过半节点存活,为什么整个系统不可用?敬请期待第 5 篇!
2025-06-08 16:03:20
1045
原创 《深入理解 Nacos 集群与 Raft 协议》系列三:日志对比机制:Raft 如何防止数据丢失与错误选主
投票时检查候选人日志是否比自己新防止日志回滚,避免脑裂与数据丢失所有新 Leader 都必须有前任 Leader 的提交副本下一篇我们将继续讲解:💡 Raft 日志是如何复制的?提交策略、确认机制与幂等性保障敬请期待第 4 篇!
2025-06-08 16:02:32
1148
原创 《深入理解 Nacos 集群与 Raft 协议》系列二:Raft 为什么要“选主”?选主的触发条件与机制详解
每轮只能选出一个 Leader,统一处理写请求选主通过 RequestVote 实现,结合日志校验、随机超时多节点同时竞选不会脑裂,最终一定选出唯一 Leader下一篇,我们将重点解析:💡 Raft 是如何通过“日志对比”防止不合法节点当选 Leader?敬请期待第 3 篇!
2025-06-08 16:01:46
500
原创 《深入理解 Nacos 集群与 Raft 协议》系列一:为什么 Nacos 集群必须过半节点存活?从 Raft 协议说起
Nacos 集群部署时的“必须过半节点存活”要求,源于它底层使用的 Raft 协议。保证集群状态的一致性(避免脑裂)保证注册数据的可靠传播与持久化保证集群内部的正确选主下一篇我们将深入讲解:💡 Raft 为什么要选主?选主的条件、过程与常见误区敬请期待第 2 篇!
2025-06-08 16:00:56
668
原创 Excel 表操作小技巧:如何判断是否存在重复整行记录?
方法特点推荐使用场景COUNTIFS写法清晰,适合字段较少2~5 列的数据表拼接 +COUNTIF灵活高效,适合字段较多6列以上、重复逻辑复杂TEXTJOIN自动拼接整行Excel/WPS 新版UNIQUE判断是否存在重复整行(整体)判断全表重复即可删除重复项操作简单直接,不能标记重复行快速清理表格数据。
2025-06-05 15:19:17
306
原创 Jackson 数值转科学计数法问题分析与解决方案
Jackson 是一款强大而灵活的 JSON 处理工具,但其默认的自动类型推断和格式优化策略,在一些严谨的数据处理场景中可能引发意外行为。从JSON 字符串结构入手,控制字段类型;从ObjectMapper 配置入手,修改解析与输出行为;从节点层级处理逻辑入手,手动干预字段值类型。建议开发中针对业务要求,统一 JSON 处理策略,避免此类隐患反复出现。
2025-06-02 17:37:28
378
原创 表单请求为什么需要进行 URL 编码?—详解application/x-www-form-urlencoded的正确用法
凡是使用的请求,就必须对请求体的参数值进行 URL 编码!编码不仅是为了规范,也是确保数据安全和接口兼容性的基本保障。开发中如果使用第三方工具类或框架(如 Hutool、RestTemplate),请务必确认参数是否已经正确编码,或者直接使用.form()方法由框架自动完成。对 JSON 做 URL 编码后作为表单字段值(如或者改用类型,后端直接解析 JSON(更清晰)如需示例代码或想了解更多细节,可随时留言交流。
2025-05-29 16:00:37
968
原创 聊一聊常见的超时问题:timeout
连接超时是指客户端在设定的时间内无法与目标服务建立连接,通常是在 TCP 三次握手阶段未完成时抛出的错误。连接建立成功后,客户端等待服务端返回数据,如果在规定时间内未收到响应,就会抛出响应超时异常。
2025-05-11 19:58:28
662
原创 项目日志是否应该启用文件压缩?
大家好,我是G探险者!在项目中,日志管理是运维和开发人员需要重点关注的环节。随着系统规模的增长,日志文件可能会占据大量存储空间,因此很多项目会考虑使用日志压缩的方式来减少存储成本。然而,日志压缩也会带来一些额外的运维开销,例如日志查看不便、日志采集工具的兼容性问题等。因此,是否应该启用日志压缩需要权衡利弊。
2025-03-30 22:34:58
706
原创 AI时代只会加速拉大人与人之间的差距
AI时代并不会自动拉平人与人之间的差距,反而可能进一步加剧强者与平庸者的分化。AI只是一个工具,它可以放大认知优势,但无法赋予缺乏思考和学习能力的人竞争力。因此,我们需要在AI的辅助下,保持好奇心、提升思维能力,并不断学习,才能真正受益于这个时代的技术变革。
2025-03-09 14:36:33
266
原创 这样使用雪花算法被客户喷了!
我的代码确实借鉴了雪花算法的一些思想,尤其是时间戳和序列号递增的部分,但它并没有实现雪花算法的完整机制(如机器 ID、数据中心 ID、分布式保证等)。因此,它只能算是对雪花算法的一种简单模仿,适用于单机场景下的 ID 生成,但在分布式系统或高并发环境中,存在生成重复 ID 的风险。
2025-02-23 23:44:01
618
原创 聊一聊vue如何实现角色权限的控制的
大家好,我是G探险者。关于角色与权限控制,通常是分为两大类:一种是菜单权限;一种是操作权限。菜单权限是指,每个角色对应着可以看到哪些菜单,至于每个菜单里面的每个按钮,比如增删改查等等这类按钮控制不到这个粒度。简单来说就是控制看到的菜单多少。操作权限是指,每个角色对于所看到的数据具有哪些操作权限,就是增删改查这些具体的操作,简单来说就是读写权限。一套完整的角色访问控制:是应该包含这两种控制的。通常二者也是交叉在一起进行访问控制的。Vue.js 提供了灵活的方式来实现角色权限控制,本文将深入探讨如何通过 Vu
2025-02-16 23:35:06
1391
原创 聊聊长连接和短连接
长连接适用于高并发、频繁交互的场景,如实时聊天应用、WebSocket 通信、消息队列、HTTP/2、保持 HTTP 请求的连接等。它通过减少连接建立和关闭的次数,能够显著提高性能和降低延迟。短连接更适用于低并发的场景,尤其是传统的 HTTP/1.0 请求,每次请求建立和断开连接,虽然能减少服务器端的资源消耗,但在高并发场景下会增加额外的延迟和网络开销。应用举例:长连接:实时聊天、股票行情更新、WebSocket、API 接口(如 RESTful API)、数据库连接池、消息队列等。短连接。
2025-01-01 23:28:20
1101
原创 前端框架Vue的路由机制
单页面应用一次性加载:SPA 应用在首次加载时加载整个应用的 HTML、CSS 和 JavaScript 文件。之后的所有页面更新都是通过 JavaScript 动态加载数据并在当前页面中更新视图,而不会重新加载整个页面。页面切换无刷新:用户在浏览不同页面时,SPA 不会向服务器请求新的 HTML 页面,而是通过 JavaScript 动态更新视图,模拟页面跳转的效果。页面切换时,URL 通常也会发生变化,但不会引起浏览器的全页面刷新。客户端渲染。
2024-12-19 23:19:18
1133
原创 如何解决垂直越权与水平越权问题
垂直越权指的是用户通过某些手段访问或操作本不应有权限访问的、更高权限级别的资源或功能。通常,这种情况发生在不同权限层级的用户之间,越权者尝试获取更高权限的资源。普通用户试图访问管理员面板或其他管理功能。普通员工访问财务数据、薪资信息等只能由管理层访问的资源。垂直越权和水平越权是权限管理中常见的安全问题。解决这些问题需要从设计、实现到运维多个层面加强权限控制。通过角色管理、最小权限原则、数据级别权限控制等方法,可以有效防止用户越权访问系统资源。
2024-12-12 22:28:47
2414
原创 当Nginx所在服务器的磁盘空间满了,会有什么影响及如何避免这种问题
最近遇到一个问题是,nginx所在服务器磁盘满了,导致前端页面上的一个文件上传功能不好使了,搞得我排查半天,找不见原因,最后发现是nginx的磁盘满了导致,清理了里磁盘的一些没用的日志之后,再次调用,功能正常使用了。Nginx所在服务器的磁盘空间满了,会导致日志无法写入、缓存失效、反向代理请求异常等问题,严重时可能导致服务不可用。Nginx在处理请求时,特别是反向代理大文件、上传或下载文件时,会在磁盘上创建临时文件。通过合理的监控和维护,可以有效保障Nginx的稳定运行,避免因磁盘空间不足而导致服务故障。
2024-12-10 15:10:56
1436
1
原创 聊一聊常用类System
大家好,我是G探险者!今天来聊一聊java常用类System。事情的起因是项目里面使用了Jasypt 框架对配置项进行加密,主要是密码相关的配置,项目里面的application.yml有关密码的配置项,使用了占位符${PASSWORD}进行了占位,然后在idea里面的设置了JVM的启动参数VM OPTIONS我在jvm的启动参数中,设置了密码这个变量值。在代码里面是也是通过System.getProperty("PASSWORD")这种方式来取值的。这样在我本地是没有问题的,
2024-12-08 23:22:57
638
原创 聊一聊BOM:多模块的依赖版本管理
大家好,我是G探险者!最近项目上在整理各个组件的POM依赖,试图通过一个父级POM来管理整个项目上使用到的各种开源的,和自研的依赖。目的是为了规范使用我们框架的应用,不私自在自身项目里面乱定版本,导致各种版本冲突不兼容的问题。
2024-12-08 13:13:34
1087
原创 聊一聊灰度,蓝绿,和流量染色
特性灰度发布蓝绿发布流量染色目标渐进式发布,逐步增加流量快速切换,零停机时间无影响验证新版本流量控制动态调整流量切换全部流量复制流量到新版本,但不影响用户风险管理风险较低,容易回滚风险较低,快速回滚风险最低,因为不影响用户适用场景新功能、复杂改动小型更新、大版本发布新版本验证、无影响流量测试实现复杂度较高,需要流量监控和逐步调整较低,两个独立环境较高,需要高效的流量复制灰度发布适合在不确定的情况下逐步发布新功能,可以逐渐增加用户使用新版本的比例,减少风险。蓝绿发布。
2024-11-19 21:50:03
723
原创 Nginx 使用入门介绍
Nginx(发音为 "Engine-X")是一款开源的 Web 服务器和反向代理服务器,最初由 Igor Sysoev 于 2004 年开发,旨在解决 C10K 问题(即同时处理 10000 个连接)。Nginx 的设计重点是高并发、高性能和低资源消耗,特别适用于静态内容的分发和反向代理服务。
2024-11-18 23:22:08
1067
原创 前端与后端通讯的演变:从 AJAX 到现代 HTTP 客户端
用于在后台与服务器交换数据。JavaScript:用于处理响应并更新网页内容。XML或JSON:作为数据交换格式(现代应用中,JSON 更为流行)。从早期的表单提交与页面刷新,到 AJAX、jQuery 的封装,再到现代的fetch和axios,前端与后端的通讯方式经历了巨大的演变。这些技术的不断发展,使得前端开发者能够更高效地与后端服务交互,提升用户体验的同时,也推动了 Web 应用的复杂性和功能性。现代 Web 开发中,axios已经成为最常用的 HTTP 客户端工具,而fetch。
2024-08-11 23:32:20
1386
1
原创 简单聊一聊Vue是如何管理多环境的后端服务的?
是一种自定义的配置文件,通常用于定义不同开发人员或不同环境下的后端服务地址。这种文件并不是 Vue 的官方标准,而是为了满足特定项目需求而创建的。例如,一个典型的},},},在这个配置中,可以通过命令行参数或者环境变量来切换不同的后端服务地址,从而使得项目更具灵活性。Vue 项目中的多环境管理从最初的环境变量支持,到后来复杂项目中引入的等自定义配置文件,反映了项目在规模和复杂性增加时,对灵活性和可维护性的需求。
2024-08-11 22:54:22
533
原创 不同类型的Shell脚本
Shell脚本是一种用于自动化任务的强大工具,广泛应用于系统管理、应用程序自动化、批处理任务等。Shell脚本通过一系列的命令和逻辑控制语句来实现各种功能。在Linux系统中,Shell脚本因其高效、易用和强大的功能而受到广泛欢迎。
2024-06-21 18:01:58
914
原创 简单聊聊Vue
public/:存放不经过 Webpack 处理的静态资源,主要是index.html。src/:主要开发目录,包含应用的源代码和所有 Vue 组件。:存放可复用的小部件或 UI 组件。views/:存放页面级别的 Vue 组件。App.vue:根组件,是整个应用的顶层组件。main.js:应用的入口文件,初始化 Vue 实例。router/:存放路由相关配置。:项目的配置文件,包含依赖、脚本等。配置文件:如.gitignore和,用于项目和工具的配置。修改。
2024-06-11 22:56:18
873
1
原创 单元测试的心法分享
大家好,我是G探险者!今天我们简单聊聊单元测试的哪些事儿~两天时间我玩明白了单元测试的套路。这里我分享一下思路。在我眼里单元测试室什么?请看这张草图:单元测试主要关注单个代码单元(通常是类或方法)的逻辑正确性,而不是功能测试的全面性。
2024-06-02 18:58:47
1256
原创 Java 中的 HTTP 客户端库OkHttp、Apache HttpClient和HttpUrlConnection
大家好,我是G探险者。项目开发里面经常会有这么一种场景:与服务器进行 HTTP 通信。一般存在于服务间远程调用的场景Java 生态系统提供了多种 HTTP 客户端库,每种都有其自己的特点、优势和适用场景。本文将介绍几种主要的 Java HTTP 客户端库,并探讨它们的特点和用法,帮助你选择最适合你项目需求的工具。
2024-05-08 22:57:16
1348
原创 为什么使用httpClient发送x-www-form-urlencoded类型的请求时,必须要使用MultiValueMap来传参
大家好,我是G探险者。今天主要介绍一下MultiValueMap和HashMap的区别。事情起因是这样的,在我们项目code review的时候,客户方提了一个问题,说,你们在用restTemplate进行远程调用的时候,为啥使用MultiValueMap来传递参数,而不用HashMap。这有啥区别么?当时没有给出专业的解答。事后我就好好查询了一番。从以下几个方面来阐述。
2024-05-08 00:22:39
929
原创 简单聊聊如何更优雅地初始化对象:构造函数、Builder模式和静态工厂方法比较
大家好,我是G探险者。在平时的java编程中,你肯定会有过对一些实体对象进行初始化的set操作,有的对象的属性较少可能还好点,当一个对象拥有许多属性时,通常的初始化方式可能显得笨拙而不直观,代码写的很不美观,我是有点难受了。今天我们就来聊聊对象初始化属性的几种方式。你可以使用构造函数、Builder模式或者静态工厂方法来更优雅地初始化对象的属性。
2024-03-23 00:13:45
572
原创 简单聊聊http协议头参数之Content-Type和http状态码 415错误
HTTP协议头中的参数用于指示请求或响应中携带的实体正文(body)的MIME类型(Multipurpose Internet Mail Extensions)。它告诉客户端或服务器如何解释正文的内容。Content-Type参数值的MIME类型通常以type/subtype的形式表示,其中type表示主类型(Top-Level Type),subtype表示子类型(Subtype)。type是广义的数据类型,而subtype则更具体地描述了数据的类型。以下是text/plain。
2024-03-04 22:26:02
948
原创 使用单元测试框架Junit的正确姿势
单元测试是软件开发中的一种测试方法,旨在验证代码中的最小可测试单元(通常是函数、方法或类)是否按照预期进行了设计、实现和行为。在单元测试中,开发者编写测试用例来测试代码的各种情况和边界条件,然后运行这些测试用例以验证代码的正确性。独立性:每个单元测试应该是独立的,不依赖于其他测试用例的执行结果。自动化:单元测试应该可以自动运行,开发者不需要手动进行测试。快速:单元测试应该能够快速执行,以便在开发过程中频繁地运行。精确性:单元测试应该能够准确地验证代码的行为,覆盖各种情况和边界条件。
2024-02-20 23:59:43
1213
原创 数据库所在服务器磁盘满了怎么办?
大家好,我是G探险者。给大家拜个晚年哈,节后上班第一天,打开电脑,发现数据库服务器连不上了。幸亏,节后第一天上班的人不太多,领导还没来,我一番鼓捣解决了这个问题。所以做个总结,记录一下。
2024-02-18 23:27:01
2048
原创 springboot项目启动时如何排除一个bean?
大家好,我是G探险者。使用springboot开发项目,我们有时候会排除一些项目里面用不到的bean,不然的话项目启动会报错,这种情况通常是发生在什么场景里呢,以及如何解决呢?今天咱们就聊一聊。springboot默认封装了很多的组件,并且把这些组件都进行了自动化配置封装。也就是说,只要是springboot项目,启动类在@SpringBootApplication注解下,在不需要单独配置bean的情况下,本项目所用到的bean在容器启动的时候都会被自动扫描并注入到IOC容器里。
2024-01-23 00:46:33
1954
原创 闲聊从防火墙,到VPC再到服务鉴权的技术发展过程
从防火墙到虚拟私有云、虚拟私人网络,再到如今的服务鉴权,网络安全技术在不断演进。这一循序渐进的过程旨在适应不断变化的业务环境和安全挑战。服务鉴权的引入使得安全控制更加贴近服务层,为现代复杂的服务架构提供了更为全面和有效的安全保障。技术的发展不仅仅是解决问题的过程,更是适应新需求、应对新挑战的不断创新之旅。
2023-12-26 00:08:52
957
原创 浅谈SPI机制之ServiceLoader的原理
类是 Java Development Kit (JDK) 的一部分,用于加载服务提供者。这个类是 Java 的服务提供者加载机制(SPI,Service Provider Interface)的核心部分,允许服务提供者被动态地加载到应用程序中。这里的 "服务" 是指一个已知接口或者抽象类的实现,而 "服务提供者" 指的是实现这些接口或类的具体实现。
2023-12-11 00:11:42
1173
原创 简单聊聊使用lombok 的争议
大家好,我是G探险者。项目里,因为我使用了Lombok插件,然后代码走查的时候被领导点名了。我心想,这么好用的插件,为啥不推广呢,整天写那些烦人的setter,getter方法就不嫌烦么?领导既然不让用,自然有他的道理。于是我查了一番关于lombok的一些绯闻。就有了这篇文章。首先呢,Lombok 是一个在 Java 项目中广泛使用的库,旨在通过注解自动生成代码,如 getter 和 setter 方法,以减少重复代码并提高开发效率。
2023-12-10 17:57:41
1054
原创 分享几个 Git 的使用技巧之 Merge,Rebase 以及 Tag 标签
掌握mergerebase和标签的使用,不仅能帮助你更有效地管理代码,还能增强团队协作和代码质量的维护。记住,选择最适合你的项目和团队工作流的方法,并始终关注代码的健康和团队的协作效率。通过这些技巧的应用,你可以使 Git 成为软件开发过程中的强大助手。
2023-11-30 23:41:32
1187
原创 Spring的三种常见Bean的初始化参数机制,你都用对了吗?
大家好,我是G探险者。spring这本九阳神功秘籍,我们一点一滴去研读。在Spring框架中,Bean的实例化与初始化是一个复杂的过程,一个Bean的实例化过程往往伴随着一些属性的初始化动作,有的是在Bean实例化之后才进行的属性初始化,有的是和Bean实例化同时进行他的属性初始化,spring提供了多种机制来控制和扩展这个过程来满足我们不通的场景需求。接口、接口和接口。看看它们的区别、使用场景以及如何使用。
2023-11-28 00:25:09
1240
分布式系统如何做到我的定时任务只执行一次
2020-12-19
easyui的datagrid的字段显示问题
2017-10-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人