TAG
Software_Engineering
82 notes
- Software Architecturehistorical
What architecture is, why it is needed, its categories, architecture patterns, and the hard and soft skills needed to become an architect.
- Architecture Patternshistorical
Monolithic, layered, event-driven, CQRS, microservice, and plug-in architecture patterns.
- Monolithic Architecturehistorical
What monolithic architecture is and its advantages and disadvantages.
- Layered Architecturehistorical
What layered architecture is and its evolution from one, two, and three tiers to DDD four-layer, hexagonal, and onion architectures.
- Read/Write Separation Architecturehistorical
What read/write separation is, why it is needed, where it applies, how to design it at the service and storage layers, and the materialized-view pattern.
- Event-Driven Architecturehistorical
What event-driven architecture is, why it is needed, its real-time trade-off, and publisher-subscriber and event-stream design patterns.
- Domain-Driven Designhistorical
What DDD is: domains, ubiquitous language and bounded contexts, entities and value objects, aggregates, domain events, repositories and factories, and a DDD design process.
- Microserviceshistorical
Historical notes on what microservice architecture is, its relationship with SOA, trade-offs, decomposition, project architecture, and the microservice technology stack.
- OpenID Connecthistorical
Historical notes on what OpenID Connect is and how its flow differs from OAuth by adding OpenID identity information and an ID Token.
- JWThistorical
Historical JWT notes covering what JWT is, why it is used, JWT versus sessions, token structure, and the basic request flow.
- OAuthhistorical
Historical OAuth 2.0 notes covering why OAuth is needed, the authorization flow, grant modes, token refresh, and scopes.
- How to Design a Configuration Centerhistorical
What a configuration center is, why it is needed, storage, client notification, service discovery, caching, canary release, and an example configuration-center database design.
- How to Design a Load-Balancing Componenthistorical
What load balancing is, why it is needed, common algorithms, hardware/software/DNS choices, L2/L3/L7 approaches, and client-side versus server-side load balancing.
- How to Design a Service Registryhistorical
What a service registry is, why it is needed, server-side and client-side design, service discovery and routing, registry components, and ZooKeeper versus Eureka.
- How to Design an API Gatewayhistorical
What an API gateway is, why it is needed, request forwarding and filtering, I/O models, common gateway components, BFF, and gateway aggregation.
- How to Design a Monitoring Systemhistorical
What monitoring is, why microservices need it, and the three parts: logs, metrics, and tracing.
- How to Design Distributed Tracinghistorical
What tracing is, why it is needed, Span/Trace/Annotation data, sampling, collection approaches, storage, display, and common tracing components.
- How to Design a Fault-Tolerance Componenthistorical
What fault tolerance is, service avalanche, and common techniques including timeouts, retries, rate limiting, circuit breaking, isolation, and degradation.
- How to Design Log Monitoringhistorical
What log monitoring is, why it is needed, logging strategy, collection, aggregation, indexing and storage, analysis, and ELK.
- How to Design Metrics Monitoringhistorical
What metrics monitoring is, why it is needed, what to monitor, how to collect and store metrics, alerting, and common metrics components.
- How to Design Authentication and Authorizationhistorical
Authentication, authorization, and credentials; common techniques; and how authentication and authorization are integrated into a microservice architecture.
- ER Diagramhistorical
What an ER diagram is, with a PlantUML example showing entities, attributes, and relationships.
- UMLhistorical
A note index for structural modeling, behavioral modeling, architecture modeling, and common UML tools.
- Class Diagramhistorical
What a class diagram is, how classes/interfaces and common class relationships are represented, with PlantUML examples.
- Sequence Diagramhistorical
What a sequence diagram is, with a sanitized PlantUML example showing interactions among a user, development platforms, a service, and its deployed node.
- Flowcharthistorical
What a flowchart is, with PlantUML examples for a verification workflow and a login-interface activity flow.
- State Diagramhistorical
What a state diagram is, with a PlantUML example describing login-state transitions.
- Component Diagramhistorical
What a component diagram is, with a sanitized PlantUML example showing dependencies among services, libraries, storage, and local memory.
- Deployment Diagramhistorical
What a deployment diagram is, with a sanitized PlantUML example showing hardware/network topology and deployed software components.
- Architecture Diagramshistorical
Business, application, technical, data, security, and deployment architecture diagrams, plus the 4+1 architectural view model.
- Functional Options Patternhistorical
A Go functional-options example for constructing an object with default values while allowing selected fields to be changed flexibly.
- Function Types as Interfaceshistorical
What an interface function is, why it is useful, and a Go implementation that allows either function values or structs to satisfy the same interface.
- Event Sourcinghistorical
What event sourcing is, why it is needed, how it addresses some CRUD problems, its disadvantages, and design notes.
- Publish–Subscribe Patternhistorical
What the publish–subscribe pattern is, why it is needed, how it differs from producer–consumer and observer patterns, and a Go implementation.
- Producer–Consumer Patternhistorical
What the producer/consumer pattern is, why it is needed, and Go implementations using channels, timeouts, object-oriented encapsulation, and error handling.
- Open–Closed Principlehistorical
What the open–closed principle is, why it is needed, and how to implement it through abstractions, inheritance, composition, and aggregation.
- Liskov Substitution Principlehistorical
What the Liskov substitution principle is, why it is needed, and how subclasses should preserve the meaning of parent-class behavior.
- Dependency Inversion Principlehistorical
What the dependency inversion principle is, why it is needed, and implementation guidance centered on interfaces and abstract classes.
- Single Responsibility Principlehistorical
What the single responsibility principle is, why it is needed, and how to separate different responsibilities into different classes or modules.
- Interface Segregation Principlehistorical
What the interface segregation principle is, why it is needed, and how to keep interfaces small and tailored to their callers.
- Law of Demeterhistorical
What the Law of Demeter is, why it is needed, and how to reduce coupling by limiting what objects depend on and expose.
- Composition Reuse Principlehistorical
What the composition reuse principle is, why it is needed, and how composition or aggregation can be preferred over inheritance for code reuse.
- Object-Oriented Design Principleshistorical
What object-oriented design principles are, why they are needed, and the main principles covered by these notes.
- Object-Oriented Design Patternshistorical
What design patterns are and the three main categories: creational, structural, and behavioral.
- Singleton Patternhistorical
A class has one and only one instance, with Java and Go implementations including eager, lazy, DCL, static-inner-class, enum, mutex, and sync.Once approaches.
- Proxy Patternhistorical
The proxy pattern adds functionality around an existing class or function without changing the original code, with static, dynamic, AOP, Go, and cache-proxy examples.
- Template Methodhistorical
The template-method pattern applies when the overall algorithm steps are fixed while some parts vary, with Java and Go implementations and a combined template/factory/strategy example.
- Factory Methodhistorical
The factory-method pattern uses multiple factory classes and delays concrete product creation to subclasses.
- State Patternhistorical
The state pattern selects different processing logic according to the current state, with Java and Go examples.
- Builder Patternhistorical
The builder pattern constructs a complex object from many smaller parts; the builder creates the parts and the director assembles them.
- Strategy Patternhistorical
The strategy pattern selects one of several algorithms for accomplishing the same task according to a type or context, with Java and Go examples.
- Observer Patternhistorical
The observer pattern broadcasts state changes from a subject to observers, with Java, Go, and application examples.
- Decorator Patternhistorical
The decorator pattern adds new functionality to a class or function without changing the original code, with Java and Go examples.
- Chain of Responsibilityhistorical
The chain-of-responsibility pattern links handlers that can process the same type of request, with Java, Go, and filter-chain examples.
- Adapter Patternhistorical
The adapter pattern is used to make an old-system interface compatible with a new interface, with Java and Go examples.
- Service Meshhistorical
Historical notes on cloud native, cloud platforms, VPCs, and the evolution, purpose, and common implementations of Service Mesh.
- How to Design a Container Scheduling Systemhistorical
A short note on what container scheduling is, why it is needed, and Kubernetes as a scheduling component.
- How to Design a Pipeline Systemhistorical
A short note on CI/CD pipelines, their purpose, design, and Jenkins.
- dothistorical
Notes on the DOT language and Graphviz: graphs, nodes, edges, attributes, subgraphs, ports, and example diagrams.
- Prototype Patternhistorical
Prototype-pattern notes with UML, Java and Go clone examples, plus a generic DAO example that returns cloned data.
- Abstract Factory Patternhistorical
Abstract-factory notes showing related product families and a Go implementation with engines, wheels, factories, and a client.
- Simple Factory Patternhistorical
Simple-factory notes in Java and Go, followed by a generic template-method + simple-factory + strategy example.
- Design Patterns I Have Usedhistorical
A short interview-style note on where singleton, prototype, factory, builder, facade, decorator, template method, state, strategy, and proxy patterns were used.
- Flyweight Patternhistorical
Flyweight-pattern notes with UML and a Java example using a chess-object pool.
- Facade Patternhistorical
Facade-pattern notes with UML plus Java and Go examples that wrap a complex process behind one interface.
- Bridge Patternhistorical
Bridge-pattern notes for class hierarchies with multiple varying dimensions, with UML and a Java brand/device example.
- Composite Patternhistorical
Composite-pattern notes for tree-shaped whole/part structures, with Java and Go file-tree examples.
- Mediator Patternhistorical
Mediator-pattern notes with UML, a Java department example, and a Go computer-component example.
- Command Patternhistorical
Command-pattern notes with a Java Course example, command objects, and a command invoker.
- Memento Patternhistorical
Memento-pattern notes showing how to save an object's state and restore it later.
- Visitor Patternhistorical
Visitor-pattern notes separating data structures from operations, with a Java course example.
- Iterator Patternhistorical
Iterator-pattern notes showing Java and Go implementations for traversing aggregate objects.
- Object-Oriented Programminghistorical
A short index note linking object-oriented design principles and design patterns.
- Programming Paradigmshistorical
A short index of procedural, event-driven, object-oriented, and functional programming paradigms.
- Software Engineeringhistorical
A minimal note outlining the software-development process and the development, testing, and production environments.