<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wowwilliam0的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wowwilliam0</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wowwilliam0]]></copyright><item><title><![CDATA[Spring Bean的生命周期及常用扩展点分析]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/108316388</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/108316388</guid><author>wowwilliam0</author><pubDate>Mon, 31 Aug 2020 10:36:10 +0800</pubDate><description><![CDATA[Spring Bean的生命周期只有四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题，但是这样非常凌乱，难以记忆。要彻底搞清楚Spring的生命周期，首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入，初始化和销毁是用户能自定义扩展的两个阶段。在这四步之间穿插的各种扩展点，稍后会讲。

实例化 Instantiation
	属性赋值 Populate
	初始化 Initialization
	销毁 Destruction
实例化 -&gt; 属性赋值...]]></description><category></category></item><item><title><![CDATA[项目中使用Lombok的优点和缺点]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/107959308</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/107959308</guid><author>wowwilliam0</author><pubDate>Wed, 12 Aug 2020 15:50:06 +0800</pubDate><description><![CDATA[Lombok是一款非常实用Java第三方工具，它可以帮助开发人员消除Java的冗长代码，尤其是对于简单的Java对象（POJO）。

Lombok在给我们带来便利的同时，也带来了不小的隐患。

鉴于自己踩过的许多坑，所以我从不主动推荐别人使用Lombok，但是，也并不会干涉他人使用。并且，因为我身边有些同事的代码还是使用了的，所以我也被迫的要安装Lombok的插件。

以上就是我对Lombok的态度。既然聊到这个话题，我们也来分析下Lombok的特点：

1、Lombok的使用

1.1IDE中安装Lom.]]></description><category></category></item><item><title><![CDATA[idea打出来的springboot jar包和普通jar包区别]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/107821092</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/107821092</guid><author>wowwilliam0</author><pubDate>Wed, 05 Aug 2020 19:43:48 +0800</pubDate><description><![CDATA[上图是一个springboot打出来的jar包；

BOOT-INF下面是我们写的类和

SpringBoot 打包成的 jar 包称为可执行 jar 包，而普通 jar 包往往作为依赖使用；






]]></description><category></category></item><item><title><![CDATA[maven构建本地骨架项目archetype并发布到私服]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/107091858</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/107091858</guid><author>wowwilliam0</author><pubDate>Tue, 04 Aug 2020 20:12:42 +0800</pubDate><description><![CDATA[一、本地创建一个符合自己公司规范的多模块的maven项目



二、在项目根pom文件中添加maven archetype插件


&lt;plugins&gt;
    &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-archetype-plugin&lt;/artifactId&gt;
        &lt;version&gt;]]></description><category></category></item><item><title><![CDATA[项目启动后nacos客户端狂刷Info日志问题排查]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/107645516</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/107645516</guid><author>wowwilliam0</author><pubDate>Tue, 28 Jul 2020 21:19:13 +0800</pubDate><description><![CDATA[项目启动后狂刷如下INFO日志，看内容大概可以猜到是config内容的change事件推送，但配置项的值其实并没改变：

在github上的nacos项目的issues#2684下找到相同问题：

本地nacos client为1.2.0版本（由nacos-spring-context：0.3.6决定），而远程nacos server为1.2.1版本，两边对配置值的MD5加密结果不一致的BUG导致；
—解决：可能需要重新部署一套1.2.0版本的nacos
1.2.1的nacos-common中MD5加密如图]]></description><category></category></item><item><title><![CDATA[postman传String类型参数时不能加双引号]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/100138753</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/100138753</guid><author>wowwilliam0</author><pubDate>Thu, 29 Aug 2019 15:18:48 +0800</pubDate><description><![CDATA[今天用postman接口自测，接口成功，但是死活没有数据。查看控制台sql，确实查询到的数据为0.

但奇怪的是，将sql复制到navicat，然后复制参数替换？，然后执行，却是有数据的。

奇了怪了，还有这种事？IDE因为配置文件问题连到其它库去了？select缓存？

试了半天，原来是自己多此一举，给String类型的参数加了单引号或双引号的缘故。

仔细观察，String类型的参数，...]]></description><category></category></item><item><title><![CDATA[同一个服务器跑多个不同版本JDK的项目]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/94474861</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/94474861</guid><author>wowwilliam0</author><pubDate>Tue, 02 Jul 2019 20:00:29 +0800</pubDate><description><![CDATA[以前不知道同一台服务器上能同时跑不同JDK版本的项目，想着JAVA_HOME这个环境变量只能设置一个，那么执行java -jar 命令跑项目时只能对应到JAVA_HOME的这个JDK版本。

今天有了这个需求。首先想到的是修改 jekins的部署脚本（我们项目是利用jekins部署的），加了个export JAVA_HOME=XXX:



结果如上图错误，发现是JAVA_HOME后面的 = 号出...]]></description><category></category></item><item><title><![CDATA[Executors创建几种线程池底层都是调用的new ThreadPoolExecutor()传的参数不同]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/93783006</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/93783006</guid><author>wowwilliam0</author><pubDate>Wed, 26 Jun 2019 21:32:20 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[foreach循环里list.remove倒数第二个元素不会报ConcurrentModificationException异常]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/93776085</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/93776085</guid><author>wowwilliam0</author><pubDate>Wed, 26 Jun 2019 20:36:03 +0800</pubDate><description><![CDATA[关键就是：foreach的底层就是迭代器，迭代器循环会依次调hasNext()和iterator.next()

remove倒数第二个后，ArrayList集合私有属性size=size -1。
接着迭代下一次循环时先判断 hasNext，
public boolean hasNext() {
return cursor != size;
}
只有此时游标cursor == size...]]></description><category></category></item><item><title><![CDATA[产品从无到有的完整工作流程]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/89487968</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/89487968</guid><author>wowwilliam0</author><pubDate>Wed, 24 Apr 2019 10:42:11 +0800</pubDate><description><![CDATA[一个产品从无到有的过程可以分为两个阶段：产品设计阶段和产品执行阶段。




第一阶段：产品设计阶段



不同的书对产品设计阶段的工作分类不同，但本质其实都是一样的。本文从其中一个角度来切入 -- 行内经典入门书籍《用户体验要素》中提出的五个层级：战略层、范围层、结构层、框架层、表现层 -- 并结合其他书籍及老师总结的流程及方法，总结出我理解的设计工作流程。

五个层级提供了一个产品设计阶...]]></description><category></category></item><item><title><![CDATA[exe执行文件变白色无图标解决方法]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/89098076</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/89098076</guid><author>wowwilliam0</author><pubDate>Mon, 08 Apr 2019 17:31:03 +0800</pubDate><description><![CDATA[在命令提示符下输入下列命令即可恢复。

　　按键 “WIN+R” 输入即可cmd

　　然后输入分别输入 ：

　　taskkill /im explorer.exe /f

　　cd /d %userprofile%\appdata\local

　　del iconcache.db /a

　　start explorer.exe

　　exit

看了看这段代码，应该就是把图标缓存的数据库给...]]></description><category></category></item><item><title><![CDATA[@ControllerAdvice 拦截异常并统一处理]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/88978659</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/88978659</guid><author>wowwilliam0</author><pubDate>Tue, 02 Apr 2019 19:01:30 +0800</pubDate><description><![CDATA[在spring 3.2中，新增了@ControllerAdvice 注解，可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute，并应用到所有@RequestMapping中。参考：@ControllerAdvice 文档

一、介绍

创建 MyControllerAdvice，并添加 @ControllerAdvice注解。


packa...]]></description><category></category></item><item><title><![CDATA[JAVA字符串格式化-String.format()的使用]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/86507307</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/86507307</guid><author>wowwilliam0</author><pubDate>Wed, 16 Jan 2019 14:37:07 +0800</pubDate><description><![CDATA[常规类型的格式化

String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法，两者有类似之处。format()方法有两种重载形式。

format(String format, Object... args) 新字符串使用本地语言环境，制定字符串格式和参数生成格式化的新字符串。

format(Locale local...]]></description><category></category></item><item><title><![CDATA[JAVA获取CLASSPATH路径]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/85700306</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/85700306</guid><author>wowwilliam0</author><pubDate>Thu, 03 Jan 2019 15:52:25 +0800</pubDate><description><![CDATA[ClassLoader 提供了两个方法用于从装载的类路径中取得资源：

        public URL  getResource (String name);  
        public InputStream  getResourceAsStream (String name);  

这里name是资源的类路径，它是相对与“/”根路径下的位置。getResource得到的是一个UR...]]></description><category></category></item><item><title><![CDATA[OSI七层模型详解]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/85280947</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/85280947</guid><author>wowwilliam0</author><pubDate>Thu, 27 Dec 2018 14:28:42 +0800</pubDate><description><![CDATA[

OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯，因此其最主要的功能就是帮助不同类型的主机实现数据传输 。

完成中继功能的节点通常称为中继系统。在OSI七层模型中，处于不同层的中继系统具有不同的名称。   

一个设备工作在哪一层，关键看它工作时利用哪一层的数据头部信息。网桥工作时，是以MAC头部来决定转发端口的，因此显然它是数据链路层的设备。
具体说:
物理...]]></description><category></category></item><item><title><![CDATA[MySQL数据库隔离级别及实现原理]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/85271947</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/85271947</guid><author>wowwilliam0</author><pubDate>Thu, 27 Dec 2018 09:06:40 +0800</pubDate><description><![CDATA[本篇博文为结合其它几篇博文而来，侵删。

 

所谓的数据库事务操作其实就是一组原子性的操作，要么全部操作成功，要么全部操作失败。   


    并行事务的四大问题：
    1.更新丢失：和别的事务读到相同的东西，各自写，自己的写被覆盖了。（谁写的快谁的更新就丢失了）
    2.脏读：读到别的事务未提交的数据。（万一回滚，数据就是脏的无效的了）
    3.不可重复读：两次读之间有别的事务...]]></description><category></category></item><item><title><![CDATA[很多架构师都做错的一道Integer的java基础题]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/84314815</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/84314815</guid><author>wowwilliam0</author><pubDate>Wed, 21 Nov 2018 10:39:48 +0800</pubDate><description><![CDATA[
        Integer a =1 , b= 2;
        System.out.println(&quot;before:a=&quot;+a+&quot;  b=&quot;+b);
        Field field = Integer.class.getDeclaredField(&quot;value&quot;);
        field.setAccessible(true);
        int temp = a...]]></description><category></category></item><item><title><![CDATA[Spring动态替换Bean]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/83620865</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/83620865</guid><author>wowwilliam0</author><pubDate>Thu, 01 Nov 2018 15:12:37 +0800</pubDate><description><![CDATA[BeanPostProcessor是创建每个类时都会去执行的一个接口，postProcessBeforeInitialization是在类初始化之前调用的一个方法，创建的对象的引用会指向改方法的返回值对象。调用过程示例如下：


ClassA classA = new ClassA();
classA = postProcessBeforeInitialization(classA, &quot;class...]]></description><category></category></item><item><title><![CDATA[看完让你彻底搞懂Websocket原理]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/83617280</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/83617280</guid><author>wowwilliam0</author><pubDate>Thu, 01 Nov 2018 11:13:17 +0800</pubDate><description><![CDATA[原文：https://www.zhihu.com/question/20215561

一、websocket与http

WebSocket是HTML5出的东西（协议），也就是说HTTP协议没有变化，或者说没关系，但HTTP是不支持持久连接的（长连接，循环连接的不算）

首先HTTP有 1.1 和 1.0 之说，也就是所谓的 keep-alive ，把多个HTTP请求合并为一个，但是 Webso...]]></description><category></category></item><item><title><![CDATA[程序设计之单例模式VS静态方法]]></title><link>https://blog.youkuaiyun.com/wowwilliam0/article/details/83059653</link><guid>https://blog.youkuaiyun.com/wowwilliam0/article/details/83059653</guid><author>wowwilliam0</author><pubDate>Mon, 15 Oct 2018 15:36:37 +0800</pubDate><description><![CDATA[原文：https://blog.youkuaiyun.com/johnny901114/article/details/11969015?utm_source=copy 

我们在设计程序经常会有这种需求 , 某个类里的方法能够全局访问. 在这种情况下有两种实现方案 : 

1&amp;gt;单例模式(Singleton);

2&amp;gt;静态方法.

但是, 对于这两种实现方式 , 那种更好呢?

在国内论坛上看了一...]]></description><category></category></item></channel></rss>