<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[rainbow000123的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/rainbow000123</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; rainbow000123]]></copyright><item><title><![CDATA[入职工作感悟]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/80933982</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/80933982</guid><author>rainbow000123</author><pubDate>Thu, 05 Jul 2018 22:34:09 +0800</pubDate><description><![CDATA[   不知不觉入职时间已经有一年了，这一年来，感慨良多。     找工作前一直准备着互联网方向，自己也想找一个java的工作，确实也看了不少java方面的书籍，由于自己本科接触到java，也做过一些小项目，因此对java也算是相对熟悉。研究生找 工作期间也研读过java方面深度理解的书籍，包括找工作前也看过一些编程技巧和面试宝典等方面的知识，可是呢，由于各种原因，自己进互联网方面的愿望也随着签约某...]]></description><category></category></item><item><title><![CDATA[ThreadLocal源码分析]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/52578948</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/52578948</guid><author>rainbow000123</author><pubDate>Sun, 18 Sep 2016 23:19:22 +0800</pubDate><description><![CDATA[每次看到ThreadLocal总要重新复习一下源码，今天总结一下：
每个Thread类中有ThreadLocal.ThreadLocalMap threadLocals = null;这样的成员变量，ThreadLocalMap 是ThreadLocal的一个内部类，其中存储了当前ThreadLocal以及对应的value，这个threadLocals其实是一个map类型，会存储好多个键值对，相]]></description><category></category></item><item><title><![CDATA[数据库的四种隔离级别]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/52276886</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/52276886</guid><author>rainbow000123</author><pubDate>Mon, 22 Aug 2016 15:01:36 +0800</pubDate><description><![CDATA[1.读未提交:会出现脏读现象，读事务读到一个数据，但被写事务修改了，此时：写事务未禁止读事务，读事务也未禁止写事务
2.读提交：会出现不可重复读。写事务禁止读事务，但读事务未禁止写事务
3.可重复读：出现幻读。读事务禁止写事务，但未禁止读事务，写事务禁止其他事务
4.串行：最高级别，禁止一切问题，但效率也比较低]]></description><category></category></item><item><title><![CDATA[Spring Aop的实现]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/52192257</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/52192257</guid><author>rainbow000123</author><pubDate>Fri, 12 Aug 2016 16:15:07 +0800</pubDate><description><![CDATA[最近几天看了Spring aop部分的源码，刚开始是看书的，那本业界还挺有名气的Spring技术内幕，但是看了好久也没看出个大概来，还总是忘。昨天决定用eclipse调试的功能来跟踪源码。到现在为止，脉络已经算比较清楚了。现总结如下：
先看几个名词术语
1.pointcut：切点，目标方法的范围，就是说那些方法需要被增强
2.advice：通知，具体需要增强的方法，就是说需要为目标方法怎么增]]></description><category></category></item><item><title><![CDATA[关于java变量的初始化问题]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51407371</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51407371</guid><author>rainbow000123</author><pubDate>Sat, 14 May 2016 19:18:19 +0800</pubDate><description><![CDATA[变量初始化会在类加载阶段完成，这个时候主要执行方法，这个方法是类构造器，只负责静态变量赋值和静态代码块执行，而方法是实例构造器，主要负责实例变量初始化和构造方法的执行。


看下面代码：
public class TestDemo3
{
    public static void main(String[] args)
	{
		Base base=new sssu();
	}
}
 c]]></description><category></category></item><item><title><![CDATA[关于即时通信小项目的整理总结]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51387306</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51387306</guid><author>rainbow000123</author><pubDate>Thu, 12 May 2016 21:28:08 +0800</pubDate><description><![CDATA[1.客户端界面：
登录界面：
用户名，端口号，主机名
聊天界面：
聊天数据和在线用户列表
2.服务器界面：
端口号和在线用户列表


项目启动第一步：服务器输入端口号后，点击启动服务器，这里发生了什么事情？这里，服务器立刻启动一个线程，暂且叫做serverConnectionThread,用于和客户端建立连接，当然，这里是必须用线程处理的，因为界面程序，费时操作是选择在新线程处理]]></description><category></category></item><item><title><![CDATA[关于java的反射机制及动态代理]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51273069</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51273069</guid><author>rainbow000123</author><pubDate>Thu, 28 Apr 2016 16:04:21 +0800</pubDate><description><![CDATA[java反射技术早都听说了，之前只是了解反射提供的方法，可是不知道反射技术到底该怎么使用，或者说什么时候能用到反射技术，最近看jvm有了一些新的感悟。


首先，反射概念是什么？
JAVA反射机制是在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意一个方法和属性；这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射。
什么]]></description><category></category></item><item><title><![CDATA[深入理解jvm之分派]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51264401</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51264401</guid><author>rainbow000123</author><pubDate>Wed, 27 Apr 2016 22:38:39 +0800</pubDate><description><![CDATA[之前费了好大劲，一直想搞清楚 .class文件是个什么东东，因为我知道 .java 文件编译后是字节码的二进制文件，所以。。。有点蒙，因为在我的理解中，二进制文件就是文件中只有0和1的文件。。。。好吧，原来是我理解错误，但具体二进制文件是什么，查了好多资料，其实还是不理解，好吧，现在先不关心，只要清楚不是0和1就行了，因为使用javap查看的字节码中不是0和1啊。。。之前一直不解，现在理解的前提是]]></description><category></category></item><item><title><![CDATA[关于类加载器的理解以及双亲委派模型]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51251672</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51251672</guid><author>rainbow000123</author><pubDate>Tue, 26 Apr 2016 17:18:05 +0800</pubDate><description><![CDATA[我们知道，java字节码文件需要jvm进行加载到内存中才能执行，那么这个是怎么加载机制是怎样的呢？


加载阶段需要完成的事情：
1.通过一个类的全限定名获取定义此类的二进制字节流
2.将这个字节流代表的静态存储结构转化为方法区的运行时数据结构
3，在内存中生成一个代表这个类的java.lang.Class对象，作为方法区这个类的各种数据的访问入口


而完成加载阶段，靠的就是类]]></description><category></category></item><item><title><![CDATA[LinkedHashMap源码分析]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51245252</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51245252</guid><author>rainbow000123</author><pubDate>Mon, 25 Apr 2016 22:13:00 +0800</pubDate><description><![CDATA[接上一节关于HashMap的分析：


LinkedHashMap继承HashMap,所以HashMap是LinkedHashMap的父类，HashMap有的方法LinkedHashMap都有，LinkedHashMap也会重写某些方法，我们知道，HashMap底层数据结构是数组和链表，那么LinkedHashMap会额外维护一个按照插入顺序排序的双向循环列表。



 public]]></description><category></category></item><item><title><![CDATA[关于HashMap的源码分析]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51243154</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51243154</guid><author>rainbow000123</author><pubDate>Mon, 25 Apr 2016 17:24:40 +0800</pubDate><description><![CDATA[集合作为java中非常重要的一部分，在开发中经常被用到，而通过java源码实现可以更好理解底层实现。
下面看java中的HashMap的源代码：


首先，HashMap底层是通过数组和hash表实现的，底层的元素都是entry形式，通过计算每个entry的hash值来决定把entry放到哪个位置，如果出现hash冲突，则用链表解决。


首先看entry类的代码：
static]]></description><category></category></item><item><title><![CDATA[关于synchronized 和 线程间通信]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51211518</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51211518</guid><author>rainbow000123</author><pubDate>Thu, 21 Apr 2016 20:25:03 +0800</pubDate><description><![CDATA[下午对线程之间通信有了新的理解：


这里只讨论synchronized 修饰 方法的情况，当然也分为两种情况：
1.修饰普通方法
2.修饰静态方法


下面先讨论修饰普通方法的情况，当synchronized修饰方法的时候，这个对象会被上锁，就是说，不光是当前被synchronized修饰的方法不能被其他线程锁访问，这个对象的其他被synchronized修饰的方法也不能被其他线]]></description><category></category></item><item><title><![CDATA[关于序列化]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51155577</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51155577</guid><author>rainbow000123</author><pubDate>Thu, 14 Apr 2016 22:10:58 +0800</pubDate><description><![CDATA[把对象转换为字节序列的过程称为对象的序列化。
　　把字节序列恢复为对象的过程称为对象的反序列化。
　　对象的序列化主要有两种用途：
　　1） 把对象的字节序列永久地保存到硬盘上，通常存放在一个文件中；
　　2） 在网络上传送对象的字节序列。

　　在很多应用中，需要对某些对象进行序列化，让它们离开内存空间，入住物理硬盘，以便长期保存。比如最常见的是Web服务器中的Session对象，当]]></description><category></category></item><item><title><![CDATA[关于集合的源码实现问题——ArrayList]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51154443</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51154443</guid><author>rainbow000123</author><pubDate>Thu, 14 Apr 2016 21:14:34 +0800</pubDate><description><![CDATA[集合是java里面很重要而且比较常用的工具，了解java集合的源码实现可以帮助我们更好的理解集合的底层实现原理。
通过阅读源码，将自己的成果进行记录以备以后复习用。
首先，毫无疑问，ArrayList底层是用数组实现的。我们来看代码：
private transient Object[] elementData;

    /**
     * The size of the ArrayLi]]></description><category></category></item><item><title><![CDATA[关于回调函数和多线程的一些问题]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/51142091</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/51142091</guid><author>rainbow000123</author><pubDate>Wed, 13 Apr 2016 12:24:56 +0800</pubDate><description><![CDATA[1，为什么要使用多线程？
  除了提高处理器的利用效率，在当前线程等待的时间内可以去做另外的事情，不至于使处理器处于空闲状态，还有一些情况下也要使用。
比如，代码的异步调用问题：
一个java程序的界面，需要一个费时的操作，那么这个时候需要另外启动一个线程，否则的话，当前界面则需要一直等待这个费时操作的结束，界面上的一些工作将不得不停止，界面处于阻塞状态，这时候，可以启动一个新的线程，将这个]]></description><category></category></item><item><title><![CDATA[java线程以及synchronized关键字的使用]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/46791671</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/46791671</guid><author>rainbow000123</author><pubDate>Tue, 07 Jul 2015 17:02:59 +0800</pubDate><description><![CDATA[有些东西花了好久看明白了，但是由于没有记录的缘故，过一段时间重新使用的时候又忘记了，所以为了使自己的努力可以复用，就写个文章记录一下自己关于线程的理解。


线程使用的两种方法：
1.继承Thread类
2.实现Runnable接口


习惯用第二种方法，构造器要传递实现Runnable类的对象


多线程很重要的一个问题：


构造对象的个数：
如：package ]]></description><category></category></item><item><title><![CDATA[赫夫曼编码实现]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/46551571</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/46551571</guid><author>rainbow000123</author><pubDate>Thu, 18 Jun 2015 19:34:49 +0800</pubDate><description><![CDATA[断断续续的用了两天时间，终于把传说中的赫夫曼树实现了，之前早都听说过，可是都被题目的难度给吓到了，这次有了前面的经验，决心要把赫夫曼编码实现。(当然其实应该也没有太大难度，但是对于我这么一个本科时候数据结构学的那么渣的人来说，能写出来还是有一点成就感的。)


首先，赫夫曼（Huffman）树：带权路径长度最小的二叉树。


赫夫曼算法：
1.根据给定的n个权值构成n棵二叉树的集合F]]></description><category></category></item><item><title><![CDATA[用栈和队列实现魔王语言]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/46514131</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/46514131</guid><author>rainbow000123</author><pubDate>Tue, 16 Jun 2015 09:21:43 +0800</pubDate><description><![CDATA[接上一篇，链表的下一章是栈和队列，当然这一章还有个魔王语言的问题，也是当年的作业。别说实现了，当时连题目也没读懂，当时也太low了吧。ok，花了时间对这一章的内容进行了学习，并重新进行魔王语言的实现。


首先先看需求分析：

[
问题描述
]  
 
有一个魔王总是使用自己的一种非常精练而抽象的语言讲话，
没人能听的懂。
但他的语言
是可以逐步解释成人能懂得语言的，
因]]></description><category></category></item><item><title><![CDATA[链表实现约瑟夫环]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/46484473</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/46484473</guid><author>rainbow000123</author><pubDate>Sat, 13 Jun 2015 20:47:41 +0800</pubDate><description><![CDATA[前几天考网管的时候用到了数据结构课本，想当年那么头疼的一本书，现在突然觉得挺有意思的，就想回过头来看看。今天周六，上午无聊的在实验室待着，下午来的时候拿起了数据结构的课本。第一章链表中有一个很著名的约瑟夫环的问题，想当年也是老师留的题目之一，当时这一块有好多问题，包括结构体的定义，包括malloc函数的使用，包括链表的构造和实现。下午就重新对这一块进行了学习。
约瑟夫问题的一种描述是：编号为1，]]></description><category></category></item><item><title><![CDATA[malloc 函数和new的区别]]></title><link>https://blog.youkuaiyun.com/rainbow000123/article/details/46481687</link><guid>https://blog.youkuaiyun.com/rainbow000123/article/details/46481687</guid><author>rainbow000123</author><pubDate>Sat, 13 Jun 2015 12:00:05 +0800</pubDate><description><![CDATA[c和c++涉及到动态分配内存的问题时，难免会遇到malloc，今天查了一些资料，探究一下malloc的机制以及和c的区别。
1.malloc 函数的原型：void *malloc(unsigned int num_bytes);  分配长度为num_bytes字节的内存块
2.包含的头文件#include
3.关于该函数的原型，在以前malloc返回的是char型指针，新的ANSIC标准规定]]></description><category></category></item></channel></rss>