- 博客(54)
- 收藏
- 关注
如何优雅的去做DAL层的UT
引子UT的重要性不言而喻,这里不用多说。但是,码农都知道,一段逻辑往往涉及到很多外部系统调用(不同的数据源、不同的服务等等),配合完成一段code真正想要完成的逻辑。 而UT(Unit Test)本身的重要思想之一,就是测试本单元的核心逻辑。我测试A,你却因为A依赖B,而导致测试的code跑不了,这个不科学。 于是,有了各种各样的mock技术,来模拟B的行为,按照你的需要,返回你期望的数据...
2014-09-26 19:55:37
444
原创 *nix下文件字符编码转换方法
为毛需要转换历史原因,公司内部的source code中充斥着大量的GBK编码,但是明显UTF-8更适合国际化的字符需求。如果不转换,在IDE中各种字符编码切换,各种蛋疼。一不小心,多种编码一叠加,造成不可逆的乱码保存,那就永远乱码的噩梦了。当然,更好的国际化支持,除了统一用UTF-8保存文件之外,更好的做法是,source code中压根就不应该出现中文(当然,这点可能会被很多人喷,算了,...
2014-09-26 14:18:02
614
Apache性能调优常用的三板斧
Apache常用的两种MPM讨论这个问题时,有必要先界定Apache运行时到底load的是哪个MPM,prefork和worker毕竟运行时在Server端的资源消耗有一些差别。prefork:典型的“一连接一进程”模式(每个进程内部就启动一个系统线程),在相同的并发连接情况下,显然要比worker模式消耗更多系统资源(最主要消耗的就是Server的RAM,其实很多时候,调优关注的焦...
2013-11-17 15:03:53
395
原创 Git回滚的常用手法
传统VCS的回滚操作对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求。如果你是传统VCS,比如SVN或者P4来说,revert是个最直观,也是最直接的手段,当然前提是你的修改还没有被提交到远程的中央仓库。如果你已经ci了你的code到了远程中央仓库,那revert恐怕也无能为力,只能借助其他命令workaroud这个问题,比如:你用SVN的话,就得来个逆向mer...
2013-10-20 22:11:18
1218
原创 正则表达式中的LookAround
这个东东有人把他直译为环视,到也还算贴切。因为本来这东西就分为head和behind两种类型。分别表示找前面的和找后面的部分。然后又根据是想匹配括号里的内容还是不想匹配括号里的内容,分为了Positive和Negative两种。这样你就会发现目前已经分别在两个维度上有了分别两种分法,于是这就组合出了LookAround的全部四种情况:Positive LookaheadNegati...
2013-09-07 15:08:26
517
原创 如何实现Linux下高亮关键字的tail -f功能
公司内部一哥们发布到邮件列表中的一个小tip,挺有意思,属于程序员的“奇淫技巧”类吧,值得记录一下。如果你在linux下工作,那用tail -f跟踪一个日志文件的输出内容应该是家常便饭了。但是,有时你更关心的是一些敏感字词,希望能够在动态跟踪的同时,把这些字词高亮出来,比如日志中的ERROR关键字。那么,一种思路就是把你tail输出的东西再做一次包装处理,这个很符合linux管道处理...
2013-08-19 13:42:18
1678
原创 中文乱码的那些事儿(二)
中文乱码的那些事儿(一)中基本没提及任何乱码的事情,被骂标题挡了,本篇主要侧重乱码问题的排查过程,讨论一下处理这类问题的思路。一次典型的B/S结构的Web请求过程大概是下面这个样子的:浏览器发起request(第一次Encode,将待发送的数据通过某种字符编码编码为字节流) -------> 服务器接收请求(第一次Decode,如果此时使用了和浏览器端不一致的字符编码进行解码,...
2013-08-18 16:57:09
282
原创 中文乱码的那些事儿(一)
昨晚帮同组一个新入行的intern解决了一个中文乱码的问题,想想这个中国程序员几乎无法回避的问题,曾经引得多少程序员竞折腰!很多新人被搞的晕晕乎乎很大一部分原因是因为网上关于这个问题的“歪门邪道”的解法太多,各种场景,各种解法,有人蒙对了,问题解决了,happy ending!有人运气不好没碰上,只能抓狂了。。。其实这个问题的根本原因不难,谁都都知道问题的关键就一点:编码字符集和解码的字符...
2013-08-17 23:38:38
166
原创 JQuery1.6中.attr()和.prop()的区别
.prop()这在1.6之后引入的方法在JQuery的官方文档上的解释的很坑爹,就是attribute和property的区别。对于不清楚attribute和property的区别的人来说,根本看不出来啥区别。找到两篇国外程序员兄弟的博客,写的不错,记录一下链接:http://techbrij.com/jquery-attr-vs-prop-differencehttp://jq...
2013-07-17 16:28:48
126
原创 Oracle中left join中右表的限制条件
无过滤条件的LEFT JOINSQL中最简单形式的LEFT JOIN,是直接根据关联字段,以左表为基准,对右表进行匹配。在SELECT语句中选取的字段,如果有右表的记录(一般都是需要右表的某些记录的),取出配对成功的右表记录中对应的这个字段的值;否则,直接置NULL。这本身就是LEFT JOIN的特点:保证左表记录完整,右表只是辅助匹配。直接看例子,为了演示,准备了两张测试表test1...
2013-06-10 12:03:46
2922
SSH连接远程服务器直接执行command时PATH设置不全的一种解决方案
git作为DVCS的强大功能之一就是可以不用中心server节点,直接在developers之间的host同步源码。这个好处有很多,比如可以想到的一个比较明显的好处就是:可以在code尚未ready的情况下,随意在host之间同步,方便协作开发。(试想一下,如果是传统的CVCS,比如SVN,在代码尚未ready的时候,将代码就提交的中心repo,那简直就是噩梦。不幸的是,如果你如果不借助诸如rs...
2013-05-25 14:54:27
867
关于时区、时间、时刻
关于时区,其实应该是个地理概念。通常情况下,当我们跟别人说:“现在是上午11点23分”这句话时,隐含了一个信息,那就是我们做了一个假设:我们都处在同一个时区——标准时间东八区,或者是电视上常说的“北京时间”。这也说明了一件我们平时可能并没太注意的一件事情,时间是和时区紧密挂钩的一个概念。但时刻就不同了,他是一个和时区没有任何联系的概念,中国有句古话叫“此时此刻”,可以当做现在时刻的一个等价表...
2013-04-14 17:43:14
421
原创 Perl语言基础注意事项
while和foreach分别对应Perl的scalar context和list context。这点最大的区别就是:对应一个大文件的处理,在联合钻石操作符<>或文件句柄<fh>时,要格外小心。因为前者是读取文件一行,进入while循环处理这一行,然后再读取下一行,依次读取执行。后则,则是一次性读入文件所有内容,再进行foreach内部的循环,这样可能效率更高,但是...
2013-03-16 16:15:40
123
原创 ORA-01653: unable to extend table X by Y in tablespace Z
最近几天遇到了好几次Oracle的这个问题了,场景不太一样而已(注意:标题上的Y的单位是KB):insert into table1 values(...) select (...) from table2:(会占用temp tablespace,如果table2数据很大,temp tablespace不够大的话,可能会报出上面的问题)update table1 set is_dele...
2013-01-28 14:06:03
161
原创 Web应用部署描述符(Deploy Descriptor)中Filter的执行顺序
J2EE Web应用的部署描述符DD对于Web开发人员通常都不会陌生,不过某些细节的问题,不好好研究一下Servlet的规范,就可能有些模糊了。今天遇到个问题:当一个被请求的Web资源符合多个Filter配置的mapping规则时,这些Filter执行的顺序是怎样的?是根据filter标签本身在web.xml中定义的顺序执行,还是根据filter-mapping标签在web.xml中定义的顺序...
2012-11-30 15:12:16
230
原创 Java GC log的解读
Java的GC log中,往往有很多名称啊、数字啊,第一次看到时候,总会有点晕头转向的感觉。今天又Google了一圈,找到两篇比较靠谱的网页记录一下:HotSpot在PrintHeapAtGC输出的内容的格式Java Garbage Collection Log messages引用一下stackoverflow上的那个例子8109.128: [GC [PS...
2012-11-12 14:12:47
353
原创 关于cookie domain中的点前缀
今天同事遇到一个问题,大概描述如下:浏览器已经接收指令,之前在一级域名下存储了相关的信息。这里为了简化问题,假设我们有两个应用A和B,域名分别为:a.b.com和c.a.b.com。(显然B是A的一个子域)。上面的描述就是:在.b.com这个一级域名下,我们已经成功写入了一个cookie,假设为:b=level1。在正常用户的浏览行为中,应用A会向自己的域下写入a=level2(dom...
2012-11-07 17:30:58
3418
原创 Java范型真的被擦除了吗?
学习范型的第一课就被警告说,范型信息再编译之后是拿不到的,因为已经被擦除掉了。如果不深入研究,这个观点很容易给人以这样的错觉:只要代码里面用了范型的地方,编译之后,是没法拿到这部分信息的! 关于这点的错误之处,可以参考撒伽的这篇文章。 按他的解释是说:位于声明一侧的,源码里写了什么到运行时就能看到什么; 位于使用一侧的,源码里写什么到运行时都没了。这里,最根本的原因,还是因为jdk...
2012-11-07 11:24:44
182
原创 Java内部类的可见性问题
关于Java的内部类的可见性问题,平时并未太注意。不过使用时,其实还是应该明确一点:就是关于内部类和他的外部类的可见性问题:private这种修饰符并不能阻止外部类直接访问到内部类中的private属性;反之亦然。这里直接看代码会更清楚一些: public class VisibilityTest { private String outerName; pu...
2012-10-30 11:44:36
1530
原创 Java语言为什么不支持多重继承
Common Sense学习Java语言的一开始,就被任何一本教科书告知,Java语言是不支持多重继承的。但是可以利用接口完成多重实现。于是这个“事实”就作为一条常识,神一样的存在了。Why can not?当被问及这条神律为啥在Java语言中存在时,很多人就说不清楚了。老外的这篇文章说了大家比较公认的一个问题:“钻石问题”。这里,具体的细节请参考上面原文,下面把原文中的一个关键性说明...
2012-10-30 11:30:27
780
1
原创 一句shell命令搞定代码行数统计
今天面试时,突然被面试官问到怎样用shell命令搞定某个文件夹下java代码行数的统计。想了一下,基本思路就是找到这个文件夹下面的所有java文件,然后每个文件统计一下代码,外层套个for循环,叠加一下结果,就拿到想要的结果了。不过显然面试官希望我用一句shell搞定,当场晕菜了,没搞定。回来想了一下,其实确实不是啥太难的问题。 最粗略版find . -name "*.j...
2012-10-17 22:16:45
622
利用Ibatis实现Mysql中的不重复插入记录
以下讨论全部针对Mysql数据库:) 通常业务上至少需要两种类型的不重复插入记录的需求: 如果某些关键字段已经在Mysql中存在了,不要重复插入,而是改为更新某些字段。如果某些关键字段已经在Mysql中存在了,不要重复插入,也不需要做更新操作,直接忽略即可。1、针对上面的第一种,mysql提供了insert into ... on duplicate key updat...
2012-10-08 20:57:19
313
原创 Shell菜鸟笔记(1)--Shell中的一些常用特殊字符
1、关于$$是个在shell中有多种使用方式的东东。不经常使用时,也是很容易忘记的一个特殊标识符,记录一下比较常用的几种用法: $# : 获得脚本传入参数的个数。$? : 获得上面函数或脚本执行之后的返回值(或者叫退出码)。(默认成功执行之后返回0)$$ : 获得当前所在脚本的进程ID号。(通常会被作为生成唯一标识的一种手段)$! : 获得最后一个后台进程PID。(...
2012-10-07 15:58:48
265
原创 Hessian和Java反序列化问题小结
Hessian反序列化问题众所周知,Hessian框架提供的序列化方式,在性能上要优于Java自己的序列化方式。他将对象序列化,生成的字节数组的数量要相对于Java自带的序列化方式要更简洁。目前公司的一个项目中,有RPC调用的需要,这里我们使用了公司自己的开源RPC框架Dubbo作为远程调用框架,进行业务方法的调用和对象的序列化。这里,我们没有对Dubbo做出特殊配置,Dubbo在Remo...
2012-10-05 22:56:36
1344
原创 Linux下查找某文件夹下某类文件的内容
今天有个需求:需要查找在某个工程下面的所有js文件和vm文件中是否包含某个特定的关键字$a。 自己最直观的想法,使用find实现。 find . -name "*.js" -or -name "*.vm" | xargs grep "\b$a\b"这里很容易在-or参数后面忘记再写一次-name参数,我开始就是忘记了,导致语法就有问题,linux不认! 后来请教一位同事...
2012-09-19 15:12:32
480
原创 slf4j jar包冲突和spring的bean解析异常
由于种种原因,项目的结构被调整成了ant+maven共同管控的样子(真的好挫)于是,一个最基本的问题来了,之前写的UT没法跑了。首先爆出来的是slf4j的问题: SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. Exception in thread "main" j...
2012-09-19 15:00:48
455
原创 Java多线程常用工具小结
Java多线程问题常用的几种场景(不是全部)通常需要包括如下几个方面: 共享资源的互斥访问(比如:资源初始化过程)。有限资源的访问控制(比如:数据库连接池会限制只有有限个线程可以同时保持链接)。多线程之间访问的通讯配合(比如:典型的生产-消费模式场景)构建线程池Callable & Future读过写少的并发控制(比如:资源初始化过程)。针对这些比较典型...
2012-08-15 18:47:45
237
原创 HTTPS相关原理浅析
1、HTTPS本身并非协议,而是标准的HTTP协议架在SSL/TLS协议之上的一种结构。(一种不太合适的说法可以认为是两种协议的叠加)。HTTP是工作在OSI7层模型的最上层,就是第7层:Application Layer。而SSL/TLS是工作在第4层:Transport Layer。两层之间还是隔了Presentation Layer(6层)和Session Layer(5层)两层的。2、...
2012-08-03 17:11:23
113
原创 Json & JsonP
如题,在网上查找JsonP的资料的时候,发现了下面这两篇文章是相当靠谱的:http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 详细的信息直接看上面的两篇文章再好不过了。 ...
2012-08-01 21:01:54
86
原创 Mysql的一种CommunicationsException异常
问题背景:一个项目需要启动一个定时器任务,隔断时间访问一下DB,后端DB使用的是Mysql。之前测试的时候,启动程序,自动运行没有问题,逻辑正常。周五晚上走后,启动程序,按照之前配置的Cron,周末程序会自动执行。周一来了之后查看DB的数据发现有问题,于是查看服务器的程序日志,发现爆出了如下错误(非关键错误省略。。。): Caused by: com.mysql.jdbc.except...
2012-07-02 13:27:03
692
原创 Spring中关于classpath:和classpath*:前缀的一个小问题
在写Java代码时,有很多场景需要用到从classpath中加载资源。使用Spring时,定义了比较方便的前缀风格告诉程序从哪里加载。比较常用的有classpath:和classpath*:两种前缀,用于指定从classpath中加载资源。但两者有些细微差别。 以加载Spring的配置文件为例,以下的写法大家应该比较熟悉: ClassPathXmlApplicatio...
2012-06-29 13:44:11
714
原创 Ibatis中sqlmap参数map中还需要套list的情况如何写?
原始需求:有若干个参数,需要作为ibatis拼装sql的参数传入,但是有个参数的值比较特殊,是若干种枚举值。具体到这个case,就是有有限个namespace。我每次需要通过传入多个namespace来查询DB记录。准备需要传入sqlmap的参数的示例代码如下: Map<String,Object> ibatisParam = new HashMap&l...
2012-05-09 13:05:09
512
原创 关于URI/URL/URN
关于区别和联系,可以参考这篇文章。 为了具体点展示URI和URL的区别,找了一下JDK中两个类定义的field。看上去能更直观一点。
2012-03-03 22:26:25
99
原创 TextMate的常用快捷键整理
早就听说TextMate是Mac下的编辑神器,不过因为工作原因平时基本也不用。不过今天有个小需求需要用shell实现一点小功能。就把他打开了,毕竟还是比直接使用vim编辑好用一点的。脚本写完了,觉得用惯了Eclipse这里IDE提供的快捷键之后,总觉得这玩意没有快捷键支持真逊色了不少啊。google了一通之后,在这里记录一下常用功能的,供下次使用参考吧。TODO list这...
2011-11-19 17:04:51
345
原创 Linux下Maven运行时内存的设置方法
windows下的设置方法网上一陀,这里不多说。其实Linux下的设置方法也很多介绍的,但是很多都比较淫贱,说都说了,就是不给你说的明白点。糊弄人!记录一下,仅供新手参考:找到$MAVEN_HOME/bin/mvn,找个编辑器打开,在其中加入下面这句: 写道MAVEN_OPTS="$MAVEN_OPTS -Xms256m -Xmx512m -XX:MaxPermSize=...
2011-08-26 17:29:21
1901
AtomicInteger的并发处理
JDK1.5之后的java.util.concurrent.atomic包里,多了一批原子处理类。主要用于在高并发环境下的高效程序处理。网上关于这个原理介绍的比较靠谱的一片文章是出自IBM工程师的一篇:流行的原子 值得一看。这里,我们来看看AtomicInteger是如何使用非阻塞算法来实现并发控制的。AtomicInteger的关键域只有一下3个: ...
2011-07-22 20:15:45
587
原创 LinkedHashMap
今天有个需求,要求把某个公司和这个公司的有序产品放到map中存储,同时放入这个map中的公司时有顺序要求的——什么顺序放进去,什么顺序拿出来!用普通的HashMap解决这个需求就不合适了。jdk提供的集合框架中的LinkedHashMap比较适合这个需求。那么他又是怎么实现这个功能的呢?一起来看看源码吧。LinkedHashMap的接口定义如下: public class ...
2011-06-03 17:23:14
82
原创 Mac下的vim设置
Mac下面原生的就安装了vim,但是一些个性话的设置还是需要的。具体配置可以参考下面的文章:http://blog.csdn.net/Andrew659/archive/2011/01/09/6125367.aspx
2011-03-25 11:17:04
100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人