A monthly salary of 50K is recommended by programmers, Linux C/C++ is enough to learn

Preface

Linux C/C++ is a learning route from zero basics to great gods, my own real learning route, there are a lot of dry goods, it is recommended to collect and read carefully.

During the school period, I have been taking the Linux C/C++ learning route. After summer internship, autumn recruitment battle, and school recruitment, most of the positions I voted were in the background direction of Linux C/C++. I have my own understanding of this direction. .

It has been about 2 years since I came into contact with C++ and I am now officially working. I have explored some learning routes in this direction and methods of learning programming. After reading this article, I hope that the students who are on the road of Linux C/C++ can It helps.

[Article benefits] I recommend my own linuxC/C++ language exchange group: 832218493 ! I have sorted out some learning books and video materials that I think are better to share in the group files, and you can add them if you need them! ~
Insert picture description here

[External link image transfer failed. The source site may have an anti-leech link mechanism. It is recommended to save the image and upload it directly (img-Xf4y3V2e-1605077896256)(/img/bVcILsJ)]

1. The situation of the school recruiting Linux C/C++ offer

I am an undergraduate student in a dual-non-university college and a non-disciplinary class. My major is more hardware-oriented (the school has only one C language related to programming, and the rest of the courses have nothing to do with programming), and I have never taken it during school. What a big award.

The computer foundation is zero. In the first semester of the sophomore year, I was exposed to the C language. I learned the C language and data structure in the sophomore year. The junior began to learn the basics of computer and the direction of C++ in the school laboratory. I taught myself programming all the way, always believing in myself. I got an offer from Dachang.

School recruitment offer situation:

  • Tencent background development engineer (internship transferred to regular)
  • Baidu Shoubai feeds stream, software development engineer
  • Meituan Backstage Development (Interview for C++)
  • Homework help background development engineer
  • Good future background development engineer
  • Thunder background development engineer
  • Shanda Games C++ development engineer
    . . .

Internship in Tencent in the summer of 2018 and Baidu in early 2019. The school recruited more than a dozen offers in the direction of Linux C/C++. The final choice was also very metaphysical. I went to the company I want to go to and work in a position I like. Now I am programming The road goes further and further.

2. Some thoughts on the direction of Linux C/C++

For the choice of direction, many people choose the Java or Python direction. There are indeed many people who study Java or Python, and there are many job requirements. Getting started is easier than the Linux C/C++ direction, but learning more deeply, each has its own Difficulty, first determine the direction, and then in-depth study.

The Linux C/C++ direction is actually very few in China. The number of people studying in this direction is relatively small. Generally speaking, C language or Python is preferred for entry. C and C++ are also enduring in the programming rankings. Forward, if you like and are interested, you can go in this direction.

Linux C/C++ direction. Many large domestic companies have recruiting positions in this direction. BAT has them, especially Tencent. The underlying architecture is written in C++. Many modules of Baidu core search are also written in C++. Alibaba Cloud is also recruiting C++. Engineers who study well in this direction do not have to worry about finding a job at all. Those who study in general are actually more difficult to find.

The efficiency of Linux C/C++ is faster than that of Java and Python. It is more inclined to the bottom layer. It can directly manipulate the memory, which is helpful for the improvement of programming thinking and logical ability. In fact, learning this direction is a bit boring. For example, Python crawlers, Java, and front-end can make some interesting things, and small programs develop some products, which can be quickly used in actual combat, get the fun of programming, and further stimulate your own learning.

There are not so many interesting things to do in the C++ direction. For a long period of time, you have to keep learning on your own interest.

It’s really painful to walk all the way. I thought about giving up this direction during school. I once wanted to learn Java. It might be better (there are still many people learning Java). Whenever I give up, I think about it. I have been studying for so long, and then insist on persisting, and I have come all the way; I feel that I am really lucky. Sometimes, I really don’t have to be in C++. It depends on the entire market. For, choose a good direction, deepen!

Regarding the choice of Java or C++, no direction is necessarily easy to find a job, and no direction is guaranteed to have high salaries. The Internet industry, especially those who rely on technology, all depend on your own technical capabilities.

Those who choose to go in the C++ direction must go Linux C/C++. For network programming, learning Linux is very important!

Dachang likes to study the basic knowledge of computer. The basic knowledge will determine whether you can enter Dachang to a large extent. You must pay attention to the learning of basic knowledge; autumn recruit preparation: basic + algorithm + project, plus yourself The direction (C++, Java, Python, front-end, etc.), each link of which must be prepared in order to get the largest offer from a big factory. Awareness is very important. Once you have awareness, you need to look at the specific learning route.

3. Sorting out basic computer knowledge

**Computer foundation: **Data structure + algorithm, operating system + computer network, database + Linux, C language

**Working tools: **Linux + Git + Sql

No matter what direction you are studying, these foundations cannot be ignored. If you have time, you must be solid. With a solid foundation, you can go further and faster in this industry!

In terms of algorithm requirements, the C++ direction has significantly higher requirements for algorithms, and algorithm skills must be solid!

Fourth, the in-depth learning route for C++

**C++ Basics: **C++ is an object-oriented language. You must understand the object-oriented thinking clearly. First, you must lay a solid foundation for the basic knowledge of C++. Just transition from process-oriented, you must adapt to object-oriented writing.

When learning object-oriented, you should also consider how to use process-oriented to achieve object-oriented (in fact, a member of the structure is a function pointer). For the basic knowledge of C++, I briefly list as follows:

  • Usage of const
  • Reference usage
  • define usage
  • Constructor
  • Destructor
  • Copy construction
  • The difference between new and delete and malloc and free
  • Access qualifier public, private, protected
  • Deep copy and shallow copy
  • Friend function
  • static
  • Inline function
  • Inheritance, virtual inheritance
  • Diamond inheritance problem
  • Same name coverage problem
  • Virtual function table
  • Virtual pointer
  • Virtual function, pure virtual function
  • interface
  • Polymorphism
  • Rewrite
  • Overload
  • Function overloading
  • Operator overloading
  • Stream libraries and files

**C++ advanced: **function templates, class templates, exception handling in C++, understanding of inheritance and polymorphism, and understanding of virtual.

For the mastery and understanding of the eight smart pointers in the boost library in C++, the core is to understand and analyze the corresponding source code. <scoped_ptr/shared_ptr/weak_ptr> These three are the core smart pointers. To understand clearly that the essence of smart pointers is memory The application and release of all are handed over to the object management to avoid human negligence and cause memory leaks.

**STL source code: **For the analysis of containers in STL, common containers include list, vector, stack, queue, map, etc., to examine the principle of automatic expansion, the underlying implementation of map (RBtree), the source code must be analyzed manually at least once .

For the understanding of iterators and space configurators, for example, what are the application scenarios of the first-level space configurator and the second-level space configurator? What is the nature of the primary and secondary space configurator, and how to use the memory pool to manage it? What are the problems, how is the source code implemented, etc., these problems need to be considered.

Linux network programming:

1. Linux process environment: zombie process, orphan process, daemon process, process group, session, foreground process group, background process group
2. Linux process seven communication methods: signal, file, pipe, shm, sem, msg, socket
3 , Linux thread: mutex, lock mechanism, condition variable, semaphore, read-write lock
4. Concurrency model under Linux: multi-process, multi-thread, thread pool
5. I/O multiplexing under Linux: select, poll, epoll High concurrency
6, Linux network programming
7, static libraries and dynamic libraries!

Five, summary

Finally, if you find it difficult to find learning materials, you can add our **C language/C++ communication group: 832218493 ! **The learning materials have been shared in the group, looking forward to your joining~
Insert picture description here

Accumulate over time, finally achieve something! ! !

Guess you like

Origin blog.csdn.net/lingshengxueyuan/article/details/109622180