What skills should be learned for the LinuxC/C++ backend?

What do you have to learn about LinuxC/C++ back-end technology?

When I just graduated from university, I was always confused about this question.

Let me talk about my own situation first. My undergraduate degree is neither 985 nor 211. Zhihu calls this kind of non-existent university as an ordinary university, and I am studying a non-computer major. Compared with many other netizens on Zhihu, the average per capita is 985. , I am not ashamed to say that I have graduated from C9.

After graduating, I entered Tencent to do ``back-end development'' work by self-taught back-end technology

If you are a 985 or 211 college, congratulations, the starting point is higher than mine. If you are like me, don't give up, look at me, there is still a chance.

There are people like me who are in non-major classes, unfamiliar schools, and have experienced self-taught computer software development. (If you want to hear the experience of changing careers, you can write about them if you like them), but not many. At the beginning, I didn’t want to share my experience. After all, there is no aura, but I have experienced it deeply. I didn’t know where to learn when I wanted to learn.

I was confused. Fortunately, I finally figured out a correct learning route. Knowing that this road is not easy to follow, I finally decided to bring my back-end learning experience to the students who need it.

If you are a beginner, you may want to ask me directly: Where do I start?

Then I won’t sell it. If you don’t know where to start, for each node of the learning route, I will give you the priority of learning the above technical routes based on my personal learning experience and combined with the suggestions given by the high P of the big factory I know. You can sort according to your studies. The sorting rules: the
higher the star, the higher the ranking, the higher the importance, and the priority to arrange time for learning.

Computer Basics-5 Stars
Linux-5 Stars
Database-5 Stars
Design Patterns-5 Stars
Tools-5 Stars
Middleware-4 Stars
Distributed-4 Stars
High Concurrency, High Availability, High Performance-4 Star
Search Engine-4 Star
Test-3 Star
Monitoring and Statistics-3 Star
Virtualization-3 Star
Security-3 Star
Big Data-3 Star

Learning direction and route are very important. Compared with specific technical details, reproducible experience and clear learning route are what most people need more.
Work in the right direction, otherwise you will only get further and further away from the goal, right?
I just write about various technologies, and don’t tell you where this knowledge point lies in the back-end technical map. I feel a bit blind and don’t know the whole picture. In my opinion, everyone understands a lot of content, but I think that the information gap is objective. Yes, smoothing the information gap is the value of sharing. So it took me half a month to compile a mind map of the back-end technology learning route, to talk to you:

To become a back-end technical engineer who meets the requirements of BAT and TMD manufacturers, what technologies do I need to learn?
What is the back-end technology learning route?

Principles of Computer Organization

This course allows you to understand the composition and working principle of computers. The content to learn includes:

The representation and operation of data in the computer (lemon said: the computer does not recognize numbers, but only recognizes high and low levels, so data is represented by binary 0 and 1 inside the computer)

Storage system (data and program instructions must be stored, learning computer storage levels, memory, external storage, high-speed cache, virtual
storage technology)

Instruction system (the written code must eventually be translated into computer instructions, there are multiple instruction formats and addressing modes, and the controller controls the
execution of instructions)

Central processing unit (that is, the brain of the CPU computer, which is mainly composed of arithmetic unit and controller)

Bus (the blood vessels and arteries of the computer, which are connected to various functional components of the computer, used to transmit data, address signals, and control signals)

Input and output system (Input/Output is also called IO system, which connects and manages various external devices such as keyboards, displays, etc.)

computer network

The world’s first general-purpose computer "ENIAC" was invented in 1946. Like its name, it was only used for calculation. Later on, there were more and more computers. If there is no network, every computer will become an island, and there will be no current With the prosperity of the Internet, the course of "Computer Networking" has a very clear learning route, which revolves around how to connect computers in different geographical locations and exchange data and information efficiently and reliably, so that people can do it at home and know everything in the world.

The computer network is divided into layers, according to the attributes and characteristics of each layer, it is divided into:

Physical layer
Data link layer
Network layer
Transport layer
Application layer

This hierarchical division is the receiving path of a network packet from top to bottom, and vice versa is the sending path. Since we want to exchange information, we must negotiate a common protocol. Just like when we communicate with foreigners, either they learn Chinese or we learn English. Anyway, we have to unify a standard language. This is called a "communication protocol" in computer networks. . As in the above-mentioned network layering, each layer has its own adapted protocol, so the learning of computer networks basically revolves around the learning of layered protocols.

operating system

The operating system is also a kind of software. The Microsoft Windos operating system you are familiar with, and the various distributions of Linux systems you are familiar with in the background development are all installed on your computer in the form of software.

It's just that this software is different from the application software we usually contact. It is special because it deals with computer hardware (that is, the hardware we learn in the principle of computer composition), and provides general-purpose applications to other applications and users. The interactive interface, to put it plainly, the operating system is the role of an intermediary and steward. It helped us to do the following things:

Process management (the program you write can only work when it runs, the program that runs is called a process, and the process is the smallest unit of resources)

Memory management (computer memory is expensive and small, and high concurrency is required at every turn, memory management is very knowledgeable)

File management (data and information in the computer need to be saved and managed through the file system)

Input and output management (how various external devices are connected to the computer and how to manage after being connected)

data structure

The data structure is most familiar to everyone. Even if you have no computer foundation or want to switch to a computer, the first thing you encounter is the data structure, because the algorithm questions in the interview are essentially the use of various data structures. So purely from the perspective of interview utilitarianism, data structure is also a computer foundation that must be mastered. Data structure must be learned:

Linear list (linked list, array, circular linked list)

Stack and queue

Trees and various binary trees (binary sort tree, balanced binary tree, Huffman tree, B tree, B+ tree, Trie tree)

Figure (Figure storage structure, BFS, DFS, shortest path, minimum spanning tree, topological sorting, critical path)

Search algorithm (binary search, B-tree search, HASH table, KMP string pattern matching)

Sorting algorithm (insertion sort, bubble sort, merge sort, radix sort, heap sort)

how are you

Bit operation

Divide and conquer algorithm

Dynamic programming

Okay, I have probably gone through the four major courses of computer basics. Of course, this is a pragmatic suggestion I give to students who do not have computer basics. After you finish these four courses, you can only say introductory computer, but this is better than many people. incredible. If you want to truly understand the subject of computer science, you can wait to finish these four basic courses, and then spend time writing to pick some of the courses in the above training plan to learn, and become a computer software back-end development engineer with a complete knowledge system.

Linux background development knowledge points

In the field of back-end development, I dare not say 100% of the back-end services you can touch. At least 90% of them are running on Linux systems, because it is open source, convenient, and powerful. You need to learn the following technical points:

[Article benefits] The editor recommends my own linuxC/C++ language exchange group: 832218493. I have compiled some learning books and video materials that I think are better for sharing in it. You can add them if you need them! ~
Insert picture description here
Insert picture description here

1. Data structure and algorithm, design mode, project management

Sorting (11 sorts) and KMP red-black tree proof B tree and B+ tree Hash and Bloom filter responsibility chain mode filter mode publish subscription mode factory mode Makefile/cmake/configuregit /svn and continuous integration Linux system runtime commands

Two, code implementation, program analysis

Principle and realization of network io and select/poll/epollreactor http/https web server realization websocket protocol and server realization server million concurrent realization (c10K, c1000k, C10M) redis/memcached/Nginx network component Posix API and network protocol stack UDP reliable protocol QUIC/KCP

Three, pool structure, high-performance components, open source components

Thread pool (handwritten) memory pool ringbuffer asynchronous request pool performance optimization, asynchronous mysql asynchronous dns asynchronous redismysql connection pool redis connection pool atomic operation CAS message queue and lock-free queue timer scheme red-black tree time round minimum heap lock implementation principle mutual Exclusion lock, spin lock, optimistic lock, pessimistic lock, distributed lock server connection keepalive keepalivedtry/catch implementation of libevent/libev framework asynchronous logging scheme log4cpp application layer protocol protobuf/thriftopenssl encryption json and xml parser character encoding unicode/gbk /utf-

Fourth, the implementation of the coroutine framework, user mode protocol stack NtyTCP (tcp/ip)

The principle and engineering case of the
coroutine The implementation of the scheduler of the coroutine The realization of the
sliding window congestion control to start the
tcp timer The realization
of the source code of epoll

Five, Skynet, ZeroMQ, DPDK

Skynet high-performance gateway actor implementation and cluster/load balancing skynet network and hot update data sharing ZeroMQ Router-Dealter mode source code analysis: message model and engineering case source code analysis: network mechanism dpdk PCI principle and testpmd/l3fwd/skeletionkni data flow dpdk to achieve dnsdpdk Of high-performance gateways to achieve para-virtualized virtio/vhost acceleration

六、 MySQL、Redis、Nginx、mongodb、dfs

SQL statement index stored procedure trigger 2. Database connection pool and sql analysis and analysis storage engine principle MyISAM and Innodb transaction isolation to achieve a storage engine MySQL source code MySQL cluster and distributed high availability and high concurrency Redis related commands and persistent Redis connection pool and Asynchronous operation source code analysis: storage principle and data model source code analysis: master-slave atomic model redis cluster solution Nginx uses conf to configure nginx module development filter module Nginx module development handler module source code analysis: Nginx Http state machine source code analysis: inter-process communication and Slab sharing mechanism Mongo interface programming and MongoDB commands use MongoDB cluster solution cephfastdfs

Seven, Linux kernel process management, memory management, file system

Process management and scheduling
Lock and inter-process communication
system call How to implement a syscall
physical memory partner algorithm by yourself 2. Process virtual memory mm_struct
page recovery and page swap
Virtual file system
Ext2/3/4 file system
No persistent storage

8. Performance analysis

Tool wrk/ webbench/ loadbalance/valgrind
Google gTest/Memtrack
flame map/heat map

Nine, distributed architecture

Tencent's Tars
virtualized docker
distributed registry etcd
P2P network penetration hole decentralized network

Conclusion

I’m ashamed to say that some of the techniques I drew on the map I just know a little bit, but the learning route and direction of the entire back-end technology stack is okay. I have drawn them all. Everyone can refer to the study and check the omissions. In terms of technology, I also need to continue to study diligently, let us encourage each other.

Back-end book list

1. Linux system programming: "Unix Advanced Environment Programming "
2. Tcp/ip: "tcp/ip Detailed Explanation Volume One Volume Two Volume
Three " 3. Data structure and algorithm: "Introduction to Algorithms" (Third Edition)
4. Performance Analysis : "Performance Peak Insights into System, Enterprise and Cloud Computing "
5. Linux Kernel: "In-Depth Understanding of Linux Kernel Architecture" (Translated by Guo Xu)

Insert picture description here

Guess you like

Origin blog.csdn.net/lingshengxueyuan/article/details/111993333