<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_26146367的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_26146367</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_26146367]]></copyright><item><title><![CDATA[Druid源码分析（总结）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124890596</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124890596</guid><author>qq_26146367</author><pubDate>Sat, 21 May 2022 16:21:16 +0800</pubDate><description><![CDATA[Druid源码分析
Druid Spring配置项]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（九）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124872371</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124872371</guid><author>qq_26146367</author><pubDate>Thu, 19 May 2022 23:13:22 +0800</pubDate><description><![CDATA[DruidDataSource Filter使用
SPI过滤器初始化
init方法进行SPI的过滤器加载，通过阅读ServiceLoader方法的API，了解到需要在resources/META-INF/services/，下创建名字为接口的全路径名称文件，内容为：实现类的全路径。
发现文件中并没有com.alibaba.druid.filter.Filter，也就是这个方法根本不会加载。
    private void initFromSPIServiceLoader() {
    	//跳过加载SP]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（八）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124851452</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124851452</guid><author>qq_26146367</author><pubDate>Wed, 18 May 2022 22:06:53 +0800</pubDate><description><![CDATA[数据源的关闭方法(close)
    public void close() {
        if (LOG.isInfoEnabled()) {
            LOG.info("{dataSource-" + this.getID() + "} closing ...");
        }
        //获取锁
        lock.lock();
        try {
        	//如果已经关闭，则退出
            if (this.closed]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（七）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124830979</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124830979</guid><author>qq_26146367</author><pubDate>Tue, 17 May 2022 23:15:47 +0800</pubDate><description><![CDATA[销毁连接分析
在创建连接的init()方法，注意到创建了线程DestroyConnectionThread用来销毁连接的，线程循环是通过timeBetweenEvictionRunsMillis 参数来设置连接检查的时间间隔。
        public void run() {
        	//计数器减一
            initedLatch.countDown();

            for (;;) {
                // 从前面开始删除
         ]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（六）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124809140</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124809140</guid><author>qq_26146367</author><pubDate>Mon, 16 May 2022 22:53:32 +0800</pubDate><description><![CDATA[DruidDataSource参数解析
testOnBorrow
当testOnBorrow为true时，每次获取连接都会进行连接校验，当连接不可用，则关闭连接。不推荐使用
            if (testOnBorrow) {
            	//测试连接
                boolean validate = testConnectionInternal(poolableConnection.holder, poolableConnection.conn);
      ]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（五）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124774686</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124774686</guid><author>qq_26146367</author><pubDate>Sat, 14 May 2022 23:13:03 +0800</pubDate><description><![CDATA[DruidDataSource Spring Bean 初始化
在Spring Boot项目中，我们只需要简单声明一下Druid就会自动调用，DruidDataSource 的init()方法
@Configuration
@ConditionalOnClass(DruidDataSource.class)
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
@EnableConfigurationProperties({DruidStatProp]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（四）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124769605</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124769605</guid><author>qq_26146367</author><pubDate>Sat, 14 May 2022 17:07:05 +0800</pubDate><description><![CDATA[Druid的守护线程CreateConnectionThread
当不存在创建任务createScheduler时，则创建守护线程CreateConnectionThread。该线程的主要作用是创建连接。
    protected void createAndStartCreatorThread() {
        if (createScheduler == null) {
            String threadName = "Druid-ConnectionPool-Create-" ]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（三）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124743047</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124743047</guid><author>qq_26146367</author><pubDate>Fri, 13 May 2022 02:12:51 +0800</pubDate><description><![CDATA[druid源码分析—DruidDataSource的基本分析（三）
获取连接（getConnection）
getConnection接口代码主要分为两个部分：

初始化连接池
获取连接

初始化连接池
创建驱动

创建驱动并根据数据库类别进行加载。

            initFromSPIServiceLoader();
            resolveDriver();
            initCheck();
            initExceptionSorter();
]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（二）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124719718</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124719718</guid><author>qq_26146367</author><pubDate>Thu, 12 May 2022 00:14:18 +0800</pubDate><description><![CDATA[druid源码分析—DruidDataSource的基本分析（二）
getConnectionInternal基本分析
DruidDataSource 参数记录
//已使用的连接数量
private int activeCount = 0;
//池内连接数量，init()方法会创建连接并赋值
private int poolingCount = 0;
//连接数量
private long connectCount = 0L;
//最高峰值记录
private int activePeak = 0;
//最]]></description><category></category></item><item><title><![CDATA[druid源码分析—DruidDataSource的基本分析（一）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/124660924</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/124660924</guid><author>qq_26146367</author><pubDate>Tue, 10 May 2022 22:05:20 +0800</pubDate><description><![CDATA[druid源码分析（一）

]]></description><category></category></item><item><title><![CDATA[Windows 电脑查看历史WIFI密码]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/115609588</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/115609588</guid><author>qq_26146367</author><pubDate>Sun, 11 Apr 2021 23:41:51 +0800</pubDate><description><![CDATA[1、打开命令行cmd.exe，输入命令：netsh wlan show profile。

2、输入命令：netsh wlan export profile name=“所选wifi名称” folder=. key=clear
会保存WIFI信息到当前文件，名称为：WLAN-所选wifi名称.xml。

3、密码由&lt;keyMaterial&gt;包裹。


...]]></description><category></category></item><item><title><![CDATA[double转BigDecimal精度丢失的解决方案。]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/111914782</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/111914782</guid><author>qq_26146367</author><pubDate>Tue, 29 Dec 2020 15:05:32 +0800</pubDate><description><![CDATA[因为double有精度丢失的问题，所以关于小数点的计算通常使用BigDecimal来计算。
但直接调用BigDecimal的构造函数，会出现精度丢失问题。
public BigDecimal(double val) {
        this(val,MathContext.UNLIMITED);
}

例子：
public class Demo1 {
    public static void main(String[] args) {
    //输出结果：4.7999999999999998223]]></description><category></category></item><item><title><![CDATA[Redis 五种数据结构和命令的使用(二)]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/105632628</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/105632628</guid><author>qq_26146367</author><pubDate>Wed, 22 Apr 2020 11:55:37 +0800</pubDate><description><![CDATA[Redis的数据结构
Redis存储的是：key,value格式的数据，其中key都是字符串，value有5种不同的数据结构。
value的数据结构：

字符串类型 (string)
哈希类型 (hash) ： map格式
列表类型 (list) ： linkedlist格式。支持重复元素
集合类型 (set)  ： 不允许重复元素
有序集合类型 (zset)：sortedset不允许重复元素，且...]]></description><category></category></item><item><title><![CDATA[Redis 概述与安装（一）]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/105629643</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/105629643</guid><author>qq_26146367</author><pubDate>Mon, 20 Apr 2020 11:47:19 +0800</pubDate><description><![CDATA[redis 概述
Redis 是完全开源免费的，遵守BSD协议，是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点：

Redis支持数据的持久化，可以将内存中的数据保存在磁盘中，重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据，同时还提供list，set，zset，hash等数据结构的存储。
Red...]]></description><category></category></item><item><title><![CDATA[Spring Cloud Alibaba 和Spring Cloud 对应的版本关系。]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/105075814</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/105075814</guid><author>qq_26146367</author><pubDate>Tue, 24 Mar 2020 17:04:03 +0800</pubDate><description><![CDATA[Spring Cloud Alibaba 2.1.0 RELEASE对应的Spring Cloud Greenwich版本
Spring Cloud Alibaba 2.2.0 RELEASE对应的Spring Cloud Hoxton版本
Spring Cloud Alibaba 2.2.1 RELEASE对应的Spring Cloud Hoxton.SR3版本


...]]></description><category></category></item><item><title><![CDATA[Spring Boot 2.2.5.RELEASE相关的Spring Cloud版本号修改]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/105048894</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/105048894</guid><author>qq_26146367</author><pubDate>Mon, 23 Mar 2020 15:30:29 +0800</pubDate><description><![CDATA[今天准备创建一个基于Spring Boot 2.2.5.RELEASE的Spring Cloud项目。
需要修改Spring Cloud的版本号为：Hoxton.SR3
Spring Cloud 版本号


]]></description><category></category></item><item><title><![CDATA[Java 线程池的使用]]></title><link>https://blog.youkuaiyun.com/qq_26146367/article/details/104963107</link><guid>https://blog.youkuaiyun.com/qq_26146367/article/details/104963107</guid><author>qq_26146367</author><pubDate>Thu, 19 Mar 2020 17:08:07 +0800</pubDate><description><![CDATA[线程池的概念
当我们使用线程时，就会去创建(new)一个线程，这样实现起来很方便，但是就会有一个问题：
如果并发的线程数量很多，并且每个线程都是执行一个时间很短的任务就结束了，这样频繁创建线程就会大大降低 系统的效率，因为频繁创建线程和销毁线程需要时间。
利用线程池可使得线程可以复用，就是执行完一个任务，并不被销毁，继续执行其他的任务。

...]]></description><category></category></item></channel></rss>