Intellij IDEA 插件开发 --- 一次 JVM Crash 问题的解决 虽然今天遇到的不是一个有什么技术含量的问题,但是国内做这块的人太少了,觉得还是需要多分享分享,至少可以帮助新人走一些弯路,^_^ 前几天手贱升级了 macOS Sierra,本来看到 Intellij IDEA 在 macOS Sierra 下面只有一个触摸板异常灵活的问题,觉得 …
该死的 ^M ^M,神奇的字符!相信很多人写 Shell 脚本的时候都被这个字符坑过,我自己也至少被坑过两次。最近周围的好几个小伙伴又被 ^M 坑,花了好几个小时检查脚本的错误,结果发现是 ^M 导致的。所以写了这篇文章讲一下什么是 ^M,当 ^M 出现的时候一般会伴随着什么样的现象,出现了我 …
Intellij IDEA 的一些使用技巧 所有的这些功能都是在 Intellij IDEA 14 中测试的,其他的版本不一定适用 打开类的直接定位到某一行 在 Mac 下,IDEA 默认的打开类的快捷键是 Command+O,不过这个快捷键也有一些技巧。 第一个是可以在打开类的时候直接跳到某一行,比如下面这样: …
Guice 集合注入 Guice 的初学者在使用 Guice 往一个类中注入一个集合注入的时候,肯定有感觉到非常地不自然(这里的不自然我觉得一定程度上是不符合 Guice 给人的初印象),由于最近在项目中也在使用 Guice,所以在这里对 Guice 的集合注入做一个记录。 一、使用 Guice 的扩 …
利用 JUnit 的 Rule 对 Log4j 的输出进行测试 最近在写框架的测试代码的时候,有需求要对 Log4j 的输出进行测试(依赖 Log4j 的输出来进行测试,这一点本身可能得深思一下),之前也有对 stdout 和 stderr 进行测试,用了一个叫做 system-rule 的包: …
一些关于单元测试的思考 最近在开发公司的集成测试框架,有一些关于单元测试的体会,写一个博客记录一下想法。 为什么要写单元测试? 这个问题,已经有无数的关于技术的书、文章去阐述了,不断地强调单元测试的重要性。比如单元测试可以让你在软件开发的早期阶段发现 Bug,而不必到集成测试的时候才发现等等。不过,对于 …
关闭 Tomcat 的 TLD 扫描的功能 背景 Tomcat 作为 Servlet 规范的实现者,它在应用启动的时候会扫描 Jar 包里面的 .tld 文件,加载里面定义的标签库,但是,我们在开发的时候很多都不是采用 JSP 作为 Web 页面的模板的,很多都是使用 Velocity 之类的模板引擎,自然而然,为了加快应 …
Java 8 之 default method 如果进度正常,新版本的 Java,Java 8 将在三月份发布,Java 开发人员期待已久的 lambda 也将在 Java 8 中得到支持。目前,Java 8 的早期版本已经可以在 Java 的网站上下载到了,Intellij IDEA 也已经在其最新的版本支持了 Java …
Google Guava 之 EventBus Google 的 Guava 库是一个 Java 程序员必须了解的库,它提供了一些非常强大的功能,比如函数式风格的集合操作,Cache Builder 等等的功能,另外 Google Guava 还提供了一个非常方便的观察者模式的实现:EventBus。 …
jvmtop 介绍和实现分析 简介 jvmtop 是一个分析工具,顾名思义,它是一个针对 jvm 的 工具,展示的方式和 unix 的 top 命令相似。 jvmtop 的项目地址是:jvmtop,安装 jvmtop 除了项目地址上的方式以外,还可以通过 jenv 安装:jenv install …
代码之美 今天的工作基本上就是在重构实习生写的 JS 代码,改的昏天暗地,他们基本把整个工程的 JS 代码都放到了一个文件中,代码中一会儿以空格缩进,一会儿以 tab 缩进,到处都是不必要的变量,我的代码洁癖又犯了,忍不住直接进行了重构,对 JS 进行模块化的拆分,每一个模块都有相对独立的 …
Git flow 分支管理模型简介 有一次和 @imsoz 在聊天的时候,他给我介绍了一个叫做 Git flow 的分支管理模型,我听了很有兴趣,于是昨天花了一点时间去了解了一下。 Git flow 分支模型 Git flow 是一个分支模型,它提供了一个经过实践检验的分支管理的模型。整个分支模型的工作图大概是下面 …
Java Bean 的布尔类型属性获取问题 Velocity 对 Java Bean 中布尔类型的属性的获取问题 今天朋友遇到一个问题,是 Velocity 下面一个 Boolean 类型的变量在模板上没有办法输出,我大致简化一下这个问题,现在我们有一个简单的 Java Bean: public class …
Spring 事务的传播特性 最近工作中涉及到了一个分布式事务的产品,这个产品是在 Spring 的事务上做的,我对其中涉及到的 Spring 的事务的传播特性不是很了解,所以今天花了一个下午的时间认真了解了一下,写了一堆的测试代码。 进入正题,Spring 的事务的传播特性分为以下的七种: …
从 JVM 中 dump class 的几种方法 前几天在 HotCode 的用户群里面,有同学问起“如何将 JVM 中的 class dump 出来”,当时我下意识的回答就是“可以在 JVM 启动的时候挂一个 agent 上去,然后通过 Instrumentation API 在 class 加载的时候做拦截,把类 dump …
「Sed & Awk」阅读笔记之 Sed 高级命令 上一篇文章中,我介绍了一下 sed 的基础,包括执行方式、地址选择器以及基本命令,在这一篇文章中,我们继续来了解一下 sed 的高级命令,之所以称它们为高级命令,是因为这些命令会改变 sed 的执行流,废话不说,我们来看看这些命令吧: 高级命令 N (Next) 这里要介绍的第一 …
「Sed & awk」阅读笔记之 sed 基础 之前写的一篇文章有提到采用 sed 来匹配不包含连续字符串的行,平时在做日志分析的时候也经常要用到 sed,但是仅仅用了 sed 的字符串替换的功能,没有系统地去学习过 sed 用法,这次找到一本叫「sed & awk」的书,便花时间对 sed 做了系统的学习。 sed 的执行方 …
再论如何匹配不包含连续字符串的行 在前一篇文章中,我讨论过如何使用使用零宽断言来匹配不包含连续字符串的行,这个方法采用了零宽断言这种不怎么常见的正则表达式用法,虽然行之有效,但是总归是个麻烦的方法,而且,零宽断言很多的正则表达式解释器都不支持,用 grep 的话,得加上 -P 参数,让 grep 采用 Perl …
使用零宽断言来匹配不包含连续字符串的行 最近在工作中遇到一个问题,有 N 个字符串,需要用正则表达式去过滤掉不包含某一个特定连续字符串(比如abc)的字符串。 在网上搜罗了一大把,找到了在 Perl 5 的正则表达式中有零宽断言这个东西,非常强大,先来了解下零宽断言倒是是什么? 简单的说,零宽断言是查找在某些内容之前或 …
Java 并发编程之 ConcurrentHashMap 此篇文章是作者两年前发布在黄金档的文章。 ConcurrentHashMap 是一个线程安全的 Hash Table,它的主要功能是提供了一组和 HashTable 功能相同但是线程安全的方法。ConcurrentHashMap 可以做到读取数据不加锁,并且其内部的结构可以让其在 …
Java 并发编程 J.U.C 之 Condition 此篇文章是作者两年前发布在黄金档的文章。 在上一篇中,我们了解了下 J.U.C 的锁的获取与释放的过程,这个过程主要通过在 A.Q.S 中维持一个等待队列来实现,其中我们也提到了,在 A.Q.S 中除了一个等待队列之外,还有一个 Condition 队列, …
Java 并发编程 J.U.C 之锁的获取与释放 此篇文章是作者两年前发表在黄金档的文章。 上一篇文章中,我们对 J.U.C 的一些大概的情况做了了解,在这一篇文章我们将来以 ReentrantLock 为例,来分析一下锁的获取和释放的过程,让大家能够对锁的获取和释放的整体过程有一个了解。 一、 …
Bash Job Control 这两天在给 HotCode 写测试脚本,其中用到了 Bash 的任务控制功能,说白了就是把一个任务放到后台,拉到前台之类的操作,这里做一下总结。 开启任务控制 首先,如果要在 Bash 脚本中使用 Bash 的任务控制功能,必须先执行下面这个命令: set -m 这个命令的意思其 …
使用 POI 解析 Excel 的几个注意点 最近在写一个解析 Excel 的程序,需要把从前端上传上来的 Excel 程序解析成 JSON 格式返回给前端,期间也试过 jxl ,不过它只支持到 Excel 2003。后来转而使用 apache 的 POI,作为初次使用者,使用过程中遇到了不少的问题,在这篇博客中记录一下: …