Answer for General Backend Engineering Interview Questions

Garvit Sapra
4 min readNov 26, 2024

--

Backend System Design interview questions.

1. System Design Questions

URL Shortening Service:

Use Base62 for short codes, a NoSQL DB like Redis for mapping, caching for popular URLs, and an API Gateway for traffic management. Handle collisions and expired URLs carefully.

Messaging System:

Use WebSockets for real-time updates, Kafka for queuing, and Cassandra for storing messages. Implement push notifications and ensure horizontal scalability with sharded queues.

Rate-Limiting for APIs:

Use Redis with sliding window or token bucket algorithms. Enforce limits at the API Gateway. Handle IP spoofing and sudden bursts dynamically.

Notification Service:

Use Kafka for queuing, workers for channel-specific notifications, and services like FCM for push. Store user preferences in relational DBs and retry failures with a dead-letter queue.

Search Engine Backend:

Use crawlers, Lucene/Elasticsearch for indexing, and cache frequent queries in Redis. Implement ranking with TF-IDF or ML models for personalization.

2. Database and Storage

SQL vs. NoSQL:

SQL for structured, transactional data; NoSQL for unstructured, scalable data.

E.g., SQL for banking, NoSQL for social media.

E-commerce Schema:

Normalize tables for products, orders, and customers. Use indexes for quick lookups.

Sharding:

Split data across servers by key (e.g., user ID). Useful for scaling write-heavy apps.

Transactions and ACID:

Ensure atomicity, consistency, isolation, durability. Critical for financial systems.

Long Query Handling:

Add indexes, optimize queries, analyze execution plans, or split large operations.

3. API Development

RESTful API:

CRUD for resources like blogs/posts. Use clear routes and JSON responses.

REST vs. GraphQL:

REST for simplicity; GraphQL for flexibility in querying complex data.

API Versioning:

Use path-based (e.g., /v1/resource) or header-based approaches.

API Security:

Use HTTPS, auth tokens, input validation, and rate-limiting.

Idempotency:

Ensure HTTP methods like PUT/DELETE are safe for retries to avoid duplicate changes.

4. Performance and Scalability

Optimize Latency:

Profile bottlenecks, implement caching, use CDNs, and parallelize heavy tasks.

Traffic Spikes:

Auto-scale infrastructure, use load balancers, and implement backpressure mechanisms.

Caching:

Use Redis/Memcached for fast access. Cache queries and static content.

Scaling:

Vertical scaling = bigger machines; horizontal scaling = more machines. Horizontal is better for distributed systems.

Memory Leaks:

Use profiling tools, monitor objects, and clean unused references.

5. Microservices and Distributed Systems

Monolithic vs. Microservices:

Monolith = single codebase; microservices = modular, independent services.

Inter-Service Communication:

Synchronous (HTTP/gRPC) for low latency; asynchronous (Kafka) for scalability.

Distributed Transactions:

Use two-phase commits or eventual consistency (e.g., Sagas).

Service Discovery:

Use tools like Consul or Eureka for locating services dynamically.

Eventual Consistency:

Accept temporary inconsistencies for high scalability (e.g., in NoSQL systems).

6. Concurrency and Threading

Handle Concurrent Requests:

Use thread pools, async programming, and rate-limiting.

Multithreading vs. Async:

Multithreading = parallel execution; async = efficient I/O handling.

Race Conditions:

Use locks, semaphores, or atomic variables to prevent.

Thread-Safe Structures:

Use Python’s threading.Lock or collections like queue.Queue.

Process vs. Thread:

Processes = isolation; threads = shared memory. Use processes for heavy tasks.

7. Testing and Debugging

Unit Tests:

Test individual API methods using frameworks like Pytest.

Integration Tests:

Validate end-to-end workflows involving multiple components.

Troubleshooting 500 Errors:

Check logs, trace errors, and simulate requests to identify issues.

Logging in Microservices:

Centralize logs with tools like ELK or Grafana.

Mocks in Testing:

Replace real dependencies with simulated ones to test in isolation.

8. Security and Compliance

Authentication and Authorization:

Use OAuth, JWT, or sessions.

SQL Injection Prevention:

Use parameterized queries and ORM libraries.

Data Encryption:

Encrypt in transit (TLS) and at rest (AES).

CORS:

Restrict origins to prevent unauthorized browser requests.

Sensitive Data Handling:

Store API keys in vaults and use environment variables.

9. DevOps and CI/CD

CI/CD Pipeline:

Automate builds, tests, and deployments using GitHub Actions, Jenkins, etc.

Containerization:

Use Docker to package apps. Share dependencies across environments.

Kubernetes:

Manage scaling, deployment, and service recovery for microservices.

Zero-Downtime Deployment:

Use blue-green or rolling deployments.

Service Monitoring:

Use Prometheus and Grafana for real-time health checks.

Scenario-Based Questions

Debugging Slow Service:

Profile resources, analyze database queries, check API latencies, and scale bottlenecks.

API Failure Handling:

Use retries, circuit breakers, and fallbacks to handle intermittent failures.

Live DB Migration:

Use tools like Flyway. Migrate in phases and run read replicas during cutovers.

--

--

Garvit Sapra
Garvit Sapra

Written by Garvit Sapra

Expert in Experimenting. I am a tech professional with experience in backend development and data science, having helped build two startups from scratch.

No responses yet