- 博客(91)
- 收藏
- 关注
原创 使用 Arthas + Heapdump + MAT 三步定位 Java 内存泄漏
在解决 Java 应用内存泄漏问题的道路上,选择合适的工具是成功的关键一步。就好比一名工匠,要打造出精美的器物,必先磨砺好手中的工具。接下来,我们将详细介绍两款在内存泄漏排查中发挥重要作用的工具 ——Arthas 和 MAT,以及它们的准备工作。Arthas 的安装过程十分简便。我们只需通过命令行执行以下操作,即可轻松完成安装:在启动 Arthas 后,它会自动扫描当前机器上正在运行的所有 Java 进程,并以列表的形式展示出来,就像一份清晰的菜单,供我们选择。我们只需根据提示,输入目标 Java 进
2026-01-09 10:03:55
772
原创 三步搞定CPU飙升!Arthas实战指南:thread+trace+profiler高效排查法
在 Java 应用的高并发战场中,CPU 使用率突然飙升至 90%+ 是常见 “险情”。传统排查方式如重启服务、离线分析线程 dump,往往耗时费力且难以捕捉实时现场。Arthas 作为阿里巴巴开源的 Java 诊断神器,支持在不重启应用的情况下,通过 thread 命令定位问题线程、trace 命令追踪方法耗时、profiler 命令生成火焰图,三步锁定 CPU 瓶颈,成为线上诊断的 “瑞士军刀”。本文将通过实战案例,带你掌握这套高效排查方案。
2025-12-22 11:32:42
560
原创 面试必问的ThreadLocal核心考点:从原理到实战
无论是否在线程池环境下,使用完 ThreadLocal 后,必须调用 remove () 方法清理数据,这是避免内存泄漏和脏数据问题的关键。特别是在线程池场景中,由于线程会被复用,如果不及时清理,下一个任务可能会获取到上一个任务残留的数据,导致业务逻辑出现错误。为了确保清理操作一定会执行,推荐将 remove () 方法放在 finally 块中,这样即使业务逻辑出现异常,也能保证 ThreadLocal 中的数据被正确清理。try {// 执行业务逻辑。
2025-12-09 13:55:21
885
原创 分布式ID方案、雪花算法与时钟回拨问题
我们倾向于在数据库中使用自增主键,是因为自增主键可以迫使数据库的B+树朝着一个方向增长,新数据总是追加到树的末尾,避免了中间节点的分裂,从而获得最佳的插入性能。这种设计保证了ID的唯一性:时间戳是递增的,不同时刻产生的ID肯定不同;需要注意的是,在当前的技术面试环境中,仅仅答出雪花算法可能已经不够突出,我们需要在理解雪花算法的基础上,找到更多的亮点。总结来说,雪花算法可以看作是一种设计思想,借助时间戳和分段机制,我们可以自由切割ID的不同比特位,赋予其不同的含义,灵活设计符合自己业务场景的ID生成算法。
2025-12-02 16:19:02
1139
原创 MySQL 慢查询优化实战指南
MySQL 慢查询优化并非一蹴而就,需建立 “总纲指引 — 手段落地 — 效果验证” 的闭环思维。核心要点可总结为:优化前明确目标与瓶颈,不盲目操作;始终遵循 “小结果集驱动大结果集”“只取所需列”“索引适配查询与排序” 三大核心原则;善用explain执行计划,精准定位索引、排序、Join 等环节的问题;高并发场景下,优先保证查询稳定性,避免复杂 Join 与大量排序操作;优化后需通过压测验证效果,确保在高并发场景下仍能满足性能目标。。
2025-11-26 09:56:31
1042
原创 MySQL数据库索引详解
前缀索引可能带来多次回表,而我们接触到“回表”这个概念是在讲覆盖索引的时候。那么我们看这样一个查询:select id, email from table where email = 'wangwei3@cainiao.com',分别使用index_email_1(email) 和 idx_email_3(email(8)) 会有什么差别?对于 index_email_1(email),由于可以使用覆盖索引,所以不需要回表就可以返回结果了;
2025-11-14 11:33:15
654
原创 微服务网关首选:Spring Cloud Gateway 核心功能与实战指南
在微服务架构日益普及的当下,服务间的通信管理变得愈发关键。Spring Cloud Gateway 作为 Spring Cloud 生态中的关键组件,以其独特的设计和强大的功能,为微服务架构提供了高效的 API 网关解决方案。API 网关是一个搭建在客户端和微服务之间的服务,我们可以在 API 网关中处理一些非业务功能的逻辑,例如权限验证、监控、缓存、请求路由等。
2025-10-31 15:43:54
1002
原创 Nacos注册中心:从服务注册到负载均衡
微服务规模扩大后,服务动态上下线难感知、流量集中易过载成痛点,注册中心成关键枢纽。Alibaba 开源的 Nacos,凭 “服务发现 + 配置管理” 一体化能力、高可用设计快速出圈。本文将拆解 Nacos 服务注册的底层逻辑,剖析它与负载均衡组件的协同路径,看其如何打通 “注册 - 分发” 链路,支撑微服务稳定运行。
2025-10-28 12:18:50
1296
原创 Nacos 配置中心:动态配置管理
在前面我们了解了Nacos的基本概念和部署,本篇将介绍一下 Nacos 配置中心的动态配置管理,我们首先需要掌握它的三个核心概念:Data ID、Group 和 Namespace。它们就像是一把把钥匙,共同解锁 Nacos 强大的配置管理能力,让我们能更高效、灵活地管理项目配置。接下来我们就一起来揭开它的神秘面纱。
2025-10-27 16:37:33
1240
原创 Nacos 环境搭建:从单机开发到集群生产部署
通过本文的详细讲解,相信你已经全面掌握了 Nacos 从单机到集群的部署方法,无论是在本地开发环境中快速搭建 Nacos 进行功能验证,还是在生产环境中构建高可用的 Nacos 集群,都能轻松应对。下面让我们来总结一下 Nacos 部署的最佳实践要点。在本地开发与测试阶段,单机模式是我们的首选。它部署简单快捷,能够快速满足我们在开发过程中对服务发现和配置管理的需求。在单机部署时,优先推荐使用 Docker 方式启动 Nacos。
2025-10-26 19:38:05
1004
原创 Nacos基础概念:核心功能解析
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的动态服务发现、配置管理和服务治理平台,旨在让微服务架构的部署与运维更简单。它整合了传统注册中心(如 Eureka)和配置中心(如 Spring Cloud Config)的功能,支持服务注册发现、动态配置、流量管理、多环境隔离等核心能力。。
2025-10-24 09:42:51
969
原创 Redis热点key大Value解决方案
问题分析:相比热点 key 大概念,大 Value 的概念比好好理解,由于 Redis 是单线程运行的,如果一次操作的 value 很大会对整个 redis 的响应时间造成负面影响,因为 Redis 是 KeyValue 结构数据库,大 value 就是单个 value 占用内存较大,对Redis 集群造成最直接的影响就是数据倾斜。
2025-10-13 10:03:53
944
原创 K8S原理刨析
Kubernetes 作为云原生时代的核心技术,以其强大的容器编排和管理能力,为我们构建和运维现代化应用提供了高效、可靠的解决方案。通过深入了解 Kubernetes 的原理,包括其架构、工作流程以及网络原理,我们能够更好地发挥它的优势,提升应用的部署效率、稳定性和可扩展性。无论是在小型开发团队,还是大型企业的复杂生产环境中,Kubernetes 都展现出了巨大的价值。
2025-10-11 16:48:18
1217
原创 StatefulSet:有状态应用的“定海神针”
StatefulSet 作为 Kubernetes 管理有状态应用的关键工具,凭借其稳定的网络标识、有序的部署和扩展、持久的存储保障等特性,为数据库集群、分布式缓存、消息队列集群等有状态应用在容器化环境中的稳定运行提供了坚实支撑。它与 Deployment 在功能和适用场景上的差异,也让开发者能够根据应用的特点选择最合适的管理方式。
2025-10-04 17:00:29
683
原创 PersistentVolume + NFS:网络共享存储
通过前面的文章(),了解到Kubernetes 里的持久化存储对象 PersistentVolume、 PersistentVolumeClaim、StorageClass,把它们联合起来就可以为 Pod 挂载一块“虚拟盘”, 让 Pod 在其中任意读写数据。使用HostPath方式,存储卷只能在本机使用,而 Kubernetes 里的 Pod 经常会在集群里“漂移”,所以这种方式不是特别实用。
2025-09-30 15:04:01
1154
原创 PersistentVolume:解决数据持久化问题
PersistentVolume(PV)是 Kubernetes 集群中用于提供持久化存储的一种资源对象。简单来说,它 就像是一个预先配置好的存储 “仓库”,这个仓库独立于任何一个 Pod 而存在。不管 Pod 在集群中的 哪个节点上运行,也不管它因为什么原因被销毁重建,只要它所使用的 PV 还在,数据就不会丢失。PV 的重要性不言而喻,它是 Kubernetes 存储体系的核心组成部分。在 Kubernetes 的世界里,容器和 Pod 的生命周期往往是短暂的,但应用产生的数据却需要长期保存。
2025-09-29 10:09:52
810
原创 Ingress:轻松拿捏集群流量管理
在 Kubernetes 中,Ingress 资源是通过 YAML 文件来定义的,通过这些配置,我们可以清晰地告诉 Kubernetes 如何处理外部流量的路由。metadata:spec:rules:http:paths:backend:service:port:number: 80metadata:元数据部分,name 定义了 Ingress 的名称为 example - ingress,annotations 则是一些注解,这里的- target: / 表示将请求路径重写为根路径。
2025-09-27 20:10:24
1056
原创 Service :微服务通信、负载、故障难题的解决方案
在前面我们了解了 Deployment 和 DaemonSet 这两个 API 对象,它们都是在线业务, 只是以不同的策略部署应用,Deployment 创建任意多个实例,Daemon 为每个节点创建一个实例。这两个 API 对象可以部署多种形式的应用,而在云原生时代,微服务无疑是应用的主流形态。为了更好地支持微服务以及服务网格这样的应用架构,Kubernetes 又专门定义了一个新的对象:Service,它是集群内部的机制,用来解决的关键问题。
2025-09-24 17:40:46
1031
原创 Daemonset:忠实可靠的看门狗
在前面的文章中我给大家介绍了Kubernetes 里的一个新 API 对象 Deployment,它代表了在线业务, 能够管理多个 Pod 副本,让应用永远在线,还能够任意扩容缩容。虽然 Deployment 非常有用,但是,它并没有完全解决运维部署应用程序的所有难题。因为和 简单的离线业务比起来,在线业务的应用场景太多太复杂,Deployment 的功能特性只覆盖了 其中的一部分,无法满足其他场景的需求。
2025-09-22 10:15:58
1062
原创 Deployment容器编排的核心
在 K8s 这个庞大而强大的体系中,Deployment 又是管理无状态应用的核心组件。它赋予了我们对应用部署的强大掌控力,通过简单的配置,就能实现应用的自动化部署、无缝升级、灵活扩展以及便捷回滚。可以说,掌握了 Deployment,就相当于掌握了开启 K8s 强大功能之门的钥匙,能够充分利用 K8s 的优势,提升应用的运维效率和稳定性。接下来,就让我们一起深入探索 K8s Deployment 的奇妙世界。
2025-09-20 11:22:12
1347
原创 K8S配置管理:ConfigMap与Secret
在前面的两篇文章()中我们学习了Kubernetes 里的三种 API 对象:Pod、Job 和 CronJob,虽然没有比其他对象更高级,但使用它们也可以在集群里编排运行一些实际的业务了。不过想让业务更顺利地运行,有一个问题不容忽视,那就是应用的配置管理。配置管理是一个至关重要的环节。想象一下,你开发了一个超棒的微服务应用,它依赖于数据库连接地址、各种密钥以及一些个性化的配置参数。当你把这个应用容器化并部署到 K8S 集群中时,如果这些配置信息都硬编码在容器镜像里,那后续的维护和升级工作将会是一场噩梦。
2025-09-18 15:05:32
958
原创 k8s集群搭建
本文详细记录了使用Docker部署Kubernetes 1.28集群的过程。采用一主两从架构,三台2核4G服务器。主要包括:1)主机配置hosts解析、免密登录和NTP同步;2)系统优化:禁用swap、升级内核、开启路由转发和IPVS;3)安装kubelet 1.28.2、Docker 20.10.21及cri-dockerd插件;4)master节点初始化后加入worker节点;5)部署Calico 3.25网络插件;6)解决从节点kubectl访问问题。最终成功搭建了K8s集群,各节点状态显示为Read
2025-09-17 16:43:52
462
原创 K8S中的神秘任务Job与CronJob
Job 和 CronJob 作为 Kubernetes 中处理一次性任务和定时任务的利器,为我们的容器编排工作带来了极大的便利。Job 专注于一次性任务的高效执行,能够灵活处理各种并行和重试策略;CronJob 则在定时任务领域大显身手,通过精确的时间调度和丰富的配置选项,满足了各种周期性任务的需求。在实际项目中,我们可以根据具体的业务场景,充分发挥 Job 和 CronJob 的优势,提高系统的自动化程度和稳定性。比如在大数据处理中,使用 Job 进行数据清洗和分析;
2025-09-16 16:05:51
1314
原创 K8S里的“豌豆荚”:Pod
Pod 这个词原意是“豌豆荚”,后来又延伸出“舱室”“太空舱”等含义,你可以看一下这张图片,形 象地来说 Pod 就是包含了很多组件、成员的一种结构。之前的容器技术让进程在一个“沙盒”环境里运行,具有良好的隔离性,对应用是一个非常好的封装。不过,当容器技术进入到现实的生产环境中时,这种隔离性就带来了一些麻烦。因为很少有应 用是完全独立运行的,经常需要几个进程互相协作才能完成任务,比如在我们搭建一个网站的时候,就需要Nginx,数据库,应用服务等容器一起工作。
2025-09-15 17:47:45
1039
原创 Flink Watermark原理与实战
Watermark(水位线)是 Flink 中用于处理事件时间(Event Time)的一种机制 ,它本质上是一种特殊的时间戳。简单来说,Watermark 是插入到数据流中的一个标记,用于标记事件时间的上界。在 Flink 的流处理中,Watermark 可以看作是一个时间戳,它表示所有小于该时间戳的事件都已经到达,之后不会再有该时间戳之前的事件到来。比如,我们有一个订单流,每个订单都有一个下单时间(事件时间)。
2025-07-15 17:37:13
928
原创 Flink窗口处理函数
Flink 窗口处理函数作为 Flink 实时数据处理框架中的核心组件,为我们在处理无界数据流时提供了强大而灵活的工具。通过对窗口的合理划分和各种窗口处理函数的巧妙运用,我们能够高效地实现数据聚合、统计分析等复杂的业务逻辑。从时间窗口到计数窗口,不同类型的窗口满足了多样化的业务场景需求;而 ReduceFunction、AggregateFunction、ProcessWindowFunction 等窗口处理函数以及它们的组合使用,更是赋予了我们在数据处理上的无限可能。
2025-07-14 16:48:27
1071
原创 Flink时间窗口详解
在使用 Flink 时间窗口时,合理选择事件时间、处理时间或摄入时间,能够满足不同业务场景下对时间语义的需求。通过实际的代码示例,我们也看到了如何在 Flink 中实现时间窗口操作,从数据源的定义、数据的转换,到窗口的分配和计算,每一步都紧密相连,共同完成对数据流的实时处理和分析。与其他流处理框架相比,Flink 在时间窗口处理方面展现出了强大的优势,无论是对事件时间的原生支持,还是丰富灵活的窗口操作,都使得它能够在复杂的业务场景中脱颖而出。
2025-07-10 16:57:07
1049
原创 Flink DataStream API详解(二)
Flink DataStream API 的多流转换操作,如 union、connect 和 split 等算子,为我们提供了强大的工具,使他们能够灵活地处理多个数据流之间的复杂关系。通过这些算子,我们可以将不同来源的数据进行合并,对不同类型的数据进行关联处理,以及根据数据特征进行分类拆分,从而满足各种复杂业务场景下的流处理需求。。
2025-07-09 10:20:23
969
原创 Flink DataStream API详解(一)
在大数据实时处理的领域中,Flink DataStream API 展现出了强大的功能和卓越的性能。通过本文的学习,我们深入了解了 Flink DataStream API 的编程基础,掌握了从不同数据源获取数据的方法,包括文件、Kafka 和 Socket 数据源。同时,我们详细剖析了常用的转换算子,如 map、flatMap、filter、keyBy 和 window 等,这些算子为我们处理和分析数据流提供了丰富的手段。。
2025-07-08 15:33:07
978
原创 深入Flink核心概念:解锁大数据流处理的奥秘
Flink 凭借其对数据流的独特抽象、灵活高效的任务处理机制、精妙的分布式架构以及在流处理方面的显著优势,已然成为大数据处理领域的佼佼者。无论是处理有界流还是无界流,Flink 都能提供高效、可靠的解决方案,满足不同场景下的数据处理需求。。
2025-07-02 17:24:05
845
原创 面试官爱问的CAS,一文带你吃透
CAS 作为 Java 并发编程中的关键技术,以其独特的无锁机制,在多线程环境下实现了高效的原子操作。它通过比较并交换的原子指令,避免了传统锁机制带来的线程阻塞和上下文切换开销,大大提升了并发性能。在原子类、无锁数据结构和乐观锁等场景中,CAS 都发挥着不可或缺的作用,为开发者提供了强大的工具来处理多线程并发问题。然而,CAS 并非完美无缺,它存在着 ABA 问题、循环开销以及只能保证单个变量原子性等缺点。
2025-07-01 09:37:08
1178
原创 面试官最爱问的AQS,一文带你吃透!
解题思路:介绍自定义同步器的步骤,包括继承 AQS 类、重写必要的抽象方法(如tryAcquire、tryRelease等),以及如何使用自定义同步器。答案:自定义一个基于 AQS 的同步器,首先需要继承AbstractQueuedSynchronizer类。然后,根据同步器的类型(独占模式或共享模式),重写相应的抽象方法。对于独占模式的同步器,通常需要重写tryAcquire和tryRelease方法。
2025-06-30 17:38:06
974
原创 从“菜鸟”到“大神”:带你吃透Java垃圾收集
Java 垃圾收集器家族就像一个拥有众多能工巧匠的团队,每个成员都有独特的技能,为 Java 程序的高效运行保驾护航。从简单高效的 Serial 收集器,到追求极致低延迟的 ZGC 收集器,它们各自在不同的领域发光发热。在选择垃圾收集器时,就像为你的应用程序挑选合适的伙伴,需要充分了解应用的需求和运行环境,权衡吞吐量、响应时间和 CPU 资源等因素,做出明智的决策。同时,不要忘记通过实际测试和监控来验证和优化你的选择,让垃圾收集器与应用程序完美协作,创造出高效、稳定的 Java 应用世界。
2025-06-28 17:33:25
1294
原创 从HashMap到ConcurrentHashMap,面试官究竟在考什么?
HashMap 和 ConcurrentHashMap 就像是 Java 集合家族中的两位得力干将,各自在不同的领域发光发热。HashMap 以其在单线程环境下的简单高效,成为日常开发中处理键值对数据的首选工具;而 ConcurrentHashMap 则凭借出色的线程安全机制和高并发性能,在多线程的复杂场景中独领风骚。希望通过本文的剖析,能帮助大家在面试中对这两个集合类的问题应对自如。同时,集合框架博大精深,HashMap 和 ConcurrentHashMap 只是其中的冰山一角。
2025-06-27 10:07:08
1016
原创 为什么索引偏爱B+树?
B + 树凭借其独特的结构和诸多优势,成为数据库索引的理想选择。它在减少磁盘 I/O 次数、提高查询效率和稳定性,以及支持范围查询和排序等方面表现出色,为数据库系统的高效运行提供了有力保障。通过本文的探讨,相信大家对为什么索引要使用 B + 树这种数据结构有了更深入的理解。当然,数据库索引知识博大精深,B + 树只是其中的一部分。如果你对数据库索引感兴趣,不妨进一步深入学习,探索更多关于索引优化、不同数据库索引实现差异等方面的知识,这将有助于你在数据库开发和管理中更加得心应手。。
2025-06-27 09:11:38
976
原创 吃透volatile:Java并发编程的关键钥匙
在 Java 并发编程的领域中,volatile 关键字扮演着举足轻重的角色,是我们理解和处理多线程问题的关键一环。它就像是一把神奇的钥匙,能够帮助我们解决多线程环境下数据可见性和有序性的难题。先来讲讲内存可见性问题。假设我们有一个场景,你和你的小伙伴一起在玩一个游戏,游戏中有一个公共的分数板,记录着你们的得分。你在自己的小空间里努力游戏,每获得一分,就会在自己的小本子上记录下来,然后想着过一会儿再更新到公共的分数板上。而你的小伙伴呢,他在自己的地方也在查看这个分数板,想要根据分数来决定下一步的策略。
2025-06-26 10:40:51
761
原创 深入解析synchronized实现原理
为了解决线程安全问题,Java 提供了synchronized关键字,它就像是集市中的秩序维护者,为多线程环境带来了规则和秩序。synchronized关键字可以用来修饰方法或者代码块。当它修饰一个方法时,这个方法就成为了同步方法,同一时刻只能有一个线程能够进入该方法执行。当它修饰一个代码块时,这个代码块就被称为同步代码块,线程需要先获取到指定对象的锁,才能进入代码块执行。。
2025-06-26 10:26:19
1116
原创 从面试题出发,如何设计消息队列
设计一个消息队列是一项充满挑战但又极具价值的任务。从明确设计目标和需求,到进行技术选型,再到深入设计核心功能、实现高可用和扩展性以及优化性能,每一个环节都需要我们精心思考和设计。同时,在设计过程中,我们还需要解决消息丢失、重复消费、顺序性等常见问题,确保消息队列的可靠性和稳定性。对于开发人员来说,深入理解消息队列的设计原理和实现方法,不仅能够提升我们的技术能力,还能让我们在面对复杂的分布式系统架构时,更加从容地应对各种挑战。
2025-06-24 09:03:07
835
原创 揭秘RocketMQ消息零丢失秘籍,让数据稳稳“着陆”
在分布式系统中,消息的可靠性至关重要,它直接关系到业务的稳定性和数据的一致性。RocketMQ 作为一款高性能、高可靠的分布式消息中间件,为我们提供了多种保障消息零丢失的方案。从生产者端的事务消息机制和同步消息重试机制,到 Broker 端的同步刷盘和主从同步,再到消费者端的手动提交 offset,这些方案从消息的发送、存储到消费,全方位地确保了消息的可靠传递。在实际应用中,我们需要根据业务场景的特点和需求,灵活选择和配置这些方案,在性能和可靠性之间找到最佳的平衡点。
2025-06-23 15:37:20
548
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅