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! ~
1. Data structure and algorithm, design mode, project management
Two, code implementation, program analysis
Three, pool structure, high-performance components, open source components
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
六、 MySQL、Redis、Nginx、mongodb、dfs
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)