<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Aaron_Tang_的博客]]></title><description><![CDATA[努力的菜鸟]]></description><link>https://blog.youkuaiyun.com/Aaron_Tang_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Aaron_Tang_]]></copyright><item><title><![CDATA[测试策略模式]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/145794263</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/145794263</guid><author>Aaron_Tang_</author><pubDate>Sat, 22 Feb 2025 14:04:35 +0800</pubDate><description><![CDATA[测试策略模式。]]></description><category></category></item><item><title><![CDATA[RocketMQ测试文章]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/122359780</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/122359780</guid><author>Aaron_Tang_</author><pubDate>Fri, 07 Jan 2022 10:51:29 +0800</pubDate><description><![CDATA[RocketMQ测试内容。。。。。。。。
]]></description><category></category></item><item><title><![CDATA[JVM-结合MAT工具来分析OOM问题]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/116049843</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/116049843</guid><author>Aaron_Tang_</author><pubDate>Fri, 23 Apr 2021 12:08:02 +0800</pubDate><description><![CDATA[简单来演示一下OOM的分析和实战。
直接上代码：
public class Demo4 {

    public static void main(String[] args) {
        List&lt;Dandan&gt; list = new ArrayList&lt;&gt;();
        while (true){
            list.add(new Dandan());
        }
    }
}

class Dandan{

}


JVM参数：

-]]></description><category></category></item><item><title><![CDATA[JVM-对象什么时候进入老年代（实战篇）]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115864427</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115864427</guid><author>Aaron_Tang_</author><pubDate>Mon, 19 Apr 2021 14:41:24 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。公众号：大头菜技术(bigheadit)。原创不易，但欢迎转载。

上一篇文章：JVM-动态年龄判断介绍了对象进入老年代的四种方式

大对象
动态年龄判断
minor gc后，survivor区空间不能容纳全部存活对象
存活对象达到年龄阈值。比如15

接下来，我们将用代码方式来验证这四种方式。
知识回顾
在实战开始之前，我们先复习一下知识点：
0.134: [GC (Allocation Failure) 0.134: [ParNew: 7444K-&gt;.]]></description><category></category></item><item><title><![CDATA[JVM-动态年龄判断你真的理解了吗]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115602893</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115602893</guid><author>Aaron_Tang_</author><pubDate>Sun, 11 Apr 2021 17:34:44 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。公众号：大头菜技术(bigheadit)。原创不易，但欢迎转载。

看文章前，我们先复习一下。

什么对象才能直接进入老年代？

你可能很快就说出来，毕竟八股文不是白背的。

大对象直接进入老年代。
动态年龄判断
年龄大于阈值，进入老年代
Minor GC后，存活的对象空间大于survivor空间，直接进入老年代。

好了嘛，应该没了吧。
这次，我们把目光聚焦到：动态年龄判断。
下面这图片，摘自JVM书的一段话：

什么时候对象能进入老年代空间时？
其中一个触.]]></description><category></category></item><item><title><![CDATA[20210404-20210409技术周报]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115586414</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115586414</guid><author>Aaron_Tang_</author><pubDate>Sat, 10 Apr 2021 23:21:54 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。公众号：大头菜技术(bigheadit)。原创不易，但欢迎转载。

最近这个星期。主要两件事儿：

工作遇到的bug和总结
重新梳理JVM的基础知识

工作遇到的bug和总结
最近这两周，因为做了4个需求，都是关于黑白名单的。
于是我就打算，把这些黑白名单的需求，比如有关于C端用户的白名单，C端用户的黑名单，B端用户的白名单，B端用户的黑名单，我打算直接抽象一点，把4个需求抽象整合为一个需求。每个黑白名单需求：都有增加黑白名单，删除黑白名单，查询黑白名单三种不.]]></description><category></category></item><item><title><![CDATA[不懂缓存一致性，易把代码写成Bug]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115475116</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115475116</guid><author>Aaron_Tang_</author><pubDate>Wed, 07 Apr 2021 00:37:55 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。公众号：大头菜技术(bigheadit)。原创不易，但欢迎转载。

本文主要分享一下关于缓存一致性问题和其解决方案。下面是本文的主要目录，大家可以挑着看。
目录

什么是缓存一致性
为什么要保证缓存一致性
如何保证缓存一致性
如何做到强一致性
总结

01 什么是缓存一致性
就是缓存和数据库的数据不一致导致的问题，缓存一致性分为强一致性和最终一致性。


强一致性，这个比较损耗性能，比较复杂，加入之后，可能会比没加缓存更慢。


最终一致性，是允许缓存数据和数.]]></description><category></category></item><item><title><![CDATA[一个广东人和北京的故事]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115446781</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115446781</guid><author>Aaron_Tang_</author><pubDate>Mon, 05 Apr 2021 19:37:59 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。公众号：大头菜技术(bigheadit)。原创不易，但欢迎转载。

今天呢，闲来无事，其实就是没学习，那就写点别的吧！！
说说个人感受吧！不代表北京的实际情况啊哈，但都是我的所见所得，真实感受。
我对北京的了解像碎片一样的。
没来北京之前，我对北京的印象是：
天安门

长城

鸟巢

水立方

这些印象都是来自小学课本，电视机。以及爸妈那一辈口中的：不到长城非好汉。我对北京的印象，是模糊的吧。我爸妈也都没来过北京，我北漂前，也没来过。北京给我了无限的幻想吧！我.]]></description><category></category></item><item><title><![CDATA[20210329-20210402技术周报]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115418996</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115418996</guid><author>Aaron_Tang_</author><pubDate>Sat, 03 Apr 2021 18:26:29 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。公众号：大头菜技术(bigheadit)。原创不易，但欢迎转载。

这周总得来说，大头菜比较忙，但也不忘学习。这周主要学习了领域驱动设计DDD。为什么学这个东西，因为最近大头菜和一位大佬L讨论需求设计时，大佬L指出我做接口设计时，太过于从代码出发，做的东西可以符合一次需求，但是没沉淀，无法解决更多同质问题，

虽然我做的项目是分布式项目，但是我的思考方式却停留在单机架构：整个系统围绕数据库驱动设计和开发。这其实很显然就是思维上的停滞和懒惰。表面上你做的是分布..]]></description><category></category></item><item><title><![CDATA[生产事故——磁盘使用率爆仓]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115357473</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115357473</guid><author>Aaron_Tang_</author><pubDate>Wed, 31 Mar 2021 18:41:42 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。公众号：大头菜技术(bigheadit)。原创不易，但欢迎转载。

今天不知道为啥醒得特别早，可能就是缘分吧。醒来一看微信，就发现线上的服务器的磁盘使用率超过70%，真是早起的鸟儿有bug修。。。。。

当时我就立马跑去看看监控，看看cpu,内存,io这些是否都正常。看了一圈，发现除了磁盘异常外，其他一切都正常。

我当时是7点左右看到的消息，看到后，磁盘的使用率达到72%，超过了设定阈值70%。就如上图的红色箭头所示。
当时我是直接进入服务器，用df -h..]]></description><category></category></item><item><title><![CDATA[《分享》关于JVM的学习资料推荐]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115291536</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115291536</guid><author>Aaron_Tang_</author><pubDate>Mon, 29 Mar 2021 01:00:33 +0800</pubDate><description><![CDATA[哈喽哈喽大家猴，我是把代码写成bug的大头菜。原创：大头菜技术（微信公众号ID：bigheadit），欢迎分享，转载请保留出处。

前言

大头菜近日推出了一些关于JVM的相关文章,主要包括JVM的基础知识和JVM的调优实战案例。

《技术周报》
《JVM38问+答案》
以上的文章，都是一种知识的提炼，适合查漏补缺，不适合系统化的学习。关于系统化学习JVM的基础知识。大头菜在这里提供一些学习资料：


《深入理解Java虚拟机》——周志明


《深入拆解Java虚拟机》——极客时间


《Java生产环..]]></description><category></category></item><item><title><![CDATA[20210322-20210326技术周报]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115273659</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/115273659</guid><author>Aaron_Tang_</author><pubDate>Sat, 27 Mar 2021 23:06:14 +0800</pubDate><description><![CDATA[前言

这周主要的技术内容是分享JVM的基础知识和一些生产事故案例

JVM
先问一个问题：在公司，你负责的项目JVM的参数数多少？比如堆的大小MaxHeapSize，新生代的大小，晋升年龄，垃圾收集器是什么？
如果你不清楚，什么看都没看到过，甚至怎么查看JVM的参数都不清楚，那你就看对文章了。
首先，我们知道JVM的参数，无非就是读写。接下来，我们先看查看JVM的命令有哪些？
怎么查看JVM参数

命令一：java -XshowSettings:vm -version

aaron@aarondeMBP ]]></description><category></category></item><item><title><![CDATA[用泊松分布来解释为什么HashMap的链表变树的阈值是8]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114986653</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114986653</guid><author>Aaron_Tang_</author><pubDate>Thu, 18 Mar 2021 17:54:44 +0800</pubDate><description><![CDATA[前言

有网友指出《面试Java——集合之HashMap和ConcurrentHashMap》一文，关于为什么是8，还可以加一句符合泊松分布。于是我了解一下泊松分布后，确实和网友说的一致，同时非常感谢网友指出文章存在的瑕疵。接下来的内容，大头菜将试图用泊松分布来论证HashMap的链表变树的阈值为什么是8。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2tJX8zG8-1616061099950)(https://imgkr2.cn-bj.ufileos.com/403a]]></description><category></category></item><item><title><![CDATA[双亲委派模型]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114965934</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114965934</guid><author>Aaron_Tang_</author><pubDate>Thu, 18 Mar 2021 10:17:02 +0800</pubDate><description><![CDATA[前言

今天大头菜打算讲双亲委派模型，重点关注：如何破坏双亲委派模型，你看完后，一定会获益匪浅哈哈哈。
广告时间：先点赞，先收藏，转粉不转路。

问题

大家思考一下这些问题：


为什么不能定义java.lang.Object的Java文件？
在多线程的情况下，类的加载为什么不会出现重复加载的情况？
以下代码，JVM是怎么初始化注册MySQL的驱动Driver？

        Connection conn= DriverManager.getConnection("jdbc:mysql://loca]]></description><category></category></item><item><title><![CDATA[面试——Java字节面经(已获Offer)]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114882915</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114882915</guid><author>Aaron_Tang_</author><pubDate>Tue, 16 Mar 2021 15:13:05 +0800</pubDate><description><![CDATA[前言

要么字节跳动，要么心脏跳动，你选哪个？哈哈哈，为大家准备的字节三面面经，后面有总结面试经验，以及相关面试技巧，请自行阅读。怕你忘了找不到，推荐先收藏，再阅读。

一面

在校项目后端是怎么搭建的


答：tomcat，springboot, mybatis
备注：
这里没答好，应该扩展一下，说当时大三水平有限没有做高可用，如果现在做会用VIP+双ng+双服务做简单高可用


“小程序不支持缓存二进制，因此将小图片BASE64编码后缓存到本地”，还有没有其他优化方案


答：优化方案是CDN，讲了CD]]></description><category></category></item><item><title><![CDATA[Java——美团面经(三面)]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114763368</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114763368</guid><author>Aaron_Tang_</author><pubDate>Sat, 13 Mar 2021 21:18:08 +0800</pubDate><description><![CDATA[前言

美团三面面经，一面没记录，凑合着看吧哈哈哈哈

二面


为什么要离职？

项目太完善了，我想去一些没那么完善的项目组，体验项目逐渐完善的过程…



自己对项目的了解情况，给自己打个分

满分100，我给自己60。 “说下原因”，，讲完之后， “也就是你自己还没理解透你的系统，为什么不深入学习，要离职” ？？？？？



说一下项目
我想说的是项目意义，项目模块，业务线过程，数据流转。结果他问我输入是什么输出是什么，输入是什么字段，输出内容有什么字段~~ （这个讲项目的思路不错，可以学习）


你]]></description><category></category></item><item><title><![CDATA[面试Java——集合之HashMap和ConcurrentHashMap]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114703724</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114703724</guid><author>Aaron_Tang_</author><pubDate>Fri, 12 Mar 2021 19:35:24 +0800</pubDate><description><![CDATA[前言

友善提醒，本文篇幅涉及知识点较多，消耗脑力比较大。如果你怕以后找不到此文，建议先收藏
如果你不用复习，可直接跳到——面试开始
以下代码都出自JDK8

面试前，我们复习一下

HashMap的put方法

public V put(K key, V value) {
        //这里已经对key进行一次哈希了
        return putVal(hash(key), key, value, false, true);
    }
    //扰动函数，主要功能：降低哈希冲突(详细内容]]></description><category></category></item><item><title><![CDATA[面试MySQL——索引]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114676877</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114676877</guid><author>Aaron_Tang_</author><pubDate>Thu, 11 Mar 2021 18:38:18 +0800</pubDate><description><![CDATA[前言

没有前言，废话不多说，直接开始面试

面试开始

面试官：什么是索引


索引就是一种数据结构，提高检索效率的数据结构。比如B+树，哈希


面试官：说说你对B+树的了解


B+树是一颗平衡多叉树，相对B树来说，B+树的数据只存在叶子节点。叶子节点组成链表，因此可支持范围查询。B+树的查询效率为：O(logH),H为B+数的高度。


面试官：为什么InnoDB使用B+树作为索引结构，而不用B树？


首先B+树和B树比较，B树因为非叶子节点也存储数据，因此非叶子能存储的内存页就少了。在相同数据量]]></description><category></category></item><item><title><![CDATA[面试Redis——缓存并发 缓存雪崩 缓存穿透]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114670135</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114670135</guid><author>Aaron_Tang_</author><pubDate>Thu, 11 Mar 2021 16:04:31 +0800</pubDate><description><![CDATA[本文主要叙述缓存并发，缓存雪崩，缓存穿透的问题以及解决方案。

缓存并发
什么是缓存并发
场景：在你每天刷抖音，看微信短视频时，都会有一个评论列表，在评论列表中，查询评论的时候，会先去查询Redis缓存，如果有，就立即返回；如果没，就去数据库查询数据，接着更新缓存，返回数据。这时候，如果访问量非常多，有多个C端同时查询评论，Redis缓存又恰好没缓存数据，此时，多个C端就会同时去查询数据库。上述这种现象，就被称为缓存并发。



话说回来，缓存并发会带来什么危害


让数据库的压力剧增，因为数据库抗不了高.]]></description><category></category></item><item><title><![CDATA[Java面试总览]]></title><link>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114670123</link><guid>https://blog.youkuaiyun.com/Aaron_Tang_/article/details/114670123</guid><author>Aaron_Tang_</author><pubDate>Thu, 11 Mar 2021 15:58:57 +0800</pubDate><description><![CDATA[在金三银四招聘节，简单说说面试的流程。我也做了一个计划，关于面试专题，应该写哪些知识点，以更好帮助各位同学去复习。

首先我们按照面试的主流程走一下：
面试的主要流程：

自我介绍
项目介绍
技术环节
提问环节

最重要的2个环节，肯定是项目介绍和技术环节，怎么说？接着看
项目介绍
项目介绍：考察对业务的理解+表达能力如何
在介绍项目时，考察了你对业务的理解，需求是在什么背景下产生的，需求是什么，需求是为了解决什么问题，如何实现需求。我们把一个需求当作一个点，一个项目当作一个线，一个系统当做一个面。现在我.]]></description><category></category></item></channel></rss>