
Hello everyone, I am Village Chief Axiang.This is the 42nd original article from the Village Chief.According to our previous agreement, I will gradually bring youarticles combining software and hardware.The so-called software refers to more directional suggestions and planning; the so-called hardware refers to technical content.
This is also an article that digs a pit, meaning that many technical articles updated on our public account will revolve around this learning path.At the same time, this is actually something I wrote in one go, and there are many places that can be improved later, so I call it version 1.0, which may be iterated and updated later, haha.
Additionally, to stimulate everyone’s enthusiasm for learning and sense of participation, we welcome all village friends to contribute articles, which you can publish on your own blogs (such as Blog Park, CSDN). If the Village Chief thinks your articles are good, I can reprint and share them~~
If you haven’t followed yet, please do so, this way you become a member of the village and can see high-quality articles we bring at the first time~
Okay, let’s get to the point, how should we learn the direction of C++ development?
1. Why choose C++?
C++, as a language that many people encounter at the beginning, is very familiar to everyone. It is also the first object-oriented language that many college students learn. In fact, it can be considered the ancestor of object-oriented languages. This is because later languages like Java, Golang, Python, etc., are all reformed based on C++, and they are interoperable, solving some legacy issues of C++.
So, if we choose C++ as our tech stack during campus recruitment, how should we learn it?
There are indeed many versions online, and many people talk about this topic. However, I want to say some different things here.
2. What should be learned in the C++ tech stack?
Note that the Village Chief has always mentioned the tech stack, or the C++ development direction. This means that it not only includes C++. The tech stack mentioned here is not the endpoint of the entire tech stack, but rather the content that is required for campus recruitment and will be asked by interviewers. Here is a distinction explanation.
Specifically, what should we learn? This can be summarized as 1+1+3+n
What does this mean?
One object-oriented language (that is C++) + Data Structures and Algorithms + Three major aspects of computer fundamentals (namely Computer Networks, Operating Systems, and Databases) + Several projects/internship experiences (generally writing 1-2 on the resume is enough), summarized as 1+1+3+n
Next, let’s talk specifically about what content to learn and recommend resources:
Regarding resource selection, my advice is: it’s not about having many resources, but rather about having quality ones. Don’t always stockpile a bunch of resources that just sit there collecting dust.
(1) An Object-Oriented Language (That Is C++)
The object-oriented language — C++, I recommend Teacher Hou Jie’s C++ video course, which was previously available on Bilibili but was later taken down for some reason. Below is the link to Baidu Cloud (I found it online):
https://pan.baidu.com/s/1vbK1_zbyPySLR5nn5CLFvw Extraction Code: h5if
Includes: 1, Hou Jie – C++ Object-Oriented Advanced Development (two volumes); 2, Hou Jie – STL Standard Library and Generic Programming; 3, Hou Jie – C++ Design Patterns; 4, Hou Jie – C++ New Standards C++11&14 ;5, Hou Jie · C++ Memory Management Mechanism 60 Hou Jie; 6, Hou Jie – C++ Program’s Life and Death ”
Additionally, you can refer to my previous articles about C++. Since they were written casually, some chapters may have very messy and mixed knowledge points. Here’s the column link:
https://blog.csdn.net/xdnxl/category_11607266.html
In terms of the C++ language, you need to focus on mastering three aspects:
1. The concept of classes and objects (i.e., inheritance, encapsulation, and polymorphism);
2. STL;
3. Useful and famous content in subsequent updates of C++11, 17, 20, etc., such as smart pointers.
If there are other topics, there are also things like memory management, design patterns, etc.
Note that each of these topics should not be merely learned superficially; you need to delve into the underlying code and principles to understand them. Otherwise, you will be asked difficult questions in interviews, haha.
(2) Data Structures and Algorithms
Regarding data structures and algorithms, we have already fully updated this topic. However, it should be noted that this area cannot be limited to theory. It is more important to practice.
Specifically, this means going to LeetCode, Niuke.com to practice online OJ, to put it bluntly, just practice problems. Practice problems well.
When can you start practicing?Generally, after you finish learning data structures and algorithms and STL, you can start practicing using C++. If you want to use C, you can start after learning data structures..
We will also provide detailed explanations on how to practice and what problems to solve later, and share and summarize problem-solving ideas and thoughts.
If you do not want to read my previous articles to learn data structures, you can buy books (such as “Data Structures in a Nutshell”), or search for popular videos on Bilibili (personally, I feel that the lectures given by the teacher from Qingdao University are just average; perhaps everyone has different styles that suit them). Here’s a summary.
Recommended Resources:
1. “Self-Learning Programming Village” Data Structures and Algorithms updates;
2. The most viewed video on Bilibili: https://www.bilibili.com/video/BV1nJ411V7bd/?spm_id_from=333.337.search-card.all.click
3. Book “Data Structures in a Nutshell”
4. Recommended resources from the list of 1000 computer books (choose on your own)
5. Need to practice problems on platforms like LeetCode, Niuke.com, etc.
(3) Three Major Aspects of Computer Fundamentals (namely Computer Networks, Operating Systems, and Databases)
For Computer Networks and Operating Systems, Xiaolin Coding is quite good. Of course, training institutions like Shang Silicon Valley and Heima Programmer also have very good videos. The Village Chief has previously written tutorials on system programming and network programming, but they are not organized and are quite messy, haha.
Computer Networks:
Heima Programmer Computer Networks Video: https://www.bilibili.com/video/BV1iJ411S7UA/?spm_id_from=333.337.search-card.all.click&vd_source=e5f36998f534e2b12760e64d89afc302
Xiaolin Coding(shared by others online):
https://pan.baidu.com/s/1FfR8jpxdk6Bro23KddyU8A Password: 9c4f
Operating Systems:
Heima Programmer’s Operating Systems Video: https://www.bilibili.com/video/BV1KE411q7ee/?spm_id_from=333.337.search-card.all.click
Xiaolin Coding (shared by others online):
https://pan.baidu.com/s/1sTPWDnVxm1WF6PZKQvQ-Lw Password: d7va
The Village Chief previously wrote about network programming and system programming (covering computer networks and operating systems, quite messy, can be used as a check to see if you know the corresponding knowledge points and whether you have mastered them): https://blog.csdn.net/xdnxl/category_11616936.html
For the database part, mainly learn MySQL, focusing on understanding SQL writing, indexing, and transactions. I recommend the videos from Heima Programmer.:
https://www.bilibili.com/video/BV1Kr4y1i7ru/?spm_id_from=333.337.search-card.all.click
(4) Several Projects/Internship Experiences (generally writing 1-2 on the resume is enough)
We will not lead you through C++ projects. Later, the Village Chief will lead you through some Java projects. Although we will not lead you through C++ projects, I still have some recommended good projects for you to reference and follow along:
These projects, as of 2024, have actually become quite common (very familiar, haha), but having these project experiences is definitely better than not having any. Here are two recommendations:
1. Implementing a high-concurrency memory pool from scratch in C++:
Concise version: https://segmentfault.com/a/1190000042558168
This article on CSDN is very detailed, but it seems to require VIP:
https://blog.csdn.net/love_guanghui/article/details/124260450
2. This is a project for building a server framework https://www.bilibili.com/video/av53602631/?from=search&seid=9029288577396826503&vd_source=f240e7015f4b813596066fc5272cd0aa
If you can learn everything above and also practice algorithm problems well (that is OJ), then I believe that, technically, you will be sufficient for campus recruitment.
That’s the C++ learning path. For your reference.
In the future, the Village Chief will also bring you learning paths for Java, algorithms, and other directions, so stay tuned, haha. However, before that, I may first introduce OO languages (i.e., object-oriented languages), using C++ as an example to introduce object-oriented content. At the same time, I will summarize the problem-solving methods for LeetCode.
Alright, finally, asking for a follow is not too much, right? Haha, this article ends here.