Posts by Category

Blog

Facade Design Pattern

2 minute read

The Facade design pattern is a structural pattern that allows for hiding the complexity of a subsystem by providing a simple interface to it. The interface ...

What is coupling?

3 minute read

In object-oriented paradigm, Coupling refers to the degree of direct knowledge that one element has of another. We may generally divide coupling to tight and...

Static Factory Method

1 minute read

In an object-oriented language like Java, what could be wrong with constructors? Overall, nothing. Even so, the famous Joshua Block’s Effective Java Item 1 c...

Aggregate Pattern

1 minute read

The Aggregate is one of the main pattern in Domain Driven Design (DDD) introduced by Martin Fowler.

Trees

2 minute read

a data structure that is constructed with nodes, where each has some value and may point to child-nodes, which recursively form subtrees in the tree.

Graphs

1 minute read

Graph is a collection of nodes that may or may not be connected to each other.

Strings

less than 1 minute read

String

Hash Tables

1 minute read

A data structure that store data in key-value pairs and provides fast insertion, deletion and searching.

Linked Lists

1 minute read

Is very similar to array, at least conceptually, to an array.

Arrays

2 minute read

There are two types of arrays. Static and dynamic ones.

Logarithm

1 minute read

It’s mathematical concept which is very often used in Computer Science in context of algorithms complexity, it’s even sounds similar 😀

Big O Notation

3 minute read

The Big O Notation is a mathematical, asymptotic notation that describes time complexity and space complexity of algorithms/ function when the argument tends...

Complexity Analysis

less than 1 minute read

It’s a process in which we determine how efficient an algorithm is. There are multiple ways to solve the same issue but the complexity analysis will likely d...

Builder Design Patter

1 minute read

Builder is a creational design pattern that lets you construct complex objects step by step. The pattern allows you to produce different types and representa...

Spring Cache

3 minute read

What is Spring Cache? How to configure it in your project and how to use it? How does Spring Cache work? How to add an external provider that allows flexible...

Observer Design Patter

1 minute read

The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, known as observers, and notifie...

Custom Assertions with AssertJ

less than 1 minute read

You might have encountered tests that are difficult to read, especially when the failure messages are unclear. In such cases, consider creating your own spec...

What are benefits of testing?

1 minute read

Do I really need tests? Isn’t it a waste of time? These are questions you might have asked once or still find yourself asking. However, the answer is that te...

Back to Top ↑

System Design

Rate Limiting

2 minute read

Rate limiting is a pivotal technique employed to manage and control the number of incoming and outgoing requests interacting with a system. Not only does it ...

Polling And Streaming

1 minute read

In computing systems, the interaction between clients and servers is fundamental. This interaction often revolves around the client sending requests, and the...

Leader Election

2 minute read

In most societies, citizens elect their leaders through a voting system. Similarly, in a distributed system, servers utilize a set of algorithms to select a ...

Replication And Sharding

4 minute read

The performance of a system often depends on the efficiency of its database. By optimizing the database, the system’s performance can be significantly improv...

Specialized Storage Paradigms

2 minute read

In addition to widely known SQL and NoSQL databases, such as document or key-value stores, there are specialized storage paradigms that are well-suited for s...

SQL vs NoSQL Databases

2 minute read

SQL vs NoSQL Databases: Understanding the Difference and When to Choose Each

Hashing

6 minute read

Hashing is a process that transforms an arbitrary piece of data into a fixed-size value, typically an integer. In the context of system design, this arbitrar...

Load Balancing

5 minute read

A load balancer can be better understood through a simple use case. Consider a basic client-server architecture where a client sends requests to a server, wh...

Proxies

4 minute read

Commonly utilized by malicious hackers to mask their identity and disguise their location, these distinct proxy servers also serve a variety of essential rea...

Caching

4 minute read

Caching is utilized to speed up a system and reduce or improve the latency of that system.

Latency And Throughput

2 minute read

Latency and throughput are the two most important measures of the performance of a system.

Defining Software Architecture

2 minute read

The software community has been engaged in a longstanding debate over how to define “architecture.” Some believe it refers to the underlying structure of a s...

Back to Top ↑

Testing

Why Are Tests Essential?

2 minute read

Software testing is a fundamental aspect of any successful software development project. It is the process of examining a system or system component to deter...

Back to Top ↑

System Quality

Why Are Tests Essential?

2 minute read

Software testing is a fundamental aspect of any successful software development project. It is the process of examining a system or system component to deter...

Back to Top ↑

Data Structures

System Design Compendium

less than 1 minute read

System design is a part of the system development process, focusing on the creation of a comprehensive blueprint for a system to satisfy specified requiremen...

Data Structures Compendium

less than 1 minute read

Data structures can be seen as instrumental tools used to address a wide array of problems. They frequently encompass complex and mathematical concepts and c...

Back to Top ↑

Principles

Back to Top ↑

Design patterns

Back to Top ↑

Concurrency

Back to Top ↑