preface

Linux C/C++ from zero to the great god learning route, their own real learning route, a lot of dry goods, recommended collection, read carefully.

During school, I have been following the Linux C/C++ learning route. After summer internship, autumn recruitment battle and most of the positions I took during school recruitment were Linux C/C++ background direction, so I have my own understanding of this direction.

It has been more than two years since I came into contact with C++ and now I am working formally. I have figured out some learning routes in this direction and methods of learning programming. After reading this article, I hope it will be helpful for students who are walking on the road of Linux C/C++.

** xiaobian recommend a C language /C++ communication group: 967051845! Sorted out some personal feel better learning books, video material sharing in the group file inside, there is a need to add oh! ~

Linux C/C++

I majored in hardware (only one C language was related to programming, and the other courses had nothing to do with programming). I didn’t win any major awards in school.

In the first semester of my sophomore year, I learned C language and data structure. In my junior year, I began to learn basic computer science and C++ in the school’s laboratory. I taught myself programming all the way and always believed in myself, and also got the offer from Dachang.

Offer information:

  • Tencent Background Development Engineer (intern to full-time)
  • Baidu mobile feeds stream, software development engineer
  • Background development of meituan (C++ orientation interview)
  • Operations to help background development engineers
  • Good future background development engineer
  • Xunlei background development engineer
  • Shanda games C++ development engineer…

I worked as an intern in Tencent in the summer of 2018 and Baidu in the beginning of 2019. I got more than a dozen offers from Linux C/C++ in the school recruitment. My final choice was very metaphysical, and I went to the company I wanted to work in and engaged in my favorite position.

Second, Linux C/C++ direction some thoughts

For the choice of direction, many people choose Java or Python direction, Java or Python direction does learn many people, a lot of job requirements, the entry can be easier than Linux C/C++ direction, but in depth, each has its own difficulty, first determine the direction, and then in-depth study.

Linux C/C++ direction, the real grasp of the people, in fact, is very few, the number of people learning this direction is relatively few, the general choice of C language or Python, C, C++ in the programming list is also enduring, ranking, if you like, interested, go this direction is ok.

Linux C/C++ direction, many large domestic companies have recruitment positions in this direction, BAT have, especially Tencent, the underlying architecture is written in C++, Baidu core search many modules are also written in C++, Ali Cloud is also recruiting C++ direction of engineers, this direction, good learning. Don’t worry about finding a job at all, learning general, in fact, it is more difficult to find.

The efficiency of Linux C/C++ is faster than Java and Python. It is more inclined to the bottom layer and can directly operate memory, which is helpful for the improvement of programming thinking and logical ability. In fact, learning this direction is a little boring, unlike Python crawler, Java, front-end can make some interesting things, small programs developed some products, can be quickly used for actual combat, get the fun of programming, further stimulate their learning.

C++ direction is not so much interesting things to do, in a long period of time, to rely on their own interest to keep learning.

All the way, it is really painful, I thought about giving up this direction during school, once I thought it would be better to learn Java (there are still a lot of people learning Java around me), whenever I was about to give up, I thought that I have learned Java for such a long time, and then insisted on it, so I came all the way; I feel really very lucky, sometimes, really do not have to head iron C++ direction, to see the whole market, with the trend, choose a good direction, in depth!

For Java or C++ direction of choice, no direction must be good to find a job, no direction must be high salary, the Internet line, especially by technology, these depend on your own technical ability.

Choose C++ direction, must go Linux C/C++, network programming, learn Linux is very important!

Dachang especially likes to study the basic knowledge of computer. To a large extent, how you master the basic knowledge will determine whether you can enter Dachang. We must pay attention to the study of basic knowledge. Autumn recruitment preparation: basic + algorithm + project, plus their own direction (C++, Java, Python, front-end, etc.), each of which should be prepared in place, in order to get the offer of big factory to the greatest extent, awareness is very important, with awareness, then look at the specific learning route.

Thirdly, combing the basic knowledge of computer

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

** Necessary tools: **Linux + Git + Sql

No matter what direction you are learning, these foundations can not be ignored, if there is time, must play solid, with a solid foundation, in this line to go farther and faster!

In terms of algorithm requirements, C++ direction for algorithm requirements are significantly higher, the algorithm must be solid foundation!

4. In-depth study of C++

**C++ foundation: **C++ is object-oriented language, we must understand the idea of object-oriented, the basic knowledge of C++ first solid, just from the process of transformation, we must adapt to object-oriented writing.

When learning object oriented, we should also consider how to use process oriented to achieve object oriented (in fact, that is, there is a member of the structure is a function pointer), for C++ basic knowledge, I briefly listed as follows:

  • The use of the const
  • Usage of quotation
  • Define the usage
  • The constructor
  • The destructor
  • Copy the structure
  • The difference between new and delete and malloc and free
  • Access qualifiers public, private, and protected
  • Deep copy and shallow copy
  • A friend function
  • static
  • Inline function
  • Inheritance, virtual inheritance
  • Diamond succession
  • Homonymous coverage problem
  • Virtual function table
  • Virtual pointer
  • Virtual function, pure virtual function
  • interface
  • polymorphism
  • rewrite
  • overloading
  • Function overloading
  • Operator overloading
  • Stream libraries and files

**C++ advanced: ** function templates, class templates, C++ for exception handling, for inheritance and polymorphic bottom understanding, for virtual bottom understanding, etc.

For C++ boost library eight smart pointer grasp and understanding, its core is to understand and analyze the corresponding source code,

these three are the most core smart pointer, understand the essence of smart pointer is, All memory application and release are assigned to object management to avoid human negligence and memory leakage.

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

Understanding of iterators and spatial configurators, such as: what are the applications of primary spatial configurators and secondary spatial configurators? What is the nature of the primary and secondary space configurators, and how to manage them with memory pools? What are the problems, and how to achieve the source code, and so on, these problems need to think about.

Linux Network Programming:

Linux process environment: Zombie process, orphan process, daemon process, process group, session, foreground process group, background process group. Mutex, lock mechanism, conditional variable, semaphores, read/write lock 4, Concurrency model under Linux: multi-process, multi-thread, thread pool 5, I/O reuse under Linux: SELECT, poll, epoll High concurrency 6, Linux network programming 7, static library and dynamic library

Five, the summary

For their own can not find video, book resources readers, you can add xiaobian **C language /C++ communication group: 967051845! ** sorted out some personal feel better learning books, video materials to share in the group file, there is a need to add oh! ~

VS compiler, graphics library

C language related e-books

C/C++ basic video and notes

C/C++ project practice

Accumulate over a long period of time, eventually achieve something!!