- Formal Entry
- Programmer Cultivation
- Computer Science
- Programming Language
- System Design
- Linux
- Distributed Architecture
- Microservice
- Thanks
- https://www.quora.com/What-are-some-of-the-most-basic-things-every-programmer-should-know
- https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/en/index.html
- How to Ask Question The Smart Way
- 📙 Refactoring: Improving the Design of Existing Code
- 📙 Working Effectively with Legacy Code
- 📙 Clean Code: A Handbook of Agile Software Craftsmanship ✏️ Book Notes
- 📙 The Clean Coder:A Code of Conduct for Professional Programmers
- https://www.owasp.org/index.php/Main_Page
- Secure Coding Practice Guidelines
- SEI SERT Coding Standards
- Hardening Your HTTP Security Headers
- 📙 Perfect Software: And Other Illusions about Testing
- 📙 How Google Tests Software
- 📙 Computer Systems A Programmer’s Perspective ✏️ Book Notes
- 📙 Modern Operating Systems ✏️ Book Notes
- 📙 Advanced Programming in the UNIX Environment
-
📙 TCP/IP ILLustrated Volume 1: The Protocols ✏️ Book Notes
-
📙 UNIX Network Programming, Volume 1: The Sockets Networking API ✏️ Book Notes: UNP ✏️ Book Notes: Linux Programming
-
📙 UNIX Network Programming, Volume 2: Interprocess Communications
-
📙 Computer Networking: A Top-Down Approach
-
📙 Computer Networks, 5th Edition
-
📙 Practical Packet Analysis: Using Wireshark to Solve Real-World Network Problems, 2nd Edition
-
ARP
- RFC 826 - An Ethernet Address Resolution Protocol
-
Tunnel
- RFC 1853 - IP in IP Tunneling
- RFC 2784 - Generic Routing Encapsulation (GRE)
- RFC 2661 - Layer Two Tunneling Protocol “L2TP”
- RFC 2637 - Point-to-Point Tunneling Protocol (PPTP)
-
TCP
- RFC 793 - Transmission Control Protocol
- RFC 813 - Window and Acknowledgement Strategy in TCP
- RFC 879 - The TCP Maximum Segment Size and Related Topics
- RFC 896 - Congestion Control in IP/TCP Internetworks
- RFC 2581 - TCP Congestion Control
- RFC 5681 - TCP Congestion Control
- RFC 6582 - The NewReno Modification to TCP’s Fast Recovery Algorithm
- RFC 2018 - TCP Selective Acknowledgment Options
- RFC 2883 - An Extension to the Selective Acknowledgement (SACK) Option for TCP
- RFC 2988 - Computing TCP’s Retransmission Timer
- RFC 6298 - Computing TCP’s Retransmission Timer
-
HTTP
- RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
- RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
- RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
- RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests
- RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching
- RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)
- RFC 7541 - HPACK: Header Compression for HTTP/2
- 📙 Database System Concepts(Fifth Edition)
- 📙 High Performance MySQL,3rd
- 📙 Inside MySAQL: InnoDB Storage Engine
- 📙 Relational Database Index Design and the Optimizers
- MySQL Internals Manual
- How to Analyze and Tune MySQL Queries for Better Performance
- MySQL Performance Tuning 101
- MySQL Performance Schema & Sys Schema
- MySQL Performance: Demystified Tuning & Best Practices
- MySQL Security Best Practices
- MySQL Cluster Deployment Best Practices
- MySQL High Availability with InnoDB Cluster
- 📙 Data Structures and Algorithm Analysis in C:Second Edition
- 📙 Algorithms,Fouth Edition
- 📙 Grokking Algorithms: An illustrated guide for programmers and other curious people
- 📙 Programming Pearls (2/e)
- 📙 Data Structures and Algorithm Analysis in C:Second Edition
Open/Close
- 📙 The C Programming Language
- 📙 C Programming: A Modern Approach
- 📙 C Traps and Pitfalls
- 📙 C++ Primer, 5th Edition ✏️ Book Notes
- 📙 Effective C++ ✏️ Book Notes
- 📙 More Effective C++ ✏️ Book Notes
- 📙 Modern Effective C++ ✏️ Book Notes
- 📙 Inside C++ Object Model ✏️ Book Notes
- 📙 C++ Templates The Complete Guide ✏️ Book Notes
- 📙 Modern C++ Design ✏️ Book Notes
- C++ FAQ
- How C++ Resolves a Function Call
- How to Use C++ for Cross-Platform Development
- Paramter Passing in C and C++
-
OOP
-
Const & Mutable
-
C++ Memory Model
- Memory layout of C ++ objects (CN)
- C++ objects Memory layout (CN)
- std::memory_order
- C++ Memory Model
- Sequential Consistency
- The Atomic Flag
- The Atomic Boolean
- Atomics
- Synchronization and Ordering Constraints
- Sequential Consistency applied
- Acquire-Release Semantic
- Transitivity of the Acquire-Release Semantic
- memory_order_consume
- Acquire-Release Semantic - The typical Misunderstanding
- Fences are Memory Barriers
- Acquire-Release Fences
- Relaxed Semantic
-
CRTP
- Curiously Recurring Template Pattern (CRTP)
- The CRTP, episode One: Definition
- The CRTP, episode Two: What the CRTP can bring to your code
- The CRTP, episode Three: An implementation helper for the CRTP
- Mixin Classes: The Yang of the CRTP
- How to Turn a Hierarchy of Virtual Methods into a CRTP
- Replacing CRTP Static Polymorphism With Concepts
- Removing Duplicates in C++ CRTP Base Classes
- How to Reduce the Code Bloat of a Variadic CRTP
- Variadic CRTP Packs: From Opt-in Skills to Opt-in Skillsets
- Variadic CRTP: An Opt-in for Class Features, at Compile Time
-
Template
-
C++17
-
C++ 20
- Table: C++20 Features.pdf
- C++20: Aggregate, POD, trivial type, standard layout class, what is what
- Notes on C++ SFINAE, Modern C++ and C++20 Concepts
- std::index_sequence and its Improvement in C++20
- Creating a co_await awaitable signal that can be awaited multiple times 🔗 part 1 🔗 part 2 🔗 part 3 🔗 part 4 🔗 part 5 🔗 part 6
- Creating other types of synchronization objects that can be used with co_await
- Raymond Chen: C++ coroutines
- Getting started with awaitable objects
- The mental model for coroutine promises
- Basic implementation of a promise type
- The initial and final suspend, and improving our return_value method
- What happens if an exception occurs in my return_value?
- Making the promise itself be the shared state, the inspiration
- Making the promise itself be the shared state, the outline
- Building a result holder for movable types
- Accepting types via return_void and return_value
- Awaiting the simple_task
- Managing the reference count of the coroutine state
- Asymmetric Transfer: C++ coroutines
- constexpr Dynamic Memory Allocation, C++20
-
📙 Domain-Driven Design: Tackling Complexity in the Heart of Software
-
📙 The Art of UNIX Programming
-
📙 Clean Architecture
- Red Hat Enterprise Linux
- x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors
- Spurious wakeup 🔗 C++ Condition Variable
- ✏️ Linux Kernel 4.19
- ✏️ Understanding Linux Kernel
- ✏️ Linux Kernel Development
- RCU 🔗 Part 1 🔗 Part 2 🔗 Part 3
- Linux Insides
- LWN’s kernel page
- Learn Linux Kernel from Android Perspective
- Linux Kernel Doc
- Kernel Planet: Kernel Developers Doc
- Linux Performance and Tuning Guidelines.pdf
- Linux Performance
- Optimizing web servers for high throughput and low latency
- What Every Programmer Should Know About Memory.pdf
- Memory Barriers: a Hardware View for Software Hackers.pdf
- A Tutorial Introduction to the ARM and POWER Relaxed Memory Models.pdf
- ptmalloc
- tcmalloc 🔗 Ref 🔗 Ref
- jemalloc.pdf
- C dynamic memory allocation
- Research on ptmalloc, tcmalloc and jemalloc memory allocation strategies
- Memory optimization summary: ptmalloc, tcmalloc, and jemalloc
- Scalable memory allocation using jemalloc
-
📙 Linux High Performance Server Programming (CN) ✏️ Linux Programmnig Noetes ✏️ Linux System Notes
-
📙 Network tuning
-
Red Hat Enterprise Linux Network Performance Tuning Guide.pdf
-
Monitoring and Tuning the Linux Networking Stack: Receiving Data
-
Monitoring and Tuning the Linux Networking Stack: Sending Data
- Boost application performance using asynchronous I/O
- Lazy Asynchronous I/O For Event-Driven Servers
- IOCP
- Understanding Reactor Pattern: Thread-Based and Event-Driven
- The Design and Implementation of the Reactor.pdf
- The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution
- Epoll is fundamentally broken 1/2
- Epoll is fundamentally broken 2/2
- An Introduction to Lock-Free Programming
- Lock-Free Data Structures
- Lock-Free Data Structures.pdf
- Is Parallel Programming Hard, And, If So, What Can You Do About It?
- Non-blocking Algorithm
- Read Copy Update
- Seqlock
- Implementing Lock-Free Queues
- Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms.pdf
- Implementing a Recursive Mutex
- Weak vs. Strong Memory Models
- This Is Why They Call It a Weakly-Ordered CPU
- Memory Barriers Are Like Source Control Operations
- Acquire and Release Semantics
- Memory Ordering at Compile Time
- The Happens-Before Relation
- The Synchronizes-With Relation
- Acquire and Release Fences Don't Work the Way You'd Expect
- Acquire and Release Fences
- Roll Your Own Lightweight Mutex
- Can Reordering of Release/Acquire Operations Introduce Deadlock?
- You Can Do Any Kind of Atomic Read-Modify-Write Operation
- The Purpose of memory_order_consume in C++11
- Atomic vs. Non-Atomic Operations
- Memory Reordering Caught in the Act
-
📙 Designing Data Intensive Applications
-
📙 Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services ✏️ Book Notes
- Kafka: a Distributed Messaging System for Log Processing.pdf
- Wormhole: Reliable Pub-Sub to Support Geo-replicated Internet Services.pdf
- board the Databus! LinkedIn's Scalable Consistent Change Data Capture Platform
- The Log: What every software engineer should know about real-time data's unifying abstraction
- The Log-Structured Merge-Tree (LSM-Tree).pdf
- Immutability Changes Everything.pdf Video
- Tango: Distributed Data Structures over a Shared Log.pdf
-
The Unified Logging Infrastructure for Data Analytics at Twitter.pdf
-
Scaling Big Data Mining Infrastructure: The Twitter Experience.pdf
-
Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing.pdf
-
PSYNC: A partially synchronous language for fault-tolerant distributed algorithms.pdf
-
Google Research - Distributed Systems and Parallel Computing
- Designs, Lessons and Advice from Building Large Distributed Systems.pdf
- Building Software Systems At Google and Lessons Learned
- The Twelve-Factor App
- Notes on Distributed Systems for Young Bloods
- On Designing and Deploying Internet-Scale Services
- 4 Things to Keep in Mind When Building a Platform for the Enterprise
- Principles of Chaos Engineering
- Building Fast & Resilient Web Applications
- Designing For Resiliency Will Be So 2013
- Ten design principles for Azure applications
- Eventually Consistent
- Writing Code that Scales
- Automate and Abstract: Lessons from Facebook on Engineering for Scale
-
MicroSoft Cloud Design Patterns
Open/Close
-
Design and implementation
- Ambassador
- Anti-corruption Layer
- Backends for Frontends
- Command and Query Responsibility Segregation (CQRS)
- Compute Resource Consolidation
- External Configuration Store
- Gateway Aggregation
- Gateway Offloading
- Gateway Routing
- Leader Election
- Pipes and Filters
- Sidecar
- Static Content Hosting
- Strangler Fig
-
Management and monitoring
-
Messaging
-
Data management
-
Performance and scalability
-
Availability
-
Resiliency
-
Security
-
-
Google: Design patterns for container-based distributed systems.pdf
- 4 Architecture Issues When Scaling Web Applications: Bottlenecks, Database, CPU, IO
- Scaling Stateful Objects
- Scale Up vs Scale Out: Hidden Costs
- Best Practices for Scaling Out
- Scalability Worst Practices
- Reddit: Lessons Learned From Mistakes Made Scaling To 1 Billion Pageviews A Month
- Autoscaling Pinterest
- Square: Autoscaling Based on Request Queuing
- PayPal: Autoscaling Applications
- Trivago: Your Definite Guide For Autoscaling Jenkins
- Scryer: Netflix’s Predictive Auto Scaling Engine
- Consistent Hashing
- Consistent Hashing: Algorithmic Tradeoffs
- Distributing Content to Open Connect
- Consistent Hashing in Cassandra
- Life Beyond Distributed Transactions
- How Sharding Works
- Why you don’t want to shard
- How to Scale Big Data Applications.pdf
- MySQL Sharding with ProxySQL
- Cache update routine (CN)
- Design Of A Modern Cache
- Netflix: Caching for a Global Netflix
- Facebook: An analysis of Facebook photo caching
- How trivago Reduced Memcached Memory Usage by 50%
- Caching Internal Service Calls at Yelp
- Understanding When to use RabbitMQ or Apache Kafka
- Trello: Why We Chose Kafka For The Trello Socket Architecture
- LinkedIn: Running Kafka At Scale
- Should You Put Several Event Types in the Same Kafka Topic
- Billions of Messages a Day - Yelp’s Real-time Data Pipeline
- Uber: Building Reliable Reprocessing and Dead Letter Queues with Kafka
- Uber: Introducing Chaperone: How Uber Engineering Audits Kafka End-to-End
- Uber: Uber’s Real-Time Push Platform
- Publishing with Apache Kafka at The New York Times
- Kafka Streams on Heroku
- Salesforce: How Apache Kafka Inspired Our Platform Events Architecture
- Exactly-once Semantics are Possible: Here’s How Kafka Does it
- Delivering billions of messages exactly once
- Benchmarking Streaming Computation Engines at Yahoo!
- Using Logs to Build a Solid Data Infrastructure - Martin Kleppmann
- Building DistributedLog: High-performance replicated log service
- LogDevice: a distributed data store for logs
- Understand Latency
- Common Bottlenecks
- Performance is a Feature
- Make Performance Part of Your Workflow 📙 Designing for Performance
- CloudFlare: How we built rate limiting capable of scaling to millions of domains
- Instagram: Search Architecture
- eBay: The Architecture of eBay Search.pdf
- eBay: Improving Search Engine Efficiency by over 25%
- LinkedIn: Introducing LinkedIn’s new search architecture
- LinkedIn: Search Federation Architecture at LinkedIn
- Slack: Search at Slack
- DoorDash: Search and Recommendations at DoorDash
- Twitter: Building a complete Tweet index
- Pinterest: Manas: High Performing Customized Search System
- Sherlock: Near Real Time Search Indexing at Flipkart
- Airbnb: Nebula: Storage Platform to Build Search Backends
- YouTube Architecture
- Scaling Pinterest
- Google Architecture
- Scaling Twitter
- The WhatsApp Architecture
- Flickr Architecture
- Amazon Architecture
- Stack Overflow Architecture
- Pinterest Architecture
- Tumblr Architecture
- Instagram Architecture
- TripAdvisor Architecture
- Scaling Mailbox
- Salesforce Architecture
- ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second
- Uber Architecture
- Dropbox Design
- Splunk Architecture
-
Nginx
- Introduction to Microservices
- Building Microservices: Using an API Gateway
- Building Microservices: Inter-Process Communication in a Microservices Architecture
- Service Discovery in a Microservices Architecture
- Event-Driven Data Management for Microservices
- Choosing a Microservices Deployment Strategy
- Refactoring a Monolith into Microservices
-
Auto0 Blog
-
DZone: Microservices vs. SOA - Is There Any Difference at All?
-
PaaS vs. IaaS for Microservices Architectures: Top 6 Differences
-
Microservices vs. Monolithic Architectures: Pros, Cons, and How Cloud Foundry (PaaS) Can Help
- Mircroservcie with Spring-Boot
- The Hidden Costs Of Microservices
- Microservice Architecture (https://microservices.io)
- Microservice Antipatterns and Pitfalls
- Microservice Architecture: All The Best Practices You Need To Kno
- Best Practices for Building a Microservice Architecture
- Simplicity by Distributing Complexity
- Effective Microservices: 10 Best Practices
- ForgeRock: Identity Gateway
- ForgeRock: Token Validation Microservice
- Bringing Token state consistency to the Edge
- Microservice Architecture and its 10 Most Important Design Patterns
Database per Microservice
Event Sourcing
CQRS
Saga
BFF
API Gateway
Strangler
Circuit Breaker
Externalize Configuration
Consumer-Driven Contract Testing
- Modularity and Information Hiding.pdf
- Separation of Concern
- Service Oriented Architecture
This roadmap is highly inspired by course: https://time.geekbang.org/column/intro/48. Thanks Hao Chen.