RSS feed [root] /weblog /design



title search:


Thu Apr 06 06:32:51 GMT 2023


(google search) (amazon search)
download zip of files only

Tue Jan 04 04:32:08 GMT 2022 From /weblog/design/examples


ZeroMQ: The Design of Messaging Middleware -[..]&siteSectionName=architecture-and-design

When NOT to use a message queue -

现代IM系统中的消息系统架构 - 架构篇 -

(google search) (amazon search)

Sat Jan 01 12:44:21 GMT 2022 From /weblog/design


Date handling look simple but easy to fail in trap. Even worst is this is easy to have bad data which hard to fix. Here is an example -

One tip for testing application with time dependence, treat it as random -[..]

Explanation of issues of Joda-time, basically it still haven't map the human view of time close enough than machine view of time -

Screencast of how to driven a fluent Date API -[..]-apis-in-java-episode-1-comparing-dates/

解读数据架构的 2021:大数据 1.0 体系基本建成,但头上仍有几朵乌云 -

(google search) (amazon search)

Sun Nov 28 12:45:20 GMT 2021 From /weblog/design/examples


Life of a Netflix Partner Engineer — The case of the extra 40 ms -[..]eer-the-case-of-extra-40-ms-b4c2dd278513

A look under the hood of the most successful streaming service on the planet -

(google search) (amazon search)

Thu Nov 25 23:26:25 GMT 2021 From /weblog/design


Top Ten Software Architecture Mistakes -

Discussion about the balance of upfront design -[..]4/25/the-scatology-of-agile-architecture

There is no conflict in agile and architecture -[..]s-no-conflict-in-agile-and-architecture/

Experience of build instead of buy -[..]uy-one-companys-decision-to-go-it-alone/

Problem of too many layer -[..]/10/the-madness-of-layered-architecture/[..]are-architect-here-is-your-reading-list/

Sometime it is worth to build to throw -

Business Transactions
External Dependencies
Caching Strategy
Garbage Collection
Application Topology[..]s-to-capture-in-enterprise-applications/

invent a solution the majority of whose components depend on no others with those few components whose task it is to compose those other components being left largely to coordination roles. -[..]ting-started-with-big-data-architecture/

Twitter -[..]tter-handles-3000-images-per-second.html

Suning, more on HTTP -[..]oduct-details-system-architecture-design

Decision -

Some suggestion of making system simple, well, but the suggestion itself it is that simple -[..]ural-patterns-in-a-nutshell-a0b47a1e9013

Explaining common different architecture patterns -[..]l-patterns-you-need-to-know-a1f5ea7e4e3d

Software Architecture Patterns -[..]ecture-patterns-5-mins-read-e9e3c8eb47d2

(google search) (amazon search)

Sun Nov 21 13:07:33 GMT 2021 From /weblog/design/examples


Crashproofing the Original NoSQL Key-Value Store -

The history of Berkeley DB -

(google search) (amazon search)

Mon Aug 23 14:12:35 GMT 2021 From /weblog/design/examples


10 Things You Didn’t Know About jOOQ -

(google search) (amazon search)

Sat Jul 24 14:13:07 GMT 2021 From /weblog/design/pattern


Saga Orchestration for Microservices Using the Outbox Pattern -

(google search) (amazon search)

Fri Jun 18 01:04:27 GMT 2021 From /weblog/design/interview

Linus Torvalds

(google search) (amazon search)

Sat Feb 20 13:09:12 GMT 2021 From /weblog/design/examples


建在大数据上的郑州地铁 -

(google search) (amazon search)

Sun Jan 31 13:17:02 GMT 2021 From /weblog/design


Best Practice: Application Frameworks -

(google search) (amazon search)

Sun Jan 31 11:07:40 GMT 2021 From /weblog/design


Fast synchronization between a single producer and single consumer -[..]eenASingleProducerAndSingleConsumer.aspx

Lock free queue idea. -[..]read/thread/82066179448783da?hl=en&pli=1

Use of Disruptor -

Use of Queue -[..]ble-presents-queue-er-message-queue.html

Discuss about the "Railway approach" of producer consumer queue -[..]ormance-Java-Inter-Thread-Communications[..]alternative-multi-producer-approach.html

Probably worth to consider replacing queue by actor -[..]implifying-trading-system-with-akka.html

AbstractQueueSynchroniz -

(google search) (amazon search)

Sun Jan 24 12:25:17 GMT 2021 From /weblog/design/distribute


1. Use Cloud for Scaling
2. Use Cloud for Multi-tenancy
3. Use Cloud for Batch processing
4. Use Cloud for Storage
5. Use Cloud for Communication

Database in cloud -[..]int?articleId=218900502&siteSectionName=

An overview of the Hadoop/MapReduce/HBase framework and its current applications in bioinformatics -

The architecture that survived when amazon outage -

Introduction of few tools for cloud development -[..]/01/best-development-tools-in-the-cloud/[..]/07/developing-and-testing-in-cloud.html

Google Finds: Centralized Control, Distributed Data Architectures Work Better than Fully Decentralized Architectures -[..]control-distributed-data-architectu.html[..]ticles/understanding-clouds-significance

Failover -[..]rchitectures-for-mitigating-aws-outages/

(google search) (amazon search)

Sat Jan 16 13:46:09 GMT 2021 From /weblog/design


如何优雅地重试 -

(google search) (amazon search)

Wed Dec 02 13:09:08 GMT 2020 From /weblog/design

logging[..]08/12/16/7-good-rules-to-log-exceptions/ - look obvious but a lot of program still make those mistakes.

Do you prefer log more or log smarter? It is good to log smart but if you log more, even if you not smart enough, you still have the data. -

Basic log techniques -

Advances and Challenges in Log Analysis -

Filtering only useful stacktrace -[..]ter-irrelevant-stack-trace-lines-in.html

Some suggestion about logging -[..]/10-tips-proper-application-logging.html and

9 Logging Sins in Your Java Applications, the "Logging Plain User Input" is a good one -[..]9-logging-sins-in-your-java-applications

Java Logging Best Practices: 10+ Tips You Should Know to Get the Most Out of Your Logs -[..]ogging-what-should-you-log-and-what-not/

(google search) (amazon search)

Sun Oct 11 13:31:07 GMT 2020 From /weblog/design


"Bad programmers worry about the code. Good programmers worry about data structures and their relationships." -[..]uote-about-good-programmer/163187#163187

Compare between schema and schema=less ( like key value mapping ) data -

Simple AVL tree -

逼着面试官问了我 ArrayList 和 LinkedList 的区别,他对我彻底服了 -

(google search) (amazon search)

Sun Oct 11 11:44:53 GMT 2020 From /weblog/design


Why should you combine Reliable Messaging with Distributed Caching -[..]MessagingDistributedCaching/article.html

Read from cache, write the message system -

All You Need to Know About ActiveMQ -

(google search) (amazon search)

Sun Sep 20 14:10:28 GMT 2020 From /weblog/design


5 Hints You're Using A Map When You Should Be Using a Cache? -[..]ints-your-using-map-when-you-should.html

How hibernate design the cache -

Consider to do more careful update, not just update DB and dirty cache, but update DB and cache in a same time -

Caching can be architectural smell, some hint and some alternative -[..]2/is_caching_an_architectural_smell.html

General caching discussion -[..]are-architecture/caching-techniques.html[..]10-program-busting-caching-mistakes.html[..]B/web-cache/cachingmistakes.aspx?azid=74

缓存穿透?击穿?雪崩? -

(google search) (amazon search)

Fri Aug 21 13:54:46 GMT 2020 From /weblog/design

API design guideline

This is a message from a management blog, but I think the arguement is also apply API design. In fact, I think most critical difference of good and bad API is knowing which small detail is important and which is not -[..]

Design tips:[..]gView?showComments=true&entry=3258158706[..]its-of-highly-profitable-developers.html

About Compatibility issues

A blog of using interfaces-vs-abstract-classes[..]6/04/interfaces-vs-abstract-classes.html

XOM design overview -

You need to identify the business value but not pick any tools/design just because it is cool -

A lot of links here -

An introduction of good OSS project to study their source -[..]com/2007/06/28/learning-from-the-source/


Discussion of why getting feedback quick is important -[..]u-dont-know-until-you-take-the-next-step

Someone saying that routines is the greatest invention in CS, I agree -

New way of modeling system then layering, The Onion Architecture -

SOLID -[..]of-the-month-march-solid-principles.aspx <-- very good picture![..]d-principles-explained-in-plain-english/

Idempotent, Orthogonality, Immutability -

Some example of how to driven good API -[..]al/2009/5/11/good-api-design-part-3.html

It's not enough to write tests for an API you develop, you have to write unit tests for code that uses your API. When you do, you learn first-hand the hurdles that your users will have to overcome when they try to test their code independently.[..]MichaelFeathers.TheGoldenRuleOfApiDesign

Active interface vs. Passive interface, for me this is another way to under "Tell, don't ask" -[..]-on-api-design-call-stack-as-source.html

The Principles of Good Programming -[..]software-principles-you-must-understand/

Difference choice of how API evolute with change -[..]sive-api-evolution-with-java-interfaces/

JUnit's evolving structure. -

API performance contract -

Consistent naming conventions
Standard terminology
Uniform error responses
Attention to detail (that’s the love part for APIs)
REST APIs that work with only 2 resources and use 4 HTTP verbs (oh, there is so much more to talk about here…)
Avoid API design by way of method-driven approach – that leads you down a slippery slope
- See more at:[..]are-like-parenting/#sthash.Ux1LHMNU.dpuf[..]ake-this-mistake-when-developing-an-spi/

Guideline for webapi -

Good naming is part of design. It sets expectations and communicates a model, showing how something should be understood and used. If you mean to tell the reader getMillisSince1970, don’t say getTime. Specific names inspire you to consider alternatives, to question whether you’re capturing the right abstraction in the right way. It’s not just labeling and it’s not just java.util.Date: This is about the code you write and the code you use. -

(google search) (amazon search)

Fri Jul 24 13:50:06 GMT 2020 From /weblog/design/examples


(google search) (amazon search)

Sat May 23 04:22:23 GMT 2020 From /weblog/design


Refactoring to Patterns Catalog -

Article talk about the book:

Catagories smell into "smell in class" and "smell between class" -

Known but good to remind[..]10/01/6-steps-to-master-refactoring.html

An experience sharing -[..]m/2011/05/refactor-hudson-god-class.html[..]treme-Refactoring-with-Brian-Button.aspx

Refactoring should not introduce bug... -[..]01/so-why-are-you-refactoring-again.html

A way to have formal refactoring, through Feature Clustering, Rapid Scratch Refactoring and Twisting Classes -[..]rom-michael-feathers-brutal-refactoring/

Not all code change is refactoring - , and

Some common issues about refactoring code in a team -[..]/2008/01/28/dont-be-a-refactoring-bigot/[..]01/dangers-of-premature-refactoring.html , beware taking the balance -[..]ith-beautiful-code-the-refactor-syndrome

Refactory if needed -

Refactoring, when start, when stop? -

Refactoring metric -[..]rics-based-refactoring-for-cleaner-code/

Getting rid of util class
1) If the family of methods uses different parameters, depending on optional input or representations of the same input, then consider transforming the Helper via a fluent interface using the Builder pattern: from a collection of static methods like Helper.calculate(x), calculate(x, y), calculate(x, z), calculate(y, z) we could easily get to something like newBuilder().with(x).with(y).calculate(). The helper class would then offer behaviours, reduce its list of business methods and provide more flexibility for future extensions. Callers would then use it as internal field for reuse or instantiate it where needed. The helper class (as we knew it) disappeared.
2) If the helper class provides methods which are actually actions for different inputs (but, at this point, for the same domain), consider applying the Command pattern: the caller will actually create the required command (which will handle the necessary input and offer a behaviour) and an invoker will execute it within a certain context. You may get a command implementation for each static method and your code would move from an Helper.calculate(x, y), calculate(z) to something like invoker.calculate(new Action(x, y)). Bye bye helper class.
3) If the helper class provides methods for the same input but different logics, consider applying the Strategy pattern: each static method may easily become a strategy implementation, vanishing the need of its original helper class (replaced by a context component then).
4) If the given set of static methods concerns a certain class hierarchy or a defined collection of components, then consider applying the Visitor pattern: you may get several visitor implementations providing different visit methods which would probably replace partially or entirely the previously existing static methods.
5) If none of the above cases met your criteria, then apply the three most important indicators: your experience, your competences in the given project and common sense.[..]-to-get-rid-of-helper-and-utils-classes/

Converting forloop to streaming -

Refactoring JavaScript from Sync to Async in Safe Baby-Steps -

code-refactoring-dos-donts -

Let clean code guide you. Then let it go. -

(google search) (amazon search)

Sat May 16 17:10:13 GMT 2020 From /weblog/design/examples


(google search) (amazon search)