<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qlql489的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qlql489</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qlql489]]></copyright><item><title><![CDATA[springboot获取不到客户端ip问题排查]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/127938416</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/127938416</guid><author>qlql489</author><pubDate>Sat, 19 Nov 2022 16:36:11 +0800</pubDate><description><![CDATA[springboot 2.5.7版本中CloudPlatform多了Kubernetes platform的类型识别，导致部署在k8s中添加了RemoteIpValve逻辑]]></description><category></category></item><item><title><![CDATA[TransmittableThreadLocal的错误用法]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/122972919</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/122972919</guid><author>qlql489</author><pubDate>Wed, 16 Feb 2022 22:09:56 +0800</pubDate><description><![CDATA[前言
ThreadLocal能够在单个线程中传递参数，使用可以用在系统参数的传递或者在链路跟踪中传递trace相关信息，需要说明的是单单使用ThreadLocal是不会出现ThreadLocal值线程共享的，但仅仅使用ThreadLocal还不够，如果代码中有使用异步，ThreadLocal就无能为力了，这时可以使用JDK自带的InheritableThreadLocal，这次ThreadLocal变量线程共享，就是因为使用了InheritableThreadLocal。
我们的项目使用springboot]]></description><category></category></item><item><title><![CDATA[AQS中的condition是如何实现的]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/122972788</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/122972788</guid><author>qlql489</author><pubDate>Wed, 16 Feb 2022 22:02:42 +0800</pubDate><description><![CDATA[condition的作用
condition的使用场景其实很多，涉及到条件判断的并发场景都可以用到，比如：

阻塞队列的ArrayBlockingQueue中做队列满和空的条件判断
CyclicBarrier中做阻塞与唤醒所有线程的判断
DelayQueue中的阻塞获取队列数据的判断
线程池ThreadPoolExecutor中awaitTermination方法的条件判断

condition怎么用呢？
在使用synchronized时我们可以使用wait()、notify()、notifyAll()方法]]></description><category></category></item><item><title><![CDATA[Skywalking收集与发送链路数据部分源码解析]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/122972689</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/122972689</guid><author>qlql489</author><pubDate>Wed, 16 Feb 2022 21:54:50 +0800</pubDate><description><![CDATA[链路收集大体逻辑
这里先不分析skywalking是如何自动收集数据的，而是说一下agent在收集后如何存储与发送给collector，这部分的架构关系到性能开销与对服务的影响
大体逻辑如下：
agent内部缓存维护了一个生产消费者，收集数据时将生产的数据按分区放到缓存中，消费者用多线程消费数据，将缓存的数据封装成grpc对象发送给collector
链路数据接收与发送
数据的接收与发送主要在类TraceSegmentServiceClient中处理
其中的一个重要属性是DataCarrier，它来实现的生]]></description><category></category></item><item><title><![CDATA[SimpleDateFormat与DecimalFormat的并发安全]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/122972013</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/122972013</guid><author>qlql489</author><pubDate>Wed, 16 Feb 2022 21:50:11 +0800</pubDate><description><![CDATA[java中并发安全需要注意的类]]></description><category></category></item><item><title><![CDATA[GitBook使用学习]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/122971465</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/122971465</guid><author>qlql489</author><pubDate>Wed, 16 Feb 2022 21:09:47 +0800</pubDate><description><![CDATA[这里写自定义目录标题网页端与客户端网页端客户端命令行创建GitBook初始化图书导入GitBook客户端本地部署看效果浮动目录导航打赏插件代码复制插件参考：
过年期间正好时间比较多，学习一下GItBook的使用
输出是一项很重要的能力，基于微信或简书发表文章已经成为很多人的选择，而对于系统一些的知识体系或专题就不适用了
在其他平台的写作内容都存在别人的服务器上，为了避免丢失自己要再保存一份，使用GitBook在本地和云端都有备份，还可以看到自己的编辑历史
因此，如果你想输出自己的知识专题，或者自己出一本书，]]></description><category></category></item><item><title><![CDATA[AQS原理解析（二、共享模式）]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/84203579</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/84203579</guid><author>qlql489</author><pubDate>Sun, 18 Nov 2018 19:35:09 +0800</pubDate><description><![CDATA[上一篇介绍了AQS独占模式的原理，参考链接AQS原理解析（一），这篇介绍一下AQS的共享模式如何实现的。
共享模式可以做什么
java concurrent包中的很多阻塞类可以一次控制多个线程的挂起和唤醒，比如Semaphore、CountDownLatch,
他们内部都继承了AQS并实现了tryAcquireShared,tryReleaseShared方法
共享模式逻辑
线程调用acquire...]]></description><category></category></item><item><title><![CDATA[java多线程编程的核心——AQS原理解析]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/83576843</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/83576843</guid><author>qlql489</author><pubDate>Wed, 31 Oct 2018 10:32:18 +0800</pubDate><description><![CDATA[AQS是什么
java concurrent包中有很多阻塞类如：ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore、Synchronous、FutureTask等，他们的底层都是根据aqs构建的，它可以说是java多线程编程最底层核心的抽象类。既然这么重要，我们就来看看它底层原理到底是什么。
aqs全称AbstractQueu...]]></description><category></category></item><item><title><![CDATA[浅析乐观锁、悲观锁与CAS]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/82993941</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/82993941</guid><author>qlql489</author><pubDate>Wed, 10 Oct 2018 11:05:16 +0800</pubDate><description><![CDATA[乐观锁与悲观锁
处理多线程并发访问最常用的就是加锁，锁又分成乐观锁和悲观锁。
悲观锁
在多线程访问共享资源时，同时只允许一个线程独享此资源，其他线程都被悲观锁阻塞，只有当前拥有锁的线程释放锁，其他线程才能被唤起竞争这个资源，每个线程在获取资源前都要悲观的检查该资源是否已经被占用，所以悲观锁的开销是巨大的，但安全性高，用synchronized关键字或者ReentrantLock都是悲观锁。
乐观锁...]]></description><category></category></item><item><title><![CDATA[一次性搞清楚unicode、codepoint、代码点、UTF]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/82780716</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/82780716</guid><author>qlql489</author><pubDate>Thu, 20 Sep 2018 07:54:18 +0800</pubDate><description><![CDATA[最近在处理字符过滤，重新研究了下字符、unicode和代码点的相关知识，首先要说一下编码的基本知识unicode

unicode


unicode是计算机科学领域里的一项业界标准，包括字符集、编码方案等。计算机采用八比特一个字节，一个字节最大整数是255，还要表示中文一个字也是不够的，至少需要两个字节，为了统一所有的文字编码，unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码，...]]></description><category></category></item><item><title><![CDATA[HashMap原理分析]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/46986931</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/46986931</guid><author>qlql489</author><pubDate>Tue, 21 Jul 2015 15:31:02 +0800</pubDate><description><![CDATA[HashMap的原理在面试时经常问到，也有很多人分析过，自己也写一写，仅供参考，部分内容参考别人的文章

一、HashMap的数据结构

数组和链表是最基本的数据结构，但这两个基本是两个极端
1、数组
数组存储区间是连续的，占用内存严重，故空间复杂的很大。但数组的二分查找
时间复杂度小，为O(1)；数组的特点是：寻址容易，插入和删除困难；
2、链表
链表存储区间离散，占用内存比较]]></description><category></category></item><item><title><![CDATA[java annotation+反射的应用记录]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/46986473</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/46986473</guid><author>qlql489</author><pubDate>Tue, 21 Jul 2015 15:09:40 +0800</pubDate><description><![CDATA[使用java 的annotation和反射的小例子，记录下来以供参考，

实现的功能是 配置页面可以动态选择一个实现检核接口的类，保存输入的参数，在真正检核时传入保存的参数

配置页面如下：第一行选择了检核1 有三个参数需要输入，第二行可以看到下拉选单，内容是根据annotation标注的class生成的






下拉选单是根据annotation标注的class生成的，]]></description><category></category></item><item><title><![CDATA[Java编程中“为了性能”尽量要做到的一些地方]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/20550617</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/20550617</guid><author>qlql489</author><pubDate>Wed, 05 Mar 2014 15:46:53 +0800</pubDate><description><![CDATA[最近的机器内存又爆满了，除了新增机器内存外，还应该好好review一下我们的代码，有很多代码编写过于随意化，这些不好的习惯或对程序语言的不了解是应该好好打压打压了。


下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。


1. 尽量在合适的场合使用单例


使用单例可以减轻加载的负担，缩短加载的时间，提高加载的效率，但并不是所有地方都适用于单例，简单来说，单]]></description><category></category></item><item><title><![CDATA[开篇记录]]></title><link>https://blog.youkuaiyun.com/qlql489/article/details/20548703</link><guid>https://blog.youkuaiyun.com/qlql489/article/details/20548703</guid><author>qlql489</author><pubDate>Wed, 05 Mar 2014 15:44:18 +0800</pubDate><description><![CDATA[在java行业工作2年了，发现要学习的东西真不少，现在觉得有必要记录一下学习心得，工作中的问题，以及分享一些牛人的文章，顺便写写随笔]]></description><category></category></item></channel></rss>