Psyduck
Another place to use XMind to record basic CS problems is also .xmind source files and exported .pdf files. The XMind version is "XMind 2020".
In 2020, it took about 2 months to organize the first XMind knowledge base: ZeroMind. The reason I created an additional Repo to do the same thing is because on the one hand, my aesthetic has changed, and on the other hand, I have a deeper understanding of the most important but basic issues.
Confucius will never deceive me by reviewing the past and learning the new. In the process of sorting out basic knowledge points, I have my own understanding of content such as CFS-vruntime, POSIX condition variables, TCP and epoll, and I feel like I suddenly realize it.
The reason I use XMind to record these contents is because I like a line in "Martian Rescue" very much:
Sometimes, all situations will be bad for you. When all the bad things happen together, you may think, that's it, this is my end. Faced with this situation, you either accept it or find a way to solve it, and this is the true meaning of everything. To solve the problem, you think of various ways to solve one problem, and then solve the next problem, repeating the cycle, and when you solve enough problems, you can go home.
In other words, when facing a big problem, you need to learn to break it down into small problems one by one and then deal with it one by one, that is, "dividing and conquering it." Here are some pictures that can help you better understand what this project does:

? Table of contents
- Database
- Distributed System
- Middleware
- Linux Network Programming
- Operating System
- Golang
- Kubernetes
- C++
? Database
MySQL
- Why does MySQL use B+Tree?
- InnoDB data page structure
- InnoDB Index
- InnoDB WAL
- InnoDB Group Commit
- InnoDB undo log and MVCC
- Global lock, table-level lock, and row lock (Part 1)
- Global lock, table-level lock, and row lock (middle)
- Global lock, table-level lock and row lock (Part 2)
- Selection of primary key
- MySQL Cost-Based Optimizer
- A brief analysis of the working principle of MySQL Join
- MySQL Replication—Asynchronous and parallel replication
- MySQL GTID and semi-synchronous replication
PostgreSQL
- Index aggregated tables and heap tables
- PostgreSQL storage structure
- MVCC in postgreSQL
- Memory context in PostgreSQL (MmeoryContext)
- PostgreSQL query tree structure (Query)
- RBO - Promoting Sub-Connection (Basic Concept)
- RBO - lifting sub-connection (specific process)
- SysCache in PostgreSQL
Greenplum
- Greenplum Architecture Overview
- Why Motion is needed?
Others
- Redis Data Structure
- Redis Master-slave Replication Principle
- Cache update policy
- Redis Cluster Overview
- etcd Overview
- Implementation of distributed locks
Distributed System
Distributed protocols and algorithms

- 2PC
- CAP Theory
- Byzantine General Problem (Consensus)
- Basic Paxos
- Raft – Leadership Election and Log Replication
- Gossip – Gossip achieves final consistency
- Quorum NWR – Custom Consistency
⚗️ Middleware
- Reliable Message Middleware-RabbitMQ
Linux-Network-Programming
- Signal
- Signal set and signal mask
- Creation of a process
- Introduction to inter-process communication
- DAEMON
- Reliable data transmission protocol-TCP
- TCP Congestion Control
- A list of socket programming problems (01)
- A list of socket programming problems (02)
- Analysis of epoll principle
- epoll_event
- HTTPS handshake process
- Nginx basic process model and core data structure
⚡ Operating System
- Linux processes, threads and scheduling
- Linux virtual memory
- Linux Memory Notes (01)
? Golang
- Design and use of channel
- Map design and expansion timing
- GMP Model
- Three-color marks-clear GC
? Kubernetes
- Why do you need a Pod?
- How is a declarative API implemented?
? C++
common
Object-oriented programming
TODO
Copy Control
- Copy construction and copy assignment
- LV vs RV
- Mobile structure and mobile assignment
- Three/Five Rules
Template and generic programming
- Basic use of Template
- Universal reference and type inference issues
- Perfect forward
Type Related
- Cases type conversion
- Automatic type inference (auto)
- decltype
Function programming
- lambda expression
- Callable object—std::function
Smart pointer
- Heap, stack and RAII: How to manage resources in C++
- RAII and smart pointer
- shared_ptr
Concurrent programming
- Linux processes, threads and scheduling
- Creation and execution of threads
- std::async vs. std::future
- Mutex and std::lock_guard, std::unique_lock
- Notification status changes—POSIX condition variable
- Notification status changes—C++ condition variable
- POSIX semaphore
Compilation and linking