<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wyplj2015的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wyplj2015</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wyplj2015]]></copyright><item><title><![CDATA[Volatile和CAS]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/124306856</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/124306856</guid><author>wyplj2015</author><pubDate>Mon, 08 Aug 2022 20:30:18 +0800</pubDate><description><![CDATA[文章目录1、错误的双重检查锁加锁双重检查锁volatilevolatile什么是重排序volatile禁止重排序volatile写时volatile读时synchronized优化前优化后偏向锁：轻量级锁：CAS
在代码规范中，有一条规范是“static 和 synchronized不应双重检查锁”
1、错误的双重检查锁
先回顾一下单例模式，单例模式是指：一个类有且仅有一个实例，并且自行实例化向整个系统提供。单例模式通常分为饿汉式和懒汉式。
饿汉式：
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用]]></description><category></category></item><item><title><![CDATA[深入浅出Java泛型]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/123137584</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/123137584</guid><author>wyplj2015</author><pubDate>Wed, 20 Apr 2022 20:34:36 +0800</pubDate><description><![CDATA[泛型
泛型初印象
​	说起泛型，第一感觉是，这个东西我记得老师讲过，但我不记得老师讲了啥。再认真思索一下，好像是有个&lt;T&gt;, &lt;?&gt;，但它们是什么含义，怎么使用，全然不知。
​	当我提起泛型时，被问了下面几个问题。
什么是泛型？

泛型，即**“参数化类型”**。参数对我们而言很熟悉：定义方法时需要形参，调用方法时传递实参。通常我们使用的参数类型是具体的，而“参数化类型”就是将具体的参数类型也定义为参数的形式，使用时传入具体的类型。

我的代码里会用到泛型吗？

泛型虽然听上去不是很]]></description><category></category></item><item><title><![CDATA[注册中心Eureka和ZooKeeper]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/119422910</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/119422910</guid><author>wyplj2015</author><pubDate>Thu, 05 Aug 2021 17:22:44 +0800</pubDate><description><![CDATA[文章目录简介对比ZookeeperEureka总结
简介
Eureka本身是Netflix开源的一款提供服务注册和发现的产品，并且提供了相应的Java封装。在它的实现中，节点之间相互平等，部分注册中心的节点挂掉也不会对集群造成影响，即使集群只剩一个节点存活，也可以正常提供发现服务。哪怕是所有的服务注册节点都挂了，Eureka Clients（客户端）上也会缓存服务调用的信息。这就保证了我们微服务之间的互相调用足够健壮。
Zookeeper主要为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。曾经]]></description><category></category></item><item><title><![CDATA[Apollo配置中心(Springboot接入）]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/119420156</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/119420156</guid><author>wyplj2015</author><pubDate>Thu, 05 Aug 2021 15:56:43 +0800</pubDate><description><![CDATA[apollo
apollo是一个分布式配置中心（其实也是一个微服务项目）。

原理就是把配置文件中的key,value的值存到Apollo中，然后项目启动的时候从Apollo中读取

1、为什么使用apollo

在我们开发分布式微服务项目的时候,那些配置一旦变更,就需要重启服务,这样非常不友好。因此我们考虑动态更改配置文件当中的配置，所以把那些配置全部存放在apollo当中，这样就能达到动态的效果,并且不用重启服务。

2、主要功能


能够集中式管理不同环境（environment）、不同集群（clus]]></description><category></category></item><item><title><![CDATA[使用@Autowired出现Field injection is not recommended]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/119390247</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/119390247</guid><author>wyplj2015</author><pubDate>Wed, 04 Aug 2021 18:11:17 +0800</pubDate><description><![CDATA[文章目录使用@Autowired的时候代码出现警告：@Autowire注入的对象可能为null
使用@Autowired的时候代码出现警告：

原因是Spring不推荐使用基于字段的依赖注入
可以改成基于构造函数的依赖注入，idea能够自动生成，注入的类多的话会导致构造函数的参数过多（是一个信号，表明依赖项过多）
也可以使用@Resource，只是没有警告

区分一下@Autowired和@Resource两个注解的区别：
(1)、@Autowired默认按照byType方式进行bean匹配，@Resour]]></description><category></category></item><item><title><![CDATA[POM文件浅析]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/119139979</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/119139979</guid><author>wyplj2015</author><pubDate>Thu, 29 Jul 2021 14:55:54 +0800</pubDate><description><![CDATA[POM
https://blog.youkuaiyun.com/zhou373986278/article/details/82763839
https://www.cnblogs.com/east7/p/13363328.html?utm_source=tuicool

]]></description><category></category></item><item><title><![CDATA[COM in Wine(2)——基本代码分析]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/115906860</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/115906860</guid><author>wyplj2015</author><pubDate>Tue, 20 Apr 2021 15:30:27 +0800</pubDate><description><![CDATA[提前声明！！！！！
声明：本文以及后续相关博客只是总结，大部分内容都是翻译MSDN、Wine官网、《Inside OLE2》以及《COM原理与应用》中的内容，也参考了很多网络上的博客和论文，但时间久远，无法一一列出（鞠躬）
ps：本篇博客是很基本很基本的代码分析，是很久之前写的，一开始是为了简单理解相关内容（可能有不对的地方），更具体的代码调用分析（也许）会在后续博客中给出

文章目录COM库与类厂的交互列集和散集过程列集过程散集过程类型库Typelib的生成Typelib的加载Typelib相关接口
C.]]></description><category></category></item><item><title><![CDATA[COM in Wine(1)——COM基本概念]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/115866516</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/115866516</guid><author>wyplj2015</author><pubDate>Tue, 20 Apr 2021 14:10:22 +0800</pubDate><description><![CDATA[毕设搞了一段时间的COM，不总结一下蛮可惜的
提前声明！！！！！
声明：本文以及后续相关博客只是总结，大部分内容都是翻译MSDN、《Inside OLE2》以及《COM原理与应用》中的内容，也参考了很多网络上的博客和论文，但时间久远，无法一一列出（鞠躬）

文章目录1.COM概述2.COM基本概念（1）COM对象及接口（2）类厂(Class Factory)（3）COM库与类厂交互（4）进程内/进程外组件进程内组件进程外组件（5）套间(Apartment)（6）代理(Proxy)和存根(Stub)（7）列.]]></description><category></category></item><item><title><![CDATA[将Chrome浏览器背景设置为护眼色（眼睛护航/darkReader插件）]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/110237245</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/110237245</guid><author>wyplj2015</author><pubDate>Fri, 27 Nov 2020 17:19:31 +0800</pubDate><description><![CDATA[因为要天天对着电脑，浏览器页面白的刺眼……于是想给浏览器也设置一下护眼色，记录一下方法

插件下载
搜索了一下，眼睛护航和darkReader这两个插件时好评很多的，能科学上网的可以直接在谷歌商店下载插件，我是不能的，找了一下下载链接

提取码：sbqb
点击这里嗷

插件安装
因为dark reader只有黑色，我想要使用绿色，所以就安装了眼睛护航，方法如下（用这个方法安装了一下dark reader，也是ok的）：
下载后是一个压缩包，解压得到一个crx文件：

有两种安装方法，点击查看教程：
拖动安.]]></description><category></category></item><item><title><![CDATA[知网下载pdf（再也不想用CAJViewer啦！！！）]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/109298260</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/109298260</guid><author>wyplj2015</author><pubDate>Mon, 26 Oct 2020 20:50:00 +0800</pubDate><description><![CDATA[用CAJViewer真的是……怎么用怎么难受，但知网上很多文章只有caj格式，记录一下下载pdf格式的方法

进入知网

谁能想到大学毕业两年了，还能用学号登录学校的图书馆呢……

1、进入学校图书馆

2、用自己的学号和密码登录进去，之后点击数据库

3、这里就可以选择数据库了，我选的是中国知网

4、选择方式三即可进入，可以在右上角看到学校身份


下载pdf

进入知网后很多文章只有caj格式可以下载，但是英文版是有pdf格式的

1、把鼠标移到上面版本处，就会出现ENGLISH的选项，点击即可进入.]]></description><category></category></item><item><title><![CDATA[二叉树任意两个节点间的最大距离（Java，LeetCode 543二叉树的直径 递归）]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108834389</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108834389</guid><author>wyplj2015</author><pubDate>Sun, 27 Sep 2020 19:15:18 +0800</pubDate><description><![CDATA[文章目录题目示例代码
题目

给定一棵二叉树，你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点

示例

给定二叉树：
     1
    / \
   2   3
  / \     
 4   5    

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。


注意：两结点之间的路径长度是以它们之间边的数目表示。

代码

思路：
使用递归的方法，用一个全局变量max保存最大距离
（一开始没写出来是因为把自己绕进]]></description><category></category></item><item><title><![CDATA[MySQL——索引]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108783851</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108783851</guid><author>wyplj2015</author><pubDate>Thu, 24 Sep 2020 21:37:35 +0800</pubDate><description><![CDATA[MySQL索引
文章目录MySQL索引索引简介为什么使用索引优缺点索引分类普通索引唯一索引主键索引组合索引全文索引索引实现原理Hash索引B+树索引B树和B+树为什么不使用二叉查找树B树B+树聚集索引和非聚集索引非聚集索引聚集索引参考链接
索引简介
索引是对数据库表中一列或多列的值进行排序的一种结构，使用索引可快速访问数据库表中的特定信息。
通俗地讲，索引用于快速找出在某个列中有一特定值的行，不使用索引，MySQL必须从第一条记录开始读完整个表，直到找出相关的行，表越大，查询数据所花费的时间就越多，如果表中]]></description><category></category></item><item><title><![CDATA[TCP和UDP区别详解]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108779017</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108779017</guid><author>wyplj2015</author><pubDate>Thu, 24 Sep 2020 21:21:07 +0800</pubDate><description><![CDATA[文章目录OSI和TCP/IP模型
OSI和TCP/IP模型
 OSI七层网络模型  TCP/IP四层概念模型    对应网络协议  应用层（Application）  应用层  HTTP、TFTP, FTP, NFS, WAIS、SMTP  表示层（Presentation）  Telnet, Rlogin, SNMP, Gopher  会话层（Session）  SMTP, DNS  传输层（Transport）  传输层  TCP, UDP  网络层（Network）  网络层  IP, ICMP, A]]></description><category></category></item><item><title><![CDATA[LeetCode 1547：切棍子的最小成本]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108761143</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108761143</guid><author>wyplj2015</author><pubDate>Wed, 23 Sep 2020 20:48:10 +0800</pubDate><description><![CDATA[文章目录题目示例示例1示例2代码
题目

有一根长度为 n 个单位的木棍，棍上从 0 到 n 标记了若干位置。例如，长度为 6 的棍子可以标记如下：

给你一个整数数组 cuts ，其中 cuts[i] 表示你需要将棍子切开的位置。
你可以按顺序完成切割，也可以根据需要更改切割的顺序。
每次切割的成本都是当前要切割的棍子的长度，切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍（这两根木棍的长度和就是切割前木棍的长度）。请参阅第一个示例以获得更直观的解释。
返回切棍子的 最小]]></description><category></category></item><item><title><![CDATA[MySQL——一条语句的执行流程和原理]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108739249</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108739249</guid><author>wyplj2015</author><pubDate>Tue, 22 Sep 2020 20:21:01 +0800</pubDate><description><![CDATA[文章目录一条语句执行流程与原理分析执行流程原理分析1.客户端/服务端建立连接2.客户端/服务端通信协议2.查询缓存3.语法解析和预处理(做什么)4.查询优化(怎么做)5.查询执行引擎6.返回结果
一条语句执行流程与原理分析

执行流程


客户端向MySQL服务器发送一条查询请求


服务器首先先检查查询缓存，如果命中缓存，则立刻返回存储在缓存中的结果。否则进入下一阶段


服务器进行SQL解析、预处理、再由优化器生成对应的执行计划


MySQL根据执行计划，调用存储引擎的API来执行查询


将结果返回]]></description><category></category></item><item><title><![CDATA[单链表中环的问题]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108645296</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108645296</guid><author>wyplj2015</author><pubDate>Thu, 17 Sep 2020 21:21:48 +0800</pubDate><description><![CDATA[文章目录1.是否存在环2.环的长度

今天被问了单链表中环的问题，答得一团糟，所以复习还是很重要的

1.是否存在环

如果单链表中存在环的话，遍历链表会陷入死循环，一般会使用双指针的方法来进行判断。


思路：
使用双指针对链表进行遍历，快指针fast和慢指针slow，fast每次走两步，slow每次走一步

如果在遍历过程中，fast遍历到了null，说明没有环
如果fast和slow指向同一个节点，说明存在环


while (fast.next != null &amp;&amp; fast.nex]]></description><category></category></item><item><title><![CDATA[MySQL——基本操作和基础知识]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108630414</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108630414</guid><author>wyplj2015</author><pubDate>Thu, 17 Sep 2020 10:10:03 +0800</pubDate><description><![CDATA[文章目录MySQL基本操作1. 数据库基本操作2. 数据库表基本操作创建数据库表Innodb和MyISAM的区别修改删除数据表3. 数据库字段基本操作4. 数据基本操作插入、更新、删除数据drop、truncate和delete的异同查询数据单表查询多表查询SQL逻辑查询语句执行顺序5. 补充基础知识数据类型约束条件常用函数索引事务管理
MySQL
基本操作
1. 数据库基本操作


查看和选择数据库
查看所有数据库
SHOW DATABASES;

使用指定数据库
USE database_name;

]]></description><category></category></item><item><title><![CDATA[剑指offer：正则表达式匹配（回溯，动态规划）]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/105034993</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/105034993</guid><author>wyplj2015</author><pubDate>Mon, 14 Sep 2020 20:34:21 +0800</pubDate><description><![CDATA[题目：

请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符，而'*'表示它前面的字符可以出现任意次（包含0次）。 在本题中，匹配是指字符串的所有字符匹配整个模式。例如，字符串"aaa"与模式"a.a"和"ab*ac*a"匹配，但是与"aa.a"和"ab*a"均不匹配

答案：

解法一：

直接回溯法，代码如下：


import java.util.*;
...]]></description><category></category></item><item><title><![CDATA[String类的isEmpty()、null和“”的区别]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/108567646</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/108567646</guid><author>wyplj2015</author><pubDate>Sun, 13 Sep 2020 20:58:05 +0800</pubDate><description><![CDATA[文章目录demo代码：运行结果：结论：总结：

String类的isEmpty()、null和“”都有空的含义，但三者是不同的。

demo代码：
为了更清晰的看三者的区别，可以写一个demo，如下：

要注意如果string为null，不能对其调用isEmpty方法和equals方法，会报错：


package Tests;

/**
 * @author zhangjie
 * @date 2020/9/13
 */
public class StringEmptyDemo {
    public ]]></description><category></category></item><item><title><![CDATA[剑指offer：矩阵中的路径（dfs，回溯）]]></title><link>https://blog.youkuaiyun.com/wyplj2015/article/details/105255195</link><guid>https://blog.youkuaiyun.com/wyplj2015/article/details/105255195</guid><author>wyplj2015</author><pubDate>Mon, 07 Sep 2020 21:25:02 +0800</pubDate><description><![CDATA[题目：

请设计一个函数，用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始，每一步可以在矩阵中向左，向右，向上，向下移动一个格子。如果一条路径经过了矩阵中的某一个格子，则该路径不能再进入该格子。 例如矩阵中包含一条字符串"bcced"的路径，但是矩阵中不包含"abcb"路径，因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后，路径不能再次进入...]]></description><category></category></item></channel></rss>