Notes
Things I write down so I don't forget, and so you don't have to figure them out alone.
- Scalability and ElasticityLet's talk about scalability and elasticity — related but distinct concepts often incorrectly used as synonyms...
- What is a load test?Simulating different usage loads on a system, load tests help identify potential bottlenecks before they occur in production...
- What is a webhook?A webhook is a way of communication between systems through callbacks...
- Idempotency in your APIIdempotency is a computing term used to define operations that, when performed multiple times with the same input, produce the same result. Learn more...
- Managing flow and resources with BackpressureBackpressure is a technique to ensure the correct operation of software when processing a data stream. It allows the application to manage...
- Kotlin: Advantages, myths, tips, and core conceptsLet's talk about Kotlin! In this text, I want to share some things I learned in recent weeks, debunk some myths about the language, and provide practical examples for beginners...
- How to use circuit breaker to make your service more resilientThe Circuit Breaker pattern in microservices architecture allows an application to stay operational by avoiding cascading failures when facing communication issues with remote calls...
- SDKMan: SDK Management ToolLet's talk about SDKMan, what this tool is, and its advantages. SDKMan is an SDK manager...
- Spring: Documenting your HTTP API with OpenAPIOpenAPI, also known as Swagger, is a way to specify and document your HTTP API. It is a standardized, language-agnostic approach that allows you to expose service patterns and behaviors...
- Sending emails with Spring MailSending emails is a crucial aspect for many applications, used for sending notifications, alerts, or communications to users.
- Concurrency and ParallelismConcurrency and parallelism are related concepts in computing, often used interchangeably. However, they have different meanings. Understanding this difference can be crucial in efficient software design.
- What are ACID Transactions?In a database system, a transaction represents a unit of work (logical operation)...
- What is SOLID?SOLID is an acronym for five object-oriented programming principles aimed at producing robust software...
- Advantages of the trailing comma in multiline expressionsIn this text, I intend to explain why the trailing comma at the end of multiline expressions is more than just a style convention...
- What is Testcontainers?Testcontainers is an open-source library that provides instances of any application that can run in a container...
- Algorithms: QuicksortQuicksort is an efficient sorting algorithm based on dividing the problem into smaller parts to solve the task...
- Aggregation and CompositionAggregation and composition are two types of relationships in object-oriented programming (OOP). Both represent property associations between objects, but...
- Java: EncapsulationEncapsulation is one of the pillars of Object-Oriented Programming (OOP). It refers to the action of grouping data (attributes) and behaviors (methods) into a single unit called an object...
- Design Patterns in 1 minute: Interpreter #23The Interpreter design pattern provides a dynamic and clear way to transform languages or expressions into actions...
- Design Patterns in 1 minute: Mediator #22The Mediator is a design pattern that helps reduce complexity in communication among multiple objects...
- Design Patterns in 1 minute: Flyweight #21The Flyweight design pattern optimizes memory usage in cases where the application needs to provide many objects containing similar content...
- Design Patterns in 1 minute: Factory Method #20The Factory Method design pattern provides a way to create objects that allows child classes to define the type of object that will be created in a method defined in the parent class...
- Design Patterns in 1 minute: Template Method #19The Template Method design pattern proposes that subclasses can override steps of a superclass behavior in a structured and adaptable way...
- Design Patterns in 1 minute: Bridge #18The Bridge design pattern proposes separating the responsibilities of a class into two layers: abstraction and implementation...
- Design Patterns in 1 minute: Iterator #17The Iterator design pattern allows traversing a collection of elements without exposing its implementation...
- Design Patterns in 1 minute: Visitor #16The Visitor design pattern allows separating the behavior from the object on which it is executed, thus increasing modularity and adaptability of your application...
- Design Patterns in 1 minute: Composite #15The Composite design pattern proposes that sets of objects be composed into tree structures, where each composite object delegates behavior to its nodes...
- Design Patterns in 1 minute: Abstract Factory #14The Abstract Factory design pattern allows decoupling the creation of families of related and/or dependent objects without specifying their concrete classes...
- Design Patterns in 1 minute: Memento #13The Memento design pattern allows you to restore previous states of your object in a practical way without exposing its internal structure...
- Design Patterns in 1 minute: Proxy #12The Proxy design pattern provides an access control layer to an object. This layer can be used to avoid...
- Design Patterns in 1 minute: State #11The State design pattern allows your object to change behaviors when its internal state changes...
- Design Patterns in 1 minute: Strategy #10The Strategy design pattern allows defining an algorithm's behavior during the application's execution...
- Design Patterns in 1 minute: Facade #9The Facade design pattern provides a simplified interface for using a library, framework, or any other complex set of classes...
- Design Patterns in 1 minute: Prototype / Clone #8Prototype (also known as Clone) is a design pattern that allows object cloning...
- Design Patterns in 1 minute: Command #7The Command design pattern allows grouping all the request data into a single object...
- Design Patterns in 1 minute: Decorator #6The Decorator design pattern allows customizing object behaviors without overriding them...
- Design Patterns in 1 minute: Chain of Responsibility #5The Chain of Responsibility design pattern allows decoupling flow control by passing responsibility to a chain that...
- Design Patterns in 1 minute: Singleton #4The Singleton design pattern ensures that a class has a single shared instance throughout the entire application...
- Design Patterns in 1 minute: Adapter #3The Adapter design pattern allows incompatible interfaces to work together properly...
- Design Patterns in 1 minute: Observer #2The Observer design pattern enables creating an event-driven processing mechanism using pub/sub...
- Design Patterns in 1 minute: Builder #1The Builder design pattern aims to simplify and structure the creation of complex objects...
- Design Patterns in 1 minuteDesign patterns are standardized ways to solve common problems in software development...
- Things you should know about distributed systems: Distributed TracingDistributed Tracing is a microservices architectural pattern used to facilitate and optimize observability in distributed systems...
- How does Spring provide dependency injection?Spring's 'magic' dependency injection provides agility and simplicity in writing applications, but do you know how Spring manages and provides this feature for developers?
- What is IoC?IoC, short for Inversion of Control, is a software engineering principle that encourages inverting the application's flow of control, but what does that mean?
- Queues and StacksQueues and stacks are data structures commonly used when we need to chain elements in a collection. They are similar to linked queues but more restricted and specific to their use cases. Let's understand...
- Arrays and Linked ListsArrays and linked lists are data structures that store collections of elements but do so differently, with respective advantages and disadvantages.
- 6 Ideas to practice programmingWritten by a programmer for programmers or enthusiasts, this text offers ways and strategies to practice coding, from coding challenges to collaborative projects.
- Git: Key commands for developersFor modern developers, Git is an indispensable tool. Mastering its commands is essential to optimize the workflow. This reading contains some of the commands I use most during my development flow.
- STOP using exceptions for flow controlExceptions might be causing unnecessary performance impacts on your application — if you use them for flow control. Learn more...
- Code Review: Creating an environment of collaboration and continuous learningCode review is a crucial part of the software development process, where developers examine the source code written by others to provide suggestions on analyzed changes and...
- Hello, I'm FlôrThis is the place where I write what I would like to read, talk about what I'm studying, and publish musings about systems you use every day.
- What is HATEOAS and its relation with REST?We recently talked about REST, what it is, and its main features. However, one topic was left open for discussion. Now it's time to talk about what HATEOAS is...
- Things you should know about distributed systems: CAP TheoremThe CAP theorem, also known as Brewer's theorem, is one of the fundamental principles of distributed systems. The theorem's premise is that no system with data distribution across a network...
- What is JSON?The acronym JSON stands for JavaScript Object Notation. It is a lightweight format for recording and transporting data, commonly used in client-server application communication. It is "self-descriptive" and easy to understand.
- What is REST?If you thought about rest, I'm sorry to inform you, but that won't be the topic of today's article. Instead, we'll talk about a software architecture style, also referred to in some literature as...