<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Jiacl1012的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Jiacl1012</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Jiacl1012]]></copyright><item><title><![CDATA[事务总结（概念、ACID特性、并发时出现的问题、隔离级别、传播特性）]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/99696133</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/99696133</guid><author>Jiacl1012</author><pubDate>Sat, 17 Aug 2019 18:11:57 +0800</pubDate><description><![CDATA[事务总结（概念、ACID特性、并发时出现的问题、隔离级别（SQL、Spring）、传播特性）
1、事务的概念
1）一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元;
2）要么全部成功，要么全部失败，不能出现部分成功，部分失败的结果。保证事务执行要的原子操作;
3）事务的所有SQL语句全部执行成功，才能提交（commit）事务，把结果写回磁盘上。事务执行过程中，有的SQL出...]]></description><category></category></item><item><title><![CDATA[java内存区域及异常总结]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/99677283</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/99677283</guid><author>Jiacl1012</author><pubDate>Fri, 16 Aug 2019 14:29:44 +0800</pubDate><description><![CDATA[java内存区域及异常总结
在java中，把内存控制的权利交给了java虚拟机去执行，所以在这里主要看一下java虚拟机内存的各个区域，以及各区域的作用、服务对象，以及可能产生的问题。
Java虚拟机在执行java程序的过程中会把所管理的内存划分为以下几个运行时数据区域，如图：

Java虚拟机运行时数据区：
1、程序计数器
性质：线程私有。
概念：程序计数器，是一块较小的内存空间，它的作用可以看...]]></description><category></category></item><item><title><![CDATA[java KMP模式匹配算法解析，及其代码实现]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/99594033</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/99594033</guid><author>Jiacl1012</author><pubDate>Wed, 14 Aug 2019 18:15:36 +0800</pubDate><description><![CDATA[KMP算法思想及其代码实现
概念解释：
KMP也是一种模式匹配算法，简单来说就是将子串与主串去匹配，查找子串是否存在与主串中。之前分析过得BF算法，虽然它也是一种简单常用的模式匹配算法，但我们可以发现，在BF算法中主串的每一个字符都要和子串第一位进行匹配，时间复杂度是O（m*n）,有很多重复的步骤，所以KMP算法算是简化了BF的步骤，利用之前判断过得信息，通过一个next数组，保存模式串中前后最长...]]></description><category></category></item><item><title><![CDATA[java朴素（BF）模式匹配算法解析，及其代码实现]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/99569169</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/99569169</guid><author>Jiacl1012</author><pubDate>Wed, 14 Aug 2019 14:59:29 +0800</pubDate><description><![CDATA[BF（朴素）匹配算法
概念：
BF（朴素）是简单的模式匹配算法，就是通过主串str匹配是否存在子串sub
举例：
假设我们从下面的主串String str = "abcababcabc"中，找到String sub = "abcabc"这个子串的位置，我们通常需要以下步骤：
1、分别定义i和j为主串和子串所对应的下标；
主串str从0号下标开始，str与sub  4号下标以前，字母都匹配成功，但s...]]></description><category></category></item><item><title><![CDATA[java左旋转数组的实现，例如：String str = “abcdef”;从第2个开始旋转，旋转后的结果为： ”cdefab”]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/99451335</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/99451335</guid><author>Jiacl1012</author><pubDate>Tue, 13 Aug 2019 17:19:37 +0800</pubDate><description><![CDATA[编写函数，将字符串从左数第n个开始进行旋转(也叫左旋数组)。例如：String str = “abcdef”;从第2个开始旋转，旋转后的结果为： ”cdefab”。
理解思路：
有n个整数或者n个字符，，要实现旋转，比如要从二号下标开始旋转，可将二号下标以前的数顺序向后移，然后将二号下标以及二号下标以后对应的数顺序往前移，就可以完成旋转，代码如下：
 有n个整数或字符，使其前面各数顺序向后移m个位...]]></description><category></category></item><item><title><![CDATA[Java二分查找的实现---递归与非递归]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/99202467</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/99202467</guid><author>Jiacl1012</author><pubDate>Sun, 11 Aug 2019 16:44:01 +0800</pubDate><description><![CDATA[二分查找的思想简单描述：
通过访问数组下标查找对应的值

定义数组最左端（left）下标、最右端（right）下标和中间值（middle）下标
确定整个查找区间的中间位置middle = (right-left)/2+left
用待查值num与中间值arr[middle]作比较
若相等，查找成功，直接返回true或对应的下标
若小于中间值，则变最右边下标为right = middle-1，在前半个...]]></description><category></category></item><item><title><![CDATA[类加载顺序常考题：A{i = method();static int j = method2();}B extends A{m = method3();static int n = method4()]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/98966667</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/98966667</guid><author>Jiacl1012</author><pubDate>Fri, 09 Aug 2019 16:45:25 +0800</pubDate><description><![CDATA[判断输出运行结果：
class A{
public int i = method();
public static int j = method2();
public int k = 0;
}
public class B extends A{
public int m = method3();
public static int n = method4();
public int t = 0;
...]]></description><category></category></item><item><title><![CDATA[Java Spring 中IOC（控制反转）与DI（依赖注入）区别解释]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/98796123</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/98796123</guid><author>Jiacl1012</author><pubDate>Wed, 07 Aug 2019 23:19:17 +0800</pubDate><description><![CDATA[IOC（控制反转）与DI（依赖注入）总结
一、IOC控制反转
1、IOC即控制反转：
它不是一个技术，而是一种设计思想，在java开发过程中，控制反转意味着将设计好的java对象交给容器控制，会帮助创建对象，并将对象的管理（创建  维护  销毁）交给spring管理，在使用对象的时候将对象反转给使用方，而不是传统的在对象内部直接控制，也就是本该自己做的事情交给系统去做，我们只需要在配置文件xml中...]]></description><category></category></item><item><title><![CDATA[java设计模式--工厂模式]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97933402</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97933402</guid><author>Jiacl1012</author><pubDate>Wed, 31 Jul 2019 16:59:22 +0800</pubDate><description><![CDATA[工厂模式：
工厂模式主要是为创建对象提供过渡接口，以便将创建对象的具体过程屏蔽隔离起来，达到提高灵活性的目的，工厂模式可分为三类：简单工厂模式、工厂方法模式和抽象工厂模式。
1）	简单工厂
又叫静态工厂，是三种模式中状态结构最简单的，用来接受参数，并根据参数决定返回返回实现同一接口的不同类的实例。
假设客户需要冰箱，他只需要工厂帮他生产就好了，因为这个工厂可以生产产品，
2）	工厂方法模式
为了满...]]></description><category></category></item><item><title><![CDATA[java类的加载过程详细解释（图文结合）]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97923639</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97923639</guid><author>Jiacl1012</author><pubDate>Wed, 31 Jul 2019 15:32:48 +0800</pubDate><description><![CDATA[java类的加载过程是什么（详解）
类加载主要是由jvm虚拟机负责的，过程比较复杂，类加载分三步：加载（双亲委派模型）—》连接—》初始化
（1）加载（靠加载器完成，明白加载机制）
Java虚拟机一般使用Java类的流程：编辑.java文件转换成class文件，程序运行之前jvm类加载器会把编译完成的.class二进制文件加载到内存，将它放在运行时数据区的方法区内，然后在堆区创建一个java.lan...]]></description><category></category></item><item><title><![CDATA[java设计模式--单例模式]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97795119</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97795119</guid><author>Jiacl1012</author><pubDate>Tue, 30 Jul 2019 16:46:52 +0800</pubDate><description><![CDATA[单例设计模式：
单例模式是java中常见的一种设计模式，它确保一个类只有一个实例，也就是说采用单例模式的类（Singleton类）永远只会有一个实例化对象产生，而且该实例易于外界访问。这里主要介绍两种单例模式实现方式：懒汉式、饿汉式。
1）	懒汉式单例
线程安全，必须加锁，但效率低，第一次使用的时候实例化自己
    /**
     * 懒汉式单例类。 只在外部对象第一次请求实例的时候才会去创建...]]></description><category></category></item><item><title><![CDATA[java线程的同步和异步解释]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97395247</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97395247</guid><author>Jiacl1012</author><pubDate>Fri, 26 Jul 2019 16:37:51 +0800</pubDate><description><![CDATA[java线程的同步和异步
1）同步：
就是排队，发送一个请求，等待返回，然后再发送下一个请求，如：A线程请求资源，好巧该线程正在被B线程使用，那不好意思，A就只能排队等待。
在java多线程中，多个线程同时请求同一个资源，很可能会导致资源的数据不安全，一般共享某一资源的时候，如果每个人都有有权利修改，两人同时修改了一个文件，这时读到的可能就是错误的数据了，所以就引进了同步机制。
例如：银行的转账，...]]></description><category></category></item><item><title><![CDATA[java线程优先级 及其特性]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97380456</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97380456</guid><author>Jiacl1012</author><pubDate>Fri, 26 Jul 2019 12:37:14 +0800</pubDate><description><![CDATA[1、线程优先级
现代操作系统基本采用时分的形式调度运行的线程，操作系统会分出一个个时间片，线程被分配到的时间片用完了就会发生线程调度，等待的下次分配。线程分配到的时间片多少决定了线程使用处理器资源的多少，而线程优先级就是决定线程需要多或者少分配一些处理器资源的线程属性。
Java线程中，通过一个整型成员变量priority来控制优先级，优先级范围1—10，在线程构建的时候可以通过setPriori...]]></description><category></category></item><item><title><![CDATA[java_ReantrantLock和Synchronized比较（笔记总结）]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97147821</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97147821</guid><author>Jiacl1012</author><pubDate>Wed, 24 Jul 2019 18:03:50 +0800</pubDate><description><![CDATA[ReantrantLock和Synchronized比较（笔记总结）
相同点：
1）	协调多线程对共享变量、对象的访问
2）	可重入，同一线程可多次获得同一个锁
3）	都保证了可见性和互斥性
不同点：
1）	ReantrantLock显示获得释放锁，Synchronized隐式获得释放锁
2）	ReantrantLock可响应中断（通过Lock.lockInterruptibly（）或tryLoc...]]></description><category></category></item><item><title><![CDATA[为什么使用多线程（详解）]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97137130</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97137130</guid><author>Jiacl1012</author><pubDate>Wed, 24 Jul 2019 16:34:16 +0800</pubDate><description><![CDATA[解释上下文切换：
CPU通过给线程分配时间片来使线程执行，每个时间片非常短，CPU通过时间片分配算法来循环执行任务，当前任务一个时间片后会切换到下一个任务，但此时会保存上一个任务的状态，以便下次再切换回这个任务时，还可以再加载这个任务的状态，所以任务从保存到再加载的过程就是一次上下文切换。
为什么使用多线程：
1）	更多的处理器核心：处理器上的核心数量越来越多，以及超线程技术的广泛运用，现在大多数...]]></description><category></category></item><item><title><![CDATA[线程的状态及各状态之间的转换]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/97015076</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/97015076</guid><author>Jiacl1012</author><pubDate>Tue, 23 Jul 2019 17:51:13 +0800</pubDate><description><![CDATA[1、线程的状态
Java线程在运行的生命周期中可能处于6种不同的状态，在给定的一个时刻，线程只能处于其中的一个状态，6种状态如下：
1）NEW：初始状态，线程被构建，但还没有调用start（）方法
2）RUNNABLE：调用start（）可进入运行状态，java线程将操作系统中的就绪和运行两种状态统称为“运行中”
3）BLOCKED：阻塞状态，线程阻塞于锁，线程可能调用了join（）方法，此时停止...]]></description><category></category></item><item><title><![CDATA[java 线程与进程定义、关系？进程间通信？]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/96981435</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/96981435</guid><author>Jiacl1012</author><pubDate>Tue, 23 Jul 2019 12:12:40 +0800</pubDate><description><![CDATA[什么是线程？什么是进程？线程与进程的关系
定义：
进程：资源分配的基本单位，执行的程序就是一个进程
线程：是CPU独立运行和独立调度的基本单位，是进程内部一条执行路径或序列，也叫轻量级进程，一个线程只能属于一个进程，而一个进程可以并发多个线程，每条线程并行执行不同的任务。线程自己不拥有系统资源，但拥有各自的计数器、栈空间等，用来存放所有局部变量和临时变量，能够访问共享的内存变量。
两者的区别：
1...]]></description><category></category></item><item><title><![CDATA[java序列化与反序列化]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/96972011</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/96972011</guid><author>Jiacl1012</author><pubDate>Tue, 23 Jul 2019 10:29:56 +0800</pubDate><description><![CDATA[序列化和反序列化？序列化ID表示什么意思？
Java的对象序列化就是将实现了Serializable接口的对象转换成一个字节序列，并在以后将这个字节序列完全恢复为原来的对象，这一过程可通过网络进行，意味着序列化机制能自动弥补不同操作系统之间的差异。对象序列化可以实现轻量级持久性。
“持久性”意味着对象的生存周期不取决于程序是否正在执行；它可生存与程序的调用之间。通过将一个序列化对象写入磁盘，然后再...]]></description><category></category></item><item><title><![CDATA[java中强软弱虚四个引用]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/96840125</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/96840125</guid><author>Jiacl1012</author><pubDate>Mon, 22 Jul 2019 11:30:35 +0800</pubDate><description><![CDATA[强软弱虚四个引用
引用的目的：在一定程度上与垃圾回收器进行交互，更好的帮助垃圾回收器管理好应用的内存
1）	强引用（Strong）：默认情况下对象使用强引用，在程序代码中普遍存在，对象实例没被引用时GC回收，使用new关键字创建出来的对象就是强引用，如：People p=new People，对象具有强引用，垃圾回收器就不会回收。
2）	软引用(Soft)：对象只具有软引用，就像可有可无的东西，描...]]></description><category></category></item><item><title><![CDATA[HashMap的工作原理以及解决哈希冲突的方法]]></title><link>https://blog.youkuaiyun.com/Jiacl1012/article/details/96714950</link><guid>https://blog.youkuaiyun.com/Jiacl1012/article/details/96714950</guid><author>Jiacl1012</author><pubDate>Sun, 21 Jul 2019 13:37:39 +0800</pubDate><description><![CDATA[**1、**HashMap的工作原理？ （如何哈希  put）
HashMap基于hashing原理，通过put()和get()方法储存和获取对象。当将键值对传递给put()方法时，它调用键对象的hashCode()方法来计算hashcode，让后找到bucket位置来储存值对象。当获取对象时，通过键对象的equals()方法找到正确的键值对，然后返回值对象。HashMap使用链表来解决碰撞问题，...]]></description><category></category></item></channel></rss>