5月 272020
 

从一道面试题讲起:采用DCL实现单例模式时,是否需要加volatile关键字?为什么?

有关单例模式

我们在网上搜如何实现单例模式时,帖子往往给出多种实现:饿汉模式、懒汉模式、双重锁懒汉模式(双重锁检查,double check lock,经常简写做DCL)、静态内部类模式、枚举模式等。

此处可以参考 深入理解单例模式:静态内部类单例原理 这篇文章。

顺带提一句,《Java并发编程的艺术》(方腾飞)第3章有讨论过DCL、静态内部类这两种实现方式,建议去读一读。 Continue reading »

2月 222017
 

本文就是想学习、简单总结一下JDK里的JCF,并且制定一下自己后续阅读源码的范围——先学习一下JCF中重要的一些类,后续学习Java其他一些东西,给自己定个路线图,O(∩_∩)O~
本文参考了多篇文章,如有引用但没标注的地方,请及时联系我,这文章本意是想记录一下,相当于读书笔记。

一、概述

JCF,即Java Collection Framework,是JDK中已经封装好容器类,类结构如下: Continue reading »

1月 112017
 

今天用到了Java中Integer.highestOneBit方法,之前还真没注意Integer中还有位运算相关的方法,这里简单列举一下,方便后续查:
a. highestOneBit(i)
如果一个数是0, 则返回0
如果是负数, 则返回 -2147483648 1000,0000,0000,0000,0000,0000,0000,0000(二进制表示的数)
如果是正数, 返回的则是跟它最靠近的比它小的2的N次方
正数、0好解释,至于负数,由于计算机中的数字都是采用补码表示,即反码+1,并且最高位是一个1、表示负数,因此这个符号位作为最终结果返回。 Continue reading »

12月 262016
 

最近开始看jdk源代码,先分享一个挺好的博客:http://blog.csdn.net/chenssy  chenssy 有关JDK源码的博文写的很细,我就参考他的博文写写其他的内容,已经被chenssy写过的内容我就不再重复啦,估计也没他写的细。另外,如果网上已有相关分析,我可能直接给出链接、做做补充,毕竟本系列属于读书笔记性质,留下个记录免得自己忘记,并不打算写的特别全或是全部原创。下面就开始【源码分析】系列的第一篇:ConcurrentSkipListMap
声明:本博客内容一般采集自互联网,若引用了其他文章或是博客的内容,我会尽量注明出处。如果有转载、未注明出处,或是有侵权的情况,请及时与我沟通(evasnowind@sina.com),我会及时删除。转载请注明本文出处,谢谢。
在java中,
如果我们需要快速存取键值对,可以用HashMap; Continue reading »

8月 252016
 

要实现可拖动的九宫格,网上搜了下,搜到比较靠谱的是这个版本,原理、实现都写的很清楚,但有个问题,用到GridView时,写adapter时一般都会使用ViewHolder的方式,即adapter使用BaseAdapter,adapter中保存数据,而调用getView方法时,若是第一次调用则将可复用的数据保存到一个ViewHolder类中,后续就不用再重新创建View;或者,adapter中每次根据数据创建view。
由于公司所用的客户端框架限制,我在实现可拖动的九宫格时,在getView方法中,拿到的数据就是一个个已经创建好的View对象,但按照上面提到的xiaanming的拖动实现方式,我将这些已有的View对象在getView中返回、加入到GridView后,发现显示没问题,但是拖动之后,View的显示顺序会乱掉,而且会出现第一次点击某个View时对应回调方法没有响应,但第二次点击时则会响应第一次点击、第二次点击两个回调方法。
为解决这问题,在github上发现如下可拖动九宫格的另一种实现,尝试重写adapter类后解决了该问题,发现这个跟stableid有关。我一开始写的adapter大概样子如下; Continue reading »

12月 222015
 

大家都说,阅读spring的源代码是个不错的学习方式,现在开始学习一下,头一次阅读开源代码,不知道怎么看,先随便记些笔记,记录一下,希望也能帮助别人吧。
目前我看代码的方式是阅读《spring源码深度解析》,按照上面的例子一步步阅读源代码,感觉这样难度降低不少,有书、有实际例子带着终归要容易一些。我所阅读的是spring framework 4.2的代码,从github上拉取的,拉取时间2015年11月份。
闲话少说,开始! Continue reading »

12月 172015
 

为了阅读spring源代码,用gradle重新build了spring framework 4,但发现有个项目死活过不去,spring-beans-groovy用gradle cleanidea eclipse命令build后总是出问题,直接导入eclipse中也会报错,查了一下,在 http://bbs.csdn.net/topics/390993197 发现问题原因:eclipse尚未安装Groovy插件,so,插件装起,eclipse Help –> install new software,添加Groovy插件地址,https://github.com/groovy/groovy-eclipse/wiki 此处有各种eclipse版本对应的groovy插件下载地址(注意eclipse的版本),安装插件后重新clean一下spring-beans-groovy这个项目就可以了。
以上

12月 162015
 

闲来无事,想学习一下spring源代码,结果按照网上说的教程从git下载spring framework(版本:3.2.4)源码、用gradle(版本:2.9) 转换成eclipse项目时遇到一个诡异问题,提示信息如下:

:buildSrc:test UP-TO-DATE
:buildSrc:check UP-TO-DATE
:buildSrc:build UP-TO-DATE
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ‘:spring-orm-hibernate4’.
> Cannot change dependencies of configuration ‘:spring-orm-hibernate4:runtimeMer
ge’ after it has been resolved.
* Try:
Run with –stacktrace option to get the stack trace. Run with –info or –debug
option to get more log output.
BUILD FAILED

Continue reading »