`
DiaoCow
  • 浏览: 241794 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
文章列表
前言 平时经常使用HashMap,也大致了解它的数据结构,但是一直没有一窥究竟,今天正好有时间看了下源码(确实有很多自己不懂以及可学习的地方),现在简单做些笔记 1.HashMap的数据结构 上图大致描绘了HashMap的数据结构,其基本算法如下: 当我们把一个元素a放入HashMap时,首先获取a的hashCode,然后通过hash算法得到哈希值k,最后把k散列到数组位置i上,如果该位置为空则直接插入,否则遍历这个位置上的链表(若找到相同的节点(equals方法)则更新节点,否则插入) 2.HashMap的构造方法(挑选两个重要的看): public HashMap(int init ...
这段时间一直在做一个项目,由于涉及的代码分支比较多,每次搭建环境都非常麻烦,所以就尝试写一个shell脚本来减轻工作量(希望自己以后能通过这些一点点提高自己的shell水平)。 #!/bin/bash ################################ # # 自动更新项目分支脚本 # # 运行方式:sh tools.sh config # # diaocow 2012-07-29 # # ################################ # mvn编译分支 function compile() { local svn_d ...
快捷操作命令 1.查找最近输入命令中以某些字符开头的命令 Ctrl+Shift+R 2.跳到命令的最前端 Ctrl+A 3.跳到命令的末尾 Ctrl+E 4.删除当前光标之前所有字符(一般用来删除整条命令) Ctrl+U 5.删除当前光标之前一个单词 Ctrl+W 6.清空屏幕输出(效果同clean命令) Ctrl+L 7.暂停屏幕输出(配合tail -f看日志很方便) Ctrl+S 8.继续屏幕输出(配合tail -f看日志很方便) Ctrl+Q 文件操作命令 1.修改文件访问权限 chmod a+x test.vm 2.修改文件拥有者 chown a: ...

Java锁相关总结

    博客分类:
  • Java
1.ReentrantLock对象 private ReentrantLock lock = new ReentrantLock(); lock.lock(); try { //代码段 } finally { lock.unlock(); // 这步至关重要,千万不能遗漏 } a.一旦一个线程获得了锁对象,那么其他线程都将阻塞在lock.lock()方法中; b.锁对象是可重入的(即已经获得锁的线程可以再次获得锁),这时候琐计数+1,当线程调用unlock方法时,琐计数-1,只有当琐计数为0时,才被释放; c.ReentrantLock类还具有一个带有bo ...
今天重新看了一下Hessian的序列化类,发现了一个之前被自己忽略的地方,而这应该也是Hessian序列化较快的原因之一(参考源码3.0.13)。 在大多数序列化类开始之前都有这么一段代码: if (out.addRef(obj)) return; //省略具体序列化code... 我们看下addRef(obj)做了些什么? 从代码注视中,我们也能看出它的含义:如果当前对象已经被序列化,那么此次我们只序列化它的引用) /** * If the object has already been written, just write its ref. ...
分析了BasicSerializer和JavaSerializer,剩下的序列化类就比较简单了,其实最本质的是基本类型的序列化http://diaocow.iteye.com/blog/1317164,其他任何类型的序列化最后都可以回归到基本类型的序列化; 隐隐的感觉透着递归的理念,最后递归到一个基本问题的解决! 今天我们分析下CollectionSerializer和MapSerializer(参考源码版本3.0.13)。 1.CollectionSerializer public void writeObject(Object obj, AbstractHessianOutput ...
紧接着上一篇,我们来看看另一个序列化类JavaSerializer(参考源码版本3.0.13)。 这个类一般是用来序列化我们自定义类的(DefaultSerializer),所以更多的时候我们用到的是它,今天打算分析两个方面: 1.JavaSerializer本身实现分析; 2.分析下反序列化的时候为什么会存在父类同名field覆盖子类field值问题; JavaSerializer实现 // 首先看一下JavaSerializer的构造方法 public JavaSerializer(Class cl, ClassLoader loader) { ... // 存放简单类型字 ...
之前分析了序列化一个对象的流程,基本上可以归纳成先获取一个对象的序列化类,然后由该序列化类来序列化对象;那么究竟有哪些序列化类,以及这些类是如何序列化的就是我们本次分析的重点(参考源码版本3.0.13)! 先看下整个序列化类的的类图: 可以看出: 1.它们都是AbstractSerializer的子类; 2.实现序列化的方法是:void writeObject(Object obj, AbstractHessianOutput out)方法; 现在我们就分别讨论这些类的实现,首先是BasicSerializer类(用来序列化java基本类型,以及基本类型数组) Integer ...
今天我们重点来看看Hessian是如何实现序列化的(这些序列化类可以脱离hessian源码包,单独拿出来使用),参考源码版本为3.0.13 首先我们看下序列化一个对象的代码: // 这里可以是任何形式的OutputStream,现以FileOutputStream为例 OutputStream os = new FileOutputStream("hessianOutput"); // 创建 HessianOutput对象 AbstractHessianOutput out = new HessianOutput(os); // 设置序列化工厂(其实上一步初 ...
【客户端】 我们在客户端是如何使用hessian呢? String url = "http://localhost:8080/Hello/hello"; HessianProxyFactory factory = new HessianProxyFactory(); // IHello为调用的服务接口,url为hessian服务url IHello helloProxy = (IHello)factory.create(IHello.class, url); System.out.println(helloProxy.sayHello()); 以 ...
【服务端】 HessianServlet 是一个非常普通的Servlet 它直接继承 GenericServlet 我们看其中两个核心方法:init与service方法(参考源码版本3.0.13) init(ServletConfig config) 该方法覆写父类的init(ServletConfig config)方法(按照servlet规范推荐,覆写i ...
Global site tag (gtag.js) - Google Analytics