<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[小生的博客]]></title><description><![CDATA[小生的博客]]></description><link>https://blog.youkuaiyun.com/xs925048899</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xs925048899]]></copyright><item><title><![CDATA[I/O多路复用]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/128954263</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/128954263</guid><author>xs925048899</author><pubDate>Thu, 09 Feb 2023 16:30:27 +0800</pubDate><description><![CDATA[一切的开始，都起源于这个 read 函数是操作系统提供的，而且是阻塞的，我们叫它阻塞 IO。为了破这个局，程序员在用户态通过多线程来防止主线程卡死。后来操作系统发现这个需求比较大，于是在操作系统层面提供了非阻塞的 read 函数，这样程序员就可以在一个线程内完成多个文件描述符的读取，这就是非阻塞 IO。但多个文件描述符的读取就需要遍历，当高并发场景越来越多时，用户态遍历的文件描述符也越来越多，相当于在 while 循环里进行了越来越多的系统调用。]]></description><category></category></item><item><title><![CDATA[JVM 线程本地分配缓存TLAB]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/128948441</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/128948441</guid><author>xs925048899</author><pubDate>Thu, 09 Feb 2023 10:28:25 +0800</pubDate><description><![CDATA[从内存模型而不是垃圾收集的角度，对 Eden 区域继续进行划分，JVM 为每个线程分配了一个私有缓存区域，它包含在 Eden 空间内多线程同时分配内存时，使用 TLAB 可以避免一系列的非线程安全问题，同时还能提升内存分配的吞吐量，因此我们可以将这种内存分配方式称为快速分配策略。]]></description><category></category></item><item><title><![CDATA[G1垃圾回收器]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/128921528</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/128921528</guid><author>xs925048899</author><pubDate>Wed, 08 Feb 2023 16:00:58 +0800</pubDate><description><![CDATA[在G1中，大对象的判断是超过一个Region大小的50%，按照每个Region大小为2MB来计算，只要对象超过了1MB，就会被放入到Humongous的Region中，如果一个对象太大，一个Region放不下，那么G1会寻找连续的H分区来存储，如果寻找不到连续的H区的话，就不得不启动 Full GC 了。识别被老年代对象指向的 Eden 中的对象，这些被指向的Eden中的对象被认为是存活的对象，找到老年代引用者对象后，更新老年代引用对象的引用地址，从eden更改为survivor的地址。]]></description><category></category></item><item><title><![CDATA[jvm三色标记法和读写屏障]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/128934949</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/128934949</guid><author>xs925048899</author><pubDate>Wed, 08 Feb 2023 14:41:21 +0800</pubDate><description><![CDATA[三色标记算法是并发收集阶段的重要算法，它是描述追踪式回收器的一种有用的方法，利用它可以推演回收器的正确性。
SATB，增量更新 g1 cms]]></description><category></category></item><item><title><![CDATA[记忆集（Remember Set）和卡表（Card Table）]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/128922406</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/128922406</guid><author>xs925048899</author><pubDate>Tue, 07 Feb 2023 17:33:59 +0800</pubDate><description><![CDATA[这是一种"双向"的卡表结构(卡表是"我指向谁",这种结构还记录了"谁指向我")比原来的卡表实现起来更加复杂，同时由于Region数量比传统收集器的分代数量明显要多得多，因此G1收集器要比其他的传统垃圾收集器有着更高的内存占用负担。比如在进行Minor GC的时候，我们便不用扫描整个老年代对象，而是在卡表中寻求脏卡，并将脏卡中的对象加入到Minor GC的GC Roots里(Minor GC时JVM将从脏卡中的对象查找，作为GC Roots)。因此，在更新引用的同时，我们又会设置引用所在的卡的标识位。
记忆集]]></description><category></category></item><item><title><![CDATA[强引用，软引用，弱引用，虚引用]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/128853670</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/128853670</guid><author>xs925048899</author><pubDate>Thu, 02 Feb 2023 17:19:32 +0800</pubDate><description><![CDATA[Java中4种引用的级别和强度由高到低依次为：强引用 -> 软引用 -> 弱引用 -> 虚引用引用类型被垃圾回收时间用途生存时间强引用从来不会对象的一般状态JVM停止运行时终止软引用当内存不足时对象缓存内存不足时终止弱引用正常垃圾回收时对象缓存垃圾回收后终止虚引用正常垃圾回收时跟踪对象的垃圾回收垃圾回收后终止。]]></description><category></category></item><item><title><![CDATA[字符串不可变]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/128836794</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/128836794</guid><author>xs925048899</author><pubDate>Wed, 01 Feb 2023 17:07:15 +0800</pubDate><description><![CDATA[字符串被广泛用于许多java类的参数，如网络连接、打开文件、字符串等都不是一成不变的，一个连接或文件将被改变，这可能导致严重的安全威胁。这时当初始化s2时发现常量池中已经存在了"abc"就会直接引用这个字符串，不需要重新创建字符串对象了。不可变意味着修改性能差，这也是为什么在频繁修改字符串的时候要使用StringBuilder和StringBuffer的原因。如果字符串是可变的，用一个引用更改字符串将导致其他引用的值错误。字符串常量池就是一个存储着各种字符串的一个常量，简单理解就是一些字符串对象的缓存池。]]></description><category></category></item><item><title><![CDATA[使用命令行调用dubbo服务]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/105565344</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/105565344</guid><author>xs925048899</author><pubDate>Thu, 16 Apr 2020 19:51:29 +0800</pubDate><description><![CDATA[今天排查线上问题需调用其他服务，公司项目本地没办法访问预发环境，最终在预发环境服务器通过命令调用其他服务方法。
未来有时间可以基于这些命令封装成一个dubbo服务的管理工具。
一.使用telnet命令连接dubbo服务
telnet ip 端口

二.查看已注册服务
连接好服务后使用ls命令可以查看已注册服务。

ls 注册服务
可查看服务中的方法

ls 显示服务列表。
ls -l 显示服务详细...]]></description><category></category></item><item><title><![CDATA[基于dubbo实现异步调用]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104834142</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104834142</guid><author>xs925048899</author><pubDate>Tue, 17 Mar 2020 17:34:54 +0800</pubDate><description><![CDATA[基于dubbo实现异步调用
增加consumer配置
这种方式很简单，只需要在服务引用时增加dubbo:method配置即可，如下所示，其中name为需要异步调用的方法名，async表示是否启用异步调用。
&lt;dubbo:reference id="asyncService" check="false" interface="com.alibaba.dubbo.demo.AsyncServic...]]></description><category></category></item><item><title><![CDATA[面试]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104751883</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104751883</guid><author>xs925048899</author><pubDate>Thu, 12 Mar 2020 16:53:24 +0800</pubDate><description><![CDATA[Nginx 有哪些优点？


跨平台、配置简单。


非阻塞、高并发连接
处理 2-3 万并发连接数，官方监测能支持 5 万并发。


内存消耗小
开启 10 个 Nginx 才占 150M 内存。


成本低廉，且开源。


稳定性高，宕机的概率非常小。


Nginx 有哪些负载均衡策略？
负载均衡，即是代理服务器将接收的请求均衡的分发到各服务器中。

轮询（默认）round_robin
每个...]]></description><category></category></item><item><title><![CDATA[rocketMQ定时和延时消息]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104820264</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104820264</guid><author>xs925048899</author><pubDate>Thu, 12 Mar 2020 15:36:31 +0800</pubDate><description><![CDATA[定时消息和延时消息适用于以下一些场景：
消息生产和消费有时间窗口要求：比如在电商交易中超时未支付关闭订单的场景，在订单创建时会发送一条延时消息。这条消息将会在 30 分钟以后投递给消费者，消费者收到此消息后需要判断对应的订单是否已完成支付。如支付未完成，则关闭订单。如已完成支付则忽略。
通过消息触发一些定时任务，比如在某一固定时间点向用户发送提醒消息。
定时消息
 // 定时消息，单位毫秒（ms）...]]></description><category></category></item><item><title><![CDATA[将一个整数随机分成n份，且每份不少于m]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104819446</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104819446</guid><author>xs925048899</author><pubDate>Thu, 12 Mar 2020 15:12:53 +0800</pubDate><description><![CDATA[首先如何将一个整数随机分成n份。
这个问题转化成：假设有sum个人排成一排，往这sum-1个空隙里插入n-1个纸版，把他们分成n部分。所以解决办法就是随机依次选n-1个位置。所以随机抽取n-1个小于sum的数作为要插入的空隙。然后这群人会被分成n段，也就是n个随机数。
步骤：

先随机抽取n-1个小于sum的数组成数组，并在数组头部加0，尾部加sum；
将数组进行升序排序；
每两个相邻元素数之间的...]]></description><category></category></item><item><title><![CDATA[条件队列实现生产者消费者]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104816321</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104816321</guid><author>xs925048899</author><pubDate>Thu, 12 Mar 2020 12:36:00 +0800</pubDate><description><![CDATA[public static void main(String [] args){
        Say say = new Say();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
         ...]]></description><category></category></item><item><title><![CDATA[两个线程交替打印]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104815794</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104815794</guid><author>xs925048899</author><pubDate>Thu, 12 Mar 2020 12:02:32 +0800</pubDate><description><![CDATA[通过条件队列实现
public class Test {

    public static void main(String [] args){
        Say say = new Say();
        new Thread(new Runnable() {
            @Override
            public void run() {
      ...]]></description><category></category></item><item><title><![CDATA[TCP和UDP]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104802859</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104802859</guid><author>xs925048899</author><pubDate>Wed, 11 Mar 2020 18:42:31 +0800</pubDate><description><![CDATA[TCP和UDP属于数据传输协议
TCP
三次握手
TCP 的建立连接称为三次握手，可以简单理解为下面这种情况

A：您好，我是 A
B：您好 A，我是 B
A：您好 B 建立连接

TCP 的三次握手除了建立连接外，主要还是为了沟通 TCP 包的序号问题。
A 告诉 B，我发起的包的序号是从哪个号开始的，B 同样也告诉 A，B 发起的 包的序号是从哪个号开始的。

四次挥手
说完建立连接，再说下断...]]></description><category></category></item><item><title><![CDATA[常用垃圾回收器]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104802011</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104802011</guid><author>xs925048899</author><pubDate>Wed, 11 Mar 2020 18:00:37 +0800</pubDate><description><![CDATA[前常用的垃圾回收器有7个，按照工作的内存区间的不同，可以分为3个新生代收集器和3个年老代收集器。G1比较特殊不分代

Serial（新生代串行收集器）
使用复制算法的垃圾回收器，只能用于新生代。Serial回收器使用单线程进行垃圾回收。
在 HotSpot 虚拟机中，使用-XX：+UseSerialGC 参数可以指定使用Serial（新生代串行收集器）+ Serial Old（老年代串行收集器）...]]></description><category></category></item><item><title><![CDATA[常用算法讲解及java实现]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104792613</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104792613</guid><author>xs925048899</author><pubDate>Wed, 11 Mar 2020 11:21:16 +0800</pubDate><description><![CDATA[二分查找
/**

二分查找又称折半查找，它是一种效率较高的查找方法。
　　【二分查找要求】：1.必须采用顺序存储结构 2.必须按关键字大小有序排列。

/**
	 * * 二分查找算法 * *
	 * 
	 * @param srcArray
	 *            有序数组 *
	 * @param des
	 *            查找元素 *
	 * @return des的数组...]]></description><category></category></item><item><title><![CDATA[paxos算法]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104778816</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104778816</guid><author>xs925048899</author><pubDate>Tue, 10 Mar 2020 17:31:54 +0800</pubDate><description><![CDATA[paxos算法
Paxos算法及变种算法在分布式系统中应用广泛。
基于Paxos算法的变种有：ZAB、Raft
Paxos算法解决的问题是在一个可能发生消息可能会延迟、丢失、重复的分布式系统中如何就某个值达成一致，保证不论发生以上任何异常，都不会破坏决议的一致性。
角色

提议者(proposer): 进行提议的角色
批准者(acceptor): 通过提议的角色
学习者(learner): 感知(...]]></description><category></category></item><item><title><![CDATA[heapanalyzer分析内存]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104710093</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104710093</guid><author>xs925048899</author><pubDate>Sat, 07 Mar 2020 10:11:43 +0800</pubDate><description><![CDATA[heapAnalyzer使用教程
heapAnalyzer是ibm的一个内存分析工具，当服务器内存负载出现问题时可以生成堆的dump文件，然后通过heapanalyzer可以堆dump文件进行分析，分析内存泄漏对象，或者那些对象占用大量内存。
jmap命令：例如jvm进程号为3331


jmap -heap 3331：查看java 堆（heap）使用情况


jmap -histo 3331：查...]]></description><category></category></item><item><title><![CDATA[分布式事物]]></title><link>https://blog.youkuaiyun.com/xs925048899/article/details/104709203</link><guid>https://blog.youkuaiyun.com/xs925048899/article/details/104709203</guid><author>xs925048899</author><pubDate>Sat, 07 Mar 2020 09:28:58 +0800</pubDate><description><![CDATA[主流的分布式事物实现方式
两阶段提交
两阶段提交，有一个事务管理器的概念，负责协调多个数据库（资源管理器）的事务，事务管理器先问问各个数据库你准备好了吗？如果每个数据库都回复 ok，那么就正式提交事务，在各个数据库上执行操作；如果任何其中一个数据库回答不 ok，那么就回滚事务。
第一阶段询问，第二阶段执行。
补偿机制 TCC
其实就是程序员自己写代码维护事物回滚和补偿，补偿机制说简单点就是在代码里...]]></description><category></category></item></channel></rss>