<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[kiduo08的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/kiduo08</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; kiduo08]]></copyright><item><title><![CDATA[测试bilibili 视频]]></title><link>https://blog.csdn.net/kiduo08/article/details/140300650</link><guid>https://blog.csdn.net/kiduo08/article/details/140300650</guid><author>kiduo08</author><pubDate>Tue, 09 Jul 2024 16:54:30 +0800</pubDate><description><![CDATA[黑马程序员Java零基础视频教程。]]></description><category></category></item><item><title><![CDATA[ThreadLocal实现原理与实战运用]]></title><link>https://blog.csdn.net/kiduo08/article/details/129303746</link><guid>https://blog.csdn.net/kiduo08/article/details/129303746</guid><author>kiduo08</author><pubDate>Thu, 02 Mar 2023 16:29:28 +0800</pubDate><description><![CDATA[ThreadLocal（线程本地）叫做线程变量，属于当前线程，该变量对其他线程而言是隔离的，也就是该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本，那么每个线程可以访问自己内部的副本变量。同一个ThreadLocal所包含的对象，在不同的Thread中有不同的副本。因为每个线程Thread内有自己的副本，该副本只能由当前Thread使用。既然每个Thread有自己的实列副本，且其他Thread不可访问，那就不存在多线程间共享的问题。]]></description><category></category></item><item><title><![CDATA[每天一个面试知识点Java（7）为什么wait和notify必须放在synchronized中？]]></title><link>https://blog.csdn.net/kiduo08/article/details/125186848</link><guid>https://blog.csdn.net/kiduo08/article/details/125186848</guid><author>kiduo08</author><pubDate>Mon, 13 Jun 2022 15:56:52 +0800</pubDate><description><![CDATA[   Object是超类，是所有类的父类，默认继承了Oject类（如果没有显式的继承Object,jdk6之前是编译器处理，jdk7之后是虚拟机处理默认继承）。Object类中有notify、wait等基本方法，所以继承了Object的类也拥有了Object的所有方法。
  在多线程编程中，wait 方法是让当前线程进入休眠状态，直到另一个线程调用了 notify(notifyAll) 方法之后，才能继续恢复执行。而在 Java 中，wait 和 notify(notifyAll) 有着一套自己的使用格式要]]></description><category></category></item><item><title><![CDATA[设计模式（四）手撸抽象工厂模式与在JDK源码的应用]]></title><link>https://blog.csdn.net/kiduo08/article/details/124753317</link><guid>https://blog.csdn.net/kiduo08/article/details/124753317</guid><author>kiduo08</author><pubDate>Thu, 02 Jun 2022 16:23:53 +0800</pubDate><description><![CDATA[目标
一次性深入学习，终身受益。今天我们主要是讲解工厂方法模式与之前的简单工厂的差异在于每个产品交由不同的工厂创建，这就解决了开闭原则。
工厂方法模式
定义：定义一个创建对象的接口（工厂接口），但让实现这个接口的类来决定实例化哪个类，工厂方法让类的实例化推迟到子类中进行。
类型：创建型
适用场景
1. 创建对象需要大量的重复的代码。
2. 客户端不依赖于产品类实例如何被创建，实现等细节。
3. 一个类通过其子类来指定创建哪个对象
优点
用户只需要关心所需产品对应的工厂，无需关心细节。
加入新产品符合开闭原则]]></description><category></category></item><item><title><![CDATA[Mybatis中#{}与${}的区别是什么？]]></title><link>https://blog.csdn.net/kiduo08/article/details/124975677</link><guid>https://blog.csdn.net/kiduo08/article/details/124975677</guid><author>kiduo08</author><pubDate>Thu, 02 Jun 2022 16:20:16 +0800</pubDate><description><![CDATA[#{}是占位符，即sql 预编译处理，会将sql中的#{}替换为？号，调用PrepareStatement来赋值， 对应的变量自动加上单引号。
${}是拼接符，即sql拼接，会将sql中的${}替换为变量的值，调用Statement来赋值，对应的变量不会加上单引号。
#{} 能有效防止sql 注入，提高系统安全性。

项目操作
-- 变量值定义
userName= 'wukong'
password = "1 or 1=1"

select * from sys_user where user_name .]]></description><category></category></item><item><title><![CDATA[JRebel热部署的使用]]></title><link>https://blog.csdn.net/kiduo08/article/details/125032942</link><guid>https://blog.csdn.net/kiduo08/article/details/125032942</guid><author>kiduo08</author><pubDate>Sun, 29 May 2022 18:19:01 +0800</pubDate><description><![CDATA[JRebel：实现了不需要重启服务器达到热部署项目效果，它会对你当前所编辑过的页面进行编译，大幅度减少了重启服务器所带来的等待时间。
注意事项：
c盘下的用户名一定不能为中文名称，否则会一直提示路径错误，目前测试全部失败，以后的同学们安装可以试一试，如果成功了就留个言。
1安装jrebel插件
1.File–》Settings—》plugins----》marketplace----》搜索jrebel，点击install 安装，安装完成会出现Restart ，点击重启idea即可。
2.安装成功后会出现如下]]></description><category></category></item><item><title><![CDATA[每天一个面试知识点Java（7） maven 中clean package install和deploy有什么区别]]></title><link>https://blog.csdn.net/kiduo08/article/details/124930808</link><guid>https://blog.csdn.net/kiduo08/article/details/124930808</guid><author>kiduo08</author><pubDate>Wed, 25 May 2022 23:03:09 +0800</pubDate><description><![CDATA[  maven 同学们在开发中 中clean package install 这个大多数人在项目实际开发中会用到，，deploy 可能是leader 或者写框架的同学才用到。比如一个功能写完  大家可能跟我一样用idea 写完代码然后Run项目，但是有时候项目不行，然后就一顿操作  clean、package、install。有没有仔细的想过 为啥我们要这么操作，为啥操作后能代码就正常运行了？很多同学肯定与运维有些交集，你偶尔也能看到他们手动帮你部署测试环境，或者看到自动化部署中的配置mvn  clean ]]></description><category></category></item><item><title><![CDATA[每天一个面试知识点Java（6）java中堆内存、栈内存、常量池详细讲解，学完就考同事]]></title><link>https://blog.csdn.net/kiduo08/article/details/124846341</link><guid>https://blog.csdn.net/kiduo08/article/details/124846341</guid><author>kiduo08</author><pubDate>Fri, 20 May 2022 10:55:09 +0800</pubDate><description><![CDATA[Java程序是运行在JVM(Java虚拟机)上的，因此Java的内存分配是在JVM中进行的，JVM是内存分配的基础和前提。Java程序的运行会涉及以下的内存区域:

寄存器：JVM内部虚拟寄存器，存取速度非常快，程序不可控制。
栈：存放基本类型的数据和对象的引用，但对象本身不存放在栈中，而是存放在堆中。
堆：存放new出来的对象，注意创建出来的对象只包含各自的成员变量，不包括成员方法。
常量池：存放常量，如基本类型的包装类(Integer、Short)和String,注意常量池位于堆中。


...]]></description><category></category></item><item><title><![CDATA[每天一个面试知识点Java（5） ==是地址比较还是值比较?Integer中有缓存?]]></title><link>https://blog.csdn.net/kiduo08/article/details/124843885</link><guid>https://blog.csdn.net/kiduo08/article/details/124843885</guid><author>kiduo08</author><pubDate>Wed, 18 May 2022 16:02:29 +0800</pubDate><description><![CDATA[Integer中进行==比较
public class Test {
    static Logger  logger = LoggerFactory.getLogger(Test.class);
    public static void main(String[] args) {
        int a1 = 127;
        int a2 = 127;
        logger.info("int a1与a2的==比较值是：{}",a1==a2);
        int b1 =]]></description><category></category></item><item><title><![CDATA[设计模式（四）手撸抽象工厂模式与在JDK源码的应用]]></title><link>https://blog.csdn.net/kiduo08/article/details/124773063</link><guid>https://blog.csdn.net/kiduo08/article/details/124773063</guid><author>kiduo08</author><pubDate>Mon, 16 May 2022 18:20:51 +0800</pubDate><description><![CDATA[目标
一次性深入学习，终身受益。今天我们主要是讲解工厂方法模式与之前的简单工厂的差异在于每个产品交由不同的工厂创建，这就解决了开闭原则。
工厂方法模式
定义：定义一个创建对象的接口（工厂接口），但让实现这个接口的类来决定实例化哪个类，工厂方法让类的实例化推迟到子类中进行。
类型：创建型
适用场景
1. 创建对象需要大量的重复的代码。
2. 客户端不依赖于产品类实例如何被创建，实现等细节。
3. 一个类通过其子类来指定创建哪个对象
优点
用户只需要关心所需产品对应的工厂，无需关心细节。
加入新产品符合开闭原则]]></description><category></category></item><item><title><![CDATA[设计模式（三）手撸工厂方法模式与在JDK源码中的应用]]></title><link>https://blog.csdn.net/kiduo08/article/details/124748397</link><guid>https://blog.csdn.net/kiduo08/article/details/124748397</guid><author>kiduo08</author><pubDate>Fri, 13 May 2022 22:13:31 +0800</pubDate><description><![CDATA[目标
一次性深入学习，终身受益。今天我们主要是讲解工厂方法模式与之前的简单工厂的差异在于每个产品交由不同的工厂创建，这就解决了开闭原则。
工厂方法模式
定义：定义一个创建对象的接口（工厂接口），但让实现这个接口的类来决定实例化哪个类，工厂方法让类的实例化推迟到子类中进行。
类型：创建型
适用场景
1. 创建对象需要大量的重复的代码。
2. 客户端不依赖于产品类实例如何被创建，实现等细节。
3. 一个类通过其子类来指定创建哪个对象
优点
用户只需要关心所需产品对应的工厂，无需关心细节。
加入新产品符合开闭原则]]></description><category></category></item><item><title><![CDATA[设计模式（二）手撸简单工厂模式与在JDK源码的应用]]></title><link>https://blog.csdn.net/kiduo08/article/details/124706249</link><guid>https://blog.csdn.net/kiduo08/article/details/124706249</guid><author>kiduo08</author><pubDate>Thu, 12 May 2022 11:07:03 +0800</pubDate><description><![CDATA[目标
工厂模式有3种，分别是“简单工厂模式、工厂方法模式、抽象工厂模式”，接下来我们一个个的讲解。
今天我们学习简单工厂模式，初入系统设计。
简单工厂模式
定义：由一个工厂对象决定创建出哪一种产品类的实例
类型：创建型，但是不属于GOF23种设计模式
试用场景
1. 工厂类负责创建的对象比较少。
2. 客户端只知道调用工厂类创建方法和传入参数，对于如何创建对象（逻辑）不关心
优点
只需要传入正确的参数，就可以创建你所需要的对象，而无需知道其创建的细节
缺点
工厂类的职责相对过重，增加新的产品需要修改工厂类的]]></description><category></category></item><item><title><![CDATA[设计模式（一）认识UML图提升代码阅读与设计能力]]></title><link>https://blog.csdn.net/kiduo08/article/details/124685313</link><guid>https://blog.csdn.net/kiduo08/article/details/124685313</guid><author>kiduo08</author><pubDate>Tue, 10 May 2022 20:57:13 +0800</pubDate><description><![CDATA[目的
  几乎是程序员就都知道或者了解设计模式，但大部分小伙伴写代码总是习惯于一把梭。
无论多少业务逻辑就一个类几千行，这样的开发也可以归纳为三步；定义属性、创建方法、调用展示，Done！只不过开发一时爽，重构火葬场。
好的代码不只为了完成现有功能，也会考虑后续扩展。在结构设计上松耦合易读易扩展，在领域实现上高内聚不对外暴漏实现细节不被外部干扰。而这就有点像家里三居(MVC)室、四居(DDD)室的装修，你不会允许几十万的房子把走线水管裸漏在外面，也不会允许把马桶放到厨房，炉灶安装到卫生间。
其实有一部分人并]]></description><category></category></item><item><title><![CDATA[手撸SSO单点登录（六）SSO单点退出原理]]></title><link>https://blog.csdn.net/kiduo08/article/details/124675136</link><guid>https://blog.csdn.net/kiduo08/article/details/124675136</guid><author>kiduo08</author><pubDate>Mon, 09 May 2022 21:36:46 +0800</pubDate><description><![CDATA[目标
这一章节我们来一起学习,单点退出登录，是怎么让所有sso系统一起退出登录的。
视频详细讲解请见https://www.bilibili.com/video/BV1b5411d7be/
源码下载地址：https://gitcode.net/kiduo08/yuantai-sso.git
时序图


当用户点击某一个系统的退出登录时候
统一的发起跳转到认证中心http://authentication.sso.com:8080/logout?redirectUri=http://client.sso.co]]></description><category></category></item><item><title><![CDATA[手撸SSO单点登录（五）登录验证-OA系统页面刷新或者跳转新OA系统页面]]></title><link>https://blog.csdn.net/kiduo08/article/details/124649061</link><guid>https://blog.csdn.net/kiduo08/article/details/124649061</guid><author>kiduo08</author><pubDate>Sun, 08 May 2022 16:14:28 +0800</pubDate><description><![CDATA[目标
 上一章节手撸SSO单点登录（四）登录验证-首次登录已经成功登陆并且跳转至OA系统,当OA系统刷新，或者OA系统打开其他菜单是怎么实现无需登陆，直接验证通过，跳转页面或者刷新页面。
二 、系统UML工程类图

三、代码实现
a.当刷新OA系统页面的时候，进入com.yuantai.filter.LoginFilter请求拦截、进入isAccessAllowed方法
@Override
    public boolean isAccessAllowed(HttpServletRequest reque]]></description><category></category></item><item><title><![CDATA[每天一个面试知识点Java（3 ）Java中重写(Override)与重载(Overload)的区别]]></title><link>https://blog.csdn.net/kiduo08/article/details/124624562</link><guid>https://blog.csdn.net/kiduo08/article/details/124624562</guid><author>kiduo08</author><pubDate>Sat, 07 May 2022 11:28:27 +0800</pubDate><description><![CDATA[利用摸鱼时间、每天积累一个知识点、学精学透、夯实基础、面试不用愁。
一、重载（Overload）
 方法重载就是让类用统一的方式处理不同类型的数据,不同参数的一种手段。
a.创建一个重载类
public class Overloading {
    int computed(int a,int b){
        return a+b;
    }
    int computed(int a,int b,int c){
        return a+b+c;
    }
}

b.main方法调]]></description><category></category></item><item><title><![CDATA[每天一个面试知识点Java（2 ）Java中“goto“语句使用技巧]]></title><link>https://blog.csdn.net/kiduo08/article/details/124587325</link><guid>https://blog.csdn.net/kiduo08/article/details/124587325</guid><author>kiduo08</author><pubDate>Thu, 05 May 2022 14:56:34 +0800</pubDate><description><![CDATA[目标
   继上一章节return、break和continue的区别 并没有直接跳出多层循环、在java中怎么才能跳出多层循环体呢？这一章节就利用“goto”语法跳出循环体语句。
   有次和朋友聊天的时候，无意间聊到了 goto 语句，但是在 Java 中， goto 是保留关键字，但是朋友说 Java 中有和 goto 类似效果的语句，我竟然一点都不知道！顿时感觉 Java 白学了！心里万马奔腾！？
立马回来查资料+写demo，还有这种操作？？？！！！哭了哭了。。。
认识goto&amp;标签
首先b]]></description><category></category></item><item><title><![CDATA[每天一个面试知识点Java（1） return、break和continue的区别还傻傻分不清]]></title><link>https://blog.csdn.net/kiduo08/article/details/124582634</link><guid>https://blog.csdn.net/kiduo08/article/details/124582634</guid><author>kiduo08</author><pubDate>Thu, 05 May 2022 10:30:07 +0800</pubDate><description><![CDATA[目标
return、break和continue的在循环体中的区别
demo代码地址 https://gitcode.net/kiduo08/learning-junior.git
区别
1、for循环-normal
	/**
 * @author yuantai
 * @Version: 1.0
 */
public class Junior1 {

    public static void main(String[] args) {
        String[] arr = {"a","b","]]></description><category></category></item><item><title><![CDATA[手撸SSO单点登录（四）登录验证-首次登录]]></title><link>https://blog.csdn.net/kiduo08/article/details/124558981</link><guid>https://blog.csdn.net/kiduo08/article/details/124558981</guid><author>kiduo08</author><pubDate>Tue, 03 May 2022 22:05:34 +0800</pubDate><description><![CDATA[目标
这一章节的目标主要是讲解OA（这里代表client.sso.com:8082）统一登录后怎么回跳至OA页面，无论OA系统，还是认证系统等，在未登录的情况下怎么统一跳转至SSO登录页面。client 用OA系统代替更直观

...]]></description><category></category></item><item><title><![CDATA[手撸SSO单点登录（三）：统一跳转至SSO登录页]]></title><link>https://blog.csdn.net/kiduo08/article/details/124491461</link><guid>https://blog.csdn.net/kiduo08/article/details/124491461</guid><author>kiduo08</author><pubDate>Fri, 29 Apr 2022 13:09:29 +0800</pubDate><description><![CDATA[client 用oa系统代替更直观
认证中心跳转至登录页面
OA未登录跳转至登录页面

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