JAVA
文章平均质量分 71
iteye_18979
这个作者很懒,什么都没留下…
展开
-
如何让一个Class被一个虚拟机实例载入2次
以前在一些Blog上面经常看到分析java虚拟机载入Class的各种机制,其中有一种叫做委托机制. 也就是Classloader总是先让他的上一级去查找,只有上一级找不到的时候,他自己才去查找.这也就是说一个Class总是会被同一个ClassLoader载入了.但是我又知道,一个Class在一个虚拟机里面是通过3个因素来决定:加载器,类名,包名.我记得一个虚拟机是可以把一个Class载入2...原创 2011-12-11 12:27:24 · 141 阅读 · 0 评论 -
Scala浮点运算精度问题
在Spark开发的时候,直接使用java.math.BigDecimal进行浮点相乘的时候,依然有精度缺失.但是如果是纯JAVA就没有,在Scala中调用JAVA的BigDecimal就有这样的问题. 偶然之间发现Scala也实现了scala.math.BigDecimal. 换用SCALA自身的BigDecimal就没这样的问题了. 不知道深层次的原因,在这抛砖引玉,如果有人...2016-10-15 21:15:35 · 2663 阅读 · 0 评论 -
Solution to Fix OOM in Drill
Drill用来查询Hbase,不需要预先定义Schema,十分方便.当时如果Hbase表过大会出现OOM(OUT OF MEMORY). 查询文档后,发现通过如下2个配置可以解决. 高亮的是系统的默认值. SELECT * FROM sys.options WHERE type in ('SYSTEM','SESSION') and name in( 'planner.memory....2016-11-27 22:30:55 · 191 阅读 · 0 评论 -
Log4j是如何取得行号的(有源码分析)
Log4J是如何打印出行号的呢,之前一直以为是通过JAVA的反射.今天特意去查了一下,JAVA的方式好像没有提供这样的接口.于是研究了一下Log4J的代码,现在分享出来. 开门见山:直接开门见山的讲重点, 其实要获得JAVA的行号,Log4j就是先抛出异常,然后在异常堆栈中找到调用函数所在位置. 下面根据下面的一个异常堆栈,来分析如何通过2歩找到找位置的办法.1)找到org...2014-07-09 15:44:09 · 1240 阅读 · 0 评论 -
synchronized 和reentrantlock的优缺点
多线程之--2种办法让HashMap线程安全多线程之--synchronized 和reentrantlock的优缺点多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync) reentrantlock的优点可以添加多个检控条件, 如果使用synchronized,则只能使用一个. 使用 reentrant locks 可以有多个wait...2014-08-01 09:15:09 · 1445 阅读 · 0 评论 -
2种办法让HashMap线程安全
多线程之--2种办法让HashMap线程安全多线程之--synchronized 和reentrantlock的优缺点多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync) HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全. 方法一:通过Collect...2014-08-04 16:29:30 · 2208 阅读 · 0 评论 -
2种JAVA乐观锁的比较( NonfairSync VS. FairSync)
多线程之--2种办法让HashMap线程安全多线程之--synchronized 和reentrantlock的优缺点多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync) 本文从成员函数和锁的获取这2个角度, 比较这2种锁. 发现区别其实不大.只有在阻塞队列为0的时候才有些许区别. 如果分析的不对,请斧正. 稍...2014-08-07 11:13:10 · 429 阅读 · 0 评论 -
详解JAVA线程的中断
多线程之--2种办法让HashMap线程安全多线程之--synchronized 和reentrantlock的优缺点多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync)多线程之--详解JAVA线程的中断 中断线程,并不是直接的中断一个线程,需要依赖于当前线程的状态,有如下几点需要需要注意: 1) 除非当前线程中断自己(这个总是被...2014-08-08 14:11:54 · 120 阅读 · 0 评论 -
古怪的泛型
Java1.5引入的泛型是一个比较大的进步,让人用的也很爽.但是java的泛型是基于类型擦除,也就是只在编译期才有泛型的存在,在运行时根本没有泛型什么事. 这也造成了泛型不能支持下面这些情况,而这些是在C++里面是都得到了支持的. 不支持New操作 Java代码 class SomeContainer<E> { E creat...2014-08-20 15:56:45 · 135 阅读 · 0 评论 -
如何在JAVA中创建一个不可变对象
1. 对象的状态在构造函数之后都不能被修改,任何修改应该通过创建一个新对象来实现.2. 所有的对象属性应该都设置为final3. 对象创建要正确,例如:对象的应用不能在构造函数中被泄露出去4. 对象要设置为final,确保不要继承的Class修改了immutability特性 上面这些规则不是100%的不能打破,比如String对象hash属性就不是一个final对象,但是...2014-08-29 23:45:53 · 579 阅读 · 0 评论 -
细说Tomcat如何打破双亲委派(有源码和图)
一句话概况: 不考虑缓存, 那么装载路径就是,先Classpath, 然后War包,当前工程, 最后才是Tomcat相关目录. 不考虑缓存,是因为缓存只是用来加快速度,对外不调用展现出的逻辑效果是可以忽略的. 下图是一个概况的流程图, 简介起见,绘图过程中移除了缓存功能. (个了感觉还是有些逻辑还是有些复杂的,图画出来了,自己看着都觉得还是不清楚,但是也没发现可以改进的地方) ...2014-09-08 22:43:46 · 4040 阅读 · 1 评论 -
【大数据笔记】--续谈WordCount的Bug
在之前的Blog [http://flyfoxs.iteye.com/blog/2110463] 中讨论了, hadoop在文件切割时,可能会把一个行数据切割成无意义的2块. 如果不做特别处理,这会造成数据的失真及处理错误. 经人指点,发现这个BUG不存在. Hadoop在分割文件后,后期读取中会通过一些规则来保证不会出现把一行数据分割成2行. 下面对这个后期处理机制(LineRec...2014-09-09 22:55:32 · 133 阅读 · 0 评论 -
【大数据笔记】Hadoop通过动态代理实现RPC
Hadoop所有的跨节点的通信都是通过RPC来通信的, RPC通信是需要创建Stub,一个好的RPC需要通过良好的设计确保了对上层调用的透明性. 我们下面就通过Hadoop里面最常用的心跳(JobTrack和TaskTracker)来研究一下Hadoop的RPC机制.心跳函数的调用在方法:TaskTracker.transmitHeartBeat();在此方法中会调用下面的代码段.这个方法...2014-09-12 20:09:49 · 174 阅读 · 0 评论 -
一句话解释ThreadPoolExecutor添加线程(有源码)
ThreadPoolExecutor添加线程是通过 execute(Runnable command),此方法代码行数不多,但是由于太精炼了,不大好读懂,理解完之后,特写下笔记加深印象. 一句话解释:如果BlockingQueue没有大小限制,如果在执行的线程个数小于corePoolSize,则自动执行,否则当前线程存入BlockingQueue. 备注:如果Blockin...2014-09-19 21:29:36 · 181 阅读 · 0 评论 -
如何使用Spark/Scala读取Hbase的数据
必须使用高亮参数启动Spark-shell,否则当你遍历RDD时会出现如下的Exceptionjava.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable spark-shell --conf spark.serializer=org.apache.spark.serializ...原创 2016-09-05 17:10:24 · 1364 阅读 · 0 评论 -
JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)
首先纠正一个误区: 热部署不是我们在Eclipse里面修改了代码不用重启就可以持续调试. 详情可以参考上一篇博文: 热部署和"Hot Code Replace"的区别 http://flyfoxs.iteye.com/blog/2078863 热部署有一个缺陷,就是很容易导致内存泄露, 并且不是很容易从代码层次避免. 所以产品环境一般不推荐启用热部署. JAVA里面...2014-06-16 11:18:49 · 370 阅读 · 0 评论 -
ThreadLocal深入学习
以前经常用到ThreadLocal,但是没有深入的看过.这次有机会看了一下源码,发现了一些以前没有发现的问题.1)ThreadLocal的实现是给每一个Thread维护一个Map. 并且这个Map也是在Thread里面声明的,如果没有初始化这个Map.ThreadLocal会帮忙初始化. 详情可以参考ThreadLocal.createMap().2)每一个Thread只可以托管一...2011-10-09 17:15:20 · 80 阅读 · 0 评论 -
定制错误页面遇到的问题(403,404)
我在web.xml里面定义了错误页面,在Firefox显示正常,不知道为什么,跑到IE下面反而错了.我的错误页面是通过Spring Security提供的AOP实现的,开始以为是这个没有配置对.后来才知道,原来是IE对错误页面要求必须大于512.你可以通过下面的搜索链接,找到更详细的解释.http://www.baidu.com/s?tn=isanmao_pg&bs=IE+...2011-10-13 11:15:55 · 101 阅读 · 0 评论 -
ThreadPoolExecutor中largestPoolSize和maximumPoolSize的区别
查看ThreadPoolExecutor的源代码时,发现了2个意思十分接近的变量(maximumPoolSize, largestPoolSize) .十分好奇,google,百度也无法得到答案.只好查看源码,现将结果分享出来. maximumPoolSize:是一个静态变量,在变量初始化的时候,有构造函数指定. largestPoolSize: 是一个动态变量,是记录Poll...原创 2016-04-11 08:57:52 · 2625 阅读 · 0 评论 -
Parquet列式存储格式笔记
最近偶然的因素,突然觉得这个格式很神奇,找了很多文章细读了一遍,特整理如下. 第一篇文章里面讲的很通俗,易懂.但是对于之前没有背景的,细节地方不好理解,因为里面的实例比较简单和真实案例差别比较大.深入分析Parquet列式存储格式http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storag...2016-04-13 10:15:22 · 358 阅读 · 0 评论 -
一段关于Clojure (事务) 代码的分析
这段代码截取于:<<Clojure程序设计>>第五章, Programming Clojure, 2nd edition: 以后有空,会写一个Clojure于Oracle事物和MVCC的比较, 附件是这本书的英文版本. (defrecord Message [sender text]) ;定义了一个Message对象,这个对象的构造函数有二...2014-04-08 20:36:13 · 101 阅读 · 0 评论 -
一道淘汰85%面试者的百度开发者面试题- [用Clojure来解答]
题目来源:http://student.csdn.net/mcd/topic/235300/753730 最近学习Clojure好一段时间了,在网上看到一个蛮简单的面试题,于是用Clojure解答一下.注: Clojure主要是合适并行开发的场景,这个例子仅仅是解答了这个题目,优势并不明显. (doseq [n (range 1 101)] (do (print n...2014-04-25 13:37:03 · 114 阅读 · 0 评论 -
2种AOP方式的比较(动态代理, Cglib)
动态代理说到底,还是设计模式代理的一种.根据"代理对象的接口"生成一个新对象(利用反射).实际情况是根据传入的对象,看此对象实现的所有接口,然后生成新对象.生成新对象最后还是通过 InvocationHandler 来调用真正的业务对象缺点:所代理的对象必须有接口 Cglib运行时,动态生成指定拦截对象的子类. 通过子类就可以添加说需要的拦截方式了.由于是生成子类所以也就不需要是...2014-05-19 14:23:52 · 285 阅读 · 0 评论 -
百度一道面试题的三种解法
http://greemranqq.iteye.com/blog/2069056 在上面的地址看到了一个百度面试的题目:怎么找出{1,1,2,3,3,4,4,4,5,5,5,5} 找出出现次数为奇数的数字. 个人总结了一下,在上面博文加评论里面共提到了2种方法.1)使用一个数组来记录出现的次数,数组下标为对应的数,数组的值为出现的次数2)使用BitMap来实现,这样...原创 2014-05-21 20:48:03 · 269 阅读 · 0 评论 -
JAVA函数可以修改传入的变量吗?
泛泛的谈,可以说,有时可以有时不可以. 那我们就具体些,直入主题,看疗效吧.下面是一个例子: import java.util.LinkedList;import java.util.List;public class Api { public static final void main(String[] args) { int tmp = 10; chan...2014-05-27 11:17:54 · 734 阅读 · 0 评论 -
Cglib为什么不能完全替换 动态代理
看到好多地方对比CGLIB和动态代理来实现AOP的, 感觉就是一边倒的. CGLIB什么都好, 比如: 目标对象可以是Interface或者Class,不像动态代理只支持Interface CGlib性能也好. 看到这些,我就有一个疑问, 既然如此优秀, 为什么动态代理还有存在的必要呢.带着这个疑问,我研究了一下CGLIB的不足.对比动态代理来实现AOP,CGLIB需要有2...2014-05-30 11:23:23 · 820 阅读 · 0 评论 -
CGLIB学习札记---生成CLASS的命名规则
CGLIB生存的Class的命名规则有多种,它们都是由接口NamingPolicy对应的实现来定义的.接下来针对DefaultNamingPolicy进行分析.泛泛的说,生成的CLASS的规则如下 被代理class name(包名和类名) + "$$" +使用cglib处理的class name(只有类名,不包含包名) +"ByCGLIB" + "$$" +key的hashco...原创 2014-06-06 11:53:00 · 611 阅读 · 0 评论 -
CGLIB学习札记---Enhancer如何生成子类并装载
上一篇博文: CGLIB学习札记---生成CLASS的命名规则 介绍了生成之类的命名规则, 在这个博文里面主要分析了下面3点:1)Cglib如何生成的Class的二进制文件2)Cglib生成的Class二进制(byte[])放哪3)Cglib如何把二进制Load生成的Class 泛泛而谈,整个过程如下就是Cglib根据父类,Callback, Filter 及一些相关...2014-06-09 11:25:17 · 705 阅读 · 0 评论 -
JAVA类加载器分析-比较热部署和"Hot Code Replace"
最近复习JAVA类加载的相关知识,看到了热部署的实现原理,突然感觉这个好像不是以前Eclipse调试Tomcat的时候,修改代码不需要重启就可以调试的功能.查阅资料比较之后,发现不需要重启就可以继续调试的功能是"Hot Code Replace",我个人比较这两者之间的区别如下: 1)如果源文件有修改热部署会会导致JVM里面有2个不同的Class存在,他们的类加载器不一样.他...原创 2014-06-13 11:04:09 · 354 阅读 · 0 评论 -
细说Tomcat如何打破双亲委派(续1)
在上一篇文章里面分析WebappClassLoader.loadClass,了解了Tomcat是如何打破双亲委派的. 有兴趣的可以参考. 细说Tomcat如何打破双亲委派(有源码和图) 但是上面的分析偏重于流程,没有分析ClassLoader是如何加按照顺序寻址,然后加载对应的Class到二进制流中. WebappClassLoader.loadClass在违背双亲委派规则,自...2014-09-24 09:13:46 · 1150 阅读 · 0 评论