Most ebook files are in PDF format, so you can easily read them using various software such as Foxit Reader or directly on the Google Chrome browser.
Some ebook files are released by publishers in other formats such as .awz, .mobi, .epub, .fb2, etc. You may need to install specific software to read these formats on mobile/PC, such as Calibre.
Please read the tutorial at this link. https://ebooknice.com/page/post?id=faq
We offer FREE conversion to the popular formats you request; however, this may take some time. Therefore, right after payment, please email us, and we will try to provide the service as quickly as possible.
For some exceptional file formats or broken links (if any), please refrain from opening any disputes. Instead, email us first, and we will try to assist within a maximum of 6 hours.
EbookNice Team
Status:
Available5.0
31 reviewsISBN-10 : 1633439100
ISBN-13 : 9781633439108
Author: Zhiyong Tan
The system design interview is one of the hardest challenges you’ll face in the software engineering hiring process. This practical book gives you the insights, the skills, and the hands-on practice you need to ace the toughest system design interview questions and land the job and salary you want. In Acing the System Design Interview you will master a structured and organized approach to present system design ideas like: Scaling applications to support heavy traffic Distributed transactions techniques to ensure data consistency Services for functional partitioning such as API gateway and service mesh Common API paradigms including REST, RPC, and GraphQL Caching strategies, including their tradeoffs Logging, monitoring, and alerting concepts that are critical in any system design Communication skills that demonstrate your engineering maturity Don’t be daunted by the complex, open-ended nature of system design interviews! In this in-depth guide, author Zhiyong Tan shares what he’s learned on both sides of the interview table. You’ll dive deep into the common technical topics that arise during interviews and learn how to apply them to mentally perfect different kinds of systems. Foreword by Anthony Asta, Michael D. Elder. About the technology The system design interview is daunting even for seasoned software engineers. Fortunately, with a little careful prep work you can turn those open-ended questions and whiteboard sessions into your competitive advantage! In this powerful book, Zhiyong Tan reveals practical interview techniques and insights about system design that have earned developers job offers from Amazon, Apple, ByteDance, PayPal, and Uber. About the book Acing the System Design Interview is a masterclass in how to confidently nail your next interview. Following these easy-to-remember techniques, you’ll learn to quickly assess a question, identify an advantageous approach, and then communicate your ideas clearly to an interviewer. As you work through this book, you’ll gain not only the skills to successfully interview, but also to do the actual work of great system design. What's inside Insights on scaling, transactions, logging, and more Practice questions for core system design concepts How to demonstrate your engineering maturity Great questions to ask your interviewer About the reader For software engineers, software architects, and engineering managers looking to advance their careers. About the author Zhiyong Tan is a manager at PayPal. He has worked at Uber, Teradata, and at small startups. Over the years, he has been in many system design interviews, on both sides of the table. The technical editor on this book was Mohit Kumar. Table of Contents PART 1 1 A walkthrough of system design concepts 2 A typical system design interview flow 3 Non-functional requirements 4 Scaling databases 5 Distributed transactions 6 Common services for functional partitioning PART 2 7 Design Craigslist 8 Design a rate-limiting service 9 Design a notification/alerting service 10 Design a database batch auditing service 11 Autocomplete/typeahead 12 Design Flickr 13 Design a Content Distribution Network (CDN) 14 Design a text messaging app 15 Design Airbnb 16 Design a news feed 17 Design a dashboard of top 10 products on Amazon by sales volume Appendix A Monoliths vs. microservices Appendix B OAuth 2.0 authorization and OpenID Connect authentication Appendix C C4 Model Appendix D Two-phase commit (2PC)
Part 1.
1 A walkthrough of system design concepts
1.1 A discussion about tradeoffs
1.2 Should you read this book?
1.3 Overview of this book
1.4 Prelude: A brief discussion of scaling the various services of a system
1.4.1 The beginning: A small initial deployment of our app
1.4.2 Scaling with GeoDNS
1.4.3 Adding a caching service
1.4.4 Content distribution network
1.4.5 A brief discussion of horizontal scalability and cluster management, continuous integration, and continuous deployment
1.4.6 Functional partitioning and centralization of cross-cutting concerns
1.4.7 Batch and streaming extract, transform, and load (ETL)
1.4.8 Other common services
1.4.9 Cloud vs. bare metal
1.4.10 Serverless: Function as a Service (FaaS)
1.4.11 Conclusion: Scaling backend services
Summary
2 A typical system design interview flow
2.1 Clarify requirements and discuss tradeoffs
2.2 Draft the API specification
2.2.1 Common API endpoints
2.3 Connections and processing between users and data
2.4 Design the data model
2.4.1 Example of the disadvantages of multiple services sharing databases
2.4.2 A possible technique to prevent concurrent user update conflicts
2.5 Logging, monitoring, and alerting
2.5.1 The importance of monitoring
2.5.2 Observability
2.5.3 Responding to alerts
2.5.4 Application-level logging tools
2.5.5 Streaming and batch audit of data quality
2.5.6 Anomaly detection to detect data anomalies
2.5.7 Silent errors and auditing
2.5.8 Further reading on observability
2.6 Search bar
2.6.1 Introduction
2.6.2 Search bar implementation with Elasticsearch
2.6.3 Elasticsearch index and ingestion
2.6.4 Using Elasticsearch in place of SQL
2.6.5 Implementing search in our services
2.6.6 Further reading on search
2.7 Other discussions
2.7.1 Maintaining and extending the application
2.7.2 Supporting other types of users
2.7.3 Alternative architectural decisions
2.7.4 Usability and feedback
2.7.5 Edge cases and new constraints
2.7.6 Cloud-native concepts
2.8 Post-interview reflection and assessment
2.8.1 Write your reflection as soon as possible after the interview
2.8.2 Writing your assessment
2.8.3 Details you didn’t mention
2.8.4 Interview feedback
2.9 Interviewing the company
Summary
3 Non-functional requirements
3.1 Scalability
3.1.1 Stateless and stateful services
3.1.2 Basic load balancer concepts
3.2 Availability
3.3 Fault-tolerance
3.3.1 Replication and redundancy
3.3.2 Forward error correction and error correction code
3.3.3 Circuit breaker
3.3.4 Exponential backoff and retry
3.3.5 Caching responses of other services
3.3.6 Checkpointing
3.3.7 Dead letter queue
3.3.8 Logging and periodic auditing
3.3.9 Bulkhead
3.3.10 Fallback pattern
3.4 Performance/latency and throughput
3.5 Consistency
3.5.1 Full mesh
3.5.2 Coordination service
3.5.3 Distributed cache
3.5.4 Gossip protocol
3.5.5 Random Leader Selection
3.6 Accuracy
3.7 Complexity and maintainability
3.7.1 Continuous deployment (CD)
3.8 Cost
3.9 Security
3.10 Privacy
3.10.1 External vs. internal services
3.11 Cloud native
3.12 Further reading
Summary
4 Scaling databases
4.1 Brief prelude on storage services
4.2 When to use vs. avoid databases
4.3 Replication
4.3.1 Distributing replicas
4.3.2 Single-leader replication
4.3.3 Multi-leader replication
4.3.4 Leaderless replication
4.3.5 HDFS replication
4.3.6 Further reading
4.4 Scaling storage capacity with sharded databases
4.4.1 Sharded RDBMS
4.5 Aggregating events
4.5.1 Single-tier aggregation
4.5.2 Multi-tier aggregation
4.5.3 Partitioning
4.5.4 Handling a large key space
4.5.5 Replication and fault-tolerance
4.6 Batch and streaming ETL
4.6.1 A simple batch ETL pipeline
4.6.2 Messaging terminology
4.6.3 Kafka vs. RabbitMQ
4.6.4 Lambda architecture
4.7 Denormalization
4.8 Caching
4.8.1 Read strategies
4.8.2 Write strategies
4.9 Caching as a separate service
4.10 Examples of different kinds of data to cache and how to cache them
4.11 Cache invalidation
4.11.1 Browser cache invalidation
4.11. 2 Cache invalidation in caching services
4.12 Cache warming
4.13 Further reading
4.13.1 Caching references
Summary
5 Distributed transactions
5.1 Event Driven Architecture (EDA)
5.2 Event sourcing
5.3 Change Data Capture (CDC)
5.4 Comparison of event sourcing and CDC
5.5 Transaction supervisor
5.6 Saga
5.6.1 Choreography
5.6.2 Orchestration
5.6.3 Comparison
5.7 Other transaction types
5.8 Further reading
Summary
6 Common services for functional partitioning
6.1 Common functionalities of various services
6.1.1 Security
6.1.2 Error-checking
6.1.3 Performance and availability
6.1.4 Logging and analytics
6.2 Service mesh/sidecar pattern
6.3 Metadata service
6.4 Service discovery
6.5 Functional partitioning and various frameworks
6.5.1 Basic system design of an app
6.5.2 Purposes of a web server app
6.5.3 Web and mobile frameworks
6.6 Library vs. service
6.6.1 Language specific vs. technology-agnostic
6.6.2 Predictability of latency
6.6.3 Predictability and reproducibility of behavior
6.6.4 Scaling considerations for libraries
6.6.5 Other considerations
6.7 Common API paradigms
6.7.1 The Open Systems Interconnection (OSI) model
6.7.2 REST
6.7.3 RPC (Remote Procedure Call)
6.7.4 GraphQL
6.7.5 WebSocket
6.7.6 Comparison
Summary
Part 2.
7 Design Craigslist
7.1 User stories and requirements
7.2 API
7.3 SQL database schema
7.4 Initial high-level architecture
7.5 A monolith architecture
7.6 Using an SQL database and object store
7.7 Migrations are troublesome
7.8 Writing and reading posts
7.9 Functional partitioning
7.10 Caching
7.11 CDN
7.12 Scaling reads with a SQL cluster
7.13 Scaling write throughput
7.14 Email service
7.15 Search
7.16 Removing old posts
7.17 Monitoring and alerting
7.18 Summary of our architecture discussion so far
7.19 Other possible discussion topics
7.19.1 Reporting posts
7.19.2 Graceful degradation
7.19.3 Complexity
7.19.4 Item categories/tags
7.19.5 Analytics and recommendations
7.19.6 A/B testing
7.19.7 Subscriptions and saved searches
7.19.8 Allow duplicate requests to the search service
7.19.9 Avoid duplicate requests to the search service
7.19.10 Rate limiting
7.19.11 Large number of posts
7.19.12 Local regulations
Summary
8 Design a rate-limiting service
8.1 Alternatives to a rate-limiting service and why they are infeasible
8.2 When not to do rate limiting
8.3 Functional requirements
8.4 Non-functional requirements
8.4.1 Scalability
8.4.2 Performance
8.4.3 Complexity
8.4.4 Security and privacy
8.4.5 Availability and fault-tolerance
8.4.6 Accuracy
8.4.7 Consistency
8.5 Discuss user stories and required service components
8.6 High-level architecture
8.7 Stateful approach/sharding
8.8 Storing all counts in every host
8.8.1 High-level architecture
8.8.2 Synchronizing counts
8.9 Rate-limiting algorithms
8.9.1 Token bucket
8.9.2 Leaky bucket
8.9.3 Fixed window counter
8.9.4 Sliding window log
8.9.5 Sliding window counter
8.10 Employing a sidecar pattern
8.11 Logging, monitoring, and alerting
8.12 Providing functionality in a client library
8.13 Further reading
Summary
9 Design a notification/alerting service
9.1 Functional requirements
9.1.1 Not for uptime monitoring
9.1.2 Users and data
9.1.3 Recipient channels
9.1.4 Templates
9.1.5 Trigger conditions
9.1.6 Manage subscribers, sender groups, and recipient groups
9.1.7 User features
9.1.8 Analytics
9.2 Non-functional requirements
9.3 Initial high-level architecture
9.4 Object store: Configuring and sending notifications
9.5 Notification templates
9.5.1 Notification template service
9.5.2 Additional features
9.6 Scheduled notifications
9.7 Notification addressee groups
9.8 Unsubscribe requests
9.9 Handling failed deliveries
9.10 Client-side considerations regarding duplicate notifications
9.11 Priority
9.12 Search
9.13 Monitoring and alerting
9.14 Availability monitoring and alerting on the notification/alerting service
9.15 Other possible discussion topics
9.16 Final notes
Summary
10 Design a database batch auditing service
10.1 Why is auditing necessary?
10.2 Defining a validation with a conditional statement on a SQL query’s result
10.3 A simple SQL batch auditing service
10.3.1 An audit script
10.3.2 An audit service
10.4 Requirements
10.5 High-level architecture
10.5.1 Running a batch auditing job
10.5.2 Handling alerts
10.6 Constraints on database queries
10.6.1 Limit query execution time
10.6.2 Check the query strings before submission
10.6.3 Users should be trained early
10.7 Prevent too many simultaneous queries
10.8 Other users of database schema metadata
10.9 Auditing a data pipeline
10.10 Logging, monitoring, and alerting
10.11 Other possible types of audits
10.11.1 Cross data center consistency audits
10.11.2 Compare upstream and downstream data
10.12 Other possible discussion topics
10.13 References
Summary
11 Autocomplete/typeahead
11.1 Possible uses of autocomplete
11.2 Search vs. autocomplete
11.3 Functional requirements
11.3.1 Scope of our autocomplete service
11.3.2 Some UX details
11.3.3 Considering search history
11.3.4 Content moderation and fairness
11.4 Non-functional requirements
11.5 Planning the high-level architecture
11.6 Weighted trie approach and initial high-level architecture
11.7 Detailed implementation
11.7.1 Each step should be an independent task
11.7.2 Fetch relevant logs from Elasticsearch to HDFS
11.7.3 Split the search strings into words and other simple operations
11.7.4 Filter out inappropriate words
11.7.5 Fuzzy matching and spelling correction
11.7.6 Count the words
11.7.7 Filter for appropriate words
11.7.8 Managing new popular unknown words
11.7.9 Generate and deliver the weighted trie
11.8 Sampling approach
11.9 Handling storage requirements
11.10 Handling phrases instead of single words
11.10.1 Maximum length of autocomplete suggestions
11.10.2 Preventing inappropriate suggestions
11.11 Logging, monitoring, and alerting
11.12 Other considerations and further discussion
Summary
12 Design Flickr
12.1 User stories and functional requirements
12.2 Non-functional requirements
12.3 High-level architecture
12.4 SQL schema
12.5 Organizing directories and files on the CDN
12.6 Uploading a photo
12.6.1 Generate thumbnails on the client
12.6.2 Generate thumbnails on the backend
12.6.3 Implementing both server-side and client-side generation
12.7 Downloading images and data
12.7.1 Downloading pages of thumbnails
12.8 Monitoring and alerting
12.9 Some other services
12.9.1 Premium features
12.9.2 Payments and taxes service
12.9.3 Censorship/content moderation
12.9.4 Advertising
12.9.5 Personalization
12.10 Other possible discussion topics
Summary
13 Design a Content Distribution Network
13.1 Advantages and disadvantages of a CDN
13.1.1 Advantages of using a CDN
13.1.2 Disadvantages of using a CDN
13.1.3 Example of an unexpected problem from using a CDN to serve images
13.2 Requirements
13.3 CDN authentication and authorization
13.3.1 Steps in CDN authentication and authorization
13.3.2 Key rotation
13.4 High-level architecture
13.5 Storage service
13.5.1 In-cluster
13.5.2 Out-cluster
13.5.3 Evaluation
13.6 Common operations
13.6.1 Reads: Downloads
13.6.2 Writes: Directory creation, file upload, and file deletion
13.7 Cache invalidation
13.8 Logging, monitoring, and alerting
13.9 Other possible discussions on downloading media files
Summary
14 Design a text messaging app
14.1 Requirements
14.2 Initial thoughts
14.3 Initial high-level design
14.4 Connection service
14.4.1 Making connections
14.4.2 Sender blocking
14.5 Sender service
14.5.1 Sending a message
14.5.2 Other discussions
14.6 Message service
14.7 Message-sending service
14.7.1 Introduction
14.7.2 High-level architecture
14.7.3 Steps in sending a message
14.7.4 Some questions
14.7.5 Improving availability
14.8 Search
14.9 Logging, monitoring, and alerting
14.10 Other possible discussion topics
Summary
15 Design Airbnb
15.1 Requirements
15.2 Design decisions
15.2.1 Replication
15.2.2 Data models for room availability
15.2.3 Handling overlapping bookings
15.2.4 Randomize search results
15.2.5 Lock rooms during booking flow
15.3 High-level architecture
15.4 Functional partitioning
15.5 Create or update a listing
15.6 Approval service
15.7 Booking service
15.8 Availability service
15.9 Logging, monitoring, and alerting
15.10 Other possible discussion topics
15.10.1 Handling regulations
Summary
16 Design a news feed
16.1 Requirements
16.2 High-level architecture
16.3 Prepare feed in advance
16.4 Validation and content moderation
16.4.1 Changing posts on users’ devices
16.4.2 Tagging posts
16.4.3 Moderation service
16.5 Logging, monitoring, and alerting
16.5.1 Serving images as well as text
16.5.2 High-level architecture
16.6 Other possible discussion topics
Summary
17 Design a dashboard of top 10 products on Amazon by sales volume
17.1 Requirements
17.2 Initial thoughts
17.3 Initial high-level architecture
17.4 Aggregation service
17.4.1 by product ID
17.4.2 Matching host IDs and product IDs
17.4.3 Storing timestamps
17.4.4 Aggregation process on a host
17.5 Batch pipeline
17.6 Streaming pipeline
17.6.1 Hash table and max-heap with a single host
17.6.2 Horizontal scaling to multiple hosts and multi-tier aggregation
17.7 Approximation
17.7.1 Count-min sketch
17.8 Dashboard with Lambda architecture
17.9 Kappa architecture approach
17.9.1 Lambda vs. Kappa architecture
17.9.2 Kappa architecture for our dashboard
17.10 Logging, monitoring, and alerting
17.11 Other possible discussion topics
17.12 References
acing the system design interview pdf github
borrow acing the system design interview
دانلود کتاب acing the system design interview
acing the system design interview pdf github free download
acing the system design interview github
Tags: Acing, the System, Design Interview, Zhiyong Tan