system-design-interview

[object Object]
Load Balancing Algorithms

Load balancers distribute requests to servers based on various load balancing techniques. These techniques use different algorithms to select servers. There are two types of load balancing algorithms: 1) Static load balancing: round robin, URL hash, etc. 2) Dynamic load balancing: least connection method, least response time method, etc.

[object Object]
LRU Cache Implementation

The least recently used (LRU) cache is one of the popular caching strategies, which defines the policy to discard the least recently used items first from the cache and make room for new elements when the cache is full. It is used to organize items in order of their use, which allows identifying items that have not been used for a long time.

[object Object]
Least Frequently Used (LFU) Cache Implementation

The least frequently used (LFU) is a cache algorithm used to manage memory within a computer. In this method, the system keeps track of the number of times a block is referenced in memory, and when the cache is full, our system removes the item with the lowest reference frequency. LFU cache get and put operation works in O(1) average time complexity.

[object Object]
Data Partitioning (Sharding) in System Design

Data partitioning or sharding is a technique of dividing data into independent components. It is a way of splitting data into smaller pieces so that data can be efficiently accessed and managed. Database partitioning is the backbone of modern system design, which helps to improve scalability, manageability, and availability.

[object Object]
Forward and Reverse Proxy in System Design

In system design, a proxy is a server that acts as an intermediary between a client and another server. When a client sends a request to a website, proxy server intercepts the request and communicates with the servers on behalf of these clients. In this blog, we will learn what a proxy server is, how it works and the idea of forward and reverse proxies.

[object Object]
WebSockets in System Design

Web Socket is a communications protocol which provides full-duplex communication channels over a single TCP connection. This is also a vital component behind multiplayer games or applications that rely on real-time data transfer. In this blog, we have explained: 1) What is WebSocket in system design? 2) How does it work?

[object Object]
Latency in System Design

What is latency of a system? Latency is an essential system design concept that determines how fast the data transfers from the client to the server and back to the client. The lower system latency means better system performance. This blog will focus on how latency impacts the system's performance and measures to improve latency.

[object Object]
Long Polling in System Design

Polling is a technique that allows the servers to push information to a client. Long polling is a version of traditional polling that allows the server to send data to a client whenever available. It involves the Client requesting information from the server in the same way that standard polling does, but with the caveat that the server may not respond right away. A complete answer is delivered to the Client once the data is accessible.

[object Object]
Distributed Systems in System Design

Nowadays, almost every large-scale application is based on distributed computing. So understanding distributed system concepts is crucial for designing fault tolerant, highly scalable, and low latency services. This blog will introduce concepts of distributed systems, how they are applicable in real-world scenarios and their key characteristics.

[object Object]
Key Value Database

A key value database is a non relational database (NoSQL) that stores data using a simple key-value mechanism. The structure of key value store is similar to maps or dictionaries, where each key is associated with one value only. The simplicity of this model makes key-value databases fast, easy to use, scalable, portable, and flexible.

[object Object]
API Rate Limiter System Design

Rate limiter restricts number of events a certain user or device can do in a given time range. In general, rate limiting helps us to restrict number of requests a sender can send in a given period of time and is implemented as a protective mechanism to restrict excessive use of services. Once the upper limit is reached, rate limiter blocks requests.

[object Object]
Process Management in Operating System (OS)

Process management involves executing various tasks such as creating processes, scheduling processes, managing deadlock, and termination of processes. It is the responsibility of the operating system to manage all running processes of the system. In this blog, we will learn about process management and its various related algorithms.

[object Object]
Client Server Architecture

The client server architecture is a system consisting of clients and servers in which server hosts, manages, and delivers client’s services. Clients are connected to a central server and communicate through a computer network. There are four key components in a client server model: client, load balancer, servers, and network protocols.

[object Object]
Youtube System Design

YouTube is a frequently used social networking platform for video sharing and advertising. It is a widely used service, our system should be cost-efficient, highly available, scalable, and reliable. It should offer low latency and high throughput. This blog will focus on system design of youtube and discussion around various components.

[object Object]
Key-Value Store System Design

A key-value database is a non-relational database that stores data using a simple key-value mechanism. Data is stored in a key-value database to collect key-value pairs, with a key serving as a unique identifier. Both keys and values can be any object (simple or complex objects). This blog will focus on system design of key value store and discussion around various components.

[object Object]
Caching in System Design

Caching is the process of storing the results of a request in a cache or a temporary storage location so they can be accessed more quickly. In system design, a cache is a high-speed data storage that stores a subset of data so that future requests for that data are served up faster. In other words, caching allows us to reuse previously retrieved data efficiently.

[object Object]
Availability in System Design

Availability of a system is measured as the percentage of the system’s uptime in a given time period so that a system is available to perform tasks and functions under normal conditions. One way to look at system availability is how resistant a system is to failures. High availability systems have tradeoffs, such as higher latency or lower throughput.

[object Object]
Throughput in System Design

The throughput of a system is defined as the total units of information a system can process in a given amount of time. It is generally represented as the number of bits transmitted per second or HTTP operations per day. This blog will discuss the important factors that affect throughput in designing distributed systems.

[object Object]
System Design Concepts for Interview

System design is an important topic that tech companies ask about during interviews. On the other hand, it is also important to solve large-scale software problems. This blog will go through fundamental system design concepts important for solving system design questions, learning system design at advanced level, and preparing for interviews.

[object Object]
Load Balancer in System Design

Load balancing is essential for building high-performance and scalable applications. It is also a popular topic for system design interviews. In terms of definition: a load balancer is a software or hardware device that sits between clients and servers to balance the workload. It saves servers from overloading and increases system throughput.

[object Object]
Whatsapp System Design

Whatsapp is a social messenger platform which allows users to send messages. It is a messaging system widely used throughout the globe. This blog will focus on system design of Whatsapp messenger and discussion around various components. We have discussed generic architecture, which can be used as a base for designing any such chat application.

[object Object]
Typeahead (Autocomplete) System Design

As users type their search query, the Typeahead search feature guesses the rest of a word and offers the top suggestions that begin with whatever they have written. Here frequency and recentness of a query are used to sort suggestions. Search autocomplete system is used by many search platforms like Facebook, Google, Instagram, etc.

[object Object]
Google Docs System Design

Google docs is an online word processor that is part of Google’s free, web-based Google docs editors package. It is a massive system with tons of features. If we think about how google docs works, we can realize that it is much more complex than it seems to be. This blog will focus on system design of google docs and discussion around various components.

[object Object]
Dropbox System Design

Dropbox is a cloud storage service that allows users to store their data on remote servers. The remote servers store files durably and securely, which can be accessed from anywhere using the internet. These servers are maintained by cloud storage providers. In this blog, we will focus on system design of dropbox and discussion around various components.

[object Object]
Instagram System Design

Instagram is a photo and video-sharing social media platform that allows users to share their creations with others. Here users can publish their posts which can be liked, commented and shared by other users. Users can also see the news feeds of other users. This blog will focus on system design of instagram and discussion around various components.

[object Object]
Twitter System Design

Twitter is a social media platform where users can post and interact with tweets. Users can also subscribe to feeds of other users and receive tweet notifications from those they follow. Tweets are almost 140–280 characters communication. This blog will focus on system design of Twitter and discussion around various components.

[object Object]
Notification Service System Design

Notification services are widely used in almost every product. They are helpful if we want to be alerted of a price change or availability of a new product feature or if we want to be updated if a new job specification for a job search becomes available. This blog will focus on system design of notification service and discussion around various components.

[object Object]
Yelp (Nearby Friends Service) System Design

Design nearby friends service like yelp, where users can search for nearby places like restaurants, shopping malls, etc., and add/view reviews of places. Service should store location information so that it delivers a list of places near the user after a query is made. This blog will focus on system design of yelp and discussion around various components.

[object Object]
QR Code System Design

QR code payment is one of the contactless payment methods to transfer funds from the buyer’s wallet to the seller’s wallet or account. Here QR code is based on a matrix barcode, which can be read by any mobile device with a camera. This blog will focus on how to design QR code payemnt system and discussion around various components.

[object Object]
Uber System Design

Uber continues to improve its operations by deploying and developing new services to meet market demand, finding the most efficient routes, detecting any potential fraud, and monitoring data to provide the most efficient real-time services. This blog will focus on system design of uber and discussion around various components and functionalities.

[object Object]
MapReduce in Hadoop

MapReduce is a batch processing programming paradigm that enables massive scalability across a large number of servers in a Hadoop cluster. It was first published in 2004, and was called “algorithm that makes Google so massively scalable.” This is a relatively low-level programming model compared to old parallel processing systems.

[object Object]
Web Crawler System Design

A web crawler is a system for downloading, storing, and analyzing web pages. It is one of the main components of search engines that compile collections of web pages, index them, and allow users to issue index queries and find web pages that match queries. This blog will focus on system design of web crawler and discussion around various components.

[object Object]
Leader Election in Distributed Systems

In distributed systems, a leader election algorithm is a process of designating a single process as the organizer of some task distributed among several computers (nodes). Such a process can have some specific abilities which include the capacity to delegate tasks, the ability to edit data, or even the responsibility for managing all system requests.

[object Object]
How to Choose the Right Database?

Have you ever been in a dilemma while choosing the most appropriate database for your application? What could be the most viable storage type that could meet the business expectations and offer efficient services? For selecting the database, we should have an understanding of the structure and the functionalities of each kind of database.

[object Object]
Throttling and Rate Limiting

At its most basic level, a rate limiter restricts the number of events a certain object (person, device, IP, etc.) can do in a given time range. In general, a rate limiter caps how many requests a sender can issue in a specific time window. Rate Limiter then blocks requests once the cap is reached.

[object Object]
Peer to Peer Architecture

In the common client-server architecture, multiple clients will communicate with a central server. A peer-to-peer (P2P) architecture consists of a decentralized network of peers, which are nodes that can act as both clients and servers. Without a central server's need, P2P networks distribute workload among peers, and all peers contribute and consume resources within the network.

[object Object]
CAP Theorem in System Design

CAP Theorem is an essential concept in system design for designing networked shared data systems. It states that a distributed database system can only provide two of these three properties : consistency, availability, and partition tolerance. We can make trade-offs between three available properties based on use cases for our dbms system.

[object Object]
Server Sent Events

Whenever we build any web application dealing with real-time data, we need to consider delivering data to the client. While building such a web application type, one needs to consider the best delivery mechanism. In this blog, we have focused on server sent events and discussed a complete insight into its internal working and the underlying features.

[object Object]
URL Shortener System Design

TinyURL is a URL-shortening system that creates shorter aliases for long URLs. Whenever a user visits the short URL, they will be redirected to the original URL. Our goal is to design a highly scalable service that could allow users to create shorter URLs from long URLs. This blog focus on TinyURL system design and discussions around various components.

[object Object]
Consistent Hashing in System Design

Consistent Hashing is the most widely used concept in system design, as it offers considerable flexibility in scaling the application. This blog discusses the key concepts and approaches which come in handy while scaling out the distributed system. Consistent Hashing is frequently applied to solving various system-related challenges.

[object Object]
Network Protocols Concept

A network can be defined as a group of devices connected in some ways to exchange data. Similarly, network protocols define a common format and set of rules for exchanging messages between devices. Some common networking protocols are Hypertext Transfer Protocol (HTTP), Transmission Control Protocol (TCP), and Internet Protocol (IP).

[object Object]
Pastebin System Design

Pastebin is a type of online content hosting service where users can store and share content in the form of text or images over the internet by generating a unique URL so that anyone can access the content via that URL. Users can also update the content if they are logged in. This blog will focus on system design of pastebin and discussion around various components.

[object Object]
Guide to Solve System Design Interview Questions

The system design interview is an open-ended conversation. So as a candidate, we need to follow well-defined steps to solve system design questions: 1) Requirements clarifications 2) Capacity estimation 3) Database design 4) Creating high-level design 5) Designing core components 6) Scaling the design 7) Resolving key bottlenecks.

Our weekly newsletter

Subscribe to get weekly content on data structure and algorithms, machine learning, system design and oops.

© 2022 Code Algorithms Pvt. Ltd.

All rights reserved.