<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[modouwu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/modouwu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; modouwu]]></copyright><item><title><![CDATA[jdk8以后版本新特性]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/164744252</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/164744252</guid><author>modouwu</author><pubDate>Wed, 09 Sep 2026 15:01:28 +0800</pubDate><description><![CDATA[适用读者：正在使用 JDK 8、计划向高版本升级的 Java 开发人员。（本目录下的 Maven 工程，包含文中所有特性的可运行示例代码）。整理日期：2026-09-07。]]></description><category></category></item><item><title><![CDATA[java8 版本+ 新特性]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/163948401</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/163948401</guid><author>modouwu</author><pubDate>Fri, 21 Aug 2026 16:07:12 +0800</pubDate><description><![CDATA[/ 紧凑构造器：在标准构造器执行前介入throw new IllegalArgumentException("年龄不能为负数");throw new IllegalArgumentException("姓名不能为空");// 可以规范化参数// 自定义单参数构造器：必须显式调用主构造器,并且所有属性必须初始化。]]></description><category></category></item><item><title><![CDATA[react学习]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/146562003</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/146562003</guid><author>modouwu</author><pubDate>Thu, 27 Mar 2025 17:20:28 +0800</pubDate><description><![CDATA[React 正是通过首字母的大小写判断渲染的是一个DOM类型的标签还是一个React组件类型的标。rest参数是一个数组，数组中的元素是多余的参数。React 认为，一个组件应该是具备UI描述和UI数据的完整体，不应该将它们分开处理，于是发明了JSX，作为UI描述和UI数据之间的桥梁。扩展运算符是三个点（…），它将一个数组转为用逗号分隔的参数序列，类似于rest参数的逆运算。在JSX语法中，使用的标签类型有两种：DOM类型的标签（div、JSX的基本语法和XML语法相同，都是使用成对的标签构成一个树。]]></description><category></category></item><item><title><![CDATA[知识点查漏补缺]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/144698432</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/144698432</guid><author>modouwu</author><pubDate>Wed, 25 Dec 2024 09:46:33 +0800</pubDate><description><![CDATA[当线程池中的任务执行异常时，该任务的执行线程会正常结束任务的运行，并且该线程会回到线程池中准备承接其他任务的执行。这与任务正常执行完成的情况是一样的。：如果任务抛出异常，线程池中的执行线程也会停止当前任务的执行，不会打印异常，会把异常封装给Future，在future.get()结果时才打印异常。如果线程池中的任务在执行过程中抛出异常，线程池本身并不会捕获任务中的异常，而是将异常抛给任务的调用者。在 Java 中，线程池中的任务抛出异常时，线程池的行为取决于任务执行时发生异常的位置以及线程池的配置。]]></description><category></category></item><item><title><![CDATA[多租户架构解析]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/144686116</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/144686116</guid><author>modouwu</author><pubDate>Tue, 24 Dec 2024 15:56:07 +0800</pubDate><description><![CDATA[设计和实现一个多租户架构需要考虑许多关键因素。动态数据源：通过等机制，根据当前请求的租户ID动态切换数据源。连接池：为每个租户配置独立的数据库连接池，提升性能。租户信息获取：通过请求参数、头信息、Session等方式获取租户ID，并在全局上下文中进行管理。性能优化：合理配置连接池、缓存与数据库查询，确保系统在大规模租户的情况下依然高效。特别是对于不同租户复用同一个数据库连接的情况，限制不同租户的连接资源限制尤为重要。]]></description><category></category></item><item><title><![CDATA[金字塔原理+结构化表达]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/142853915</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/142853915</guid><author>modouwu</author><pubDate>Mon, 14 Oct 2024 15:57:03 +0800</pubDate><description><![CDATA[通过结论先行、以上统下、归纳分组和逻辑递进的方式，将信息组织成金字塔结构。]]></description><category></category></item><item><title><![CDATA[从零开始学架构]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/142490204</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/142490204</guid><author>modouwu</author><pubDate>Mon, 30 Sep 2024 14:21:38 +0800</pubDate><description><![CDATA[例如，把一个发动机和一台 PC 放在一起不能称之为一个系统，把发动机、底盘、轮胎、车架组合起来才能成为一台汽车。一个学生信息管理系统，这个系统从逻辑的角度来拆分，可以分为“登录注册模块”“个人信息模块”、“个人成绩模块”；从物理的角度来拆分，可以拆分为Nginx、 Web服务器、 MySQL。框架关注的是“规范”，架构关注的是“结构”。框架的英文是Framework，架构的英文是Architecture。“基础结构”这个概念并没有明确说是从什么角度来分解的。]]></description><category></category></item><item><title><![CDATA[Elasticsearch技术解析与实战]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/141886117</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/141886117</guid><author>modouwu</author><pubDate>Mon, 23 Sep 2024 15:09:01 +0800</pubDate><description><![CDATA[启动发现当Elasticsearch节点启动时，它会尝试连接到配置中的种子节点列表中的每个节点。如果节点是首次启动或需要加入一个新的集群，它会通过种子节点列表来发现集群中的其他节点。Ping操作节点之间通过Ping操作来确认彼此的存在和状态。Elasticsearch会定期向集群中的其他节点发送Ping请求，以检测节点是否仍然在线。构建集群视图通过Ping操作，每个节点都能构建出集群的完整视图，包括集群中所有节点的信息。]]></description><category></category></item><item><title><![CDATA[大数据技术生态]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/140698074</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/140698074</guid><author>modouwu</author><pubDate>Mon, 29 Jul 2024 10:41:36 +0800</pubDate><description><![CDATA[功能分别是分布式文件存储、资源调度和计算。这一套相当于用Yarn调度资源，读取HDFS文件内容进行MR计算。这一套的问题是使用比较麻烦，要写java代码。所以相当于这一套标准流程的SQL化。Hive可以简单理解为，Hadoop之上添加了自己的SQL解析和优化器，写一段SQL，解析为Java代码，然后去执行MR，底层数据还是在HDFS上。它的问题是运行速度慢，原因是MR，它需要频繁写读文件。这时基于内存的。]]></description><category></category></item><item><title><![CDATA[kafka rabbitMq rocketMq]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/133889704</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/133889704</guid><author>modouwu</author><pubDate>Tue, 17 Oct 2023 18:13:31 +0800</pubDate><description><![CDATA[目前Kafka已经定位为一个分布式流式处理平台，它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。]]></description><category></category></item><item><title><![CDATA[分布式架构原理与实践+解构领域驱动设计]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/133633440</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/133633440</guid><author>modouwu</author><pubDate>Sat, 07 Oct 2023 11:09:18 +0800</pubDate><description><![CDATA[为了完成上面的订单业务流程，将分布式系统分为了四层。客户端：这是用户与系统之间的接口。了提升用户体验，会利用 HTTP 缓存手段将部分静态资源缓存下来，同时也可以将这部分静态资源缓存到 CDN 中，因为 CDN 服务器通常会让用户从比较近的网络节点获取静态数据。负载均衡器（以下称接入层）：负载均衡器可以通过用户 IP 将用户的请求路由到不同的服务器集群。另外，在负载均衡这一层，还可以进行流量控制和身份验证等操作。]]></description><category></category></item><item><title><![CDATA[内存分析工具使用以及案例]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/132635572</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/132635572</guid><author>modouwu</author><pubDate>Sat, 02 Sep 2023 16:01:02 +0800</pubDate><description><![CDATA[要找到问题根因，可以从如下方面入手找到OOM的线程堆栈以及现场。]]></description><category></category></item><item><title><![CDATA[redis设计与实现阅读]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/129278789</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/129278789</guid><author>modouwu</author><pubDate>Wed, 01 Mar 2023 12:23:20 +0800</pubDate><description><![CDATA[redis设计与实现]]></description><category></category></item><item><title><![CDATA[mysql调优]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/127193859</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/127193859</guid><author>modouwu</author><pubDate>Fri, 07 Oct 2022 17:33:59 +0800</pubDate><description><![CDATA[mysql进阶]]></description><category></category></item><item><title><![CDATA[nacos源码阅读]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/124545758</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/124545758</guid><author>modouwu</author><pubDate>Mon, 02 May 2022 23:57:31 +0800</pubDate><description><![CDATA[代码学习
代码用法
AtomicReference
参考
项目使用
保存白名单配置，并在合适的时候更新配置
public class AggrWhitelist {

    /**
     * 判断指定的dataId是否在聚合dataId白名单。
     */
    static public boolean isAggrDataId(String dataId) {
        if (null == dataId) {
            throw new IllegalArgumen]]></description><category></category></item><item><title><![CDATA[高性能Mysql]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/123608681</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/123608681</guid><author>modouwu</author><pubDate>Mon, 21 Mar 2022 10:16:30 +0800</pubDate><description><![CDATA[Mysql的结构
Mysql的逻辑架构

如图是Mysql各组件的架构图。
第一层是连接客户端。功能比如连接处理、授权认证、安全等。
第二层是服务器。它包含了Mysql的核心功能，包括查询解析、分析、优化、缓存以及所有的内置函数，所有跨存储引擎的功能都在这一层：存储过程、触发器、视图等。
第三层是存储引擎。存储引擎负责Mysql中数据的存储和提取。服务器通过API与存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异，使得这些差异对于上层的查询过程透明。
这些接口函数，执行诸如“开始一个事务”、“根据主键]]></description><category></category></item><item><title><![CDATA[java开发规约]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/123306911</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/123306911</guid><author>modouwu</author><pubDate>Sun, 06 Mar 2022 11:10:15 +0800</pubDate><description><![CDATA[编程规约
命名风格

【强制】类名使用 UpperCamelCase 风格，但以下情形例外：DO / BO / DTO / VO / AO /
PO / UID 等。
正例：ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion
反例：forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion
【强制】抽象类命名使用 Abstract 或 Base ]]></description><category></category></item><item><title><![CDATA[HashMap细节及Map实践]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/119939384</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/119939384</guid><author>modouwu</author><pubDate>Thu, 26 Aug 2021 20:28:13 +0800</pubDate><description><![CDATA[结构
从结构实现来说，HashMap是数组+链表+红黑树（JDK1.8增加了红黑树部分）实现的

下面简述一下hashmap的属性和重要方法put(k,v)和resize()：
属性

默认初始容量为16
默认负载因子为0.75
桶中链表节点转化为红黑树节点的桶元素个数阈值为8
桶中红黑树节点转化为链表节点的桶元素个数阈值为6
链表节点转化为红黑树节点的最小元素个数为64，即如果桶内元素已经达到转化红黑树阈值，但是表元素总数未达到阈值，则值进行扩容，不进行树形化


//默认初始容量为16，容量必须为2的幂]]></description><category></category></item><item><title><![CDATA[java开发规约]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/115942250</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/115942250</guid><author>modouwu</author><pubDate>Mon, 26 Apr 2021 15:43:41 +0800</pubDate><description><![CDATA[编码规约
命名规约

【强制】类名使用UpperCamelCase风格，以下情形例外：DO / BO / DTO / VO / AO / UID等。
正例：ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion
反例：forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion
【强制】常量命名应该全部大写，单词间用下划线隔开，力求语义表达完整清楚，不]]></description><category></category></item><item><title><![CDATA[Java ms总结]]></title><link>https://blog.youkuaiyun.com/modouwu/article/details/113138960</link><guid>https://blog.youkuaiyun.com/modouwu/article/details/113138960</guid><author>modouwu</author><pubDate>Fri, 05 Mar 2021 12:47:25 +0800</pubDate><description><![CDATA[小米服务器端
1.hashMap扩容为什么是2的幂次？
减小hash碰撞，方便扩容
2.G1收集器介绍一下
参考
1⃣️并行与并发
2⃣️分代收集
3⃣️可预测的停顿
G1把内存划分成很多小块, 每个小块会被标记为E/S/O中的一个，从而可以垃圾回收工作更彻底的并行化
它回收的大致过程是这样的:

在垃圾回收的最开始有一个短暂的时间段(Inital Mark)会停止应用(stop-the-world)
然后应用继续运行，同时G1开始Concurrent Mark
再次停止应用，来一个Final Mark (]]></description><category></category></item></channel></rss>