<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bug_remover的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bug_remover</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bug_remover]]></copyright><item><title><![CDATA[AQS抽象队列同步器]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/120553874</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/120553874</guid><author>bug_remover</author><pubDate>Wed, 29 Sep 2021 18:37:45 +0800</pubDate><description><![CDATA[1、Java 并发包下很多 API 都是基于 AQS 来实现的加锁和释放锁等功能的。

⽐如说 ReentrantLock、ReentrantReadWriteLock 底层都是基于 AQS 来实现的。

AQS 对象就是实现加锁和释放锁的关键性的核⼼组件。

2、ReentrantLock加锁和释放锁的原理


ReentrantLock lock = new ReentrantLock();
//加锁
lock.lock();
//释放锁
lock.unlock();





①.AQS 对象内部有.]]></description><category></category></item><item><title><![CDATA[docker搭建gitlab流程]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/120315450</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/120315450</guid><author>bug_remover</author><pubDate>Wed, 15 Sep 2021 19:47:29 +0800</pubDate><description><![CDATA[1.下载镜像：


docker pull gitlab/gitlab-ce

2.创建挂载目录：


mkdir -p /usr/local/gitlab/config
mkdir -p /usr/local/gitlab/logs
mkdir -p /usr/local/gitlab/data

3.启动运行：


docker run -detach \
 --publish 8443:443 --publish 8880:80 --publish 8222:22 \
 --name gitla...]]></description><category></category></item><item><title><![CDATA[任务并行执行神器：Fork&Join]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/90402746</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/90402746</guid><author>bug_remover</author><pubDate>Tue, 21 May 2019 11:02:11 +0800</pubDate><description><![CDATA[Fork/Join是什么？

  Fork/Join框架是Java7提供的并行执行任务框架，思想是将大任务分解成小任务，然后小任务又可以继续分解，然后每个小任务分别计算出结果再合并起来，最后将汇总的结果作为大任务结果。其思想和MapReduce的思想非常类似。对于任务的分割，要求各个子任务之间相互独立，能够并行独立地执行任务，互相之间不影响。

我们可以通过Fork/Join单词字面上的意思去...]]></description><category></category></item><item><title><![CDATA[Mybatis Mapper接口实现类的源码分析]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/90292126</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/90292126</guid><author>bug_remover</author><pubDate>Fri, 17 May 2019 14:22:36 +0800</pubDate><description><![CDATA[MyBatis 是一款优秀的持久层框架，它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。我们在使用 Mybaits 进行 ，通常只需要定义几个 Mapper 接口，然后在编写一个 xml 文件，我们在配置文件中写好 sql , Mybatis 帮我们完成 Mapper 接口道具体实现的调用。以及将结果映射到 mode...]]></description><category></category></item><item><title><![CDATA[走进jvm]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/87841939</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/87841939</guid><author>bug_remover</author><pubDate>Thu, 21 Feb 2019 02:58:16 +0800</pubDate><description><![CDATA[java源代码是怎么被机器识别并执行的呢?答案是java虚拟机,即java virtual machine.

1、字节码(也称中间码,bytecode)

一、java所有的指令有200个左右,一个字节(8位)可以存储256种不同的指令信息,一个这样的字节称为字节码(bytecode).在代码的执行过程种,jvm将字节码解释执行,屏蔽了对底层操作系统的依赖;jvm也可以将字节码编译执行,如果是热...]]></description><category></category></item><item><title><![CDATA[Java面试含答案(最全版)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/87739899</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/87739899</guid><author>bug_remover</author><pubDate>Tue, 19 Feb 2019 22:39:34 +0800</pubDate><description><![CDATA[1.面向对象和面向过程的区别

面向过程
优点：性能比面向对象高，因为类调用时需要实例化，开销比较大，比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发，性能是最重要的因素。
缺点：没有面向对象易维护、易复用、易扩展
面向对象
优点：易维护、易复用、易扩展，由于面向对象有封装、继承、多态性的特性，可以设计出低耦合的系统，使系统更加灵活、更加易于维护
缺点：性能比面向过...]]></description><category></category></item><item><title><![CDATA[大秒杀系统设计(详解)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86715601</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86715601</guid><author>bug_remover</author><pubDate>Thu, 31 Jan 2019 15:52:15 +0800</pubDate><description><![CDATA[2013年的小米秒杀, 三款小米手机各11万台开卖，走的都是大秒系统，3分钟后成为双十一第一家也是最快破亿的旗舰店。经过日志统计，前端系统双11峰值有效请求约60w以上的QPS ，而后端cache的集群峰值近2000w/s、单机也近30w/s，但到真正的写时流量要小很多了，当时最高下单减库存tps是红米创造，达到1500/s。

热点隔离

秒杀系统设计的第一个原则就是将这种热点数据隔离出...]]></description><category></category></item><item><title><![CDATA[Java并发锁]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86711081</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86711081</guid><author>bug_remover</author><pubDate>Thu, 31 Jan 2019 09:50:38 +0800</pubDate><description><![CDATA[在很多并发文章中，会提及各种各样的锁，这篇文章介绍各种锁的分类。介绍的内容如下：

1.公平锁 / 非公平锁

2.可重入锁 / 不可重入锁

3.独享锁 / 共享锁

4.互斥锁 / 读写锁

5.乐观锁 / 悲观锁

6.分段锁

7.偏向锁 / 轻量级锁 / 重量级锁

8.自旋锁

上面是很多锁的名词，这些分类并不是全是指锁的状态，有的指锁的特性，有的指锁的设计，下面总结的内容是对每个锁的...]]></description><category></category></item><item><title><![CDATA[Java线程池ThreadPoolExecutor原理解析]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86706263</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86706263</guid><author>bug_remover</author><pubDate>Wed, 30 Jan 2019 17:44:52 +0800</pubDate><description><![CDATA[在Java中，使用线程池来异步执行一些耗时任务是非常常见的操作。最初我们一般都是直接使用new Thread().start的方式，但我们知道，线程的创建和销毁都会耗费大量的资源， 因此我们需要重用线程资源。

继承结构:



继承结构看起来很清晰，最顶层的Executor只提供了一个最简单的void execute(Runnable command)方法，然后是ExecutorServ...]]></description><category></category></item><item><title><![CDATA[Java面试(进大厂不是梦)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86705232</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86705232</guid><author>bug_remover</author><pubDate>Wed, 30 Jan 2019 16:49:06 +0800</pubDate><description><![CDATA[JAVA基础



有没有有顺序的Map实现类，如果有，他们是怎么保证有序的。
	抽象类和接口的区别，类可以继承多个类么，接口可以继承多个接口么,类可以实现多个接口
	么。
	继承和聚合的区别在哪。
	IO模型有哪些，讲讲你理解的nio ，他和bio，aio的区别是啥，谈谈reactor模型。
	反射的原理，反射创建类实例的三种方式是什么。
	反射中，Class.forName和Class...]]></description><category></category></item><item><title><![CDATA[HashMap, ConcurrentHashMap源码分析]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86703077</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86703077</guid><author>bug_remover</author><pubDate>Wed, 30 Jan 2019 15:17:33 +0800</pubDate><description><![CDATA[本文分析的是源码，所以至少读者要熟悉它们的接口使用，同时，对于并发，读者至少要知道 CAS、ReentrantLock、UNSAFE 操作这几个基本的知识，文中不会对这些知识进行介绍。Java8 用到了红黑树，不过本文不会进行展开，感兴趣的读者请自行查找相关资料。

Java7 HashMap

HashMap 是最简单的，一来我们非常熟悉，二来就是它不支持并发操作，所以源码也非常简单。

首先，...]]></description><category></category></item><item><title><![CDATA[MYSQL性能优化(索引优化)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86702214</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86702214</guid><author>bug_remover</author><pubDate>Wed, 30 Jan 2019 14:15:16 +0800</pubDate><description><![CDATA[SQL的执行过程：

1. 客户端发送一条查询给服务器；

2. 服务器通过权限检查之后,先会检查查询缓存，如果命中了缓存，则立即返回存储在缓存中的结果。否则进入下一阶段；

3. 服务器端进行SQL解析、预处理，再由优化器根据该SQL所涉及到的数据表的统计信息进行计算，生成对应的执行计划；

4. MySQL根据优化器生成的执行计划，调用存储引擎的API来执行查询...]]></description><category></category></item><item><title><![CDATA[经典排序算法]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86698981</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86698981</guid><author>bug_remover</author><pubDate>Wed, 30 Jan 2019 10:42:40 +0800</pubDate><description><![CDATA[冒泡排序

冒泡排序(Bubble Sort)，又被称为气泡排序或泡沫排序。

它是一种较简单的排序算法。它会遍历若干次要排序的数列，每次遍历时，它都会从前往后依次的比较相邻两个数的大小；如果前者比后者大，则交换它们的位置。这样，一次遍历之后，最大的元素就在数列的末尾！ 采用相同的方法再次遍历时，第二大的元素就被排列在最大元素之前。重复此操作，直到整个数列都有序为止！

冒泡排序的时间复杂度是O(...]]></description><category></category></item><item><title><![CDATA[AOP、动态代理、CGlib(原理实践)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86687300</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86687300</guid><author>bug_remover</author><pubDate>Tue, 29 Jan 2019 15:42:49 +0800</pubDate><description><![CDATA[Java 代理模式实现方式，主要有如下五种方法:

1. 静态代理，工程师编辑代理类代码，实现代理模式；在编译期就生成了代理类。

2. 基于 JDK 实现动态代理，通过jdk提供的工具方法Proxy.newProxyInstance动态构建全新的代理类(继承Proxy类，并持有InvocationHandler接口引用 )字节码文件并实例化对象返回。(jdk动态代理是由java内部的反射机制来实...]]></description><category></category></item><item><title><![CDATA[Mybatis(底层初始化原理)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86685439</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86685439</guid><author>bug_remover</author><pubDate>Tue, 29 Jan 2019 10:44:11 +0800</pubDate><description><![CDATA[对于任何框架而言，在使用前都要进行一系列的初始化，MyBatis也不例外。本章将通过以下几点详细介绍MyBatis的初始化过程。

1.MyBatis的初始化做了什么

2.MyBatis基于XML配置文件创建Configuration对象的过程

3.手动加载XML配置文件创建Configuration对象完成初始化，创建并使用SqlSessionFactory对象

4.涉及到的设计模...]]></description><category></category></item><item><title><![CDATA[SpringMVC(设计模式原理)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86680265</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86680265</guid><author>bug_remover</author><pubDate>Mon, 28 Jan 2019 17:43:03 +0800</pubDate><description><![CDATA[什么是 MVC 模式

  MVC 是一种设计模式.

MVC 的原理图如下：



SpringMVC 简单介绍

  SpringMVC 框架是以请求为驱动，围绕 Servlet 设计，将请求发给控制器，然后通过模型对象，分派器来展示请求结果视图。其中核心类是 DispatcherServlet，它是一个 Servlet，顶层是实现的Servlet接口。

SpringMVC 使用

...]]></description><category></category></item><item><title><![CDATA[Spring IOC (自动装配,依赖注入)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86679829</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86679829</guid><author>bug_remover</author><pubDate>Mon, 28 Jan 2019 17:10:37 +0800</pubDate><description><![CDATA[广义的IOC

1.IoC(Inversion of Control) 控制反转;

两种实现： 依赖查找（DL）和依赖注入（DI）;

IOC 和 DI 、DL 的关系（这个 DL，Avalon 和 EJB 就是使用的这种方式实现的 IoC）：



2.DL 已经被抛弃，因为他需要用户自己去是使用 API 进行查找资源和组装对象。即有侵入性。

3.DI 是 Spring 使用的方式，容...]]></description><category></category></item><item><title><![CDATA[Spring AOP(代理模式及实践)]]></title><link>https://blog.youkuaiyun.com/bug_remover/article/details/86678089</link><guid>https://blog.youkuaiyun.com/bug_remover/article/details/86678089</guid><author>bug_remover</author><pubDate>Mon, 28 Jan 2019 16:23:54 +0800</pubDate><description><![CDATA[为什么会有面向切面编程（AOP）？我们知道Java是一个面向对象（OOP）的语言，但它有一些弊端，比如当我们需要为多个不具有继承关系的对象引入一个公共行为，例如日志、权限验证、事务等功能时，只能在在每个对象里引用公共行为。这样做不便于维护，而且有大量重复代码。AOP的出现弥补了OOP的这点不足。

为了阐述清楚Spring AOP，我们从将以下方面进

  (1).代理模式

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