[Hematemesis finishing] Those basic computer knowledge that made you take off: what and how to learn?

image.png


Most of the articles in my public account are related to basic computer knowledge . These basic knowledge are like our internal skills. If we want to go further in the future, these internal skills must be practiced. The framework is ever-changing, but these general underlying knowledge is almost unchanged. Understanding this knowledge can help us learn a piece of knowledge faster and better understand the operating mechanism of the computer. Of course, I will often be asked in interviews, especially for fresh graduates. For the Spring and Autumn Recruitment, you can also read the article I wrote a while ago. After two months, my autumn recruitment road is over! . What does the basic computer knowledge that readers often ask about ? Learning order? Recommend books?

There should be a lot of readers and students of my official account and non-disciplinary classes, so I will write this article today, the basic computer knowledge I have learned, the books I have read and the order in which I have learned

Of course, the following are some of my personal experience, and some of the knowledge I have learned, for reference only, and welcome everyone to add

1. Computer network

Among the programs we use, 99% are inseparable from the network. As a programmer, I think it is necessary to understand computer networks. This course is generally offered in university courses.

Before I took this course, I was particularly curious, how does one computer send messages to another computer? E.g:

1. The two computers are not connected by any line, how can they send messages to him?

2. With so many computers in the world, how can you find that unique computer? Some people say that we can uniquely identify it by MAC or IP, but I am a little confused. The world is so big and there are so many computers. With this identification, how can we find him? Traverse all computers?

3. Multiple programs send messages to a computer at the same time. How does the computer accurately send these messages to these different programs?

4. What should I do if the sent message is lost?

In short, a lot of questions became clear after seeing the computer network. I also wrote a good article: an article to understand how a computer sends data to another computer

So here, I strongly recommend that you learn it. In interviews, computer networks are also high-frequency test sites. Here I will summarize some of the required protocols and the high-frequency test sites for interviews:

1. HTTP protocol, including: encapsulation format, common response codes, differences between different versions, common request methods, what security risks exist, and what is a stateless protocol, etc.

2. https protocol: http is plaintext transmission, https is encrypted and secure, you need to know how https is encrypted, how the digital certificate is formed, what symmetric encryption, asymmetric encryption.

3. TCP protocol: three handshake, four wave of hands, how to ensure reliable transmission, flow control, congestion control.

4. UDP: This is a general understanding, it seems that the content is relatively small

5. DNS, ICMP, ARP, DHCP (I will not write them one by one)

I think the agreements written above are more important, especially in interviews. My official account article has also written several articles about these agreements. You can go to the computer basic module to find them.

Recommended video for novices: You can watch the video taught by Teacher Han, search for Teacher Han in Bilibili, and you can find  Teacher Han who talks about "Principles of Computer Networks" in colleges .

Recommended books: "Computer Network: Top Down", "Graphic http"

I watched the video first, and I was watching these two books (I will give an electronic version at the end of the article).

Two, operating system

Operating system is also a very important piece of knowledge, and it is also asked a lot in interviews (of course, depending on the company, some companies have Java technology stacks, and may ask less). For operating systems, there is a lot to learn, for example:

What is a process, what is a thread, and their essential difference? When we run a program, where is the data? Where is the code? Why do we have to separate heap and stack? What does the context mean when the thread is switched?

What the hell is a virtual address? Why do threads need so many states? What are optimistic locking and pessimistic locking? How is the deadlock caused? What are the strategies to solve deadlock? and many more

Some people say that learning the operating system is too fucking boring, it is really boring, but to be honest, I still learn quite interesting, I feel that I can learn many strategies, one is better than the other, every time I read it: I Go, I can't think of it. I think that for the early stage, we need to refer to other people’s strategies more. After reading more, we have a certain foundation and slowly form our own strategies. In short, reading these books requires not only mastering these knowledge points, but more importantly. Improvement of thinking logic

For the operating system, I have summarized the core of the following, the interview is relatively easy to be tested.

1. The communication method of the process (I wrote a very good article: Remember an interview: What communication methods are there between processes? ---- Say goodbye to rote memorization )

2. What exactly are processes and threads composed of? What data is there?

3. Memory management, including: virtual memory (emphasis), paging, segmentation, paging system address mapping, memory replacement algorithm (emphasis).

4. Deadlock processing strategy (deadlock prevention, deadlock detection and recovery, deadlock avoidance)

5. Process scheduling algorithm

6. Disk seek algorithm

I think the above is more important. If you haven't learned it, I believe you can learn a lot of things after you learn it. Knowledge is just one of them.

Recommended video: I haven't watched this video, so if I want to learn it, I recommend going to Mooc University in China to find courses in major colleges and universities, or to find corresponding courses abroad.

Recommended books: The book I have read is "Operating System-Essence and Design Principles (Eighth Edition)", but big guys recommend "In-depth Understanding of Computer Operating Systems (Original Book Third Edition)". I have read the catalog. I feel pretty good, I also recommend this one here. But for the zero-based, I suggest reading a book specifically for Xiaobai: "How does the program run".

Operating system learning is still quite boring, but only by gnawing through the most difficult can it become more powerful. Also welcome everyone to continue to pay attention to my official account: hard-pressed code farmers

3. Database (I use MySQL here)

In university courses, a database course is generally offered, but this database is not targeted at a certain database language (such as MySQL, Oracle). But I only talk about MySQL learning here. Don't ask why, I just missed 19 out of 20 lessons .

It’s very important to learn MySQL well. Don’t stop at the level of being able to use it. Instead, you should understand the principles. Especially for students who are going to interview , they will ask a lot of principles. Every time I am asked about MySQL, I I will be more confident, because although I am not good at writing SQL, I know a lot of principles. I remember that when I was interviewed by Tencent and Shopee, after I met MySQL, the interviewer seemed to look at me with admiration. Okay, let's stop talking, saying that these are also the importance of powerful MySQL. Here are some of the knowledge I have learned and recommended learning materials.

For MySQL, there is quite a lot to learn, for example,

1. How is an sql statement executed? What happens when you update?

2. How is the index implemented? What are the differences between the various engines? Clustered index, non-clustered index, secondary index, unique index, leftmost matching principle, etc. (very important)

3. Transaction-related: For example, how is transaction isolation achieved? How to ensure atomicity of transactions? Why is the data seen by different transactions different? Does every transaction have a copy of the view? The realization principle of MVCC (important) and so on.

4. Various locks, such as table locks, row locks, gap locks, shared locks, and exclusive locks. What are the main problems that these locks are used to solve? (important)

5. Log-related: redolog, binlog, undolog, the realization principle of these logs, how to solve the problem? Logs are also very important, and there are a lot of interviews.

6. Master-slave backup of the database, how to ensure that data is not lost, how to ensure high availability, and so on.

There are also some commonly used commands.

I think that as long as you understand the above principles, it will be of great help to database tuning. Except for the sixth point above, the other five points are extremely frequent in the interviews of fresh graduates.

Recommended books: I don’t even know how to write SQL. I recommend "SQL Must Know and Know", and then "MySQL Technical Insider: InnoDB Storage Engine".

Here I must recommend a column of Geek Time: "45 Lectures on MySQL Actual Combat", which is very good. After reading the interview, I think it is enough. I almost always add points to MySQL every time I interview, and I cannot do without this column. If you want to buy, you can reply to "database" on my official account, and I will send you the corresponding purchase link (note that this is not an advertisement, please see if you buy it or not)

Four, data structure and algorithm

I don’t want to talk about data structure and algorithm. Anyone who reads my article knows that 80% of the articles I write are related to data structure and algorithm. Needless to say the importance. The biggest advantage of my autumn recruits is the mastery of data structure and algorithms . The learning of the above three courses is basically inseparable from data structure. I think I can write an article on how to learn data structure and algorithms. So I will not write about data structure and algorithm learning here. You can pay attention to my article, I will write an algorithm- related one tomorrow .

On the interview, I think the  operating system + computer network + database + algorithm are  the three most asked, so I wrote in more detail. For learning computer basics, not for the interview, I think the following is also extremely important. I said that it is for those who are in a hurry to interview, they can focus on the above four.

Five, compilation

I think that if we have time, it is necessary to learn assembly. Learning assembly can better help us know how the computer processes program code, such as how registers and memory are used? How are loops, function calls, and arrays implemented? What is the address? and many more.

A lot of binary code can be decompiled into assembly, how can you assemble, then it can help us better understand some things. So it is recommended that you learn to compile and write some programs by hand.

For the compiled information, I may not have anything to recommend, and I don't read much by myself. I have read two books. For those who are getting started, I suggest reading Wang Shuang's book "Assembly Language (Third Edition)", but this one is only suitable for getting started. If you want to continue, you can read "Assembler Programming".

Six, compilation principle

To be honest, the principle of compilation is quite difficult. I find it difficult anyway, but I think I can learn it when I have time. After learning this, you can know how our compiler analyzes our code, such as lexical analysis, syntax analysis, and semantic analysis. and many more. Of course, you may write a compiler for specific analysis codes yourself in the future. At this time, you need to learn more.

For learning materials, I think I can watch videos + books. If you want to search for a video, you can search at Mooc University in China. When it comes to books, I don’t read much. I only read the textbooks designated by the school, so I can’t give you many suggestions here. I can search for it myself, and which one is the most popular one.

to sum up

Let me introduce you so much for now. To be honest, after learning this, you will not only learn more knowledge, but more importantly, it can improve your Luo Ji's thinking and bring you more ideas. In my public account, I will mainly write computer basics + algorithms. These are worth learning for every programmer, no matter what position you are in. And after you learn the knowledge, you go to learn other knowledge, I believe you can get started faster.

I have also searched the electronic version of the books mentioned above . Because these books involve copyright issues, the Baidu cloud link is easy to fail. If you want to get these books, you can add my WeChat account: iamshuaidi. Or scan the code, and note: computer basics . I will focus on sending you drops when I have time. (I was added before, don’t add this number, this is my other number)

image.png


You might like

After two months, my autumn move is over!

Remember an algorithm interview question with byte beating

Why can't you learn recursion? Say goodbye to recursion and talk about some of my experiences

A text to understand how a computer sends data to another computer

How to find the most frequent number from 20/40/80 billion integers with only 2GB of memory

String matching Boyer-Moore algorithm: How is the search function in the text editor implemented?


image.png


Guess you like

Origin blog.51cto.com/15015171/2554948