C/C++ back-end development learning route summary (with internship learning experience sharing)

Hello everyone, it's September; I don't know how your work or internship arrangements are going? Anyway, as a person who has been here, Lion can only see it on various forums, and it is full of mourning ; secretly feeling shocked and feeling that young people are not easy to mix now~

Then, Lion recently received a lot of invitations and answers on how to learn C/C++ backend in the background; then here is another summary of C/C++ backend development learning route and internship experience sharing


In addition to Zhihu, there is also a certain DN, and too many readers on a certain website have asked me such a question: how do beginners learn? What should I learn to get a job? What learning materials do you recommend?


In fact, there are many articles on the Internet such as learning routes, but I have read a lot, most of which list a lot of courses and knowledge points, but lack something like a timeline, telling everyone what kind of rhythm to advance , So, I hope to add this important information.


This learning route includes the content that needs to be learned in stages from novice to work, detailed knowledge points, book lists that can be referenced, e-book resources, etc. Let me show you the C/C++ back-end development. The last paragraph includes the internship and learning experience of a little brother of mine . Start the car~
The road map
starts with a picture. Let's start with a general understanding.

This picture is a bit big, because WeChat compresses pictures so badly, if you want a high-definition version, you can private message Lion: C++ to get it automatically.

The basic part can be learned everywhere, so I won’t go into too much detail here; if you want to change careers or transfer to C/C++ backend, Lion will also write a more detailed basic sharing; here we will first divide the learning route into ten. plate to proceed.

1. The cornerstone of refinement

1. Data structure and algorithm

  • Red-black trees everywhere
  • Disk storage chained B-tree and B+ tree
  • Hash and BloomFilter, bitmap for deduplication of massive data

2. Design Patterns

  • Creational Design Patterns
  • Structural Design Patterns

3. New features of c++

  • stl container, smart pointer, regular expression
  • New features of threads, coroutines, atomic operations, lamda expressions

4.Linux project management

  • Makefile/cmake/configure
  • distributed version control git
  • Linux system runtime parameter command

2. High performance network design

1. Network programming

  • Network IO and select, poll, epoll
  • The principle and implementation of reactor
  • Implementation of http/https server
  • websocket protocol and server implementation

2. Network principle

  • Server million concurrent implementation
  • redis, memcached, nginx network components
  • Posix API and network protocol stack
  • UDP's reliable transport protocol QUIC

3. Implementation of the coroutine framework NtyCo

  • Coroutine design principle and assembly implementation
  • Coroutine scheduler implementation and performance testing

4. Implementation of user mode protocol stack NtyTcp

  • User mode protocol stack design and implementation
  • tcp/ip timer and sliding window
  • Design and implement epoll by hand

5. High performance asynchronous io mechanism io_uring

  • io_uring comparable to epoll
  • Usage scenarios of io_uring

3. Basic component design

1. Pool components

  • Handwritten thread pool and performance analysis
  • Implementation and Scenario Analysis of Memory Pool
  • Implementation of asynchronous request pool
  • Implementation of mysql connection pool

2. High-performance components

  • Atomic operation CAS and lock implementation
  • Lock-free message queue implements RingBuffer
  • Timer scheme red-black tree, time wheel, minimum heap
  • Handwritten deadlock detection component
  • Handwritten memory leak detection component
  • Implementing distributed locks by hand

3. Open source components

  • Those pits of Libevent/Libev framework actual combat
  • Asynchronous log scheme log4cpp
  • Application layer protocol design ProtoBuf/Thrift

4. Middleware development

1.redis

  • Detailed explanation and principle of redis related commands
  • Redis protocol and asynchronous mode
  • Storage Principle and Data Model
  • Master-slave synchronization and object model

2.MySQL

  • SQL statements, indexes, views, stored procedures, triggers
  • MySQL index principle and SQL optimization
  • Analysis of MySQL transaction principle
  • MySQL caching strategy

3.Kafka

  • Kafka usage scenarios and design principles
  • Kafka storage mechanism

4.gRPC

  • gRPC's internal component associations
  • gRPC communication protocol based on http2

5.nginx

  • Nginx reverse proxy and system parameter configuration conf principle
  • nginx filter module implementation
  • nginx Handler module implementation

5. Open source framework

1.skynet

  • skynet design principle
  • Sky net network layer encapsulation and lua/c interface programming
  • The important components of sky net and the tear-off game project

2. Distributed API Gateway

  • High performance web gateway Openresty
  • Kong dynamic load balancing and service discovery

3. DPDK

  • DPDK environment and testpmd/I3fwd/skeletion
  • DPDK's user mode protocol stack
  • Concurrent dns processing of tens of millions of traffic
  • High performance data processing framework vpp
  • DPDK's virtual switch framework OVS

4. High performance computing CUDA

  • The development process of gpu parallel computing cuda
  • Parallel Computing in Audio and Video Codec

6. Cloud Native

1.Docker

  • Kernel functions under the Docker scenery
  • Docker container management and image operation
  • Docker network management
  • Docker cloud and container orchestration

2.Kubernetes

  • K8S environment construction
  • Usage of Pod and Service
  • K8S cluster management
  • K8S secondary development and K8S API

Seven, performance analysis

1. Performance and testing tools

  • Test framework gtest and memory leak detection
  • Performance Tools and Performance Analysis
  • The generation principle and construction method of the flame graph

2. Observation technology bpf and ebpf

  • Implementation principle of kernel bpf
  • bpf observations on kernel functions

3. Kernel source code mechanism

  • Process Scheduling Mechanism
  • Kernel memory management operation mechanism
  • The relationship between network card nic and network protocol stack
  • file system components

8. Distributed architecture

1.RocksDB

  • Different usage scenarios of kv storage RocksDB
  • RocksDB special operations

2. Cloud native distributed database TiDB

  • The principle of TiDB storage engine
  • The principle of TiDB cluster solution and Replication

3. Distributed service

  • Kernel-level supported distributed storage Ceph
  • Registration Service Center Etcd

9. Project actual combat

1. Image bed shared cloud storage

  • fastdfs architecture analysis and configuration
  • fastdfs storage principle
  • Distributed fastdfs storage cluster deployment
  • High load nginx/fastcgi
  • File transfer and interface design
  • Release/Test Cases of Products on the Cloud Public Network

2. Microservice instant messaging

  • IM Instant Messaging Project Framework Analysis and Deployment
  • IM messaging server/file transfer server
  • Message Server/Routing Server
  • Database Proxy Server Design
  • File server and docker deployment
  • Release the product on the cloud public network/public network test line

10. Supporting reference books

1. MySQL: "High Performance MySQL Version 3"

2. Nginx: "In-depth understanding of Nginx: module development and architecture analysis (2nd edition)" (Tao Hui)

3. Redis: Redis design and implementation (Huang Jianhong)

4. Linux Kernel: "In-depth Understanding of Linux Kernel Architecture" (translated by Guo Xu)

5. Data Structures and Algorithms: Introduction to Algorithms (3rd Edition)

6. Performance Analysis: "Peak Performance Insights into Systems, Enterprises, and Cloud Computing" 8

7. MongoDB: "The Definitive Guide to MongoDB"

8. Ceph: "Ceph Distributed Storage Learning Guide" (Ceph China Community)

9.Docker: "Docker Container and Container Cloud (2nd Edition)".

10.TCP/IP: "Tcp/1p Detailed Explanation Volume 1 Volume 2 Volume 3" 8

11. Linux system programming: "Advanced Programming in Unix Environment"

12. Computer: "In-depth understanding of computer systems"

13. DPDK: "DPDK in simple terms" 8

14.k8s: "Kubernates Definitive Guide" edited by Gong Zheng et al.

15.bpf: "BPF Top Insights into Linux System and Application Performance"


Summarize

The above is to do C/C++ back-end development. From beginners to work, the content that needs to be learned is sorted out. It may not be comprehensive, but mastering the above content is enough to meet the requirements of most positions.

In addition to the learning route, I also compiled a large amount of learning materials learned in this process, and used it with the above learning route:


Suitable for engineers

1. On-the-job engineers who have been engaged in business development for many years and do not have a deep understanding of the underlying principles

2. On-the-job engineers who are engaged in embedded development and want to transfer to Internet development

3. On-the-job engineers engaged in desktop development such as Qt/MFC, whose salary has not increased much for many years

4. On-the-job engineers who are engaged in non-development positions (algorithm positions, operation and maintenance positions, and test positions) and want to transfer to background development positions

5. On-the-job engineers who have no technical challenges at work and have no access to new technologies at work

6. Developers who are slow to study and learn by themselves and cannot systematically build a knowledge system

7. Engineers who know a lot of technical terms, but do not understand after in-depth inquiry

8. Students who major in computer related majors and want to enter a large factory (undergraduate degree or above, with c/c foundation)


Here is an example of a student’s internship experience (I have a good relationship with him, take him with everything) The basic situation of the internship interview, the companies participating in the interview: CVTE , Sohu , Oriental Fortune , Meituan , Tencent , Bytedance , alibaba

CVTE : written test-technical 1-technical 2-hr-offer (the first interview, he said it went well)

Alibaba approved in advance: technical aspect 1-hang (didn’t review at the time, asked him what he didn’t know, in fact, it’s not difficult in Ali)

Dongfang Wealth : Technical 1-HR-Hang up

ByteDance : Technical 1-Technical 2-Technical 3-hr-offer (The interviewer on Byte 3 took him almost half a month to interview. At that time, the mentality was very bad, and the students all took the offer from the big factory)

Baidu : Technical 1-Technical 2-Technical 3 (I finished the interview in one afternoon, but after playing for a whole morning, I didn’t receive 2 calls from Baidu , and then it disappeared)

Tencent : Technical 1-Technical 2-Technical 3-hr (It was also very smooth, I was forced to review it, and it feels similar to Ali)

Later, other companies rejected the written test interview invitation.

Then there is his learning experience, the original words:

March-August 2020: I started to prepare to learn C++ in March when the epidemic was at home, because the efficiency at home was extremely low, I played for three days and learned one day, and in July and August, I only knew how to use C++, and then wrote a small MFC project to practice practice hands.

September 2020: Learn about computer networks in the first half of the month, and learn to understand computer systems in the second half of the month (of course, you only understand the general idea in the first pass)

October-December 2020: Write a multi-threaded server project (that is, adapt muduo), and learn various knowledge of network programming, operating system, and C++ during this process (C++ only learned superficially before)

January-February 2021: Learn data structures and algorithms and write questions , less than 200 questions. (I played at home for half a month during the winter vacation)

March 2021: Open the Haitou model, first invest in a batch of small companies, basically all of them have resumes, and finally a few small companies have given interview opportunities, reviewing while interviewing. I started investing in major companies in mid-March. Except for meituan , the interviews with Byte, Tencent , and Baidu went smoothly. I didn’t fail. I got a verbal offer from Byte before Qingming.

April 2021: Byte's official offer email.

(To be honest, my study efficiency is not very high, because I like to sleep late.)

ps: I found out that he sleeps late, he can't wake up every morning...


epilogue


Whether it is a job transfer or an internship, a qualified C++ developer is never afraid of not being able to find a job. Even if you work in Java or Go in the future, because the principles of the language are the same, your learning costs will be lower. Much smaller than others.


I carefully thought about my language history over the years: I wrote C language and VB for one year in college, and C# for three years; I wrote Python for one year as a graduate student, and C++ for two years; , React these frameworks.


You want to ask me which language is my favorite?
There is no doubt that it is definitely C++!
No reason, just like its rigor!

C++ is number one in the world! ! !


The best time to plant a tree was ten years ago, and the second is now. I sincerely hope that the students and those who want to switch to computers will work hard!

Don't let yourself down for so many years of hard study and work experience; work hard and live well, if you want relevant information or a learning roadmap, you can privately message Lion, and everyone in the world will be happy! ! !

Bye bye~

Guess you like

Origin blog.csdn.net/m0_58687318/article/details/126667506