Coding Notes 2

Coding Notes 2

Performance boost

Class level cache to avoid repetitive computation

public class DecisionMaker implements Serializable

{

private static final long serialVersionUID = 1L;

private transient Map cache;

public final boolean accept(Object object)

{

Class clazz = object.getClass();

if (cache.containsKey(object.getClass()))

{

return cache.get(object.getClass());

}

boolean accept = false;

// do real business work here

return accept;

}

}

public final SelectableChannel configureBlocking(boolean block)

throws IOException

{

if (!isOpen())

throw new ClosedChannelException();

synchronized (regLock) {

if (blocking == block)

return this; ====> if status is same, no work needed, return directly.

if (block && haveValidKeys())

throw new IllegalBlockingModeException();

implConfigureBlocking(block);

blocking = block;

}

return this; ===> method chaining

};

Check parameter validity explicitly


Usually, the method has some limitation on parameter, so it's better to check parameter validity explicitly first and if parameter is not correct, throw RuntimeException explicitly, as usually, incorrect parameter means program coding error.

Add parameter limitation and other pre-conditions to method Javadoc.

Throw NullPointerException explicitly

Usually, as a API user, we are not sure whether the parameter is nullable, so if not, make it clear by throwing NullPointerException explicitly at the beginning of the method.

public static ReadableByteChannel newChannel(final InputStream in) {

if (in == null) {

throw new NullPointerException();

}

}

Reuse and throw JDK standard exception if possible

Small interface and aggregate interface

ByteChannel, which extends both ReadableByteChannel and WritableByteChannel. ByteChannel doesn't declare any new API methods; it's a convenience interface that aggregates the multiple interfaces it inherits under a new name.

This is syntactic sugar to simplify class definitions and make it easier to test channel objects with the instanceof operator.

Logging

Logging is very important to help monitor application, detect problem and find out root cause. So for any non-trivial application, consider what messages are need to be logged and what log files are needed at the beginning of the project.

Never be tempted to use system.out in real application.

Post a Comment

Labels

Java (159) Lucene-Solr (112) Interview (61) All (58) J2SE (53) Algorithm (45) Soft Skills (38) Eclipse (33) Code Example (31) Linux (25) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (16) Defects (14) Text Mining (14) J2EE (13) Network (13) Troubleshooting (13) PowerShell (11) Chrome (9) Design (9) How to (9) Learning code (9) Performance (9) Problem Solving (9) UIMA (9) html (9) Http Client (8) Maven (8) Security (8) bat (8) blogger (8) Big Data (7) Continuous Integration (7) Google (7) Guava (7) JSON (7) Shell (7) ANT (6) Coding Skills (6) Database (6) Lesson Learned (6) Programmer Skills (6) Scala (6) Tips (6) css (6) Algorithm Series (5) Cache (5) Dynamic Languages (5) IDE (5) System Design (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) Miscs (4) OpenNLP (4) Project Managment (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Bit Operation (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Firefox (2) Google Drive (2) Gson (2) How to Interview (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Python (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts