<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[南哥的博客]]></title><description><![CDATA[一个技术菜鸟成长记录]]></description><link>https://blog.youkuaiyun.com/Debugging_bug</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Debugging_bug]]></copyright><item><title><![CDATA[再有人问你分布式锁，这篇文章扔给他]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/89520493</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/89520493</guid><author>Debugging_bug</author><pubDate>Thu, 25 Apr 2019 17:26:08 +0800</pubDate><description><![CDATA[1.背景

对于锁大家肯定不会陌生，在Java中synchronized关键字和ReentrantLock可重入锁在我们的代码中是经常见的，一般我们用其在多线程环境中控制对资源的并发访问，但是随着分布式的快速发展，本地的加锁往往不能满足我们的需要，在我们的分布式环境中上面加锁的方法就会失去作用。于是人们为了在分布式环境中也能实现本地锁的效果，也是纷纷各出其招，今天让我们来聊一聊一般分布式锁实现的套...]]></description><category></category></item><item><title><![CDATA[Spring IOC 容器源码分析]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/88903905</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/88903905</guid><author>Debugging_bug</author><pubDate>Fri, 29 Mar 2019 23:27:50 +0800</pubDate><description><![CDATA[[TOC]

Spring 最重要的概念是 IOC 和 AOP，本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。阅读本文并不能让你成为 Spring 专家，不过一定有助于大家理解 Spring 的很多概念。

IOC 总体来说有两处地方最重要，一个是创建 Bean 容器，一个是初始化 Bean。先看下最基本的启动 Spring 容器的例子：


public static vo...]]></description><category></category></item><item><title><![CDATA[一文搞定分布式锁]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/88426411</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/88426411</guid><author>Debugging_bug</author><pubDate>Tue, 12 Mar 2019 18:38:40 +0800</pubDate><description><![CDATA[1.背景

对于锁大家肯定不会陌生，在Java中synchronized关键字和ReentrantLock可重入锁在我们的代码中是经常见的，一般我们用其在多线程环境中控制对资源的并发访问，但是随着分布式的快速发展，本地的加锁往往不能满足我们的需要，在我们的分布式环境中上面加锁的方法就会失去作用。于是人们为了在分布式环境中也能实现本地锁的效果，也是纷纷各出其招，今天让我们来聊一聊一般分布式锁实现的套...]]></description><category></category></item><item><title><![CDATA[一文搞定分布式事务]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/88390443</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/88390443</guid><author>Debugging_bug</author><pubDate>Mon, 11 Mar 2019 11:19:21 +0800</pubDate><description><![CDATA[前言

不知道你是否遇到过这样的情况，去小卖铺买东西，付了钱，但是店主因为处理了一些其他事，居然忘记你付了钱，又叫你重新付。又或者在网上购物明明已经扣款，但是却告诉我没有发生交易。这一系列情况都是因为没有事务导致的。这说明了事务在生活中的一些重要性。有了事务，你去小卖铺买东西，那就是一手交钱一手交货。有了事务，你去网上购物，扣款即产生订单交易。

事务的具体定义

事务提供一种机制将一个活动涉及的...]]></description><category></category></item><item><title><![CDATA[白话介绍TCC分布式事务]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/88317250</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/88317250</guid><author>Debugging_bug</author><pubDate>Thu, 07 Mar 2019 19:02:38 +0800</pubDate><description><![CDATA[假设你已经了解了本地事务与分布式事务的区别（可以先阅读：一文搞定分布式事务），这里仅简单介绍一下分布式解决方案之一TCC。

TCC分布式事务机制是用来保证各个服务形成一个整体性的事务。

一个请求中的几个步骤，要么全部成功，如果任何一个服务的操作失败了，就全部一起回滚，撤销已经完成的操作。

TCC分布式事务分三个阶段Try-Confirm-Cancel：

首先需要选择某种TCC分布式事务框架...]]></description><category></category></item><item><title><![CDATA[分布式搭建-牛刀小试]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/87742783</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/87742783</guid><author>Debugging_bug</author><pubDate>Tue, 19 Feb 2019 23:27:18 +0800</pubDate><description><![CDATA[以下记录分布式学习


#下载zookeeper镜像
docker pull registry.docker-cn.com/library/zookeeper
#安装镜像并暴露端口 
# 2181 2888 3888 (the zookeeper client port, follower port, election port respectively)
docker run --name zk...]]></description><category></category></item><item><title><![CDATA[Spring Boot系列之Docker快速上手]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/83388166</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/83388166</guid><author>Debugging_bug</author><pubDate>Thu, 25 Oct 2018 23:41:39 +0800</pubDate><description><![CDATA[Docker是时下比较流行开源的应用容器引擎，作为一个开发者做一个简单的入门了解，有助于对系统运作的理解。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中，然后发布到任何流行的 Linux 机器上，也可以实现虚拟化。
容器是完全使用沙箱机制，相互之间不会有任何接口,更重要的是容器性能开销极低。

相关名词解释：
docker主机(Host)：安装了Docker程序的...]]></description><category></category></item><item><title><![CDATA[SpringBoot系列之外部Servlet容器启动原理]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/83217482</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/83217482</guid><author>Debugging_bug</author><pubDate>Sat, 20 Oct 2018 22:27:32 +0800</pubDate><description><![CDATA[外部Servlet容器启动springboot应用原理

了解外部Servlet容器启动springboot的原理，需要先了解一个规则，这个规则可以参考servlet3.0规范的8.2.4章 Shared libraries / runtimes pluggability：
本文摘录几条主要规则：
1）、服务器启动（web应用启动）会创建当前web应用里面每一个jar包里面ServletConta...]]></description><category></category></item><item><title><![CDATA[SpringBoot系列之外部Servlet容器使用及配置]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/83051174</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/83051174</guid><author>Debugging_bug</author><pubDate>Sun, 14 Oct 2018 21:42:08 +0800</pubDate><description><![CDATA[外部Servlet容器使用及配置

上一篇文章介绍了嵌入式的servlet容器配置及启动原理 本文将介绍使用外部servlet容器启动SpringBoot应用的方法及其启动原理。

笔者不太会使用大量的文字描述某些问题，所以文章会更多的出现SpringBoot的源码，通过对源码的注释来向读者描述相关的内容，建议读者使用电脑结合代码进行阅读

使用外置的Servlet容器：外面安装Tomcat---...]]></description><category></category></item><item><title><![CDATA[SpringBoot系列之嵌入式servlet容器启动原理]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/83050737</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/83050737</guid><author>Debugging_bug</author><pubDate>Sun, 14 Oct 2018 21:03:24 +0800</pubDate><description><![CDATA[嵌入式servlet容器启动原理

本文承接上一篇文章《SpringBoot系列之嵌入式servlet容器自动配置原理》，建议结合阅读，并结合源码深入理解。

本文将探讨以下问题：
什么时候创建嵌入式的Servlet容器工厂？什么时候获取嵌入式的Servlet容器并启动Tomcat；


1）、SpringBoot应用启动运行run方法
2）、refreshContext(context);Spr...]]></description><category></category></item><item><title><![CDATA[SpringBoot系列之嵌入式servlet容器自动配置原理]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/82782252</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/82782252</guid><author>Debugging_bug</author><pubDate>Thu, 20 Sep 2018 10:25:34 +0800</pubDate><description><![CDATA[嵌入式servlet容器自动配置原理

springboot中存在大量的自动配置类，了解它的工作原理有助于加深对代码的理解，实现自定义配置的修改，同时也方便以后借鉴其设计模式；本文通过研究EmbeddedServletContainerAutoConfiguration：嵌入式的Servlet容器自动配置类，并分析其中一种常用的Servlet容器，来理解嵌入式servlet容器自动配置的原理。

...]]></description><category></category></item><item><title><![CDATA[HashMap的工作原理]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78420003</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78420003</guid><author>Debugging_bug</author><pubDate>Wed, 01 Nov 2017 23:14:56 +0800</pubDate><description><![CDATA[HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap，都知道哪里要用HashMap，知道Hashtable和HashMap之间的区别，那么为何这道面试题如此特殊呢？是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题，甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入]]></description><category></category></item><item><title><![CDATA[HashMap和Hashtable的区别]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78409714</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78409714</guid><author>Debugging_bug</author><pubDate>Wed, 01 Nov 2017 00:42:13 +0800</pubDate><description><![CDATA[HashMap和Hashtable的比较是Java面试中的常见问题，用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类，存在于Java API中很久了。在Java 4中被重写了，实现了Map接口，所以自此以后也成了Java集]]></description><category></category></item><item><title><![CDATA[浅谈线程池及submit()和execute()的区别]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78409683</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78409683</guid><author>Debugging_bug</author><pubDate>Wed, 01 Nov 2017 00:29:51 +0800</pubDate><description><![CDATA[本文主要介绍两个方面的内容，其一：线程池的类型及其应用场景；其二：submit和execute的区别。
一、线程池概述
首先，线程池的使用，是非必须的。并不是涉及到启用多线程的地方，就非得整出个线程池出来！
1.1，什么是线程池
线程池是一种多线程处理形式，处理过程中将任务添加到队列，然后在创建线程后自动启动这些任务。线程池线程都是后台线程。

1.2，为什么用
备注：个人愚见，请读]]></description><category></category></item><item><title><![CDATA[深入浅出 Java 垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78400260</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78400260</guid><author>Debugging_bug</author><pubDate>Tue, 31 Oct 2017 10:08:50 +0800</pubDate><description><![CDATA[对于Java开发人员来说，了解垃圾回收机制（GC）有哪些好处呢？首先可以满足作为一名软件工程师的求知欲，其次，深入了解GC如何工作可以帮你写出更好的Java应用。


这仅仅代表我个人的意见，但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣，说明你已经具备较大规模应用的开发经验。如果你曾经想过如何正确的选择GC算法，那意味着你已经完全理解你所开发的应用的特点]]></description><category></category></item><item><title><![CDATA[单例模式的几种写法及分析]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78380637</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78380637</guid><author>Debugging_bug</author><pubDate>Sat, 28 Oct 2017 23:27:39 +0800</pubDate><description><![CDATA[第一种（懒汉，线程不安全）：
 


Java代码  


public class Singleton {      private static Singleton instance;      private Singleton (){}        public static Singleton getInstance() {      if (instance == nu]]></description><category></category></item><item><title><![CDATA[spring bean parent 属性浅析]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78322554</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78322554</guid><author>Debugging_bug</author><pubDate>Mon, 23 Oct 2017 19:58:23 +0800</pubDate><description><![CDATA[必要条件：1、子bean必须与父bean保持兼容，也就是说子bean中必须有父bean定义的所有属性。
              2、父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工厂实例化该bean
注：好多人将parent指向的类说是子类继承了父类，其实说法不正确，正确的说法应该是子bean父bean而不是子类父类，因为如果子bean指定的类已经继承了]]></description><category></category></item><item><title><![CDATA[几种常见排序算法的分析]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78313717</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78313717</guid><author>Debugging_bug</author><pubDate>Sun, 22 Oct 2017 21:52:53 +0800</pubDate><description><![CDATA[一、分类与性能


1、稳定排序和非稳定排序
简单地说就是所有相等的数经过某种排序方法后，仍能保持它们在排序之前的相对次序，我们就说这种排序方法是稳定的。反之，就是非稳定的。
比如：一组数排序前是a1,a2,a3,a4,a5，其中a2=a4，经过某种排序后为a1,a2,a4,a3,a5，则我们说这种排序是稳定的，因为a2排序前在a4的前面，排序后它还是在a4的前面。假如变成a1,a4,a]]></description><category></category></item><item><title><![CDATA[Java中常用数据结构和集合浅解]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78313151</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78313151</guid><author>Debugging_bug</author><pubDate>Sun, 22 Oct 2017 20:52:48 +0800</pubDate><description><![CDATA[------数据结构：
是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。


1.集合
数据结构中的元素之间除了“同属一个集合” 的相互关系外，别无其他关系；
2.线性结构
数据结构中的元素存在一对一的相互关系；
3.树形结构
数据结构中的元素存在一对多的相互关系；
4.图形结构
数据结构中的元素存在多对多的相互关系。


常用]]></description><category></category></item><item><title><![CDATA[谈Spring事务隔离级别]]></title><link>https://blog.youkuaiyun.com/Debugging_bug/article/details/78256014</link><guid>https://blog.youkuaiyun.com/Debugging_bug/article/details/78256014</guid><author>Debugging_bug</author><pubDate>Tue, 17 Oct 2017 00:23:06 +0800</pubDate><description><![CDATA[一、Propagation （事务的传播属性）
Propagation ：　　key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用：PROPAGATION_REQUIRED--支持当前事务，如果当前没有事务，就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务，如果当前没有事务，就以非事务方式执行。
PRO]]></description><category></category></item></channel></rss>