<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[QEcode的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/QEcode</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; QEcode]]></copyright><item><title><![CDATA[Mysql的四个隔离级别是如何实现的]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/97274409</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/97274409</guid><author>QEcode</author><pubDate>Thu, 25 Jul 2019 17:20:01 +0800</pubDate><description><![CDATA[（一）事务四大属性

分别是原子性、一致性、隔离性、持久性。

  1、原子性（Atomicity）

原子性是指事务包含的所有操作要么全部成功，要么全部失败回滚，因此事务的操作如果成功就必须要完全应用到数据库，如果操作失败则不能对数据库有任何影响。

  2、一致性（Consistency）

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态，也就是说一个事务执行之前...]]></description><category></category></item><item><title><![CDATA[Redis对过期数据的淘汰策略]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/96198443</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/96198443</guid><author>QEcode</author><pubDate>Tue, 16 Jul 2019 22:43:24 +0800</pubDate><description><![CDATA[redis内存数据数据集大小升到一定大的时候（即内存数据达到maxmemory设定的值），就会实行数据淘汰策略（回收策略），Redis就会根据用户配置的淘汰策略选出无用的key。

（一）过期数据清理时机

  为了防止一次性清理大量过期Key导致Redis服务受影响，Redis只在空闲时清理过期Key。

  具体Redis逐出过期Key的时机为:

  1）...]]></description><category></category></item><item><title><![CDATA[Redis的三种集群结构]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/96177521</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/96177521</guid><author>QEcode</author><pubDate>Tue, 16 Jul 2019 20:10:47 +0800</pubDate><description><![CDATA[redis有三种集群方式：主从复制，哨兵模式和集群。

一，主从复制

   主从复制是指让一个服务器去复制另一个服务器的数据，使得双方的数据保存一致，其中被复制的服务器为主服务器，复制的服务器为从服务器。当主服务器的数据发生改变时，主服务器会通知从服务器，保存数据的一致性。

   在Redis中，使用slaveof命令来执行主从复制。

（一）旧版的主从复制实现

   在旧...]]></description><category></category></item><item><title><![CDATA[Linux权限管理]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/94871911</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/94871911</guid><author>QEcode</author><pubDate>Sat, 06 Jul 2019 17:10:39 +0800</pubDate><description><![CDATA[（一）权限管理



  rw-，rw-，r--就是代表不同用户所拥有的权限。以三个为一组，且均为【rwx】，其中r表示可读，w表示可写，x表示可执行，-表示没有该权限。

 而后面的qecode，qecode分别代表了该文件的拥有者以及所在的群组。

 第一组（rw-）为文件拥有者（qecode）具备的权限：可读，可写但不可执行。

 第二组（rw-）为所在群组成员（qecode...]]></description><category></category></item><item><title><![CDATA[Java中的注解]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/94663946</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/94663946</guid><author>QEcode</author><pubDate>Thu, 04 Jul 2019 22:57:08 +0800</pubDate><description><![CDATA[（一）什么是注解

  用一个词就能形容注解，那就是元数据。即一种描述数据的数据。注解是一种应用于类，方法，参数，变量，构造器以及包声明中的特殊字符。

   注解是一系列元数据，它提供数据用来解释程序代码，但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。

注解有许多用处，主要如下：

提供信息给编译器： 编译器可以利用注解来探测错误和警告信息。
（如...]]></description><category></category></item><item><title><![CDATA[锁的状态(偏向锁，轻量级锁及重量级锁)]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/94053230</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/94053230</guid><author>QEcode</author><pubDate>Fri, 28 Jun 2019 21:48:02 +0800</pubDate><description><![CDATA[本篇博客参考了死磕Synchronized底层实现--概论如果有兴趣了解更深的内容可以看看上面博客。

锁的状态

锁的状态总共有四种：无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争，锁可以从偏向锁升级到轻量级锁，再升级的重量级锁（但是锁的升级是单向的，也就是说只能从低到高升级，不会出现锁的降级）。锁的状态保存在对象头的Mark Word中，以32位的JDK为例：







（一）...]]></description><category></category></item><item><title><![CDATA[死锁产生的原因和解决]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/94044679</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/94044679</guid><author>QEcode</author><pubDate>Fri, 28 Jun 2019 20:30:07 +0800</pubDate><description><![CDATA[死锁:

死锁是指由于两个或多个线程互相持有对方的资源，导致这些线程处于等待状态，无法继续向下执行。

死锁产生的原因：只有满足下面四个条件才会形成死锁，缺一不可

1. 互斥条件：线程对于所分配到的资源具有排他性，即一个资源只能被一个线程持有，直到该线程释放。

2. 请求和保持条件：一个线程在请求被占用资源时，不会释放自己的资源。

3. 不剥夺条件：一个线程的资源只能由自己释放，其它线程无法...]]></description><category></category></item><item><title><![CDATA[守护进程]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/93667852</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/93667852</guid><author>QEcode</author><pubDate>Tue, 25 Jun 2019 22:55:27 +0800</pubDate><description><![CDATA[（一）Daemon（守护进程）

Daemon（守护进程）是运行在后台的一种特殊线程。它独立于终端并在后台周期性地执行任务或等待处理某些发生的事件，它不需要用户输入就能运行并且提供某种服务，不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器都是通过守护进程实现的，如系统日志进程syslogd，web服务器httpd，邮件服务器sendmail。

Daemon独立于终端是为了避...]]></description><category></category></item><item><title><![CDATA[IO模型及JAVA中的(B)IO/NIO/AIO]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/93409431</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/93409431</guid><author>QEcode</author><pubDate>Sun, 23 Jun 2019 21:22:42 +0800</pubDate><description><![CDATA[IO有内存IO、网络IO和磁盘IO三种，通常我们说的IO指的是后两者。网络IO的本质是socket的读取，socket在linux系统被抽象为流，IO可以理解为对流的操作。对于一次IO访问（以read举例）当一个read操作发生时，它会经历两个阶段：

第一阶段：等待数据准备，数据从磁盘拷贝到内核空间 (Waiting for the data to be ready)。

第二阶段：将数据从内核...]]></description><category></category></item><item><title><![CDATA[有序的Map集合]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/93294809</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/93294809</guid><author>QEcode</author><pubDate>Sat, 22 Jun 2019 08:32:07 +0800</pubDate><description><![CDATA[我们通常使用的Map集合是HashMap，在大多数情况下HashMap可以满足我们的要求，但是HashMap有一个缺点：HashMap是无序的，即其迭代顺序与其key或value的大小无关。而在某些情况下，如果我们需要Map集合里的元素有序，那么HashMap是不能满足我们的要求的。

那么有没有有序的Map集合呢？有，Java提供了两种有序的Map集合：LinkedHashMap和TreeM...]]></description><category></category></item><item><title><![CDATA[TCP如何保证传输可靠性]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/90339162</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/90339162</guid><author>QEcode</author><pubDate>Sun, 19 May 2019 09:40:07 +0800</pubDate><description><![CDATA[TCP协议保证传输可靠的方法主要有：校验和，序列号，确认应答，超时重传，连接管理，流量控制，拥塞控制。

（一）校验和：判断传输数据是否出现了修改

 TCP在计算校验和时，会添加一个12个字节的伪首部。其内容为：32位源IP地址，32位目的IP地址，8位保留字节（置零），8位传输层协议号（TCP是6，UDP是17），16位TCP报文长度（TCP首部+数据）。伪首部的作用主要是增加TCP的校验...]]></description><category></category></item><item><title><![CDATA[JVM内存分代]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/85320702</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/85320702</guid><author>QEcode</author><pubDate>Fri, 28 Dec 2018 13:41:25 +0800</pubDate><description><![CDATA[   Java虚拟机根据对象存活的周期不同，把堆内存划分为几块，一般分为新生代、老年代和永久代（对HotSpot虚拟机而言），这就是JVM的内存分代策略。


	为什么要分代？
	
       堆内存是虚拟机管理的内存中最大的一块，也是垃圾回收最频繁的一块区域，我们程序所有的对象实例都存放在堆内存中。给堆内存分代是为了提高对象内存分配和垃圾回收的效率。试想一下，如果堆内存没有区域划分，所有的新创...]]></description><category></category></item><item><title><![CDATA[JVM内存结构]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/85318423</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/85318423</guid><author>QEcode</author><pubDate>Fri, 28 Dec 2018 10:47:33 +0800</pubDate><description><![CDATA[
	前言
	
  JAVA GC（Garbage Collection，垃圾回收）机制是区别C++的一个重要特征,c++的开发人员需要自己管理每一个对象的创建和销毁.而对于java的开发人员来说,他们不需要了解对象的创建和销毁,因为jvm已经帮我们把这件事-&quot;垃圾回收&quot;代劳了.但这并不意味着我们不用去理解GC机制的原理，因为如果不了解其原理，可能会引发内存泄漏、频繁GC导致应用卡顿,甚至出现OOM...]]></description><category></category></item><item><title><![CDATA[设计模式之观察者模式]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/84673644</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/84673644</guid><author>QEcode</author><pubDate>Sat, 01 Dec 2018 14:43:27 +0800</pubDate><description><![CDATA[(一) 什么是观察者模式
观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新.
(二) 观察者模式的四个角色
·	 抽象主题角色：一个接口或抽象类,定义了主题的基本功能(添加,删除观察者,把更新信息发送给观察者).
·	抽象观察者角色：为所有的具体观察者定义一个接口，在得到主题通知时更新自己。
·	具体主题角色：一个具体的主题，在集体主题的内...]]></description><category></category></item><item><title><![CDATA[设计模式之单例模式]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/84669177</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/84669177</guid><author>QEcode</author><pubDate>Fri, 30 Nov 2018 23:02:28 +0800</pubDate><description><![CDATA[什么是单例模式
单例模式确保某个类只有一个实例，而且自行实例化并向整个系统提供这个实例。
单例模式特点：
　1、单例类只能有一个实例。
　2、单例类必须自己创建自己的唯一实例。
　3、单例类必须给所有其他对象提供这一实例。
单例模式的八种写法
1 , 饿汉式
//饿汉式
public class Singleton {
    
    //创建一个本类对象
    private final s...]]></description><category></category></item><item><title><![CDATA[设计模式之策略模式]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/84657145</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/84657145</guid><author>QEcode</author><pubDate>Fri, 30 Nov 2018 16:07:25 +0800</pubDate><description><![CDATA[什么是策略模式？
策略模式属于对象的行为模式。其用意是针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式的结构
策略模式是对算法的包装，是把使用算法的责任和算法本身分开来，委派给不同的对象管理；
策略模式有三个角色：
环境角色（Context）：持有一个Strategy的引用
抽象策略角色（Strat...]]></description><category></category></item><item><title><![CDATA[设计模式之工厂模式]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/84654164</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/84654164</guid><author>QEcode</author><pubDate>Fri, 30 Nov 2018 15:26:31 +0800</pubDate><description><![CDATA[一,简单工厂模式
定义:根据传入的参数,来生成对应的子类对象.
具体实现:将一系列产品抽象出一个接口,并由产品实现该接口,然后创建一个工厂,由工厂来决定要创建哪个产品.
比如说,我们想要吃苹果和梨.那么我们可以把苹果和梨抽象出一个&amp;quot;水果&amp;quot;的接口.
public interface Fruit {
    
    /**水果都有一个属性:吃
     * @Description:
     */...]]></description><category></category></item><item><title><![CDATA[解决eclipse中git push一直需要输入远程push地址的问题]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/84448714</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/84448714</guid><author>QEcode</author><pubDate>Sat, 24 Nov 2018 16:41:53 +0800</pubDate><description><![CDATA[在eclipse中使用git的时候，前一次push完之后，再push一次时，总会又出现让你重新填写push地址。
解决办法：

在git配置文件中进行如下配置：
[core]
	symlinks = false
	repositoryformatversion = 0
	filemode = false
	logallrefupdates = true
[gui]
	wmstate = norma...]]></description><category></category></item><item><title><![CDATA[ubuntu构建服务器]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/84351035</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/84351035</guid><author>QEcode</author><pubDate>Thu, 22 Nov 2018 23:52:48 +0800</pubDate><description><![CDATA[(一) 安装Vmware-Tool
使用VMware安装VMware-tool

在点击之后会发现虚拟机中出现了一个光盘Vmware Tools,将光盘中的VmwareTools复制到桌面上

解压VMwareTools到当前目录,进入VMwareTools文件夹中,**并以root身份运行vmware-install.pl,**接下来就是不停的yes,直到安装完毕.

安装完VMwareTool...]]></description><category></category></item><item><title><![CDATA[linux安装tomcat]]></title><link>https://blog.youkuaiyun.com/QEcode/article/details/84350979</link><guid>https://blog.youkuaiyun.com/QEcode/article/details/84350979</guid><author>QEcode</author><pubDate>Thu, 22 Nov 2018 23:41:36 +0800</pubDate><description><![CDATA[一、	下载Tomcat
到官网下载
		

二、	将Tomcat上传到linux并解压

三、	安装jdk环境
由于Tomcat的运行需要有jdk环境,所以如果没有安装jdk的话,需要安装jdk
安装方法可以参考
linux安装jdk
四、	运行tomcat
进入tomcat的bin目录
cd  cd /usr/local/apache-tomcat-8.5.34/bin/
运行tomcat
./...]]></description><category></category></item></channel></rss>