我的Java后端书架 (2016年暮春3.0版)

书架主要针对Java后端开发。
3.0版把一些后来买的、看的书添补进来,又或删掉或降级一些后来没有再翻开过的书。

[...] (阅读全文……)
Posted in 技术 | 21 Comments

另一份Java应用调优指南之-前菜

每一次成功的调优,都会诞生又一份的调优指南。

一些必须写在前面的军规,虽然与Java应用的调优没直接关联,但是测试同学经常不留神的地方,导致应用的优化变成一场测试环境调优的闹剧。 [...] (阅读全文……)
Posted in 工作, 技术 | Tagged | 11 Comments

StringBuilder在高性能场景下的正确用法

关于StringBuilder,一般同学只简单记住了,字符串拼接要用StringBuilder,不要用+,也不要用StringBuffer,然后性能就是最好的了,真的吗吗吗?

还有些同学,还听过三句似是而非的经验:

1. Java编译优化后+和StringBuilder的效果一样;

2. StringBuilder不是线程安全的,为了“安全”起见最好还是用StringBuffer;

3. 永远不要自己拼接日志信息的字符串,交给slf4j来。

[...] (阅读全文……)
Posted in 技术 | Tagged | 17 Comments

Java ThreadPool的正确打开方式

线程池应对于突然增大、来不及处理的请求,无非两种应对方式:
  1. 将未完成的请求放在队列里等待
  2. 临时增加处理线程,等高峰回落后再结束临时线程
JDK的Executors.newFixedPool() 和newCachedPool(),分别使用了这两种方式。 不过,这俩函数在方便之余,也屏蔽了ThreadPool原本多样的配置,对一些不求甚解的码农来说,就错过了一些更适合自己项目的选择。 [...] (阅读全文……)
Posted in 技术 | Tagged | 15 Comments

AWK处理日志入门

这两天自己挽起袖子处理日志,终于把AWK给入门了。其实AWK的基本使用,学起来也就半天的时间,之前总是靠同事代劳,惰性呀。

此文仅为菜鸟入门,运维们请勿围观。 [...] (阅读全文……)
Posted in 技术 | 2 Comments

ClassLoader, JavaAgent, Aspectj Weaving一站式扫盲帖

最近工作里复习的Class Loader基础知识集锦,写下来希望对别人有帮助,而且不止是为了撂倒面试官。

为了尽量简单明了容易背,有些部分写得比较干。 [...] (阅读全文……)
Posted in 日常 | 4 Comments

Sonar + Jacoco,强悍的UT, IT 双覆盖率统计

以前做统计代码测试覆盖,一般用Cobertura。以前统计测试覆盖率,一般只算Unit Test,或者闭上眼睛把Unit Test和Integration Test一起算。

但是,我们已经过了迷信UT的时代,使用嵌入式容器的IT (如Spring Boot所倡导的一整套IT测试体系),对代码质量和重构的帮助一点都不比UT小(UT本质上不支持重构,UT不支持基于用户故事的测试。)

但是IT很容易只跑一个用例就跑出40%的覆盖率来,所以Sonar + Jacoco 这种同时显示UT和IT测试覆盖率的组合非常实用。 [...] (阅读全文……)
Posted in 技术 | 2 Comments

魏晋的男神们

下雨天,在小咖啡店里看《世说新语》,那个美姿容的暗黑乱世。 [...] (阅读全文……)
Posted in 文艺 | 1 Comment

Netty之有效规避内存泄漏

有过痛苦的经历,特别能写出深刻的文章 —— 凯尔文. 肖

直接内存是IO框架的绝配,但直接内存的分配销毁不易,所以使用内存池能大幅提高性能。但,要重新培养被Java的自动垃圾回收惯坏了的惰性。

Netty有一篇必读的文档 官方文档翻译:引用计数对象 ,在此基础上补充一些自己的理解和细节。

[...] (阅读全文……)
Posted in 技术 | Tagged | 5 Comments

Netty之Java堆外内存扫盲贴

Java的堆外内存本来是高贵而神秘的东西,只在一些缓存方案的收费企业版里出现。但自从用了Netty,就变成了天天打交道的事情,毕竟堆外内存能减少IO时的内存复制;而且也没了烦人的GC。 。

好在,Netty所用的堆外内存就是Java NIO的 DirectByteBuffer类,通读一次很快。还有一些sun.misc.*的东东木有源码,要自己跑去OpenJdk那看个明白。

[...] (阅读全文……)
Posted in 技术 | Tagged | 9 Comments