<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[clyss1234的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/clyss1234</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; clyss1234]]></copyright><item><title><![CDATA[Java基础11—函数式编程]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532727</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532727</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:19:21 +0800</pubDate><description><![CDATA[文章目录1. Lambda表达式1.1 通过接口传递代码1.2 Lambda语法1.3 函数式接口1.4 预定义的函数式接口1.5 方法引用1.6 函数的复合1.7 小结2. 函数式数据处理：基本语法2.1 基本转换2.2 中间操作2.3 终端操作2.4 构建流2.5 函数式数据处理思维3. 函数式数据处理：强大方便的收集器Collect3.1 理解collect3.2 容器收集器3.3 字符串收集器3.4 分组4. 组合式异步编程4.1 异步任务管理4.2 与Future/FutureTask对比4.3 ]]></description><category></category></item><item><title><![CDATA[Java多线程10—线程池框架]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556637</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556637</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:18:44 +0800</pubDate><description><![CDATA[文章目录1. 线程池框架1.1 Executor1.2 ExecutorService1.3 ThreadPoolExecutor1.4 ScheduleThreadPoolExecutor2. 线程池原理2.1 理解线程池2.2 线程池使用特点2.3 线程池的组成2.4 任务队列2.5 任务拒绝策略2.6 工厂类Executors3. 线程池工作机制3.1 工作流程4. 3种线程池4.1 newCachedThreadPool4.2 newFixedThreadPool4.3 newScheduledTh]]></description><category></category></item><item><title><![CDATA[Java多线程9—Future类框架]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556558</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556558</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:17:34 +0800</pubDate><description><![CDATA[文章目录1. Future框架1.1 Future接口1.2 FutureTask类CAS操作核心属性构造函数接口实现Runnable接口实现Future接口的实现cancel(boolean mayInterruptIfRunning)isCancelled()isDone()get()get(long timeout, TimeUnit unit)1.3 CompletableFuture类
此文大部分内容并不是本人执笔完成，因拷贝到本地笔记时忘标记原链接，因此无法指明原作者，罪过罪过，还望海涵，特此声]]></description><category></category></item><item><title><![CDATA[Java多线程8—Thread与Runnable]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556537</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556537</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:13:20 +0800</pubDate><description><![CDATA[文章目录1. 创建多线程1.1 创建多线程的3种方式1.1.1 继承Thread类1.1.2 实现Runnable接口1.1.3 实现Callable接口1.1.4 基于线程池1.2 为什么要提出3种方式？1.2.1 Thread类的start()与run()1.2.2 3种创建方式的区别1.3 线程的声明周期2. Thread类源码解析2.1 Thread方法2.2 native方法2.3 其他方法3. 终止线程的4种方式3.1 正常退出3.2 使用标志位3.3 使用线程中断Interrupt3.4 st]]></description><category></category></item><item><title><![CDATA[Java多线程6—阻塞队列]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556524</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556524</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:12:26 +0800</pubDate><description><![CDATA[文章目录1. 阻塞队列概述1.1 线程阻塞的情况1.2 阻塞队列的主要方法2. Java中的阻塞队列2.1 ArrayBlockingQueue（公平锁/非公平锁）2.2 LinkedBlockingQueue（读写锁）2.3 LinkedBlockingDeque2.4 PriorityBlockingQueue2.5 DelayQueue（缓存失效、定时任务 ）2.6 SynchronousQueue（不存储数据、可用于传递数据）2.7 LinkedTransferQueue
通常，实现线程安全的情况有]]></description><category></category></item><item><title><![CDATA[Java多线程5—ReentrantLock与Condition]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556487</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556487</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:11:13 +0800</pubDate><description><![CDATA[文章目录1. ReentrantLock重入锁1.1 ReentrantLock源码解析1.1.1 lock操作1.1.2 release操作2. synchronized和Reetrantlock的区别3. Condition及其介绍3.1 Condition的介绍3.2 Condition在AQS中的使用3.3 Condition在阻塞队列中的实现4. [阻塞和唤醒线程——LockSupport功能简介及原理浅析](https://www.cnblogs.com/takumicx/p/9328459.h]]></description><category></category></item><item><title><![CDATA[Java多线程4—AQS]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556404</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556404</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:09:08 +0800</pubDate><description><![CDATA[文章目录1. 锁1.1 自旋锁与互斥锁1.2 乐观锁与悲观锁1.3 公平锁与非公平锁1.4 共享锁与独占锁1.5 分段锁2. 自旋锁基础之CAS自旋2.1 CAS介绍2.2 CAS的优缺点3. AQS3.1 AQS的核心思想3.2 CLH锁3.3 MCS锁3.4 AQS源码解析
自旋锁指多线程下，当一个线程尝试获取锁的时候，如果锁被占用，则在当前线程循环检查锁是否被释放，此时当前线程并没有休眠或挂起。
1. 锁
在前面提到了synchronized关键字，其也是Java实现的一种锁机制，但本人认为其并不能实]]></description><category></category></item><item><title><![CDATA[Java多线程3—volatile]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556395</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556395</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:04:09 +0800</pubDate><description><![CDATA[文章目录1. Volatile1.1 volatile实现原理1.2 volatile特性1.3 volatile性能1.4 volatile适用场景
1. Volatile
volatile是一种轻量且在有限的条件下线程安全技术，它保证修饰的变量的可见性和有序性，但非原子性。相对于synchronize高效，而常常跟synchronize配合使用。

JMM内存模型

这里主要描述的线程，工作内存，主存的变量的读写关系：

主存存放线程需要操作的变量，但线程并不直接操作主存。
每个线程读取主存变量都是先拷]]></description><category></category></item><item><title><![CDATA[Java多线程2—synchronized]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556364</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556364</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:03:34 +0800</pubDate><description><![CDATA[文章目录1. synchronized概念1.1 介绍1.2 实现原理1.4 Monitor对象1.3 synchronized使用场景1.4 JVM对锁机制的优化1.4.1 在Java SE 1.6时的锁机制1.4.2 偏向锁、轻量级锁1.4.3 锁实验1.4.4 JVM提出的其他优化2. 控制方法2.1 sleep()和wait()方法的区别
1. synchronized概念
1.1 介绍
synchronized不同于前面提到的ReentrantLock，其是一个Java语言提供的关键字，从某种层面]]></description><category></category></item><item><title><![CDATA[Java多线程1—并发引言]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120556328</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120556328</guid><author>clyss1234</author><pubDate>Wed, 29 Sep 2021 21:01:46 +0800</pubDate><description><![CDATA[文章目录1. 进程与线程1.1 概念1.2 死锁2. JMM内存模型3. 多线程与JMM3.1 原子性3.2 可见性3.3 有序性3.3.1 指令重排3.3.2 Happend-before原则解决编译器重排序3. 小结
1. 进程与线程
1.1 概念

进程

进程是程序的一次执行过程，是系统运行程序的基本单位，因此进程是动态的。系统运行一个程序即是一个进程从创建，运行到消亡的过程。
在 Java 中，当我们启动 main 函数时其实就是启动了一个 JVM 的进程，而 main 函数所在的线程就是这个进程]]></description><category></category></item><item><title><![CDATA[Java基础10—注解]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532686</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532686</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:45:32 +0800</pubDate><description><![CDATA[文章目录1. 内置注解1.1 注解的本质1.2 元注解1.3 注解的工作原理2. 创建注解3. 查看注解信息4. 注解的使用：定制序列化
1. 内置注解


@Override
@Override修饰一个方法，表示该方法不是当前类首先声明的，而是在某个父类或实现的接口中声明的，当前类“重写”了该方法。


@Deprecated
@Deprecated可以修饰的范围很广，包括类、方法、字段、参数等，它表示对应的代码已经过时了，程序员不应该使用它，不过，它是一种警告，而不是强制性的。


@SuppressW]]></description><category></category></item><item><title><![CDATA[Java基础9—反射]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532503</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532503</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:40:36 +0800</pubDate><description><![CDATA[文章目录1. 反射和new1.1 静态编译和动态编译1.2 获取Class对象的四种方式2. 反射实例3. 反射与泛型3.1 反射获取泛型实例
在一般操作数据的时候，我们都是知道并且依赖于数据类型的，比如：
1）根据类型使用new创建对象。
2）根据类型定义变量，类型可能是基本类型、类、接口或数组。
3）将特定类型的对象传递给方法。
4）根据类型访问对象的属性，调用对象的方法。
编译器也是根据类型进行代码的检查编译的。
反射不一样，它是在运行时，而非编译时，动态获取类型的信息，比如接口信息、成员信息、方法信]]></description><category></category></item><item><title><![CDATA[Java基础8—IO流与IO多路复用]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532399</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532399</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:39:37 +0800</pubDate><description><![CDATA[文章目录1. IO流1.1 IO流的分类1.2 常见IO流1.2.1 InputStream2.2 字节输出流2.2.3 字符输入流2.2.4 字符输出流2.3 字节流和字符流的区别2. 序列化2.1 序列化的实现2.2 反序列化的实现2.3 序列化版本号**serialVersionUID**2.4 序列化使用场景3. IO模型3.1 BIO3.2 NIO3.3 IO多路复用3.3.1 select3.3.2 Poll3.3.3 Epoll3.4 异步IO3.4.1 io_uring
1. IO流
几乎所]]></description><category></category></item><item><title><![CDATA[Java基础7—泛型]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532356</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532356</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:35:47 +0800</pubDate><description><![CDATA[文章目录1. 泛型1.1 泛型的实现1.2 泛型的好处1.3 泛型的用途1.4 小结2. 常用通配符2.1 理解通配符2.2 总结
1. 泛型
Java 泛型（generics）是 JDK 5 中引入的一个新特性, **泛型提供了编译时类型安全检测机制，该机制允许程序员在编译时检测到非法的类型。**泛型的本质是参数化类型，也就是说所操作的数据类型被指定为一个参数。
1.1 泛型的实现
Java 的泛型是伪泛型，这是因为 Java 在编译期间，所有的泛型信息都会被擦掉，这也就是通常所说类型擦除 。
Java在]]></description><category></category></item><item><title><![CDATA[Java基础5—包装类]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532239</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532239</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:32:13 +0800</pubDate><description><![CDATA[文章目录1. 基本用法1.1 包装类的共同点2. 剖析String2.1 内部原理2.2 编码转换2.3 常量字符串3. 剖析StringBuilder3.1 基本用法3.2 内部原理3.3 String的+和+=3.4 String，StringBuilder和StringBuffer4. 随机4.1 Math.random4.2 随机的基本原理4.3 洗牌4.4 抢红包算法5. 习题
Java有8种基本类型，每种基本类型都有一个对应的包装类。包装类是什么呢？
包装类是一个类，内部有一个实例变量，保存对应]]></description><category></category></item><item><title><![CDATA[Java基础4—关键字]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532133</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532133</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:27:42 +0800</pubDate><description><![CDATA[文章目录1. static2. final3. this4. super
前面提到了多种关键字，比如static、final，下面我们就来看看这些关键字到底有什么用？
1. static
在《Java编程思想》P86页有这样一段话：  “static方法就是没有this的方法。在static方法内部不能调用非静态方法，反过来是可以的。而且可以在没有创建任何对象的前提下，仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
简而言之，static的作用就是方便在没有创建对象的情况下]]></description><category></category></item><item><title><![CDATA[Java基础3—面向对象]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120532104</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120532104</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:26:33 +0800</pubDate><description><![CDATA[文章目录1. 面向对象1.1  封装1.1.1 `访问控制符`1.2 继承1.2.1 抽象类1.2.2 接口1.2.3 `接口与抽象类的区别`1.3 多态1.3.1 编译时多态1.3.2 运行时多态1.3.3 重写和重载的区别2. 类2.1 内部类2.1.1 成员内部类2.1.2 局部内部类2.1.3 匿名内部类2.1.4 静态内部类
1. 面向对象
面向对象编程的特征：抽象、封装、继承、多态。
1.1  封装
我们知道，Java是面向对象的语言，而面向对象设计语言的三大特性之一就是封装。封装的作用就是将对]]></description><category></category></item><item><title><![CDATA[Java基础2—基本数据类型]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120531939</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120531939</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:21:42 +0800</pubDate><description><![CDATA[文章目录1. 基本数据类型表2. 类型转换
1. 基本数据类型表




基本类型
大小/字节
取值范围
包装器类型
示例
默认值




boolean
1
true / false
Boolean
boolean flag = false;
false


byte
1
-2^7 ~2^7-1
Byte
byte b=10;
0


char
2
0~2^16-1
Character
char c= ‘c’;
‘\u0000’


short
2
-2^15 ~2^15-1
Short
short b=]]></description><category></category></item><item><title><![CDATA[Java基础1—初识Java]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120531832</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120531832</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 16:19:16 +0800</pubDate><description><![CDATA[文章目录1. 面向对象与面向过程2. Java语言的特点3. JVM，JDK与JRE3.1 字节码3.2 Java程序从源代码到运行3.3 HotSpot的惰性评估3.4 JDK与JRE3.5 总结4. **`Oracle JDK`和`OpenJDK`的对比**5. java与Cpp的区别
1. 面向对象与面向过程
面向过程：

性能比面向对象高，因为类调用时需要实例化，开销比较大，比较消耗资源；
没有面向对象易维护、易复用、易扩展
性能比面向对象高

面向对象：

易维护、易复用、易扩展，可以设计出低耦合]]></description><category></category></item><item><title><![CDATA[MySQL系列11—简单优化]]></title><link>https://blog.youkuaiyun.com/clyss1234/article/details/120518411</link><guid>https://blog.youkuaiyun.com/clyss1234/article/details/120518411</guid><author>clyss1234</author><pubDate>Tue, 28 Sep 2021 09:00:52 +0800</pubDate><description><![CDATA[文章目录1. 结构优化1.1 四大范式1.2 分区表1.2.1 分区表的操作1.2.2 分区类型1.2.3 分区实例1.3 分库分表3. 查询优化3.1 MySQL中的select执行顺序3.2 SQL优化3.3 锁设置原则3.4 MySQL执行计划3.4 避免临时表3.5 索引优化3.5.1 建立索引3.5.2 避免索引3.5.3 索引失效场景3.6 慢查询与showProfileshow profile4. 系统配置优化5. 硬件资源优化5.1 主从复制5.1.1 主从复制是什么5.1.2 主从复制的优]]></description><category></category></item></channel></rss>