As a Java/backend engineer, at one point these system design concepts become inescapable. Understand these concepts properly to be a better engineer and also to perform better during interviews:
→ APIs (Application Programming Interfaces): A set of rules and protocols that allows different software applications to communicate with each other
→ API Gateways: A management tool that sits between a client and a collection of backend services, acting as a reverse proxy to handle all API calls
→ JWTs (JSON Web Tokens): A compact, URL-safe means of representing claims to be transferred between two parties, commonly used for authorization
→ Webhooks: Automated messages sent from apps when something happens, delivered to a unique URL
→ REST vs GraphQL: REST is an architectural style for building APIs using standard HTTP methods, while GraphQL is a query language for APIs that allows clients to request exactly the data they need
→ Load Balancing: The process of distributing network traffic across multiple servers to ensure no single server becomes overwhelmed.
→ Proxy vs Reverse Proxy: A proxy acts on behalf of a client to fetch resources, while a reverse proxy acts on behalf of a server to handle incoming requests.
→ Scalability: The ability of a system to handle a growing amount of work by adding resources.
→ Availability: The percentage of time that a system is operational and accessible to users.
→ SPOF (Single Point of Failure): A part of a system that, if it fails, will stop the entire system from working.
→ CAP Theorem: It is impossible for a distributed data store to simultaneously provide more than two out of three guarantees: Consistency, Availability, and Partition tolerance.
→ SQL vs NoSQL: SQL databases are relational and use structured query language, while NoSQL databases are non-relational and have dynamic schemas for unstructured data.
→ ACID Transactions: A set of properties (Atomicity, Consistency, Isolation, Durability) that guarantee database transactions are processed reliably.
→ Database Indexes: Data structures that improve the speed of data retrieval operations on a database table.
→ Database Sharding: The process of breaking up a large database into smaller, more manageable parts called shards
→ Consistent Hashing: A hashing technique that minimizes the number of keys that need to be remapped when a hash table is resized, useful in distributed systems.
→ CDC (Change Data Capture): The process of observing all data modifications in a database and then extracting them in a form that can be used by other systems
→ Caching: The process of storing copies of files in a temporary storage location (cache) to be accessed more quickly.
→ Caching Strategies: Different methods for managing a cache to optimize performance and data consistency, such as cache-aside, read-through, and write-through.
→ Cache Eviction Policies: Algorithms used to decide which items to remove from a cache when it is full, such as Least Recently Used (LRU).
→ CDN (Content Delivery Network): A geographically distributed network of proxy servers that work together to provide fast delivery of Internet content.
→ Rate Limiting Algorithms: Techniques used to control the amount of incoming and outgoing traffic to or from a network.
→ Message Queues: A form of asynchronous service-to-service communication used in serverless and microservices architectures.
→ Bloom Filters: A space-efficient probabilistic data structure used to test whether an element is a member of a set.
→ Idempotency: A property of certain operations that they can be applied multiple times without changing the result beyond the initial application.
→ Concurrency vs Parallelism: Concurrency is about dealing with lots of things at once, while parallelism is about doing lots of things at once.
→ Long Polling vs WebSockets: Long polling involves the server holding a client's request until new data is available, while WebSockets provide a persistent, two-way communication channel.
→ Stateful vs. Stateless Architecture: A stateful architecture remembers client data from one request to the next, while a stateless architecture does not.
→ Batch vs Stream Processing: Batch processing handles data in large blocks, while stream processing handles data in real-time as it is generated.
→ Geohashing: A geocoding system that encodes a geographic location into a short string of letters and digits.