About me

Profile Picture

Full-stack software developer living in Auckland, New Zealand

Have rich experience and strong problem solving skills.
Know how to apply best practices in real product development.
A quick learner and always want to learn emerging techniques.

Skills & Interests

Learn as if you were to live forever.

– Mahatma Gandhi

Front-end

HTML, JavaScript/CoffeeScript, CSS/LESS

Bootstrap, jQuery, AngularJS, Dojo, Backbone, RequireJS

Grunt, Bower, Yeoman

Back-end

Java/Scala

Spring, Hibernate, JPA, JSP, servlet

NodeJS

Ruby/Python

Infrastructure

AWS EC2/RDS/SQS/ELB

Jenkins, Gradle, Maven, Ant

Docker, Vagrant

MySQL, MongoDB

Other

REST

OOP/AOP

Agile

Publications

If you have knowledge, let others light their candles in it.

– Margaret Fuller

Book

“Understanding the Java 7: the Core techniques and best practice” covers Java SE 7 new features and deep dive of Java platform core features, including JVM internals, byte code manipulation, class loader, generics, security, concurrent programming and serialization.

(Simplifed Chinese edition)

Technical articles

A regular author of IBM developerWorks China and InfoQ China website with more than 50 published technical articles covering various technical topics.

(Simplifed Chinese)



Recent Posts

Spring Testing transaction management

Dec 18, 2014

Spring Testing is a good tool for testing application written using Spring framework. It has convenient built-in transaction management for integration tests. By default, Spring starts a transaction for each testing method and rollback the transaction after testing method is executed. Methods annotated with @Before and @After are also executed in the same transaction. By doing this, no change is actually made to the database, so you don’t need to clean the database manually after each test.

Scala trait

Dec 17, 2014

Trait is a Scala language feature which is not familiar to Java developers. Traits are similar to classes. They can have fields and methods and maintain state. You can do anything in a trait definition as in a class definition, with only two exceptions.

First exception is that a trait cannot have parameters passed to the primary constructor. For example, following code is invalid.

新西兰IT技术移民问题与解答

Nov 27, 2014

在之前的“新西兰IT技术移民个人经历”一文中,简单介绍了我自己技术移民新西兰的一些体会。写完之后有一些人在微博私信上问我一些问题,在这里我对一些常见的问题做一下解答。不过需要说明的是每个人的情况都不相同,我所说的解答也只代表我个人的观点。

为什么要移民?

每个人决定是否要移民的理由各不相同。我觉得只要考虑清楚就可以了。大部分是为了小孩的健康和教育等。