<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[shadow___h的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/shadow___h</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; shadow___h]]></copyright><item><title><![CDATA[ThreadLocal]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/116805638</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/116805638</guid><author>shadow___h</author><pubDate>Fri, 14 May 2021 20:55:41 +0800</pubDate><description><![CDATA[文章目录ThreadLocalThreadLcoal的使用引入ThreadLocal的原因（与synchronized的区别）ThreadLocal的内部结构ThreadLocalMap源码分析ThreadLocal源码分分析属性构造方法和简单方法Set方法Get方法Remove方法ThreadLoaclMap和内存泄露
ThreadLocal
ThreadLcoal的使用

线程并发 ： 在多线程并发的场景下
传递数据 ：我们可以通过ThreadLocal在同一线程中，不同组件中传递公共变量
线程隔离 ：]]></description><category></category></item><item><title><![CDATA[函数式接口的简单理解]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115944625</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115944625</guid><author>shadow___h</author><pubDate>Wed, 21 Apr 2021 12:23:56 +0800</pubDate><description><![CDATA[文章目录函数式接口(都只有一个需要我们实现的方法)1. 函数式接口 Function2. 供给型接口 Supplier3. 断言型接口  Predicate4. 消费型接口  Consumer
函数式接口(都只有一个需要我们实现的方法)
1. 函数式接口 Function
@FunctionalInterface
public interface Function&lt;T, R&gt; {

    // 将此函数应用于给定的参数。
    // 传入T 返回R的类型
    R apply(T t);
]]></description><category></category></item><item><title><![CDATA[多线程使用的三个工具类：CountDownLatch，CyclicBarrier,Semaphore]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115902202</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115902202</guid><author>shadow___h</author><pubDate>Tue, 20 Apr 2021 12:43:34 +0800</pubDate><description><![CDATA[文章目录多线程使用的三个工具类：CountDownLatch，CyclicBarrier,SemaphoreCountDownLatchCyclicBarrierSemaphore
多线程使用的三个工具类：CountDownLatch，CyclicBarrier,Semaphore
CountDownLatch

减法计数器


构造方法

    public CountDownLatch(int count) {
        if (count &lt; 0) throw new IllegalAr]]></description><category></category></item><item><title><![CDATA[ArrayList在多并发下的不安全问题以及解决方法]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115875443</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115875443</guid><author>shadow___h</author><pubDate>Mon, 19 Apr 2021 21:42:38 +0800</pubDate><description><![CDATA[文章目录ArrayList在多并发下的不安全问题以及解决方法**为啥不安全**1. 使用Vector()数组来解决这个问题2. 使用Connections集合3. 使用 CopyOnWriteArrayList
ArrayList在多并发下的不安全问题以及解决方法
为啥不安全
多线程并发插入元素和读取元素的时候会出现 ConcurrentModificationException
 public static void main(String[] args) {
       
        ArrayL]]></description><category></category></item><item><title><![CDATA[对MVC的简单了解]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115626487</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115626487</guid><author>shadow___h</author><pubDate>Mon, 12 Apr 2021 16:04:36 +0800</pubDate><description><![CDATA[SpringMVC
MVC


M model
数据模型，提供要展示的数据，因此包含数据行为，可以认为是领域模型或JavaBean组件（包含数据和行为）。也就是Dao层和Service层。


V view
负责进行模型的展示，一般就是我们见到的用户界面，客户想看到的东西。



C Controller
接受用户请求，委托给模型进行处理，处理完之后把返回的模型数据返回给视图，由视图负责展示，也就是说控制器做了个调度员的工作。




用户发请求
Servlet请求接受数据，并调用对应的业务逻辑
业务处理完]]></description><category></category></item><item><title><![CDATA[SSM整合框架流程]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115626370</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115626370</guid><author>shadow___h</author><pubDate>Mon, 12 Apr 2021 16:01:51 +0800</pubDate><description><![CDATA[SSM整合框架
总的配置
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    ]]></description><category></category></item><item><title><![CDATA[Spring小结]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115522999</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115522999</guid><author>shadow___h</author><pubDate>Thu, 08 Apr 2021 16:03:23 +0800</pubDate><description><![CDATA[Spring

IOC ：对象由Spring去创建，管理，装配。
控制：水牢控制对象的创建，传统的应用程序的对象是由程序本身控制创建的，使用Spring之后，由Spring来创建的
反转：程序的本身并不创建对象，而变成被动的创建对象


所有的类都需要装配到bean中
所有的bean都需要通过容器去取
所有的bean取出来都是一个对象

Spring中对象的构建
 &lt;!-- 使用默认的构造构造方法的时候 不需要配置constructor-arg
         如果类中定义了构造方法就需要去 配置构]]></description><category></category></item><item><title><![CDATA[JVM之GC的简单理解]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115309992</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115309992</guid><author>shadow___h</author><pubDate>Mon, 29 Mar 2021 20:11:22 +0800</pubDate><description><![CDATA[文章目录JVM之GC引用的分类如何判断对象可以被GC引用计数法可达性分析法finalize()垃圾回收的几种方式1. 标记复制（新生代）2. 标记清除(老年代)3. 标记整理（老年代）虚拟机hotspot垃圾收集算法之分代收集算法老年代和新生代以及永久代新生代对象如何进入老年代垃圾回收产生的影响用户体验（STW）和吞吐量垃圾收集器1. Serial收集器 （新生代收集器）2.ParNew收集器 （新生代收集器）3.Paraller Scavenge收集器  （新生代收集器）4.Serial Old 收集器 ]]></description><category></category></item><item><title><![CDATA[创建线程的四种方式]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115268842</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115268842</guid><author>shadow___h</author><pubDate>Sat, 27 Mar 2021 17:49:53 +0800</pubDate><description><![CDATA[文章目录创建线程的四种方法1. 继承Thread类创建线程2. 实现Runnable接口创建线程3.实现Callable接口创建线程4.使用线程池创建线程1.对比new Thread，创建线程都比较耗时，使用线程池可以达到线程复用的目的。2. 创建线程池的方式：3. 通过线程池创建任务
创建线程的四种方法
1. 继承Thread类创建线程
static class MyThread extends Thread {
    @Override
    public void run() {
        ]]></description><category></category></item><item><title><![CDATA[数据库事务的简单理解]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115265306</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115265306</guid><author>shadow___h</author><pubDate>Sat, 27 Mar 2021 15:07:41 +0800</pubDate><description><![CDATA[文章目录数据库事务的简单理解事务的概念事务的隔离级别1. 因为并发而可能出现的问题2. 为了权衡并发和隔离的矛盾，于是定义了事务的四个隔离级别如何去实现数据库中的隔离事务隔离级别的实现方式 (LBCC  lock-Based Concurrent Control)1. 共享锁2.排他锁3.意向共享锁4.意向排他锁锁的算法1. 记录锁 (Record Locks)2. 间隙锁(Gap Locks)3. 临建锁(Next-key-locks)事务隔离级别的实现方式(MVCC Multi-Version Conc]]></description><category></category></item><item><title><![CDATA[数据库索引的简单理解]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115254707</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115254707</guid><author>shadow___h</author><pubDate>Fri, 26 Mar 2021 20:37:10 +0800</pubDate><description><![CDATA[文章目录数据库索引的简单理解数据库中的数据放在哪里MySQL 索引为啥要使用索引索引使用的条件B树B+树B+树之聚合索引B+树之非聚合索引hash索引设置主键为自增int型索引优化之最左前缀原则
数据库索引的简单理解
索引其实就是一种排序的数据结构
数据库中的数据放在哪里

.frm 表的结构信息
.ibd  存储索引和文件信息



数据库中数据一般都存放在硬盘中，而不是内存中，每读取依次数据中的数据，叫相当于要操作一次I/O操作，速度较慢。  应用程序发起I/0操作去调动内核，找到对应的驱动程序把数据加]]></description><category></category></item><item><title><![CDATA[JAVA中代码块，静态代码块，构造方法的执行顺序]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115135624</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115135624</guid><author>shadow___h</author><pubDate>Tue, 23 Mar 2021 18:32:50 +0800</pubDate><description><![CDATA[文章目录父类子类main方法结果结论
父类
package Test;

public class Parent {

    private static String s = "abc";
    private String o = "def";

    static {
        System.out.println("Pa static");
    }

    public Parent() {
        System.out.println("Pa cons");
    }
]]></description><category></category></item><item><title><![CDATA[JVM简单理解1]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/115134432</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/115134432</guid><author>shadow___h</author><pubDate>Tue, 23 Mar 2021 18:05:23 +0800</pubDate><description><![CDATA[文章目录对JVM的简单理解java内存模型（jmm）内存溢出和内存泄露类加载类加载机制类加载器双亲委派模型
对JVM的简单理解
java内存模型（jmm）


程序计数器 （线程私有）

JVM的虚拟机是通过多线程轮转流切换并分配处理器执行时间的方式来实现，也就是在同一个时间一个cpu只会处理一个线程，而当一个线程被切换出去的时候，要想下次被切换回来的时候还在执行的那个位置，其实程序计数器中就记录了每一个线程执行到了那个位置。也就是记录了当前线程的上下文，线程具体的当前执行到了那个位置。每条线程都有自己独有]]></description><category></category></item><item><title><![CDATA[Synchronized关键字]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/114988777</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/114988777</guid><author>shadow___h</author><pubDate>Thu, 18 Mar 2021 19:44:36 +0800</pubDate><description><![CDATA[Synchronized关键字
synchronized是一种悲观锁
乐观锁和悲观锁

乐观锁

设计思想 ： 通一个时间点，经常只有一个线程对一个共享变量进行操作（可以理解为没有人和你抢吃的，你可以光明正大的吃）
原理：线程直接操作共享变量
实现 ：基于CAS来实现


悲观锁

设计思想：同一个时间点，经常会有多个线程对一个共享变量进行操作（可以理解为有人和你抢吃的，需要偷偷藏起来吃，自己吃够了，把吃的才会拿出来）
原理：线程操作变量的时候需要先加锁，再对变量进行操作
实现：加锁操作



CAS


]]></description><category></category></item><item><title><![CDATA[网络知识的简单梳理]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/114808622</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/114808622</guid><author>shadow___h</author><pubDate>Sun, 14 Mar 2021 23:00:47 +0800</pubDate><description><![CDATA[文章目录应用层协议DNSHTTPHTTPS传输层协议TCPUDP网络层协议IPICMPMTUNATARP和 RARP数据链路层PPP 点对点协议
应用层协议
DNS


当在浏览器中输入一个网址的时候，一般的都需要进行DNS域名解析将其转化成IP地址，若是输入的直接为IP地址，则不需要解析。


过程
1）找浏览器的缓存查找对应的IP地址
2）找操作系统的hosts文件中是否这个网址的映射
3）找本机的DNS解析器缓存，是否有网址映射关系


HTTP


http请求协议
1. http请求报文
# 请求]]></description><category></category></item><item><title><![CDATA[认识Java中的异常]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/113062508</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/113062508</guid><author>shadow___h</author><pubDate>Sat, 23 Jan 2021 21:27:00 +0800</pubDate><description><![CDATA[文章目录认识Java中的异常LBYL 和 EAFP认识异常异常的分类处理异常的方法两种方法的比较我们处理异常的时候一般是抛出异常和自己处理异常的方法相结合线程中出现异常的话
认识Java中的异常
LBYL 和 EAFP


LBYL (look before you leap) 在操作的时候就做充分的检查


EAFP （Easier to Ask Forgiveness than Permission）先操作遇到问题再处理


就比如你想吃你妹妹的零食，你先问你妹妹可以吃嘛，你妹妹同意后再去吃，就是LBY]]></description><category></category></item><item><title><![CDATA[Mybatis的一级缓存和二级缓存的基本介绍]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/112171205</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/112171205</guid><author>shadow___h</author><pubDate>Mon, 04 Jan 2021 11:25:02 +0800</pubDate><description><![CDATA[文章目录Mybatis的一级缓存和二级缓存基本介绍一级缓存二级缓存
Mybatis的一级缓存和二级缓存
基本介绍

程序在执行的时候，它调用的对象存在于内存中，而我们为了提高性能方便快速调用，把已经被调用过的对象存在于缓存中，再次调用相同的程序或者相同的对象的时候，不必去数据库或者其他的持久化设备中查询。
而Mybatis的缓存都是为了更好的执行查询语句，一旦执行增删改语句，缓存就会被清零

一级缓存


一级缓存的作用域是我们一个SqlSession对象，同一个SqlSession中执行相同的查询语句(查]]></description><category></category></item><item><title><![CDATA[Mybatis基本使用（2）]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/112146675</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/112146675</guid><author>shadow___h</author><pubDate>Sun, 03 Jan 2021 18:53:38 +0800</pubDate><description><![CDATA[文章目录Mybatis基本使用（2）指定resultType 和 parameterType中的别名查询多个字段的时候 使用标签减少书写量resultMap的使用
Mybatis基本使用（2）
指定resultType 和 parameterType中的别名


mybatis-config.xml中配置typeAlias
&lt;typeAliases&gt;
    &lt;!--&lt;typeAlias type="net.xdclass.online_class.domain.Video"
   ]]></description><category></category></item><item><title><![CDATA[Mybatis的基本使用]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/112133180</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/112133180</guid><author>shadow___h</author><pubDate>Sun, 03 Jan 2021 12:10:48 +0800</pubDate><description><![CDATA[文章目录Mybatis基本使用使用的一般流程驼峰映射成下划线JDBCTYPE模糊查询插入数据，以及获取当前插入数据的主键执行流程如下批量插入数据 利用foreachupdate语句 以及使用 \Mybatis基本使用

通过简单的xml或注解来配置映射java对象到数据库中的记录
它支持自定义sql，存储过程以及高级映射

使用的一般流程

添加依赖包
创建mybatis-config.xml 全局的配置⽂文件
创建XXXMapper.xml配置⽂文件
创建SqlSessionFactory
⽤用SqlSe]]></description><category></category></item><item><title><![CDATA[线程和进程的区别]]></title><link>https://blog.youkuaiyun.com/shadow___h/article/details/112109449</link><guid>https://blog.youkuaiyun.com/shadow___h/article/details/112109449</guid><author>shadow___h</author><pubDate>Sat, 02 Jan 2021 18:16:06 +0800</pubDate><description><![CDATA[文章目录进程和线程的区别线程的优点创建一个线程中使用start() 和 run() 两种方法的区别多线程多线程在什么场景下使用，以及多线程的优点和特性。什么因素会影响多线程的效率常用API
进程和线程的区别

进程 ： 系统分配资源的最小单位
线程 ：系统的调度的最小单位 ；每一个进程至少含有一个线程，即主线程（系统级别的，c语言的主线程），但是java级别的主线程即main方法；
进程有自己的内存空间地址，而线程只独享指令流执行的必要资源，比如寄存器和栈
由于同一进程的各线程间共享内存和资源文件，可以不通]]></description><category></category></item></channel></rss>