Hello everyone, I am handsome.

I’ve written several articles about learning routes before

Front-end development learning routes

Java back-end development learning route

In general, the mainstream of development is Java background development, front-end development and C++ background development. Now there are more and more Go development. Today, I make up the learning route of C++ background development.

Let’s answer a few questions before we write

1. What are the positions of C++ background development?

There are many C++ background development positions, such as game engine development, game server development, audio and video server/client development, database core development, etc., and C++ can also be used to write deep learning, do hardware low-level these.

In short, C++ background development positions, or very rich, we do not have to worry about finding a suitable position.

2. Is there a large demand for C++ background development positions?

In general, large companies will demand more, small companies demand less.

When it comes to job demand, it must be that the job demand of Java is the biggest, of course, the people who learn Java are also the most, if you want to learn C++, then I think you want to locate a large company may be a little better, it will be easier to enter a large company than Java.

If you think your strength is very general, can not reach large companies, then I think you can consider learning Java, because most small companies, Java more positions.

But, if you are fresh graduate, so the language is not particularly important actually, want you to learn computer foundation and algorithm only, even if you are to learn Java, also can go face C++; Learn C++ can also go to the face of Java.

I was learning Java at that time, but in the fall recruitment, there were several C++ positions. I just told the interviewer that I did not know C++, and he would ask you about other knowledge.

Let’s talk about the learning route of C++ background development. In order to facilitate your planning, I will say the approximate learning time of each module

1. Basic C++ (3-6 months)

If you have C language foundation, so this feeling takes 3 4 months to be able to take, if you are zero foundation, the C language that the estimate still has to learn 2 3 months, that is to say, have to spend half a year time ability to go, do not have C language foundation to see this C language tutorial: a C language introduction course with ultra high evaluation

C++ piece, the key need to learn is some keywords, object-oriented and STL container knowledge, especially STL, also need to study some of their source code, here I summarize some more important knowledge (in fact, according to the interview results to choose).

  1. The difference between pointer and reference, C and C++, struct and class
  2. Struct memory alignment problem, sizeof is different from strlen
  3. Three characteristics of object – oriented: encapsulation, inheritance, polymorphism
  4. Class access: private, protected, public
  5. Class constructor, destructor, assignment, copy function
  6. The move constructor is compared to the copy constructor
  7. Memory partition: global area, heap area, stack area, constant area, code area
  8. The principle of virtual function to realize dynamic polymorphism, the difference between virtual function and pure virtual function
  9. The difference between deep copy and shallow copy
  10. Some keywords: static, const, extern, volatile, etc
  11. There are four types of conversions: static_cast, dynamic_cast, const_cast, and reinterpret_cast
  12. Static and polymorphic: overrides, overloads, templates
  13. Four smart Pointers and their underlying implementation: AUTO_ptr, unique_ptr, shared_ptr, Weak_ptr
  14. Rvalue references
  15. STD: : move function
  16. Iterator principle and iterator invalidation
  17. Some important STLS: vector, list, map, set, etc.
  18. Container comparisons, such as map versus unordered_map, set versus unordered_set, vector versus list, etc.
  19. STL Container space configurator

And so on.

Just follow the book, and then learn some important points that you can focus on.

Book Recommendations:

1. C++Primer, this book has a lot of content. Take a look at the first dozen or so basic chapters.

2, “STL source code analysis”, must read books, to know the principle of common STL, it is recommended to read two or three times.

3. “exploring the C++ object model in depth”, this book is mainly about object-oriented knowledge, can help you clear all kinds of fog.

Book arrangement see here: less detours, must read classic computer books recommended (including download method)

Video recommendation: can be in B station Hou Jie teacher’s video, not suitable for beginners, most of the talk is advanced, everyone B station search Hou Jie on the line

Interview questions: after learning the interview questions can be reviewed, here collated: 150,000 words C++ development interview manual out (C++ and computer foundation all have)

Ii. Computer Network (1-2 months)

No matter what position you are engaged in, whether it is campus recruitment or social recruitment, computer network will basically ask, special is Tencent, byte, Shopee, Xiaomi and other non-Java companies, ask more. This piece of serious study, a month and a half can be done.

Computer network is a pile of protocols constitute, the following are some of the more important knowledge points, learn when you can focus on the next.

Physical layer and link layer:

  1. MTU, MAC address, and Ethernet protocol.
  2. Broadcast and ARP

The network layer

  1. IP Address Classification
  2. The IP address is different from the MAC address
  3. Subnet division and subnet mask
  4. ICMP protocol and its application
  5. Routing addressing
  6. LAN, WAN difference

Transport layer (primarily TCP)

  1. TCP header format (SYN, ACK, FIN, and RST must be known)
  2. TCP sliding window principle, TCP timeout retransmission time selection
  3. TCP congestion control, TCP traffic control
  4. TCP three-way handshake and four-way wave and status code changes
  5. Function of TIME_WAIT in TCP connection release
  6. SYN flood attacks
  7. TCP sticky packets, heartbeat packets
  8. How does UDP achieve reliable transmission
  9. The difference between UDP and TCP
  10. Application scenarios of UDP and TCP

The application layer

  1. DNS principles and applications
  2. The format of HTTP packets is HTTP1.0, HTTP1.1, and HTTP2.0
  3. HTTP request methods are as follows: GET, HEAD, POST, PUT, and DELETE
  4. The HTTP status code
  5. The difference between HTTP and HTTPS
  6. Digital certificate, symmetric encryption and asymmetric encryption
  7. Cookie is different from session
  8. The flow of entering a URL into the display page (the more detailed the better, understand this, the network part is good)

Book recommendations: If you are a beginner, you can start by reading Illustrated HTTP. Of course, you can also go straight to Computer Networks Networking: Top Down, which is recommended to read twice or more. If you have time, you can read TCP/IP In Detail Vol. 1: Protocols.

Book download see here: less detours, must read classic computer books recommended (including download method)

Handsome to also wrote a extremely brief introductory tutorial: www.iamshuaidi.com/359.html

Iii. Operating system (1-2 months)

The operating system is similar to the computer network, but the computer network will ask more, the operating system will be less, it is best if you can learn with questions, for example

Why are there processes and threads? Why suspend, run, block, and so on? How to still have pessimistic lock and optimistic lock, their essential difference?

How can a process still deadlock, and what are the handling strategies? What are the process scheduling algorithms?

What problem does virtual memory solve? Why is the memory address of each process independent?

Why is CPU fast and memory slow? Why is the disk even slower?

To sum up roughly:

1, process and thread difference

2, thread synchronization mode: mutex, spin lock, read/write lock, condition variable

3. The underlying differences between mutexes and spinlocks

4, orphan process and zombie process

5, deadlock and avoid

Multithreading vs. multiprocess comparison

7. Interprocess communication: PIPE, FIFO, message queue, semaphore, shared memory, socket

Pipeline vs. message queue

9, the bottom layer of the fork process: share on read, copy on write

Process of thread context switching

Process context switch process

12. Process scheduling algorithm

Blocking IO and non-blocking IO

The concept of synchronization and asynchronous

Static link and dynamic link process

16. Virtual memory Concept (very important)

17. Specific process of MMU address translation

Page missing processing process

19, missing replacement algorithm: the longest unused algorithm, first-in, first-out algorithm, the best replacement algorithm

Recommended book: Modern Operating Systems

There is also a combined video: Computer Fundamentals three course video

MySQL(one month or so)

MySQL and Oracle are the main databases, but IT is recommended that you learn MySQL, because most companies use MySQL, which is also a must ask in the interview, and MySQL is the most contact in the work, after all, cruD is the normal work.

Here are some things I think are important:

1. How is an SQL statement executed? That is, if an SQL command is executed from the client, what will the server do? (such as authentication, whether caching is enabled or not).

2. Index related: How are indexes implemented? What are the differences between different engine implementations? Clustered indexes, non-clustered indexes, secondary indexes, unique indexes, leftmost matching principle, etc. (very important).

3. Transaction related: for example, how is transaction isolation implemented? How do transactions guarantee atomicity? Why do different transactions see different data? Does every transaction have a copy of the view? MVCC implementation principle (important) and so on.

4, various lock related: such as table lock, row lock, gap lock, shared lock, exclusive lock. What problems are these locks used to solve? (important)

5, log related: ReDOLOG, binlog, undolOG, these log implementation principle, in order to solve how the problem? The journal is also very important, the interview also asked a lot of questions.

6. Master/slave backup of database, how to ensure that data is not lost, how to ensure high availability and so on.

Troubleshooting commands such as slow query, SQL execution plan, index statistics refresh, etc.

For the four related knowledge of 2-4, interview is the most frequently asked, sometimes the interview will let you talk about the index, if you know more can be crazy, remember I summed up a set of rip template:

Why index is fast from the point of view of B tree – – take the opportunity to talk about other ways to implement index – – > different engines in the implementation of index – – > the system is to determine whether to use index – > obviously add index but do not go index?

The interviewer asked me how transactions are consistent. I happened to have studied redolog, binlog, and undolog, and then I had a long conversation with the interviewer.

Books: “MySQL Must Know” and “inside MySQL Technology”

The specific can see me write MySQL learning route: liver finished, my MySQL learning road

Book download see here: less detours, must read classic computer books recommended (including download method)

V. Network programming (about one month)

Network programming piece, some companies or ask a lot of, especially IO multiplexing, synchronous asynchronous IO, blocking non-blocking what, at that time Tencent basic every time asked ,,,, learning C++ piece or to pay attention to, I say the following is more important.

IO multiplex: select, poll, epoll (select, poll, epoll)

2, hand tore one of the most simple server server (Socket, bind, Listen, accept these four API must be very skilled)

3. Thread pool

4. Event-driven Reactor model

5, the difference between edge trigger and level trigger

6. Difference between non-blocking IO and blocking IO

Books: Check out Unix Network Programming

Vi. Data Structure and Algorithm (3-6+ months)

Data structures and algorithms, I think, are the ones that take the most time, because algorithms, it’s really hard to go from basic data structures and all kinds of algorithm ideas to Leetcode. If you have zero basis, it really takes a long time, but if you have some basis, it might be a little bit faster, depending on how far you want to go.

Let me outline the learning process here

1, follow the book first basic data structure and algorithm: list, queue, stack, hash table, binary tree, graph, ten sort, binary search.

2. Then look at the ideas: recursion, depth and breadth search, enumeration, dynamic programming, and so on.

Introduction data structure recommendation “Data Structure and Algorithm Analysis: C language description version” this book, in the process of learning, can also cooperate with brush, general brush “Sword point Offer” + LeetCode brush two or three hundred is almost, no time to brush “Sword point Offer” it.

For more details on algorithm learning, see my article: How do I Learn Algorithms?

Vii. Project (about 2 months)

Projects have to be done, Java projects are flying around, but C++ projects are going to be less, at least not as many videos, but you can follow the book, or find them on github or buy a paid video yourself.

Recommended self-study project: Implement HTTP server (github a bunch of source code, audio and video server (MOOCs)), implement a chat system (some books come with this section)

8. Learning sequence

I suggest that if you have time, you can get started with C++ first, and then start to learn data structures and algorithms. Keep brush up on the algorithms for a long time, and then learn C++ deeply, and then learn computer networks and operating systems, and then learn network programming, and put the project at the back.

If the time is tight, the algorithm can relax a bit, C++ and projects can be priority, computer foundation can surprise study, through the video or others summarized notes surprise, here is a video: net +OS+ group of introduction tutorial

In short, this set of learning down, it feels like a year, of course, this is not easy to measure, but also depends on what you have mastered the foundation.

Nine,

After learning to verify how they learn, you can come to the handsome website to look at these interview questions, through the interview questions to find out the missing

Small broken website: www.iamshuaidi.com, the follow-up will be more and more perfect, including a variety of algorithms will be updated, I suggest you collect.

In addition, the paper comes to books, can be downloaded here: www.iamshuaidi.com/753.html

In a word, about the school recruitment, learning route, interview questions and so on, I have updated a lot in the website, including personal experience, you confused have nothing to do, you can open more.

Finally, come on, study hard for two years, and strive for a good offer in the future.