<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yojofly的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yojofly</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yojofly]]></copyright><item><title><![CDATA[gson 解析int类型转换为double解决方案]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/127263831</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/127263831</guid><author>yojofly</author><pubDate>Tue, 11 Oct 2022 15:12:52 +0800</pubDate><description><![CDATA[Gson解析Int类型转换为double类型解决方案]]></description><category></category></item><item><title><![CDATA[jvm总结]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/127010362</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/127010362</guid><author>yojofly</author><pubDate>Fri, 23 Sep 2022 16:53:07 +0800</pubDate><description><![CDATA[jvm知识点汇总]]></description><category></category></item><item><title><![CDATA[io,nio,aio总结]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/126370363</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/126370363</guid><author>yojofly</author><pubDate>Tue, 16 Aug 2022 17:18:18 +0800</pubDate><description><![CDATA[io,nio,aio总结]]></description><category></category></item><item><title><![CDATA[并发编程-JUC核心之AQS]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/116176402</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/116176402</guid><author>yojofly</author><pubDate>Mon, 26 Apr 2021 22:49:53 +0800</pubDate><description><![CDATA[JUC核心之AQS
1.1 重入锁ReentrantLock的初步认识
什么是锁


锁是用来解决多线程并发访问共享资源所带来的数据安全性问题的手段，对一个共享资源加锁后，如果有一个线程获得了锁，那么其他线程无法访问这个共享资源

加锁前后的区别

通过查看jdk源码目录rt.jar-&gt;java-&gt;util-&gt;concurrent-&gt;locks

可以看到lock接口的很多子类和实现，我们先使用ReentrantLock
public class ReenDemoTest {
  .]]></description><category></category></item><item><title><![CDATA[并发编程-发布与逃逸]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/116175821</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/116175821</guid><author>yojofly</author><pubDate>Mon, 26 Apr 2021 22:16:54 +0800</pubDate><description><![CDATA[1.发布与逃逸
1.1 发布对象

发布的意思是是一个对象能够被当前范围之外的代码所使用


1.2 不安全发布

1.3 对象溢出

一种错误的发布，当一个对象还没有构造完成时，就使它被其他线程所见


逃逸带来的问题

2. 安全发布对象的4种方法
2.1安全发布对象

在静态初始化函数中初始化一个对象引用
将对象的引用保存到volatile类型的域或者AtomicReference对象中（利用volatile happen-before规则）
将对象的引用保存到某个正确构造对象的final类型域中（初]]></description><category></category></item><item><title><![CDATA[并发编程-线程安全性分析]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/115386382</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/115386382</guid><author>yojofly</author><pubDate>Thu, 01 Apr 2021 22:30:41 +0800</pubDate><description><![CDATA[如何理解线程安全
当多个线程访问某个对象时候，不管运行时环境采用何种调度方式或者这些线程将如何交替执行，并且在主调代码中不需要任何额外的同步或者协同，这个类都能表现出正确的行为，那么就称这个类是线程安全的
1 线程安全问题的本质
产生原因，cpu，内存，io的读写速率不同，cpu&gt;内存&gt;io
计算机通过建立高速缓存区提高了效率

优化成果：

1.cpu增加了告诉缓存，均衡与内存的速度差异
2.操作系统增加进程，线程，以及分时复用cpu，均衡cpu与i/o设备的差异
3.编译程序优化指令的执行顺]]></description><category></category></item><item><title><![CDATA[并发编程-线程的基本操作和原理]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/115149639</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/115149639</guid><author>yojofly</author><pubDate>Tue, 23 Mar 2021 22:56:01 +0800</pubDate><description><![CDATA[触发线程声明周期发生变化的操作
1.Thread.join的使用及原理
Thread.join的作用是保证线程执行结果的可见性
实例：
public class ThreadJoinTest {
    public static int i = 0;
    public static int x = 0;
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thr]]></description><category></category></item><item><title><![CDATA[并发编程-线程的基本介绍]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/115145916</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/115145916</guid><author>yojofly</author><pubDate>Tue, 23 Mar 2021 21:43:49 +0800</pubDate><description><![CDATA[线程的基本认识
1.线程的基本介绍
线程是操作系统能够进行运算调度的最小单位。它包含在进程之后，是进程中实际的运作单位
为什么会有线程

在多核cpu中利用多线程可以实现真正意义上的并行执行
在一个应用进程中，会存在多个同时执行的任务，如果其中一个任务呗阻塞，将会引起不依赖该任务的任务也被阻塞，通过对不同任务创建不同的线程去处理，可以提升程序处理的实时性
线程可以认为是轻量级的进程，所以线程的创建，销毁比进程快

为什么要用多线程

异步执行
利用多cpu资源实现真正意义上的并行执行

线程应用场景

使用]]></description><category></category></item><item><title><![CDATA[java核心-注解]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/115103170</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/115103170</guid><author>yojofly</author><pubDate>Mon, 22 Mar 2021 22:31:01 +0800</pubDate><description><![CDATA[注解：
注解的概念：说明程序的，给计算机看
注解：也叫元数据，一种代码级别的说明，他是jdk1.5版本之后引入的一个特性他，与类，接口，枚举是一个层次，他可以声明在包，类，字段，方法，局部变量，方法参数等，对元素进行说明，注释
注释：用文字描述程序，给程序员看的
/**/
//
注解作用分类：
1.编写文档，通过java代码里标识的注解生成文档【生成doc文档】
2.代码分析：通过代码里标识的注解对代码进行分【使用反射】
3.编译检查：通过代码里标识的注解让编译器能够实现基本的编译检查 override
2]]></description><category></category></item><item><title><![CDATA[java核心-反射]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/114339781</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/114339781</guid><author>yojofly</author><pubDate>Wed, 03 Mar 2021 22:54:42 +0800</pubDate><description><![CDATA[反射
反射即反向探知
值在java程序运行的装填中
1.对于给定的一个类class对象，可以获得这个类对象的所有属性和方法
2.对于给定的一个对象，class都能够调用他的任意一个属性和方法这种动态获取类的内容的以及动态调用对象的方法和获取属性的机制。
反射的优缺点：
优点：增加程序灵活性，避免固有逻辑写死到程序中
代码相对简洁，提高程序的复用性
缺点：相比于直接调用，反射有比较大的性能消耗
内部暴露和安全隐患
优点实例
新建一个ball借口，定义打球的方法
public interface Ball {
]]></description><category></category></item><item><title><![CDATA[java核心-泛型]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/114297071</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/114297071</guid><author>yojofly</author><pubDate>Tue, 02 Mar 2021 23:21:13 +0800</pubDate><description><![CDATA[泛型：
本质上是一个参数化类型
// 指定能够存放的数据类型，统一类型，防止出现类型转换异常
        List&lt;String&gt; list = new ArrayList&lt;&gt;();
        list.add("111");

泛型的擦除：
泛型只在编译阶段有效，在编译只有，jvm会采取去泛型化的措施，在运行阶段没有效果
实例：
public static void main(String[] args) throws Exception {
        // 指定能]]></description><category></category></item><item><title><![CDATA[java核心-集合]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/114296154</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/114296154</guid><author>yojofly</author><pubDate>Tue, 02 Mar 2021 22:22:44 +0800</pubDate><description><![CDATA[FallFast机制：
快速失败的机制，java集合类为了应对并发访问，在集合迭代过程中防止内部结构发生变化的一种防护措施，这种错误检查机制有可能发生错误，通过抛出java.util.currentModificationException
linedList
linkedList通过双向链表实现的，他的数据结构具有双向链表的优缺点，既然是双向链表，他的顺序访问效率高，随机访问效率低，包含重要的私有内部静态类：Node
private static class Node&lt;E&gt; {
       ]]></description><category></category></item><item><title><![CDATA[java核心-简单的数据结构]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/110502011</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/110502011</guid><author>yojofly</author><pubDate>Wed, 02 Dec 2020 22:13:31 +0800</pubDate><description><![CDATA[1.数据结构
1.数组
数组的三种定义方式，和数组容易出现的异常，空指针的数组下标越界
特点：
内存地址连续，使用之前必须要指定长度
可以通过下标访问的方式访问资源，查询效率比较高，
增删效率低，需要复制数组，源码可见
public boolean add(E e) {    
    ensureCapacityInternal(size + 1);  
    elementData[size++] = e;   
    return true;}

可见，在增加操作的时候，会先对数组的大小扩容判断，]]></description><category></category></item><item><title><![CDATA[使用gitflow完成新分支的创建和代码的提交]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/103761441</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/103761441</guid><author>yojofly</author><pubDate>Mon, 30 Dec 2019 09:52:53 +0800</pubDate><description><![CDATA[1.首先安装gitflow
作者本人电脑配置为windows环境，使用如下命令：
 wget -q -O - --no-check-certificate https://raw.github.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-installer.sh install stable | bash


其他环境：
linu...]]></description><category></category></item><item><title><![CDATA[elasticSearch的使用]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/103661648</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/103661648</guid><author>yojofly</author><pubDate>Mon, 23 Dec 2019 11:11:35 +0800</pubDate><description><![CDATA[这里对于elasticSearch的下载安装和配置就不做详细的说明，具体说明下如何使用:
1.创建索引和删除索引
SpringBoot-data-elasticsearch提供了面向对象的方式操作elasticsearch
业务：创建一个商品对象，有这些属性：
id，title，category，brand，price，图片地址
在SpringDataElasticSearch中，只需要操作对象，...]]></description><category></category></item><item><title><![CDATA[rabbitMQ的使用]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/103661353</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/103661353</guid><author>yojofly</author><pubDate>Mon, 23 Dec 2019 10:40:28 +0800</pubDate><description><![CDATA[安装和配置这里就不多说了，网上有很多的教程，这里说明如何使用rabbitMQ
(这里简单说明点对点的模式，也有发布订阅等多种模式)
1.需要创建两个maven工程，一个是任务的发送者另一个是任务的接受者
有两个子项目一个消息发送(rabbitmq-send) 一个接收消息(rabbitmq-receive)
2.在两个项目中添加配置如下：
spring:
rabbitmq:
host: local...]]></description><category></category></item><item><title><![CDATA[RESTful风格]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/103660202</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/103660202</guid><author>yojofly</author><pubDate>Mon, 23 Dec 2019 09:40:12 +0800</pubDate><description><![CDATA[1.RESTful风格的定义：
REST：Representational State Transfer（表象层状态转变），如果没听说过REST，你一定以为是rest这个单词，刚开始我也是这样认为的，后来发现是这三个单词的缩写，即使知道了这三个单词理解起来仍然非常晦涩难懂。如何理解RESTful架构，最好的办法就是深刻理解消化Representational State Transfer这三个单词...]]></description><category></category></item><item><title><![CDATA[基于mybatis-plus的多条件查询语句关联]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/103195317</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/103195317</guid><author>yojofly</author><pubDate>Fri, 22 Nov 2019 10:06:00 +0800</pubDate><description><![CDATA[AbstractWrapper：
说明:
QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类
用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为...]]></description><category></category></item><item><title><![CDATA[docker学习推荐文章]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/102685141</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/102685141</guid><author>yojofly</author><pubDate>Tue, 22 Oct 2019 16:22:27 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/qq_43371556/article/details/102631158

]]></description><category></category></item><item><title><![CDATA[作者第一次面试大公司的一些面试题和心得分享]]></title><link>https://blog.youkuaiyun.com/yojofly/article/details/102588738</link><guid>https://blog.youkuaiyun.com/yojofly/article/details/102588738</guid><author>yojofly</author><pubDate>Wed, 16 Oct 2019 17:09:44 +0800</pubDate><description><![CDATA[因为近期一次大公司的招人的机会，作者有幸参加了一次大公司的面试，体验了一套完整的流程：
大体面试过程是这样的：
第一轮：
机试：因为公司用的是自己的框架，所以对基础考究的比较深入：
这里记录四道面试题，有兴趣可以想一想如何解决：
第一题：写一种单例模式的实现方式（这里作者用的静态内部类的方式,因为随处都可以找到，这里就不附上代码了）
第二题：判断一个数组a[] 和b[] 判断在a中但是不在b数组中...]]></description><category></category></item></channel></rss>