<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Java_Mike的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Java_Mike</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Java_Mike]]></copyright><item><title><![CDATA[基于JDK8的ArrayList源码剖析]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/118628743</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/118628743</guid><author>Java_Mike</author><pubDate>Wed, 21 Jul 2021 17:35:43 +0800</pubDate><description><![CDATA[前言
ArrayList是我们开发过程中经常用到的集合类，一般涉及到集合操作的业务都会想到它，在java的集合家族中，知名度最高的集合类非他莫属。但是人无完人，ArrayList也存在利与弊，在开发过程中如何权衡呢？让我们通过源码对ArrayList进行一个深入的了解，了解底层实现，这样就能在使用过程中根据需求来决定是否使用该集合类。
走近ArrayList
ArrayList基于数组实现，在普通数组基础上增加了自动扩容等功能。实现了List, RandomAccess, Cloneable, java.i]]></description><category></category></item><item><title><![CDATA[深入了解JVM垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/118248546</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/118248546</guid><author>Java_Mike</author><pubDate>Sun, 04 Jul 2021 16:41:55 +0800</pubDate><description><![CDATA[Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙，墙外面的人想进去，墙里 面的人却想出来。
-《深入理解Java虚拟机：JVM高级特性与最佳实践（第三版）》

要对Java程序进行性能调优，就不得不理解JVM内部的垃圾回收机制。JVM就像一位勤劳的环卫工人，帮我们清理Java程序运行过程中产生的各种垃圾。接下来就让我们深度剖析这位环卫工人清理垃圾的过程。从而能帮我减少无用垃圾的产生。
本文只讨论JDK8下的堆内存空间垃圾回收。
1、什么是JVM垃圾回收

垃圾回收(Garbage Col.]]></description><category></category></item><item><title><![CDATA[java同步神器-Synchronized锁升级优化]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/118050991</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/118050991</guid><author>Java_Mike</author><pubDate>Sun, 20 Jun 2021 14:54:27 +0800</pubDate><description><![CDATA[前言
相信大家对Synchronized这个关键字并不陌生，在解决多线程并发操作下数据安全问题时，都会想到这个关键字，用来对共享资源进行加锁。但在JDK1.6版本之前，Synchronized是一个重量级锁，阻塞或唤醒java线程需要操作系统切换CPU状态来完成，这种状态转换需要耗费处理器时间。如果同步代码块中的内容过于简单，状态转换消耗的时间有可能比执行用户代码的时间还要长。
JDK1.6对Synchronized加锁进行了优化，引入了 “偏向锁” 和 “轻量级锁”。于是目前Synchronized加锁共]]></description><category></category></item><item><title><![CDATA[深入分析MySQL索引优化导致的死锁问题]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/117897997</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/117897997</guid><author>Java_Mike</author><pubDate>Mon, 14 Jun 2021 16:05:19 +0800</pubDate><description><![CDATA[死锁是我们在大学时就接触过的概念，由于鄙人资历尚浅，毕业后的开发过程中几乎没有碰到过死锁问题。然而常在河边走，哪有不湿鞋，最近就碰到了一个诡异的死锁问题，于是就抓住这次难得机会，对这次的死锁问题好好研究了一番。于是就总结出了这篇博客。
发现问题
某一天，我一如既往地对一个批量并发操作相关的业务进行自测，在自测过程中发现有两个线程执行失败了，通过日志发现是更新状态时导致的死锁问题。第一眼见到这个问题，我有点纳闷，明明更新的不是同一行记录，为什么会出现死锁呢？于是带着这个问题在网上找了一些大佬的文章，发现是索引]]></description><category></category></item><item><title><![CDATA[小白理解HashMap线程非安全]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/117846467</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/117846467</guid><author>Java_Mike</author><pubDate>Sat, 12 Jun 2021 17:00:15 +0800</pubDate><description><![CDATA[小白理解HashMap线程非安全JDK1.7线程非安全JDK1.8线程非安全总结
面试官总是喜欢问我这个小白HashMap为什么线程非安全，经过几次打击的的我下定决心要理解HahsMap线程非安全的原因。
经过多方面的了解，我了解到HashMap线程非安全在不同JDK有不同的体现：

JDK1.7：多个线程进行扩容时会出现链表死循环，数据丢失问题
JDK1.8：数据被覆盖

下面结合源码详细了解其中的奥秘
JDK1.7线程非安全
jdk7中线程非安全主要是因为在扩容函数 HashMap#transfer()]]></description><category></category></item><item><title><![CDATA[el-upload在chrome浏览器下上传文件ERR_UPLOAD_FILE_CHANGED问题]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/106397772</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/106397772</guid><author>Java_Mike</author><pubDate>Thu, 28 May 2020 10:11:23 +0800</pubDate><description><![CDATA[参考 https://stackoverflow.com/questions/57516930/prevent-html-file-input-from-selecting-files-in-google-drive-while-using-android.

]]></description><category></category></item><item><title><![CDATA[大话设计模式之建造者模式（Java总结）]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/105473865</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/105473865</guid><author>Java_Mike</author><pubDate>Sun, 12 Apr 2020 19:31:03 +0800</pubDate><description><![CDATA[设计模式之建造者模式前言场景建造者模式代码示例
前言
  如果需要将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示的意图时，我们需要应用一个设计模式，建造者模式，又叫生成器模式。
场景
  复杂产品的构建过程
建造者模式
  将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。

代码示例
产品类
public class Product {

   ...]]></description><category></category></item><item><title><![CDATA[大话设计模式之外观模式（Java总结）]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/105338408</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/105338408</guid><author>Java_Mike</author><pubDate>Mon, 06 Apr 2020 09:51:42 +0800</pubDate><description><![CDATA[设计模式之外观模式前言场景外观模式代码示例何时使用外观模式
前言
  当我们处理某个业务需要调用多个接口时，可以将这些接口封装在一个高层接口里，通过这个高层接口来调用内部的一组接口。这个高层接口相当于提供给对外的一个界面。因此这种模式就是外观模式。
场景
  子系统调用
外观模式
  为子系统中的一组接口提供一个一致的界面，此模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。

代码示例...]]></description><category></category></item><item><title><![CDATA[大话设计模式之模板方法模式（Java总结）]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/105329293</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/105329293</guid><author>Java_Mike</author><pubDate>Sun, 05 Apr 2020 17:13:18 +0800</pubDate><description><![CDATA[设计模式之模板模式前言场景模板方法模式代码示例
前言
  我们有时会定义一套简单的业务流程，但是流程的每个步骤具体实现会有区别。模板方法模式就能很好地实现该逻辑。固定的业务流程就相当于是一套模板，每个步骤的具体实现相当于模板的具体内容。
场景
  抄试卷答题
模板方法模式
  定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步...]]></description><category></category></item><item><title><![CDATA[Springboot集成RabbitMQ]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/104224923</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/104224923</guid><author>Java_Mike</author><pubDate>Sun, 09 Feb 2020 08:28:05 +0800</pubDate><description><![CDATA[Springboot集成RabbitMQ概述项目搭建
概述
Springboot作为一个流行的轻量级框架，对RabbitMQ提供了很好的支持。本篇我们就介绍如何在Spring Boot中集成RabbitMQ。
项目搭建
1、pom.xml
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apa...]]></description><category></category></item><item><title><![CDATA[linux搭建RabbitMQ服务器]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/104196400</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/104196400</guid><author>Java_Mike</author><pubDate>Thu, 06 Feb 2020 15:27:01 +0800</pubDate><description><![CDATA[linux搭建RabbitMQ服务器前言环境准备安装RabbitMQ环境配置基本命令
前言
RabbitMQ采用Erlang语言开发，是基于AMOP标准开发的最受欢迎消息中间件之一。它轻巧，易于部署，并且支持多种消息传递协议，受到大多数程序员的青睐。下面就分享一下在linux上搭建RabblitMQ的流程。
环境准备
系统： Linux 3.10.0-957.21.3.el7.x86_64
Rab...]]></description><category></category></item><item><title><![CDATA[Mongodb 忘记密码]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/104091373</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/104091373</guid><author>Java_Mike</author><pubDate>Mon, 27 Jan 2020 11:17:14 +0800</pubDate><description><![CDATA[Mongodb 忘记密码前言相关环境解决方法解决过程
前言
在自己linux服务器上安装了mongodb，很久没用过了，今天连接时发现忘了密码，于是记录下修改密码的过程。分享给遇到相同问题的伙伴们。
相关环境
系统： Linux 3.10.0-957.21.3.el7.x86_64
mongodb： v4.0.10
解决方法
我重置密码的方法是删除所有当前帐户，然后添加一个账户，方法有点暴力，有更...]]></description><category></category></item><item><title><![CDATA[docker常用命令]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/103357362</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/103357362</guid><author>Java_Mike</author><pubDate>Mon, 02 Dec 2019 21:16:38 +0800</pubDate><description><![CDATA[1、yum安装docker:
yum -y install docker
2、查看docker版本：
docker version
3、启动 Docker 后台服务
service docker start
4、测试运行 hello-world,由于本地没有hello-world这个镜像，所以会下载一个hello-world的镜像，并在容器内运行。
docker run hello-world
5...]]></description><category></category></item><item><title><![CDATA[Java8使用Stream操作集合运算]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/101846440</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/101846440</guid><author>Java_Mike</author><pubDate>Tue, 01 Oct 2019 15:34:12 +0800</pubDate><description><![CDATA[前言
Srteam是Java 8提供的一个强有力的工具，可以让你以一种声明的方式处理数据。从而写出高效率，干净，简洁的代码。本文记录了使用Stream代替java集合的一些常用繁琐操作。
准备工作
集合初始化
List&lt;String&gt; strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List&lt;I...]]></description><category></category></item><item><title><![CDATA[解决hexo d命令报错 ERROR Deployer not found: git]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/96456318</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/96456318</guid><author>Java_Mike</author><pubDate>Thu, 18 Jul 2019 21:39:16 +0800</pubDate><description><![CDATA[解决hexo d命令报错 ERROR Deployer not found: git问题乍现探索过程柳暗花明完美句号
问题乍现
本来想开开心心搭一个属于自己的博客网站，于是按照网上的教程搭建hexo环境，刚开始一切都很顺利，然而天降大坑，执行hexo d命令部署的时候报如下错误:
ERROR Deployer not found: git

探索过程
根据网上热心人士提供的方法使用以下命令安装he...]]></description><category></category></item><item><title><![CDATA[Linux安装MongoDB]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/94960299</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/94960299</guid><author>Java_Mike</author><pubDate>Sun, 07 Jul 2019 10:09:17 +0800</pubDate><description><![CDATA[Linux安装MongoDB前言环境准备安装
前言
MongoDB是用C++等语言编写的一种面向文档的非关系型数据库，用于解决应用程序开发社区中的大量现实问题，是非关系数据库当中功能最丰富，最像关系数据库的。
本文介绍MongoDB在linux系统下的安装。
环境准备
系统：CentOS 7.4.1708
安装包：mongodb-linux-x86_64-4.0.10
安装包下载：https://...]]></description><category></category></item><item><title><![CDATA[大话设计模式之原型模式（Java总结）]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/90760367</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/90760367</guid><author>Java_Mike</author><pubDate>Sat, 08 Jun 2019 21:55:01 +0800</pubDate><description><![CDATA[设计模式之原型模式前言场景原型模式
前言
  在项目开发中，会遇到多次实例化同一个类的情况，java中每次实例化一个对象都要执行一次构造函数，如果构造函数的执行时间很长，这个初始化操作就会影响代码运行的效率。设计模式中的原型模式就能很好地避免这种情况.
场景
  简历的复制
原型模式
  用原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。


...]]></description><category></category></item><item><title><![CDATA[大话设计模式之工厂方法模式（Java总结）]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/90678557</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/90678557</guid><author>Java_Mike</author><pubDate>Wed, 29 May 2019 21:07:56 +0800</pubDate><description><![CDATA[设计模式之工厂方法模式前言场景工厂方法模式代码示例优点
前言
  说到工厂方法模式，就不得不提到简单工厂模式。后者违背了开放-封闭原则，所以才有了后者，即工厂方法模式。
场景
  加减乘除计算器

工厂方法模式
  定义一个用于创建对象的接口，让子类决定实例化哪一个类。工厂方法使一个类的实例延迟到其子类。

代码示例
工厂接口
public interface IFactory {

    Op...]]></description><category></category></item><item><title><![CDATA[大话设计模式之代理模式（Java总结）]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/90417362</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/90417362</guid><author>Java_Mike</author><pubDate>Wed, 22 May 2019 20:35:32 +0800</pubDate><description><![CDATA[设计模式之代理模式前言场景代理模式代码示例
前言
  代理是我们在开发中经常用到的功能。例如WebService中的远程代理。里面涉及到的设计模式就是代理模式。
场景
  追求者通过第三方送礼物给被追求者
代理模式
  为其他对象提供一种代理以控制对这个对象的访问。

代码示例
代理接口
public interface GiveGift {

    void giveDolls();

   ...]]></description><category></category></item><item><title><![CDATA[大话设计模式之装饰模式（Java总结）]]></title><link>https://blog.youkuaiyun.com/Java_Mike/article/details/90339372</link><guid>https://blog.youkuaiyun.com/Java_Mike/article/details/90339372</guid><author>Java_Mike</author><pubDate>Sun, 19 May 2019 14:01:46 +0800</pubDate><description><![CDATA[设计模式之装饰模式前言场景策略模式代码示例优点
前言
  在开发过程中，我们会遇到要将某一个功能赋予额外的职责，并把这些增加了额外职责的功能按照正确的顺序串联起来进行控制，且可以灵活地调换这些顺序，输出最后执行的结果，装饰模式就是这样一个非常有意思的设计模式。
场景
  衣服、鞋子、领带、披风都可以理解为对人的装饰。而且可以选择先穿衣服再穿鞋子，或者先穿鞋子，再穿衣服
策略模式
  动态地给一个对...]]></description><category></category></item></channel></rss>