firsthand experience! Back-end engineer learning path, book, video recommendation

67766d44597454933f06a346325e7a5c.png

Recently, a small friend asked me, what is the learning route of a back-end engineer? In fact, many programmers now are not born in a professional class, including myself, and have never taken any computer-related courses in college. The disadvantage of programmers born in non-classes is that the basics are slightly poor. For example, they do not know much about computer basics, computer networks, etc., but it does not matter. As long as you use your spare time to study systematically, you can still catch up. But the question is, what is our learning path? How to study, there are so many online courses, which one should I watch? When I opened my favorites, all the countless materials were eating ashes, and in the end I didn't learn a single one.

f44fd8b6a129be2905cc569adee5e38a.png

In fact, it is enough for us to save 1-2 of the same type of information, and then concentrate on learning a knowledge for a period of time, develop wretchedly, and finally amaze everyone.

112dd178e51a41fd98d993f09efaa3b2.png

ok, not much nonsense, what I want to share today is the learning path of back-end engineers and related books and videos. Since there are many back-end languages, this article will not share language-related content.

Principles of Computer Composition

The first thing I want to talk about is the knowledge related to the principles of computer composition. Of course, this is not just an introduction to what a computer is composed of. It does not teach you how to assemble a computer, but tells you, for example, how a computer calculates our data, How does the brain of the CPU efficiently process our logic, how does the CPU communicate with the memory, what are the optimizations in the CPU dimension to speed up the execution of our programs, and how do we solve the relationship between CPU and memory, memory and disk when we run the program The speed gap between and so on...

Here I recommend the book "Computer Composition and Designing Hardware/Software Interfaces"

0a120c42cebc71d16e22db2140f0800c.png

By studying this book you will gain the following knowledge:

  1. How computers gradually evolved from large devices to today's personal PCs, and 8 great ideas in computer system architecture: design for Moore's Law, abstract simplified design, speed up high probability events, improve performance through parallelism, through pipelines Provide performance, provide performance through prediction, memory hierarchy, improve reliability through redundancy.

  2. How to judge the performance of a CPU? The most straightforward response is whether the CPU is fast enough, that is, how long our program will run. We generally call this response time the CPU execution time. It should be noted here that the CPU execution time does not include the IO involved during program execution. If subdivided, it can be divided into user CPU time and system CPU time

  3. How are signed and unsigned numbers represented? How does the CPU perform comparison operations, branch judgment, and loop execution? Our code actually needs to go through several processes such as compilation, assembly, and linking. How addition, subtraction, multiplication, division, and floating-point operations are implemented at the computer level.

  4. How does the CPU carry out data adventures and control adventures? How pipelining provides throughput, and how the processor's data path and control path are designed.

  5. Next is memory-related knowledge, such as virtual memory technology, program segmentation technology, paging technology, how to find disk pages when a page is missing, and what optimizations have been made to improve address query speed, page table What are the advantages and disadvantages? What are the advantages and disadvantages of TLB?

In short, after learning computer composition, internal strength can definitely be greatly increased. If you feel that book knowledge is boring and difficult to read, I will recommend another video for you: Computer Science Crash Course (https://www.bilibili.com/video/BV1EW411u7th)

da5abfa1b5846e1998c7ced3e345a88b.pngVery vivid class, a total of 40 episodes, each episode is about 10 minutes, and it takes 7 hours to watch all of them. It is very suitable for getting started. This video is perfect with the book.

operating system

After learning the principle of computer composition, we will understand how the various hardware of the computer work in coordination, then the next step is the liver operating system, which is a program between computer hardware and software resources. From the programmer's point of view, learning the operating system can help us better understand how programs are scheduled and so on. The operating system needs to handle basic tasks such as managing and configuring memory, prioritizing the supply and demand of system resources, controlling input and output devices, operating the network, and managing the file system. The operating system also provides an interface for users to interact with the system. Here and everyone recommends the book "Modern Operating Systems"

a47e262e4aee9becd4f1b562250bd023.png

By studying this book you will gain the following knowledge:

  1. What is a Process, Model of a Process, Creation of a Process, Termination of a Process, Hierarchy of a Process, Implementation of a Process, Design Model of Multiprogramming

  2. What is threading, threading model, threads in user space, threads in kernel space, advantages and disadvantages of single thread and multithreading

  3. What methods can be used to communicate between processes, what are race conditions and critical sections between processes

  4. Algorithms involved in the scheduling process, such as first come first serve, short job priority algorithm, shortest remaining time priority, and fairer time slice round-robin scheduling

  5. What are the common page replacement algorithms, such as optimal page replacement algorithm, recently unused page replacement algorithm, and least recently used page replacement algorithm, etc.

  6. An understanding of the file system, such as how files are structured, named, accessed, used, protected, implemented and managed

  7. Knowledge of IO devices, such as how to read and write the contents of IO devices, common memory-mapped IO, direct memory access

  8. Learn what a deadlock is, the conditions that cause it and the classic ways to solve it, how to prevent it, and more

If the book knowledge is difficult to read, a video operating system is also recommended here - Tsinghua University (https://www.bilibili.com/video/BV1wq4y1M7qf)

a22406951f4cb44f131b5a2de559add3.png

This is an operating system video class taught by a teacher from Tsinghua University. It is simple and easy to understand. The duration of each video is not long, about 10 minutes.

TCP/IP

When you have the basic knowledge of computer composition and operating system, you can look at network-related content. In computer networks, the interviewer likes to ask about TCP/IP-related knowledge. For this knowledge, I Recommend a book "Illustration" TCP/IP

862df5b43e451e639b605e231e34be54.pngThe whole text of this book is basically a combination of pictures and texts. It is very easy to read. I have to say that this Japanese author is very good. He can explain very complex network protocols so simply, and the key pictures and texts are easier to remember.

I also recommend a nuggets booklet "In-depth understanding of the TCP protocol: from principle to actual combat"

bf3a61a6442329549ecddbad84924c70.pngThis booklet, I remember it took 2-3 days to read it. The whole reading experience is very smooth and it is also a very easy to understand book. If you want to cope with the interview, this booklet is definitely a good choice. In short, through the above two books, you can gain the following knowledge:

  1. Hierarchical model of the network

  2. Why is the TCP protocol a reliable protocol?

  3. What is a connection-oriented, byte-stream-based, full-duplex protocol

  4. How the packet is split, what are the MTU and MSS, and which layer are they located at

  5. Why do TCP and IP handshakes take three times, wave hands four times, and wave hands three times?

  6. The three-way handshake is too slow, is there a faster way

  7. What is the status of TIME_WAIT? Which side is the TIME_WAIT state, and why does the TIME_WAIT side need to last for 2 MSLs?

  8. I don't know if you have encountered "Connection Reset" or "Connection refused", what do they mean

  9. What if the sender does not receive the ACK from the receiver, what is the mechanism for the sender to retransmit, and how long does it take to retransmit?

  10. What if the receiver does not have the ability to accept a large amount of data, this introduces the concept of sliding window, how the sliding window controls the size of the data window

  11. At the beginning, the sender does not know how much data the receiver can receive, so how to send data? It is too slow to send a little each time, and the other party can't receive it every time.

In short, if your job is not network, and you don't want to spend a lot of time reading TCP-related knowledge, then the above two books are enough.

Data Structures and Algorithms

In this regard, I read relatively few books, so I don’t plan to recommend books. Data structures and algorithms may be the algorithms that everyone pays more attention to. The interviews of big companies such as BAT are inseparable from algorithms. For general algorithm questions, the original questions will be selected from leetcode, and it will not be too difficult. Therefore, I still directly recommend that you practice writing and go directly to leetcode for this knowledge. 60 lanes

75dcd788195339bf979153d6358bb6dc.png

As shown in the figure, there are about so many specific algorithm categories. When everyone is writing questions, be careful not to put all your energy on one type, and try to be as broad as possible. Of course, there are many unpopular types, and I don’t think it is necessary to spend too much. Time, like popular algorithms such as arrays, strings, dynamic programming, graphs, linked lists, etc. can spend more time.

Here is another interesting website for learning data structures, visualgo (https://visualgo.net/zh)

54198d4a3e3567c8c588271612597104.pngThis website helps you understand how various data structures look through animations.

97ae078cab54e65a93c0a22a2ccda485.pngFor example, for this binary search tree, every time you go to which node, the corresponding code will be displayed to you, which is really vivid.

MySQL

MySQL should be a must-have skill for every back-end engineer. Of course, what we are talking about here is not simple CURD, but a little more advanced, such as index knowledge, schema mode, high availability, etc. Since MySQL basically uses InnoDB storage now Engine, so I recommend "MySQL Technology Insider InnoDB Storage Engine"

fb5f90de93b7ee102f6e838316c3094a.png

Through this book, you can learn the following knowledge:

  1. Introduction and Comparison of Several Storage Engines of MySQL

  2. Architectural Patterns of InnoDBc67b8c7f8e5325412657b4b4b920b74d.png

  3. Insert buffer, write twice, adaptive hash, asynchronous IO, refresh adjacent pages are to solve the problem

  4. Log type, such as error log, slow query log, binary log, etc.

  5. Index related knowledge, why use b+ tree index, difference between clustered index and auxiliary index, split and management of b+ tree index, when to use joint index, why covering index is good

  6. Lock-related knowledge, which locks are involved in InndoDB, what algorithms are there for row locks, and how to avoid deadlocks

  7. What are dirty reads and phantom reads and how to solve them

  8. Transaction-related knowledge is the most important thing. For example, what do redo log and undo log do, what are the isolation levels of transactions, and what are their differences? Where is the XA transaction reflected, and what are the problems with the long transaction?

Since ancient times, MySQL has been a must-tested skill in back-end classmates' interviews, and as the level of Internet proficiency becomes higher and higher, MySQL asks more postures, so it takes more time to learn this aspect.

Of course, if conditions permit, I also recommend reading "MySQL45 Lectures" by Mr. Lin Xiaobin, but this course is not suitable for novice novice and practitioners with a certain MySQL foundation. After reading it, you will definitely gain a lot.

Redis

When we talk about database, we have to talk about cache. When it comes to cache, it is Redis, the most popular NoSQL database. The importance of interviewing with Redis is no less than that of MySQL. I recommend "Design and Implementation of Redis" to everyone here.

fa5dfb706aca37acfb82b90be83ba817.pngThrough this book, you can acquire the following knowledge:

  1. Basic underlying data structures and their pros and cons, such as SDS, integer sets, skip lists, compressed lists

  2. How hash tables resolve collisions

  3. Persistence related, the difference between AOF and RDB, what are their advantages and disadvantages, will the process of AOF and RDB block the main process?

  4. How to delete the expired key of redis

  5. The event model of redis, what are file events and time events?

  6. What does the serverCron function do

  7. In the master-slave replication mode, what is the difference between the old version and the new version of the replication mode

  8. Sentinel, Sharding

  9. Lua script solves the problem of atomicity

This book focuses on principles and implementation, and it is easy to understand when reading, suitable for novice novice and engineers who need advanced.

finally

The books and videos recommended in this article have been read by the author himself. They are not blind recommendations or advertisements. If you have recommended books and videos, you can also tell me in the message area. I will continue to update the hard-core dry goods content. Welcome to follow me , let us progress and grow together.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324120224&siteId=291194637