<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[IBLiplus的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/IBLiplus</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; IBLiplus]]></copyright><item><title><![CDATA[2022年我干啥去了]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/125659721</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/125659721</guid><author>IBLiplus</author><pubDate>Thu, 07 Jul 2022 15:20:34 +0800</pubDate><description><![CDATA[最近半年干啥去了。。。]]></description><category></category></item><item><title><![CDATA[Arthas-Java诊断神器]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/119829942</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/119829942</guid><author>IBLiplus</author><pubDate>Fri, 20 Aug 2021 19:05:33 +0800</pubDate><description><![CDATA[我的Github-Java后端成长路线
https://github.com/geekibli/java-study

Arthas-Java诊断神器

官方文档地址 ????    https://arthas.aliyun.com/doc/index.html#
1. 安装arthas
wget https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar --target-ip 0.0.0.0
如果你的机器没有任何java进程在]]></description><category></category></item><item><title><![CDATA[Java并发编程之Blocking Queue]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/119803558</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/119803558</guid><author>IBLiplus</author><pubDate>Thu, 19 Aug 2021 15:40:43 +0800</pubDate><description><![CDATA[Blocking Queue
A blocking queue is a queue that blocks when you try to dequeue from it and the queue is empty, or if you try to enqueue items to it and the queue is already full. A thread trying to dequeue from an empty queue is blocked until some other th]]></description><category></category></item><item><title><![CDATA[JVM-垃圾收集器]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/119783362</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/119783362</guid><author>IBLiplus</author><pubDate>Wed, 18 Aug 2021 16:31:49 +0800</pubDate><description><![CDATA[JVM系列文章收集在我的Github-Java后端成长路线中
https://github.com/geekibli/java-study

1、什么是垃圾收集器
如果说垃圾收集算法是内存回收的方法论，那么垃圾收集器就是内存回收的具体实现。
JVM规范对于垃圾收集器的应该如何实现没有任何规定，因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器差别较大，这里只看HotSpot虚拟机。 就像没有最好的算法一样，垃圾收集器也没有最好，只有最合适。我们能做的就是根据具体的应用场景选择最合适的垃圾收集器。

上图展.]]></description><category></category></item><item><title><![CDATA[我的技术博客（Java后端成长路线）]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/119754891</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/119754891</guid><author>IBLiplus</author><pubDate>Tue, 17 Aug 2021 13:52:50 +0800</pubDate><description><![CDATA[各位大佬们，优快云的博客好久没有更新了。
大家感兴趣的话，可以关注我的个人博客
跳转链接 ????  【GeekIBLi】
我的博客总结的东西相对系统一些，体系化一些，感兴趣的可以看一下。


博客是我本人学习过程中自己记录和总结的，可能会有理解错误的地方，欢迎大家指正，共同进步吧！
下面是一些截图：????
Java并发编程相关文章

设计模式相关的文章

TCP协议相关的


...]]></description><category></category></item><item><title><![CDATA[彻底搞懂Java线程池]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/119567777</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/119567777</guid><author>IBLiplus</author><pubDate>Tue, 10 Aug 2021 13:27:38 +0800</pubDate><description><![CDATA[ThreadPool
1. 为什么存在线程池
1.1 降低资源消耗
通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗；（享元模式）
1.2 提升系统响应速度
通过复用线程，省去创建线程的过程，因此整体上提升了系统的响应速度；
1.3 提高线程的可管理性
线程是稀缺资源，如果无限制的创建，不仅会消耗系统资源，还会降低系统的稳定性，因此，需要使用线程池来管理线程。
至于为什么不允许手动创建线程池，请参见https://dayarch.top/p/why-we-need-to-use-thread]]></description><category></category></item><item><title><![CDATA[Java多线程之join方法]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/108721441</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/108721441</guid><author>IBLiplus</author><pubDate>Mon, 21 Sep 2020 23:16:24 +0800</pubDate><description><![CDATA[个人技术博客(IBLi)
优快云      Github
掘金


参考资料

1、Java多线程中join方法的理解
2、Thread.join的作用和原理
3、Thread.join的作用和原理

join方法
join重载方法

1 join()
2 join(long millis)     //参数为毫秒
3 join(long millis,int nanoseconds)    //第一参数为毫秒，第二个参数为纳秒

功能演示
public class JoinDemo implement.]]></description><category></category></item><item><title><![CDATA[Java泛型详解]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/108687116</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/108687116</guid><author>IBLiplus</author><pubDate>Sat, 19 Sep 2020 22:54:07 +0800</pubDate><description><![CDATA[Java泛型

个人技术博客(IBLi)
优快云      Github
掘金


1、泛型定义

使用泛型机制编写的程序代码要比那些杂乱地使用Object变量，然后在进行强制类型转换的代码具有更好的安全性和可读性。  --《Java核心技术》

泛型是在编译时期作用的；
泛型变量使用大写形式，在Java库中，一般使用变量E表示集合的元素类型，K和V表示表的关键字与值的类型。
2、通配符
2.1 无边界通配符
无边界通配符又成为非限定通配符
public static void main(String[]]]></description><category></category></item><item><title><![CDATA[Java反射获取List的泛型]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/108672223</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/108672223</guid><author>IBLiplus</author><pubDate>Fri, 18 Sep 2020 20:10:47 +0800</pubDate><description><![CDATA[Java反射获取List的泛型
public static void main(String[] args) throws NoSuchFieldException {

        Field listField = ListTest.class.getDeclaredField("users");
        Type genericType = listField.getGenericType();
        System.err.println("genericType name " ]]></description><category></category></item><item><title><![CDATA[Java反射详解]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/108670093</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/108670093</guid><author>IBLiplus</author><pubDate>Fri, 18 Sep 2020 17:40:19 +0800</pubDate><description><![CDATA[个人技术博客
优快云      Github
掘金


反射

反向探知，在程序运行是动态的获取类的相关属性
这种动态获取类的内容以及动态调用对象的方法和获取属性的机制，叫做java反射机制；

反射的优缺点

优点
增加了程序的灵活性，避免的固有逻辑写死到程序中
代码简介，提高程序的复用性


缺点
相比于直接调用，反射有比较大的性能消耗
内部暴露和安全隐患  （因为反射可以操作private成员变量和调用private成员方法）

反射的基本操作
获取类对象的4种方式
// 调用forName方法得.]]></description><category></category></item><item><title><![CDATA[FutureTask源码解析]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/108648736</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/108648736</guid><author>IBLiplus</author><pubDate>Thu, 17 Sep 2020 17:37:06 +0800</pubDate><description><![CDATA[参考资料

(1) future.get方法阻塞问题的解决，实现按照任务完成的先后顺序获取任务的结果
(2) Java多线程引发的性能问题以及调优策略
(3) 可取消的异步任务——FutureTask用法及解析
(4) FutureTask源码解读

Future方法介绍
public interface Future&lt;V&gt; {
    
    // 取消任务 可中断的方式取消
    boolean cancel(boolean mayInterruptIfRunning);
    
  ]]></description><category></category></item><item><title><![CDATA[Spring中的InitializingBean接口]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/108477700</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/108477700</guid><author>IBLiplus</author><pubDate>Tue, 08 Sep 2020 21:27:36 +0800</pubDate><description><![CDATA[Spring中的InitializingBean接口
前言
Spring 容器中的 Bean 是有生命周期的，Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作，常用的设定方式有以下三种：

通过实现 InitializingBean/DisposableBean接口来定制初始化之后/销毁之前的操作方法；
通过元素的 init-method/destroy-method属性指定初始化之后/销毁之前调用的操作方法；
在指定方法上加上@PostConstruct或@PreDest]]></description><category></category></item><item><title><![CDATA[JDK自带HttpServer处理Http请求]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/107622643</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/107622643</guid><author>IBLiplus</author><pubDate>Mon, 27 Jul 2020 22:06:37 +0800</pubDate><description><![CDATA[下面是JDK自带的HttpServer处理Http请求的源码和流程，我看网上貌似还没有介绍这个的流程，所有就画了一下，如有不足，请矫正。

1、官方API

https://docs.oracle.com/javase/7/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/HttpExchange.html



2、启动一个HttpServer demo:


			privatestaticfinalMap&lt;String, Htt...]]></description><category></category></item><item><title><![CDATA[Java调用shell脚本]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/107542345</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/107542345</guid><author>IBLiplus</author><pubDate>Thu, 23 Jul 2020 17:10:07 +0800</pubDate><description><![CDATA[public class ShellTest {


    private String callScript( String... workspace) {
        try {
            File dir = null;
            if (workspace[0] != null) {
                dir = new File(workspace[0]);
                System.out.println(workspace[.]]></description><category></category></item><item><title><![CDATA[Spring BeanFactory结构图]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/107491816</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/107491816</guid><author>IBLiplus</author><pubDate>Tue, 21 Jul 2020 16:26:15 +0800</pubDate><description><![CDATA[下面是我在IDEA中导出的一份Bean Factory的实现结构图，个人习惯，学习源码的时候，先要掌握一个大体的结构，有哪些方法，哪些属性，哪些实现类，依赖哪些interface或者class，掌握他们的关系之后，再仔细的去阅读和学习源码。


...]]></description><category></category></item><item><title><![CDATA[Git统计代码量]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/104253431</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/104253431</guid><author>IBLiplus</author><pubDate>Mon, 10 Feb 2020 19:33:57 +0800</pubDate><description><![CDATA[在git客户端或服务终端输入以下命令：


find . "(" -name "*.java" ")" -print | xargs wc -l


效果如下：



上面的每一行是你提交的文件以及行数，最后total是你这个项目提交的代码总行数。
...]]></description><category></category></item><item><title><![CDATA[MySql IFNull（）函数]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/104250925</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/104250925</guid><author>IBLiplus</author><pubDate>Mon, 10 Feb 2020 16:49:48 +0800</pubDate><description><![CDATA[背景：A 这张表的user_id 是user这整表的partner_id ,现在需要使用user的主键id

正常的sql


UPDATE A old set user_id = (SELECT id FROM user WHERE partner_id = old.user_id);


但是在开发环境去刷数据的时候，由于脏数据特别多，会出现赋值为null的情况，就是


SELECT id ...]]></description><category></category></item><item><title><![CDATA[SpringBoot 项目启动加载数据到内存/Redis]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/104182546</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/104182546</guid><author>IBLiplus</author><pubDate>Wed, 05 Feb 2020 14:44:32 +0800</pubDate><description><![CDATA[@Order(1)
@Component
public class YjStartRunner implements CommandLineRunner {

    @Resource
    private InitStartService initStartService;

    @Override
    public void run(String... args) {
     ...]]></description><category></category></item><item><title><![CDATA[mybatis 时间区间查找]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/104162358</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/104162358</guid><author>IBLiplus</author><pubDate>Mon, 03 Feb 2020 21:33:52 +0800</pubDate><description><![CDATA[mybatis 时间区间查找  req.startTime -&gt; date类型


  &lt;if test="req.startTime != null and req.endTime != null"&gt;
         &lt;![CDATA[
   and    DATE_FORMAT(ivo.created , '%Y-%m-%d')&gt;= DATE_FORMAT(...]]></description><category></category></item><item><title><![CDATA[Spring获取环境变量profiles值]]></title><link>https://blog.youkuaiyun.com/IBLiplus/article/details/103518582</link><guid>https://blog.youkuaiyun.com/IBLiplus/article/details/103518582</guid><author>IBLiplus</author><pubDate>Thu, 12 Dec 2019 23:18:00 +0800</pubDate><description><![CDATA[业务需求：针对业务的一些告警，需要区分是线上环境的告警还是开发和测试环境的告警，然后发送到不同的微信群。

具体工具类：


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.contex...]]></description><category></category></item></channel></rss>