Linux embedded C, C++ server, C++ client, C++ interface (Qt/Mfc) which direction is more promising in the future

Recently, a classmate asked: I just graduated, and I have an ordinary 211 undergraduate degree. I plan to find a job in the direction of C/C++. At present, the most frequently seen directions on the Internet are these directions: linux embedded C, C++ server, C++ client, and C++ interface (Qt/Mfc). Which direction is more promising in the future? , or there are other better directions. I am a scumbag in my studies, and I didn’t study hard in university, so I want to determine a working direction and accumulate my studies seriously;

So today, Lion will briefly recommend the direction of C++ server background development ; server program development based on the linux environment and C++ language, such as qq server, WeChat server, King of Glory server and so on. Although various high-level languages ​​are popular now, in terms of high performance, C++ is the first choice. This is also the reason why various big companies, such as Goose Factory, Byte, JD.com, Ali and other first-line Internet companies are recruiting people, and mid-to-high-end personnel are still relatively scarce, and it is not uncommon to poach people within the company. So don't look at the hot market of java/python now, but the development of c++ background is still very solid.

As mentioned above, C++ is basically used in top performance projects. In particular, embedded and real-time systems such as robots, autonomous driving, and AI are the main application directions of C++. At this level, there are almost no competitors.

For example, Xiongchang’s core products such as search engines and recommendation engines, and almost all products of Goose Factory are developed in C++. So "learning c++ well will be a stepping stone to a big factory!"

If you learn well, it is good to get into BAT. Tencent, Baidu, and Toutiao all recruit a lot of Linux c/c++, and Alibaba Cloud also recruits. In addition, game engines and high-frequency trading are also exclusive areas of c++.

Of course, not everyone can find a job after learning it; what kind of person is more suitable for c/c++ background server development?

  • On-the-job engineers who have been engaged in business development for many years and do not have a deep understanding of the underlying principles
  • In-service engineers who are engaged in embedded development and want to transfer to Internet development
  • Engaged in desktop development such as Qt/MFC, on-the-job engineers whose salary has not increased much for many years
  • In-service engineers who are engaged in non-development positions (algorithm positions, operation and maintenance positions, and test positions) and want to transfer to back-end development positions
  • There are no technical challenges at work, and in-service engineers who do not have access to new technologies at work
  • Developers who are slow to study and learn by themselves and cannot systematically build a knowledge system
  • An engineer who knows a lot of technical terms, but asks in depth and doesn't understand
  • Students who major in computer related majors and want to enter a large factory (undergraduate degree or above, with c/c++ foundation)

The performance of C++ is powerful, but its paradigm and mechanism also impose a great burden on developers:

First, the project development efficiency is low;

The second is that it is difficult to learn and it is not easy to get started;

This also makes it very difficult for companies to recruit a qualified C++ programmer!

Among the mainstream programming languages, C++ has the highest requirements for the programming ability of software talents, and many people learn other programming languages ​​​​due to fear. Therefore, the number of people learning C++ technology is also very small, which can be said to be very scarce.

If you like c/c++ yourself and are also interested in Linux, it would be best.

Since it is the answer to the career development direction, let's first look at the salary from the perspective of job hunting, then look at the recruitment requirements of major companies , and finally discuss what to learn in C++ and list the technical points.

This is what Lion just opened a well-known recruitment website; searched for Beijing-Shanghai C++ background development; not to mention Shenzhen, the top five in a search, four are goose factories. . . (Goose Factory really loves C++, and C++ is the best in the world!!) It can be seen that the salary is still very good;

As for the technical requirements, the lion did not intercept them; after all, the requirements of each major factory are different. Brothers who are interested in which factory can go and have a look by themselves; since it is a direction, it is basically the same; here The lion will come to a summary of knowledge points. Technically, it is benchmarked against Tencent T9 ; not much to say, let’s get dry goods!

Tencent core technology learning route summary T1-T9


c++ grammar basics


The first is the introductory stage. In addition to basic loops, variables, and judgments, you need to master at least these :

  • pointers, references, arrays, memory
  • Difference between reference and pointer
  • Virtual mechanism: virtual function, virtual function table, pure virtual function
  • Some differences between C and C++, such as the difference between new, delete and malloc, free
  • The role of some keywords: static, const, volatile, extern
  • Four types of conversion: static_cast, dynamic_cast, const_cast, reinterpret_cast
  • The realization principle of some STL containers, such as vector, deque, map, hashmap
  • Class encapsulation, construction and destruction, static members, object management;
  • Class construction (constructor with parameters , construction without parameters, copy construction, default constructor) and destruction;
  • Object dynamic management, friend function, friend class, operator overloading ;
  • C++ compiler object management model analysis;
  • Operator overloading (unary operators, binary operators, operator overloading difficulties, operator overloading in project development);
  • Template specialization, partial specialization, extraction of traits techniques
  • Inheritance, Virtual Inheritance, Diamond Inheritance, etc.
  • Polymorphism: dynamic binding, static polymorphism
  • rewrite, overload
  • The principle of smart pointers: reference counting, RAII (resource acquisition is initialization) ideas
  • Smart pointer usage: shared_ptr, weak_ptr, unique_ptr, etc.
  • Compile and link mechanism, memory layout, object model
  • Some new features of C++11, such as rvalue references, perfect forwarding, etc.

1. The cornerstone of refinement

1. Data structure and algorithm

  • Red-black trees everywhere
  • Disk storage chained B-tree and B+ tree
  • Hash and BloomFilter, bitmap for deduplication of massive data

2. Design Patterns

  • Creational Design Patterns
  • Structural Design Patterns

3. New features of c++

  • stl container, smart pointer, regular expression
  • New features of threads, coroutines, atomic operations, lamda expressions

4.Linux project management

  • Makefile/cmake/configure
  • distributed version control git
  • Linux system runtime parameter command

2. High performance network design

1. Network programming

  • Network IO and select, poll, epoll
  • The principle and implementation of reactor
  • Implementation of http/https server
  • websocket protocol and server implementation

2. Network principle

  • Server million concurrent implementation
  • redis, memcached, nginx network components
  • Posix API and network protocol stack
  • UDP's reliable transport protocol QUIC

3. Implementation of the coroutine framework NtyCo

  • Coroutine design principle and assembly implementation
  • Coroutine scheduler implementation and performance testing

4. Implementation of user mode protocol stack NtyTcp

  • User mode protocol stack design and implementation
  • tcp/ip timer and sliding window
  • Design and implement epoll by hand

5. High performance asynchronous io mechanism io_uring

  • io_uring comparable to epoll
  • Usage scenarios of io_uring

3. Basic component design

1. Pool components

  • Handwritten thread pool and performance analysis
  • Implementation and Scenario Analysis of Memory Pool
  • Implementation of asynchronous request pool
  • Implementation of mysql connection pool

2. High-performance components

  • Atomic operation CAS and lock implementation
  • Lock-free message queue implements RingBuffer
  • Timer scheme red-black tree, time wheel, minimum heap
  • Handwritten deadlock detection component
  • Handwritten memory leak detection component
  • Implementing distributed locks by hand

3. Open source components

  • Those pits of Libevent/Libev framework actual combat
  • Asynchronous log scheme log4cpp
  • Application layer protocol design ProtoBuf/Thrift

4. Middleware development

1.redis

  • Detailed explanation and principle of redis related commands
  • Redis protocol and asynchronous mode
  • Storage Principle and Data Model
  • Master-slave synchronization and object model

2.MySQL

  • SQL statements, indexes, views, stored procedures, triggers
  • MySQL index principle and SQL optimization
  • Analysis of MySQL transaction principle
  • MySQL caching strategy

3.Kafka

  • Kafka usage scenarios and design principles
  • Kafka storage mechanism

4.gRPC

  • gRPC's internal component associations
  • gRPC communication protocol based on http2

5.nginx

  • Nginx reverse proxy and system parameter configuration conf principle
  • nginx filter module implementation
  • nginx Handler module implementation

5. Open source framework

1.skynet

  • skynet design principle
  • Sky net network layer encapsulation and lua/c interface programming
  • The important components of sky net and the tear-off game project

2. Distributed API Gateway

  • High performance web gateway Openresty
  • Kong dynamic load balancing and service discovery

3. DPDK

  • DPDK environment and testpmd/I3fwd/skeletion
  • DPDK's user mode protocol stack
  • Concurrent dns processing of tens of millions of traffic
  • High performance data processing framework vpp
  • DPDK's virtual switch framework OVS

4. High performance computing CUDA

  • The development process of gpu parallel computing cuda
  • Parallel Computing in Audio and Video Codec

6. Cloud Native

1.Docker

  • Kernel functions under the Docker scenery
  • Docker container management and image operation
  • Docker network management
  • Docker cloud and container orchestration

2.Kubernetes

  • K8S environment construction
  • Usage of Pod and Service
  • K8S cluster management
  • K8S secondary development and K8S API

Seven, performance analysis

1. Performance and testing tools

  • Test framework gtest and memory leak detection
  • Performance Tools and Performance Analysis
  • The generation principle and construction method of the flame graph

2. Observation technology bpf and ebpf

  • Implementation principle of kernel bpf
  • bpf observations on kernel functions

3. Kernel source code mechanism

  • Process Scheduling Mechanism
  • Kernel memory management operation mechanism
  • The relationship between network card nic and network protocol stack
  • file system components

8. Distributed architecture

1.RocksDB

  • Different usage scenarios of kv storage RocksDB
  • RocksDB special operations

2. Cloud native distributed database TiDB

  • The principle of TiDB storage engine
  • The principle of TiDB cluster solution and Replication

3. Distributed service

  • Kernel-level supported distributed storage Ceph
  • Registration Service Center Etcd

9. Project actual combat

1. Image bed shared cloud storage

  • fastdfs architecture analysis and configuration
  • fastdfs storage principle
  • Distributed fastdfs storage cluster deployment
  • High load nginx/fastcgi
  • File transfer and interface design
  • Release/Test Cases of Products on the Cloud Public Network

2. Microservice instant messaging

  • IM Instant Messaging Project Framework Analysis and Deployment
  • IM messaging server/file transfer server
  • Message Server/Routing Server
  • Database Proxy Server Design
  • File server and docker deployment
  • Release the product on the cloud public network/public network test line

Finally, there are some recommended learning books. You can buy physical books to learn by yourself. If you want an electronic version, you can also click the link to join the group chat [back-end development technology exchange group]: https://jq.qq.com/?_wv= 1027&k=8Q8ZY2kH

1. MySQL: "High Performance MySQL Version 3"

2. Nginx: "In-depth understanding of Nginx: module development and architecture analysis (2nd edition)" (Tao Hui)

3. Redis: Redis design and implementation (Huang Jianhong)

4. Linux Kernel: "In-depth Understanding of Linux Kernel Architecture" (translated by Guo Xu)

5. Data Structures and Algorithms: Introduction to Algorithms (3rd Edition)

6. Performance Analysis: "Peak Performance Insights into Systems, Enterprises, and Cloud Computing" 8

7. MongoDB: "The Definitive Guide to MongoDB"

8. Ceph: "Ceph Distributed Storage Learning Guide" (Ceph China Community)

9.Docker: "Docker Container and Container Cloud (2nd Edition)".

10.TCP/IP: "Tcp/1p Detailed Explanation Volume 1 Volume 2 Volume 3" 8

11. Linux system programming: "Advanced Programming in Unix Environment"

12. Computer: "In-depth understanding of computer systems"

13. DPDK: "DPDK in simple terms" 8

14.k8s: "Kubernates Definitive Guide" edited by Gong Zheng et al.

15.bpf: "BPF Top Insights into Linux System and Application Performance"


Finally, I wish everyone can find a satisfactory job in the future; lastly, a warm reminder, don’t forget to brush up the questions, ten years of hard work, and today I will show you ; the interview is still very important, not only the questions, but also the interview experience of the seniors. learn a lot~

Guess you like

Origin blog.csdn.net/m0_58687318/article/details/126842600