In the 2021 undergraduate course, judging from the offers received by my classmates and I, those who go to first- and second-tier factories can generally get more than 30w, with a monthly salary of about 20k, and even higher. To be honest, now technical posts (mainly referring to the back-end (Java, C++, Go…). It is very easy to get a salary of 20K above and below the first- and second-tier manufacturers’ offer by doing the following: Algorithm Questions, technical interview written examinations are all tested this, so Leetcode has to write at least two or three hundred questions, “Sword Finger Offer” all the questions, of course it is better to have done ACM, if you don’t review the questions, then it’s just waiting for you. After all, it’s very difficult now, and the interviewer can only increase the selection through algorithmic questions. Here I also send you an algorithm note that helped me get an offer from a major manufacturer such as BAT. It was written by an Alibaba god, and the algorithm is weak. Or students who need to improve are very useful, the algorithm must be the top priority of computer learning: the leetcode brushing notes written by the BAT interviewer, after reading the problem that kills 80% of the seconds, the data structure of mp.weixin.qq.com is not required. You have to write red-black trees by hand, but the simple data structures of AVL hash table heap have to be implemented by yourself; linked lists and linear tables must be familiar enough to no longer be familiar, and the standard library implementation of the language can be understood? What Java hashmap, C++ vector you You have to know the implementation. Computer system knowledge, memory, stack, function call, number representation, etc., at least “CSAPP” has to go through it? (PS: This book is really suitable for programmers to complement the basics of computers. Operating system , You have to know these things: what constitutes the operating system, the state of the process, the switching, the method of scheduling inter-process communication (shared memory, pipe, message), the difference between the process and the thread, the implementation of the thread (one-to-one, multiple For first-class) mutual exclusion and synchronization (semaphores, monitors, locks), deadlock detection and avoidance of concurrency Classic problems: reader writers, philosophers dining problems why virtual memory is needed, how does MMU specifically address translation memory and why Segmentation, paging, and page replacement algorithms are how the file system is organized, how the virtual file system (VFS) is abstracted, and it’s best to combine it with the Linux implementation. I recommend “Linux Kernel Design and Implementation”. For example, there is no thread and The distinction between processes is a task_struct. In addition, I also highly recommend MIT6.828 to learn the operating system, to implement some thread management, file system, etc. Isn’t the computer class engaged in these. Computer network, this feels relatively simple, but The knowledge of computing network is complicated, and many students have reported that it is difficult to learn the network. After learning a lot of network protocols, they still don’t know how the network is constructed. This is because there is no use of the learning method, resulting in only seeing trees, not seeing Forest. When studying, it is recommended that you grasp the main line “How is a data packet sent?” Take this question to learn the application layer, transport layer, network layer, and link layer in turn, and think about how these layers are connected in series. To get up. This is the top-down approach, so I naturally recommend: “Computer Networks: Top-Down Method” from the book When we talk about application layer protocols such as HTTP, FTP, SMTP, which we are most frequently exposed to, we can clearly see the role of introducing each layer. When learning each layer of the protocol, it is best to capture the packets yourself and see what happens if wireshark captures packets with three fast retransmissions? In this way, the image will be more profound. Another point is to pay attention to collecting high-quality resources and filing them when studying. For example, the e-book library that I organize by myself is definitely not packaged and downloaded on the Internet, but I need to learn a certain direction of knowledge. At that time, you need to look at them, find them one by one on the Internet, and finally summarize them. I will continue to improve this part, as my own small e-book library, not many, but the most valuable. The books I have compiled can be obtained here. They are very helpful for students studying computer and review of school recruitment, and they are very systematic: Book list: Computer must-see classic book listDatabase: SQL must be able to write, this is recommended. Under “SQL Must Know and Know”, have several paradigms been formally used? How to conduct domain modeling and database design to minimize the cost of each query? In terms of database principles, you can look at “Database System Concepts”. This book is quite thick. It covers everything from SQL to database design to database principles and distributed databases. You can take a look at it, such as relational models and database design (three Large paradigm), data disk storage and organization, indexing, concurrency control, etc. Of course, the most important thing for the entire database is the index and concurrency control (lock, MVCC, etc.). This part is also frequently tested in interviews: Index storage structure: B-tree, B+tree index, Hash index use: primary key index, covering index, The leftmost prefix principle, index push-down and other locks: optimistic locks, pessimistic locks, table locks, row locks, intent locks, read locks, write locks, etc. MySQL InnoDB MVCC implementation mechanism Storage engines: InnoDB, MyISAM, etc., their respective advantages and disadvantages Transaction: ACID theory recommends two books in this part: “High-Performance MySQL” and “MySQL Technical Insider” network programming. Back-end development is basically inseparable from network programming. In fact, even the entire back-end development can be regarded as network programming. It’s just that other people’s frameworks help us do the underlying operations of protocol analysis, network data transmission, and decapsulation. For example, a nanny-level framework such as SpringBoot basically accomplishes everything that a framework can do, so that we only need to define the data format of the receiving and returning package, and then do the logical processing. Dirty business development necessary for network programming like serialization, unpacking, and IO processing will not be touched at all. But network programming skills are still very important, especially for Linux C++ development. The core of network programming under Linux includes two parts: system programming and network IO: inter-process communication: semaphores, pipes, shared memory, sockets and other multi-threaded programming: mutual exclusion locks, condition variables, read-write locks, thread pools, etc. IO model: synchronous, asynchronous, blocking, non-blocking, signal-driven high-performance IO two modes: Reactor and Proactor (but due to the lack of asynchronous IO support under Linux, there is basically no ProactorIO multiplexing mechanism: epoll, select, poll (crack the C10K problem) We recommend several books: “Linux High-Performance Server Programming”, “Unix Network Programming”, “Unix Environment Advanced Programming” Programming Language: Although the language is not important, you have to be good at one language? For C++, those books (Effective trilogy, “Effective C++”, “More Effective C++”, “Effective STL”, STL source code analysis, object model) have to go through? For Java, the principle of JVM has to be read, right? GC has to read it. JDK important collection library depends on the project: to be honest, how tall can the projects in school contact? If you only use a few frameworks, I suggest not to write on your resume, it is better to go to github to participate in open source Project, GSOC to know about it? Of course, if your laboratory is very good, and the project you have done with your instructor is very awesome. Another way is 5, 6, 7 above, any one spends the first half of the time to implement a simple Prototypes (such as implementing a simple kernel) are very good resumes plus points. In fact, the final projects of these courses in famous foreign schools are for you to implement a prototype. English: This interview will generally not involve (unless It’s an interview in English), but I still think English is a very important ability. Specifically, “If you encounter a Sabie question, don’t bother your colleague. Google or bing find the answer from stackoverflow and solve it independently” or “The boss asks me To get in touch with something that I have never done before, I bite the bullet and clicked on the document and looked at it for two days and two pages. The ability to finally solve the problem. Information collection ability: For students who are not very good at school (non-C9), this ability is actually the best The key is. What are the best peers learning? What kind of talent do I want to hire at the company I want to go to? What will be asked in the interview? What is the recruitment of spring and autumn, how to deliver? Is internship really important? These questions , You go to Baidu, to search for Zhihu, and to search for Niuke. In fact, there are answers. Why is this ability important? For example, there are very few pits left for autumn recruits for popular BAT positions, because the pits are all converted by internships. The classmates accounted for it. If you didn’t know the spring recruitment before and did not go for an internship, the chances of going to a popular position in BAT would naturally be very slim. For example, the difficulty of the written examination of the autumn recruitment companies is significantly higher than the interview difficulty , On the one hand, the reason is screening people, on the other hand, the phenomenon of cheating in written examinations is very serious. If you know that there is no written test for early approval of Spring Recruitment and Autumn Recruitment, do you have more chances? Social skills: a few keywords: headline platinum code, direct push in the group, go to Niuke search by yourself. The above are the requirements for undergraduate research and development positions. The requirements of algorithm posts and graduate students are not very clear to me, presumably they will only be higher. Of course, the requirements I mentioned above are very out of reach for most students. However, if you are in a very ordinary college and do not demand the highest standards, then you will end up with an ordinary company and live an ordinary life just like your seniors. In addition, if you are still a freshman or sophomore, I would like to give some suggestions: In fact, this is the typical learning route for CS students that I have always admired. Basically, the basic courses follow the courses of foreign CS schools. . If we can achieve 50%, it should be easier to get an offer from a company like domestic BAT, but the problem is that when we first entered university, it was actually difficult to have such a clear and clear plan from the beginning. Many classmates are often in their junior year and find that some of them have got Toutiao and Tencent internship offers, and suddenly realize that they seem to be looking for a job. Then I hurriedly started to pick up and study seriously, and I usually finish the homework assigned by the teacher. So for the CS students who are still in school, I have a few suggestions: to improve the information search and collection ability and do the official account. During this period, many students asked me for the information of xx Lab and the lab of csapp. In fact, I want to say These things are the same when I go to find them and you go to find them. Open Google and enter the keywords sent to me, and you can find them. And what you find will be the first-hand information, and the ones I sent to you and downloaded from the Internet disk are actually all N-hands. Look at materials with high information density and high quality, such as classic books and courses. Don’t shop on blog platforms like CSDN and Nuggets all day long. Of course, I’m not saying that these blogs are not good. Rather, the materials you study probably determine the upper limit of what you can learn. Most of these blogs are also summaries written by the authors themselves after reading other books and columns. You can read the blog for a quick understanding, but if you want to learn more deeply, you can’t save the time that shouldn’t be saved. Reading by yourself is more time-consuming, but the knowledge will be more systematic and comprehensive. There is a sense of crisis. Computers are very popular nowadays. There are many students who transcode and cross-test computers. The competition is also great. Every year I read the experience posts on Niu Ke, I will find that although the cpp primer is very thick, some people will pass it Two or three times, and you may not finish it once, there are always seven or eight hundred leetcodes, and you may not finish reading the offer until the interview. If you want to get a satisfactory offer, you should start studying hard, prepare well, and study questions early. It is good to study for employment. Everyone can learn computer well. What you need is continuous hard work. We will see some seniors on various forums talking about their experience. Maybe they have many skills and talents. But the most essential thing must be their continuous contribution. I have always believed in the 10,000-hour rule. Switching to the CS major, you can analogize the “10 W lines of code” law, four years in undergraduate, or three years in graduate school, not to mention 10 W lines, there are tens of thousands of lines of code in total. In many cases of writing code, there is nothing but familiarity. According to my rough statistics, plus the various labs written, the code written by the university should be close to 10w lines.