On finding a job--a comment on "in-depth understanding of computer system"
Introduction:
When I just entered the Chinese Academy of Sciences in the study of the research, the same dorm brother to me recommended a "in-depth understanding of computer systems", this book from a programmer's perspective detailed analysis of the entire computer system, covering the composition principle, assembly language, architecture, operating system, network and other computer-based knowledge.
Due to the time limit, I did not read it immediately, but included it in the review book before looking for a job. In August 2010, I spent one months reading the original book "Computer SYSTEM:A Programmer's Perspective". It turned out that reading the book was a great help to my job search.
Body:
In the course of reading, I have made some annotations to the various chapters of the book for reference when I re-read them in the future. These annotations are mainly from two angles, one is for me to find a job test (including a written test and interview) there is no use, the second is my own technical improvement has no use, so divided into test and cultivation of two indicators, referring to popular scoring standards will be divided from ★ to ★★★★★ five levels.
After the successful completion of the job search, I reviewed the previous annotations, combined with my own written test, interview experience, and revised it again. Among them, the score of test-takers is mainly based on my job search target (Internet industry biased algorithm software engineer) as a reference, and other job requirements will be some discrepancy.
Chapter One computer system roaming A Tour of computer system
This chapter gives a general introduction to computer systems and summarizes some of the concepts that follow chapters will focus on in a simple and clear language.
Test-taking ★: In the written examination may encounter some of the overall concept problem.
Cultivation ★: Belongs to the most basic concept of computer.
Chapter II Representation and processing of information representing and manipulating information
This chapter describes the representation of information in a computer, focusing on the representation of integers and floating-point numbers.
Exam-oriented ★: Seldom in the examination exam.
Practice: There are many people may have written for many years of code do not know how the floating point is stored in the 4 (8) bytes, do not know the fact that the expression (x-y<0) is not an alternative (x
Chapter III Machine-level representation of programs machine-level representation of program
This chapter is actually the assembly language curriculum review.
Examination: The importance depends on the job target, if it is the same as I biased algorithm engineer, assembly language will not be tested.
Cultivation ★★★★★: Understanding assembly Language and register structure is the basis of many later content.
Fourth Chapter processor Architecture Processor Architecture
This chapter is actually the content of computer architecture course. The main contents are processor structure, various logic gate, function unit, instruction set, instruction execution, instruction execution line, etc.
Exam-oriented ★: For the software-related jobs, very little to the bottom of the examination of things.
Practice ★: For the software level of technical personnel, not in-depth, but also should understand, know what is going on.
Fifth. Optimizing Program performance Optimizing programs performance
This chapter describes how to optimize the execution efficiency of your program, including code optimization, compiler optimizations, and CPU-level optimizations.
Section 5.1-5.6 mainly introduces several methods which can improve the performance of code effectively.
Test ★★★★: There are often some problems that will make you look for procedural flaws, and if you can see the details of the code can be optimized, it will certainly be able to add a lot of points.
Training ★★★★★: You certainly need to know at what level the compiler can automatically help you optimize your code, and how you will optimize it on small details when the compiler is unable to optimize it.
In the 5.7 section, we mainly introduce the CPU-level optimization, the concept of micro-instruction, the parallelism of micro-instruction on functional unit, the Prediction of program branch, etc.
TEST ★: For software-related positions, basically will not test these things.
Practice ★: Don't go deep, but you should know and be able to understand.
Sixth. Memory hierarchies the memory Hierarchy
This chapter describes in detail the storage structure in a computer system.
6.1 describes the different types of storage devices and the corresponding ways to access data.
Examination and cultivation ★: Seldom in the examination, understand can.
6.2-6.7 introduced the storage device organization form, emphatically introduced the cache and its working mode, how the program deals with the cache, the different loop nesting sequence, the traverse direction and so on the cache hit influence.
Test ★★★★: In the interview, often to the cache-related topics; modifying the loop nesting order to improve the cache hit rate is also a high-level game for some programs to change the wrong question.
Cultivation ★★★★: The storage structure and the cache are very basic and important concepts in the computer.
Seventh Chapter link Linking
As the name implies, this chapter explains in detail the process of the program link, mainly divided into static links and dynamic links, as well as the use of links in the process of technology such as symbolic resolution, relocation and so on.
Test-taking ★: Know some basic concepts can be.
Cultivation ★★★★★: A software engineer should know how to write a program to become an executable file, sometimes you will probably be a link error for several days.
Eighth. Exception control flow exceptional controls flow
As the name implies, this chapter mainly explains exception control, but here the "anomaly" is not Java or C + + in the narrow sense of the anomaly, but a generalized "Exceptions" concept, including interrupts (Interrupt), Traps, errors (Falut), Abort (abort) and so on. This chapter introduces the concept of process, describes the process-level Exception: signal (signal) and the means by which the operating system handles this exception-context switch.
Test-taking ★: Master the concept of the process can be.
Practice: Know what the exception control flow is, the user program and system interaction (such as system calls) the principle and way, do not go too deep.
Nineth Chapter Virtual Memory
A very important chapter, the virtual storage mechanism is an important technology to realize the multi-task of computer. It is through time slice technology that the computer makes every process seem to monopolize the CPU at execution time, and then the virtual storage mechanism makes each process seem to monopolize memory at execution time.
10.1 The virtual address and physical address are described, and the CPU is addressing the virtual address, which is converted to the actual physical memory address through the Storage Management Unit (memory management unit).
10.3~10.5 describes the advantages of the virtual storage mechanism: Memory can be used as the cache of the hard disk, more convenient to manage memory, better to provide memory protection mechanism.
10.6 Describes how virtual addresses are converted to physical addresses.
10.7 A wonderful section that tells the entire storage management mechanism through examples of Intel Pentium and Linux. Remember before the operating system class, a variety of theories, mechanisms to learn a lot, but is not aware of the actual operating system in the end with which set of methods, and this section of the content is through the example to let you have a theoretical mechanism of the just learn to have an intuitive understanding.
10.8~10.10 describes the storage mapping (memory Mapping), dynamic RAM allocation, and garbage collection mechanism.
10.11 A very useful section that lists some of the memory reference errors that are easy to commit in C programming.
Exam ★★★★★: The content of this chapter is the key content of the operating system course, if the examination system, almost certainly to the exam, 10.11 of the knowledge can help you deal with some of the problems of the wrong program.
Cultivation ★★★★★: Important basic content of the operating system, even if you only use high-level programming language such as Java, you should at least understand the garbage collection mechanism.
Tenth. System level I/O system-level I/O
This paper introduces I/O reading and writing under Unix-like system, mainly introduces the I/O interface at system level. Since the I/O interface used in our daily programming is a packaged standard interface provided by a variety of high-level languages, this knowledge is not necessary if the underlying development is not done, and I skip reading.
11th Web Programming Network progranmming
This chapter introduces the network model, TCP/IP protocol, socket interface of UNIX-like system and so on.
Test-taking and cultivation ★: Because of space limitations, this chapter only to do a simple explanation, to master the Knowledge of network programming also need to refer to specialized network technology books.
12th Chapter concurrent Programming Concurrent programming
This chapter briefly introduces the contents of concurrent programming, mainly including:
1. Process-level concurrency, each child process has a different virtual address space, requires the IPC (interprocess communication) mechanism to share data, switching overhead.
2.I/O multiplexing, event-driven, single-process operation, shared virtual address space, and the concurrency effect is not ideal.
3. Thread, between the two above, each child thread share the virtual address space of the process, the switching overhead is small.
In addition, the semaphore mechanism of accessing shared variables in concurrent programming is introduced, and 4 kinds of functions which are prone to thread insecurity are given.
Exam-oriented ★: In addition to apply for relevant positions, concurrent programming test less, but need to clear lock mechanism and semaphore mechanism.
Practice: Multi-thread in the development of the current is still very common, but the introduction of this chapter is relatively simple, need to refer to another special books.
In general, I think this book is very suitable to read before looking for a job, because from the online spread of various written and interview questions, we can see that the major IT companies in the recruitment of engineers is very important to the basic knowledge, and for like me three years of graduate students, a lot of knowledge because long time useless forgotten, So we need to review it again.
But we may not have time to follow the course of a door to review, even if a door to see, it may not be able to associate knowledge, and this book just provides such a perspective, from the programmer's point of view the computer professional the most important basic knowledge are strung together, forming a complete computer system concept.
On finding a job--a comment on "in-depth understanding of computer system"