<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[kunpeng90的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/kunpeng90</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kunpeng90]]></copyright><item><title><![CDATA[OceanBase数据库SQL调优]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/154448578</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/154448578</guid><author>kunpeng90</author><pubDate>Wed, 05 Nov 2025 17:13:19 +0800</pubDate><description><![CDATA[OceanBase数据库SQL调优核心在于优化数据访问路径，重点关注执行计划中的操作符类型、估算行数和分区信息。关键优化手段包括：创建合适索引避免全表扫描、确保索引有效使用、更新统计信息纠正优化器误判、优化复杂JOIN和子查询。在分布式环境下需特别注意分区裁剪、数据倾斜和跨机事务问题。通过慢查询日志、执行计划分析和SQL审计视图等工具定位问题，采用索引优化、SQL重写和Outline绑定等方法提升性能，最终实现减少数据访问量的目标。]]></description><category></category></item><item><title><![CDATA[Java开发性能优化]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/154448357</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/154448357</guid><author>kunpeng90</author><pubDate>Wed, 05 Nov 2025 17:07:44 +0800</pubDate><description><![CDATA[本文系统总结了Java性能优化的常见问题及解决方案。针对CPU过高问题，建议使用jstack、Arthas等工具排查死循环、GC频繁或锁竞争；内存泄漏可通过jmap分析堆转储，优化缓存策略；响应慢问题需检查SQL性能、远程调用和日志打印；高并发场景要合理配置线程池和连接池。文章推荐使用JDK工具、Arthas和性能分析工具，强调性能优化应基于数据而非猜测，建立完善的监控体系是关键。]]></description><category></category></item><item><title><![CDATA[Dubbo原理标签解析]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/102806514</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/102806514</guid><author>kunpeng90</author><pubDate>Tue, 29 Oct 2019 19:11:31 +0800</pubDate><description><![CDATA[一、Dubbo 配置方式

Dubbo 支持多种配置方式：


	XML 配置：基于 Spring 的 Schema 和 XML 扩展机制实现
	
	
	属性配置：加载 classpath 根目录下的 dubbo.properties
	
	
	API 配置：通过硬编码方式配置（不推荐使用）
	
	
	注解配置：通过注解方式配置（Dubbo-2.5.7及以上版本支持，不推荐使用）
	
对于属性配...]]></description><category></category></item><item><title><![CDATA[Redis源码剖析（二）io多路复用函数及事件驱动流程]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/101718585</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/101718585</guid><author>kunpeng90</author><pubDate>Sun, 29 Sep 2019 21:35:14 +0800</pubDate><description><![CDATA[作为服务器监听客户端请求的方法，io多路复用起到了不可忽略的作用，利用io复用监听的方法叫Reactor模式，在前一篇也提到过，使用io复用是现在常用的提高并发性的方法，而且效果显著。

通常io多路复用连同事件回调是一起出现的，在将文件描述符(套接字)注册到io多路复用函数中时，同时也需要保存当这个文件描述符被激活时调用的函数(称作回调函数)，这样，使用者无需考虑何时事件被激活又何时调用相应处理...]]></description><category></category></item><item><title><![CDATA[IO 模型：同步异步]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/101717712</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/101717712</guid><author>kunpeng90</author><pubDate>Sun, 29 Sep 2019 21:29:14 +0800</pubDate><description><![CDATA[阻塞 IO, 非阻塞 IO, 同步 IO, 异步 IO 这些术语相信有不少朋友都也不同程度的困惑吧? 我原来也是, 什么同步非阻塞 IO, 异步非阻塞 IO 的, 搞的头都大了.。后来仔细读了一遍。

《UNIX 网络编程卷一 套接字联网 API(第三版)》的 6.2 章节, 终于把这些名词搞懂了。

下面我以《UNIX 网络编程卷一 套接字联网 API(第三版)》的 6.2 章节的内容为准, 整...]]></description><category></category></item><item><title><![CDATA[springboot教程]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/101653517</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/101653517</guid><author>kunpeng90</author><pubDate>Sun, 29 Sep 2019 18:34:36 +0800</pubDate><description><![CDATA[1.简介：

1.1 SpringBoot介绍

  Spring Boot使开发独立的，产品级别的基于Spring的应用变得非常简单，你只需"just run"。 我们为Spring平台及第三方库提供开箱即用的设置，这样你就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。

你可以使用Spring Boot创建Java应用，并使用java -jar启动它...]]></description><category></category></item><item><title><![CDATA[通信协议]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/99904919</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/99904919</guid><author>kunpeng90</author><pubDate>Tue, 10 Sep 2019 19:07:18 +0800</pubDate><description><![CDATA[一.通信协议

1.1 一个 http 请求，在整个网络中的请求过程 

当应用程序用 T C P 传送数据时，数据被送入协议栈中， 然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息;







当目的主机收到一个以太网数据帧时，数据就开始从协议栈中由底向上升，同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识，以确定接...]]></description><category></category></item><item><title><![CDATA[分布式缓存Redis]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/99710927</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/99710927</guid><author>kunpeng90</author><pubDate>Tue, 10 Sep 2019 19:06:37 +0800</pubDate><description><![CDATA[一.Redis的魅力

  缓存大致可以分为两类，一种是应用内缓存，比如Map(简单的数据结构)，以及EH Cache(Java第三方库)，另一种 

就是缓存组件，比如Memached，Redis；Redis（remote dictionary server）是一个基于KEY-VALUE的高性能的 

存储系统，通过提供多种键值数据类型来适应不同场景下的缓存与存储需求

 1.1存储结构...]]></description><category></category></item><item><title><![CDATA[序列化与反序列化]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100006514</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100006514</guid><author>kunpeng90</author><pubDate>Tue, 10 Sep 2019 19:05:55 +0800</pubDate><description><![CDATA[1. 了解序列化的意义 

2. 如何实现一个序列化操作 

3. 序列化的高阶认识 

4. 常见的序列化技术及应用 

5. Protobuf 实现原理分析 

6. 序列化框架的选型

1.了解序列化的意义 





Java 平台允许我们在内存中创建可复用的Java 对象，但一般情况下，只有当 JVM 处于运行时，这些对象才可能存在，即，这些对象的生命周期不会比 JVM 的生命周期更长...]]></description><category></category></item><item><title><![CDATA[JVM性能调优监控工具]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100189904</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100189904</guid><author>kunpeng90</author><pubDate>Mon, 02 Sep 2019 00:08:37 +0800</pubDate><description><![CDATA[JVM性能调优监控工具 

Jinfo 

查看正在运行的Java程序的扩展参数 

查看JVM的参数 





查看java系统属性 

等同于System.getProperties() 



Jstat 

jstat命令可以查看堆内存各部分的使用量，以及加载类的数量。命令格式： 

jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]

类加载统计 



Lo...]]></description><category></category></item><item><title><![CDATA[为什么说SPI打破双亲委派机制?]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100189580</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100189580</guid><author>kunpeng90</author><pubDate>Sun, 01 Sep 2019 23:25:59 +0800</pubDate><description><![CDATA[简单介绍ClassLoader的双亲委派机制:

java类通过Classloader加载，Classloader之间有继承关系，AppClassLoader继承ExtClassloader继承BootstrapClassloader。在类加载时，子加载器会调用父加载器来加载类，如果父加载器不能加载类，才会交给子加载器来加载；如果子加载器也加载失败，那么就报异常。

可以看出双亲委派机制是一种至下...]]></description><category></category></item><item><title><![CDATA[dubbo服务治理之降级和容错]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100149173</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100149173</guid><author>kunpeng90</author><pubDate>Fri, 30 Aug 2019 00:09:38 +0800</pubDate><description><![CDATA[一.dubbo 服务容错

1.1 Dubbo提供了多种容错方案，默认值为failover（重试）

　　1）、Failover Cluster（默认）

　　失败自动切换，当出现失败，重试其他服务器，通常用于读操作，但重试会带来更长延迟，可以通过属性retries来设置重试次数（不含第一次）

　　2）、Failfast Cluster

　　快速失败，只发起一次调用，失败立即报错，通常用于非幂...]]></description><category></category></item><item><title><![CDATA[ZooKeeper 应用场景]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100129257</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100129257</guid><author>kunpeng90</author><pubDate>Thu, 29 Aug 2019 00:38:06 +0800</pubDate><description><![CDATA[①作为配置中心；

②作为Dubbo 的注册中心也就是发布订阅中心。

作为配置中心

很多时候我们相同的程序可能部署在多台机器上提升性能，不同的程序也可能有相同的配置文件。如果我们每次修改配置文件，都要一个一个机器修改的话，那么必定非常麻烦。我们可以考虑把应用配置放到 ZooKeeper 上去,也就是保存在 Zookeeper 的某个目录节点中，我们对指定的节点设置一个 Watcher 监听，...]]></description><category></category></item><item><title><![CDATA[jvm内存管理]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100129176</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100129176</guid><author>kunpeng90</author><pubDate>Thu, 29 Aug 2019 00:34:40 +0800</pubDate><description><![CDATA[运行时数据区域

JDK 1.8 之前：





JDK 1.8 ：





线程私有的：

程序计数器
	虚拟机栈
	本地方法栈
线程共享的：

堆
	方法区
	直接内存 (非运行时数据区的一部分)
2.1 程序计数器

程序计数器是一块较小的内存空间，可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令，分支、循环、跳转...]]></description><category></category></item><item><title><![CDATA[zookeeper分布式协调服务]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100110779</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100110779</guid><author>kunpeng90</author><pubDate>Tue, 27 Aug 2019 23:58:21 +0800</pubDate><description><![CDATA[zookeeper 的设计猜想 

zookeeper 主要是解决分布式环境下的服务协调问题而产生的，如果我们要去实现一个 zookeeper 这样的中间件， 我们需要做什么？

1. 防止单点故障 

如果要防止 zookeeper 这个中间件的单点故障，那就势必要做集群。而且这个集群如果要满足高性能要求的话，还得是一个高性能高可用的集群。高性能意味着这个集群能够分担客户端的请求流量，高可用意...]]></description><category></category></item><item><title><![CDATA[Redis与Zookeeper实现分布式锁的区别]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100087058</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100087058</guid><author>kunpeng90</author><pubDate>Mon, 26 Aug 2019 22:16:53 +0800</pubDate><description><![CDATA[一般而言，大多数系统实现分布式锁服务都会优先使用Redis；但阅读Zookeeper时可知，Zookeeper的一个很重要应用方向就是分布式锁。那么两者实现分布式锁服务的区别是什么呢。

实现难度

Zookeeper实现分布式锁

从实现难度上来说，Zookeeper实现非常简单，实现分布式锁的基本逻辑：

客户端调用create()方法创建名为“locknode/guid-lock-”的节点，...]]></description><category></category></item><item><title><![CDATA[ZooKeeper分布式锁]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100086808</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100086808</guid><author>kunpeng90</author><pubDate>Mon, 26 Aug 2019 22:15:00 +0800</pubDate><description><![CDATA[方案一:

利用Zookeeper不能重复创建一个节点(临时节点)的特性来实现一个分布式锁



流程:

查看目标Node是否已经创建，已经创建，那么等待锁。
	如果未创建，创建一个瞬时Node，表示已经占有锁。
	如果创建失败，那么证明锁已经被其他线程占有了，那么同样等待锁。
	当释放锁，或者当前Session超时的时候，节点被删除，唤醒之前等待锁的线程去争抢锁。
代码实现:


packag...]]></description><category></category></item><item><title><![CDATA[Redis分布式锁]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100070290</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100070290</guid><author>kunpeng90</author><pubDate>Mon, 26 Aug 2019 03:30:38 +0800</pubDate><description><![CDATA[Redis分布式锁

   分布式锁一般有三种实现方式：1. 数据库乐观锁；2. 基于Redis的分布式锁；3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式，基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客，然而他们的实现却有着各种各样的问题，为了避免误人子弟，本篇博客将详细介绍如何正确地实现Redis分布式锁。

可靠性

首先，为了确保分布式...]]></description><category></category></item><item><title><![CDATA[redis 和 memcached 有啥区别？]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100068428</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100068428</guid><author>kunpeng90</author><pubDate>Sun, 25 Aug 2019 22:02:14 +0800</pubDate><description><![CDATA[1. redis 支持复杂的数据结构

redis 相比 memcached 来说，拥有更多的数据结构，能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作， redis 会是不错的选择。

2.redis 原生支持集群模式

在 redis3.x 版本中，便能支持 cluster 模式，而 memcached 没有原生的集群模式，需要依靠客户端来实现往集群中分片写入数据。

3.性能对...]]></description><category></category></item><item><title><![CDATA[redis相关面试题]]></title><link>https://blog.youkuaiyun.com/kunpeng90/article/details/100068095</link><guid>https://blog.youkuaiyun.com/kunpeng90/article/details/100068095</guid><author>kunpeng90</author><pubDate>Sun, 25 Aug 2019 21:37:07 +0800</pubDate><description><![CDATA[1.Redis有哪些数据结构？

字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。

Redis中高级用户，还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。

( 1.1 HyperLogLog 是用来做基数统计的算法,有误差在0.89%左右,计算基数所需的空间总是固定的、并且是很小的。不会储存输入元素本身，所以 HyperLo...]]></description><category></category></item></channel></rss>