C/C++ background research needs lighting (learning route planning)
Although it is C/C++ background RESEARCH and development, but according to my experience, background development is more C++, at least to contact the background development is so, since it is C/C++ background development, that point of skill tree can be seen from the name, the overview is mainly two aspects:
1. The C/C + + language
2. Background development technology
C/C + + programming language learning, in the research and development of C + + background accounts for only a small proportion of the programming language is a tool, developers can use tools is the minimum requirement, in my experience, engaged in the development of the background current skill trees to meet the requirements of most companies background jobs, roughly what is below, I drew a picture, you look at:
This seems like a lot of skill points (and it is), so don’t panic, I’ll go through the skill trees one by one.
Learning c + +
Before we get started, some of the things we need to learn in C++ are:
- Basics: const qualifying symbols, declarations and definitions, types, traversal
- Standard libraries and algorithms: String, vector, Bitset, Map
- Constructors and destructors in derived classes, destructors, constructors
- Dynamic arrays, multidimensional arrays, arrays, Pointers, and references
- Overloading and Overriding
- Expressions, loops, and conditional statements
- Heap vs. stack, mallocl vs. new
- Object-oriented features, encapsulation, inheritance, polymorphism
- Virtual function, virtual function table, derived class virtual table, object memory layout
- Templates and generic programming: template definition, instantiation, template compilation, template specialization
- Inheritance: single inheritance, multiple inheritance, diamond inheritance, virtual inheritance
- Cast: static_cast, const_cast, reinterpret_cast, dynamic_cast,
- Exception handling, namespace
- Modern C++ : C++1X, C++20 new features
C++ programming language skill tree, is must be full, of course, the most efficient way to learn is to read classic books. Classic books I recommend a wave, a total of 7 books, basic 3, advanced 3, modern C++ 1, with cover, convenient for you to find.
At the beginning of learning C++, not all the pits need to step over, read classics, predecessors’ experience can let us avoid detours.
C++ basic 3
- C++ Primer 9.4 douban
- Effective C++ 9.5 douban
- More Effective C++ 9.2
C++ advanced 3
- Inside the C++ Object Model Inside the C++ Object Model
- STL source code analysis douban 8.7
- C++ programming ideas
Modern C++ 1
What is modern C++? The language has also been evolving, with C++1X and even C++20 introducing significant new features that make C++ more modern. How to quickly get started with modern C++ features if I recommend open source e-books:
- Modern C++ tutorial: high-speed access to C++11/14/17/20
The book is available as an open source offline download on Github
Now that the C++ skill tree is almost full, let’s talk about “background development” techniques.
C++ background research and development
There are many skill trees in the picture, and I will explain them one by one:
Computer Fundamentals
Computer Science (CS) is a professional Computer course in university. Computer foundation is the basic skill of software development, as well as C++ development. The following is a copy of the main course structure of Computer technology undergraduate course of cuhk.
The study of computer fundamentals includes
- Computer composition principle
- The operating system
- Data structures and algorithms
Computer network
Linux
- Using Linux
- Linux Advanced Programming
- Unix Network programming
The database
Background development is inseparable from data storage, and data storage involves database learning, mainly two categories of database:
- Relational databases, databases that use a relational model to organize data, are represented by MySQL.
- Non-relational databases generally refer to NoSQL databases that store data in the form of key-value, which stands for Redis
Design patterns
Design patterns have evolved over a long period of time and represent a best practice in software development. Provides the best solution to the common problems faced in software development process.
Learn the following common design patterns and try implementing them in C++.
- The singleton pattern
- Builder model
- The flyweight pattern
- The factory pattern
- The proxy pattern
- Chain of Responsibility model
- Interpreter mode
- Iterator pattern
- Observer model
- Adapter mode
- The bridge model
- Filter mode
- Decorator mode
- The appearance model
- .
The middleware
Middleware is a kind of software that abstracts some general functions in distributed system to provide services. Because middleware is between the operating system and application software, so called middleware.
- Web Server middleware, Nginx, OpenResty, Tomcat…
- Cache middleware, server cache including Redis, Memcached
- Log system middleware, Elasticsearch, Logstash, Kibana, Beats
- Database middleware, Sharding JDBC
- API gateway, open source projects Tyk, Kong, Zuul
- RPC framework, Tars, Dubbo, gRPC, Thrift
- Configuration central middleware, Apollo, ZooKeeper unified configuration management
- Message queue middleware, ActiveMQ, Kafka, RabbitMQ…
distributed
- Extensibility design, design extensible software architecture
- Microservice architecture design, service registration, service discovery, service routing
- Distributed file systems: FastDFS and HDFS
- Distributed transactions: 2PC, 3PC, TCC
- Distributed consistency algorithms: PAXOS, Raft, Zab
- Distributed unique ID generation: Snowflake algorithm, UUID, Meituan Leaf, Taobao TDDL SEQUENCE scheme
- Consistent HASH algorithm
High concurrency, high performance,High availability (background development three high)
- Multi-threaded, multi-process, coroutine model
- Asynchronous callback, synchronous blocking
- Pooling technology, clustering technology, caching technology, CDN content distribution
- Load balancing, current limiting fuse, remote live
Search engine
- Inverted index search engine principle technology
- Lucene, Apache Lucene full-text search engine toolkit
- Elasticsearch (ES
- Principle and use of Solr
Testing technology
- Unit testing
- Full link test
- Pressure test
- Grayscale publishing, A/B testing, blue-green deployment
Operation monitoring
- Logging Monitors the running status of the system and services and records debugging information or error information of programs.
- Metrics, such as accumulations, monitor the performance of systems and services
- How are Tracing service requests handled among distributed components
virtualization
- Common virtualization technologies: KVM, Xen, OpenVZ, and Docker
- Kubernetes (K8s for short) manages Containers
- OpenStack Management VM (VM) VMS
Security technology
- Web security: CSRF, SQL injection, XSS
- Encryption and decryption algorithm: symmetric encryption, hash algorithm, asymmetric encryption
- To prevent DDos
- Authentication algorithms: OAuth2.0, SSO, OIDC, 2FA
- Network isolation: internal and external network separation, jump board
Big data
It mainly includes the following technical points to learn: data storage, offline analysis, streaming computing.
- Big data storage: Hadoop framework, HBase, HDFS
- Offline analysis: Hive, MapReduce, and Spark
- Streaming computing: Flink, Storm, Spark Streaming, Kafka Stream
Version control
- Centralized version control system SVN;
- Git, a distributed version control system
Above, almost is the whole C/C++ background research and development system needs point skill tree, first write so much, someone to see the detailed supplement.
Past wonderful articles
The university has opened an open source computer course on Github
Do you know Linux memory management? 10 pictures for you to arrange clearly!
The most complete ever! Offer C++ learning summary of harvester, with detailed book list
Interview experience: C++ software development 100 interview questions (with reference book)