How to get a big factory offer-C++ background learning route

A little simple learning and autumn recruitment experience, I hope it can be helpful to later students, especially for those who can't find the direction of study.

The author is 211 books, 985 masters, non-subjects, no internships, and no papers. My main language is C++, and I post for back-end development positions. The offers I got are: ByteDance, Kuaishou, Tencent Cloud, Baidu, Yuanjiao, Huawei, Netease Thunder and Alibaba Cloud.

Let me share my experience in three aspects: learning methods, internships and interview skills.

1. Learning method

1.1 ReadingInsert picture description here

I am not a computer major. I started learning C++ probably from the beginning of last year. The main way I learn is to read books and write code. Let me talk about the learning process first. The book list is given at the end:

  • At the beginning of learning, the focus of reading is to understand the basics of language and data structure. Because of these two skills, I can do some algorithmic questions, and I can do some interesting algorithmic questions when I am tired from reading books, and I can also improve my proficiency in writing code.

  • After understanding the data structure, the third book I read is APUE. This book may seem painful, but according to my experience, the contents of this book do not need to be written down except for some important things. After reading it, it is OK to understand the function of the system calls in the book. For some important interfaces (fork, select, pthread, etc.), it is OK to understand how the kernel is implemented. You can use this book as a manual. To use.

  • After reading APUE, plus the previous knowledge, I actually have the ability to develop C++ on the Linux side. It is very difficult to write a good project by yourself, so I recommend copying. Chen Shuo's muduo is a good example of learning. It is better to eat with his book. If you thoroughly understand the muduo library, you can have a clearer understanding of the back-end reactor model, and the help will be very great. After reading it, you can implement muduo by yourself, and then you can consider doing some secondary development on muduo.

  • In the process of writing muduo, because I also encountered network-related problems, I also read books about Jiwang.

  • Because there is no suitable IDE for programming on the Linux side, you need to use the G++ tool with the makefile to compile and link the project after writing. In order to understand the process of this link, I specifically read the related book, "Programmer's Self-cultivation".

  • So far, learning has reached a stage. Later, I have made some supplements to my own foundation. When doing software-related things, I can’t completely understand the operating system. So I also read books about csapp and operating systems. In fact, there are some knowledge of operating systems in apue, which can be combined with each other.

  • So far, you should have a good understanding of computer basic knowledge, have a good language foundation, be familiar with data structures, computing networks and operating systems, understand the process of compiling and linking, be able to use the linux system normally, and be familiar with the back-end server model . After this, I feel that I have different opinions, and I will learn what I am interested in. For example, if you are interested in redis, you can read related books. You will find that redis is actually a reactor model. With the foundation of the previous muduo, you will better understand how redis is single-threaded and highly concurrency. If you are interested in the database, you can go to the relevant information, the source code of leveldb, and so on. If you are interested in distributed, you can go to the papers of various distributed algorithms. If you are interested, you can implement it yourself.

Here is a list of basic books:

C/C++: 《C++ primer》

Data structure : "Data structure, algorithm and application" "STL source code analysis"

Computer Network : "Computer Network Top-Down Method"

Operating System : "In-Depth Understanding of Computer Systems" (Strongly Pushed!!! God Book), "Operating System: Essence and Design Principles" "apue"

Link : "Programmer's Self-cultivation"

Application : "Linux multi-threaded server programming" "Linux high-performance server programming"

Others (Broaden your horizons, but not in depth) : "Illustrated HTTP", "Technical Architecture of Large-scale Websites", "Design and Practice of Large-scale Distributed Website Architecture", and "Learn Architecture from Scratch"

In addition to these, I have also read "effective C++", but I don't have much receipts. I also read "Deep Exploration of the C++ Object Model". This book is very obscure. About the C++ memory model, virtual functions, virtual tables, and virtual inheritance, you can actually check the blog, which is basically enough. In addition, I have read "UNP" and I don't feel that I have gained much. However, it is recommended to take a look at the previous chapter on TCP and UDP programming.

In addition to these, I have also read redis, distributed and microservice-related books. The choice of these learning directions can be very much based on personal hobbies, and I will not recommend it much.

1.2 Rewriting questions

Insert picture description here

As the industry is getting more and more volume, it becomes more and more important to brush questions. Basically, every company's interview must have hand-tipped code. Regarding the experience of brushing questions, I don't have any special experience about this. Some say brushing by question number, some say brushing by category, depending on your own habits.

You can clearly feel your progress if you insist on participating.

1.3 Project

Regarding the project, according to my experience, when looking for an internship, the project is not that important. More interviewers will pay more attention to the basics. However, it is also good to have a project that interests the interviewer, because it is yours to talk about the project. Home court advantage, most likely to be able to perform well (provided that you are familiar with your own project).

In the autumn recruitment, for students who do not have an internship, the project is more important, because the interviewer usually starts the chat based on the project after talking about the basics, or directly based on the project. It’s important to make your project attractive to interviewers.

Regarding what project, you can actually have some ideas of your own, and use the knowledge and framework you have learned to realize what you want to do, instead of copying a cookie-cutter project on the Internet.

For example, muduo itself is indeed a particularly good project, but when everyone uses this project, you, like everyone else, cannot show your own characteristics. If you use muduo as a project, you can actually implement some business logic in its upper layer to implement a server with specific functions, such as an rtsp server, or implement it as a microservice middleware, implement a service name management system, etc. .

Because I personally prefer distributed, after reading the raft algorithm, I implemented it once. The underlying information communication is implemented using muduo (with some modifications, the server needs to initiate a connection actively). If you still have more power, you can think of ways to optimize your raft, such as using the readIndex algorithm for read optimization.

1.4 Other

  • In addition to reading books, you can read more blogs, pay attention to some good technical public accounts, etc., which can mutually confirm the knowledge learned from books
  • When you study, you need to think more, try to be able to integrate the knowledge
  • After completing the preliminary basic learning, you should find your own learning direction, practice after reading a book, and use a deeper experience after practice, in order to solve the problems in practice to learn new knowledge, forming such a virtuous circle.
  • If you go out for the knowledge related to the underlying technology, you can take a look at some high-tech books to expand your horizons, such as "Technical Architecture of Large Websites" and "Design and Practice of Large-scale Distributed Website Architecture". Reading these books may not immediately get a technical knowledge. Improve, but you can broaden your horizons and understand some common web-related knowledge such as load balancing, token, cookie, sql injection, csrf, etc.

In general: read more, write more think, see what you think is what you think. Think more about how you can learn your own characteristics and make yourself different from others.

2. Internship

In this ever-increasing environment, it would be great to have an internship, especially an internship in a large factory. However, for some reason, I have never intern. But what I want to say is that even students who can’t do internships can participate in the internship interview of spring recruitment, which has the following advantages:

  • Some companies have passed the internship interview, but you can get preferential treatment in the autumn recruitment if you don’t go for the internship (Ali and some departments of Byte are directly connected to the final face)

  • Even if there is no preferential treatment, it is good to behave well and be familiar with it. It may be easier to be picked up in advance approval (in general, there is no written test for advance approval, see the resume to get someone to interview)

  • You can rely on the interview to check for your own vacancies and find your own shortcomings, and you can also ask the interviewer’s suggestions for yourself (no matter whether you pass it or not, you can earn money without losing it)

  • Even if it is hung up, the delivery of the general spring move will not affect the official autumn move.

  • Be able to get a rough idea of ​​one's own strength and have a clear understanding of one's own level. In this way, a better choice can be made in the autumn move.

Therefore, it is highly recommended that even students who cannot do internship can participate in the intern interview of spring recruitment. Of course, it would be better to participate in the internship.

3. Interview

For autumn recruitment, strength is a very important department, but interview skills are also very important. In fact, the interview is just chatting with the interviewer. If you two have a good time, it is easy to have a conversation. The knowledge you learn is not comprehensive. How to guide the interviewer to ask questions in your field of expertise requires skills.

3.1 Answer the question from multiple perspectives

For the interviewer's questions, you can answer as deeply as possible, not just a few deflated sentences, combine all the knowledge you have learned, and try to answer from a broader and deeper perspective.

For example : such as classic old problems, the difference between processes and threads. In one sentence, the process is the basic unit of resource allocation, and the thread is the execution flow. Only this sentence is definitely not possible. We can answer from many aspects based on the knowledge we have learned, such as what resources are allocated to the process by the system, how threads share process resources, and which threads have their own private resources. The difference between multi-process and multi-thread in programming, how are processes and threads implemented in linux system, how are processes and threads created, and what are the differences and connections between them.

Answer the interviewer’s questions from as many aspects as possible. As long as the interviewer doesn’t say stop, you can keep talking. Of course, it must be relevant to the topic, not too far from the topic.

3.2 Guide the interviewer

When we answer a question, follow the above method and say as much as possible, but in the process of speaking, you can throw the interviewer the next point that you can ask. This point that you actively throw must be familiar to you. , This can guide the interviewer to always ask questions in a field you are familiar with.

For example : when answering the difference between process threads, it may be discussed that the process allocates resources and there is process space. In fact, it can be mentioned by the way that this process space is actually a virtual memory space, and the address where the resources are stored is a virtual address, not The actual physical page address used. The interviewer is likely to continue to ask at this point.

3.3 Positive attitude during the interview, neither overbearing nor overbearing

Answer the questions that you can answer carefully, and don’t be nervous about the questions that you don’t. After all, we can’t cover everything, just tell the interviewer that we don’t understand it. You can actively communicate when solving the scene questions from the interviewer. Don't try to make the scene awkward by yourself, let the interviewer guide yourself.

Arrangement of interview questions :
Insert picture description here

There are C++ and computer-related questions, welcome to
join the group to exchange Linux, C/C++ technology exchange group: [960994558] I have sorted out some good learning books, interview questions from big companies, and popular technology teaching video materials to share in it ( Including C/C++, Linux, Nginx, ZeroMQ, MySQL, Redis, fastdfs, MongoDB, ZK, streaming media, CDN, P2P, K8S, Docker, TCP/IP, coroutine, DPDK, etc.), you can do it yourself if you need it Add! ~

I hope I can help future students, I wish you all a happy new year, and you can find a satisfactory job in the new year!

Guess you like

Origin blog.csdn.net/weixin_52622200/article/details/113939663