#IT star is not a dream # Experience Sharing: very detailed Linux C / C ++ learning route summary! Tencent offer has to take

Recently I know almost frequently invited to answer questions like how to learn C ++ and C ++ development background should question what basic skills specific reserves.

Itself I am engaged in a C ++ background development work, currently engaged in software development work in Tencent, so write this article and share your own C ++ back-end development of learning paths and points to the skills tree, hoping to give wish to engage in the background to develop the students a little reference, if you can help take some detours less the better.

工欲善其事必先利其器, good books make learning more with less, so after each skill point I would recommend some books, I've read all the books and a good reputation for reference.

End the learning route can obtain resources, students in need and seeking.

Share my learning path, if you can learn along this path seriously study it again, I would like to develop technology in the background you already have a very good technical accumulation, coupled with project practice by most manufacturers is no interview questionable.

Integrated Computer Basics

Test over CS or software engineering graduate students may not be familiar with this title, yes, I'm talking Code 408 courses of basic computer integrated . This professional courses include: data structures, computer organization theory, computer networks, operating systems.

Why mention this course, because the knowledge base is too important! This is the biggest difference of course is different from Coban, theoretical knowledge may not immediately be able to be used on the project, but when the discussion with people from a technical issue that you can know the deeper reason, your perspective will be more comprehensive and system.

Figuratively, you may have heard the term stack, but know the specific structure and the difference? On completion of the data structure you will understand; you know the computer will calculate addition, subtraction, but specifically how to achieve it? Composition principle will tell you; time to know how to distinguish between program execution instruction address and data address it? The operating system will tell you the answer.

So if you are not computer-related professional college or professional basis but did not understand the full implication, it is strongly recommended that you be sure to take the time to learn these courses.

a:

Basic Computer Integrated recommend watching the University computer science textbooks can: data structures, computer organization theory, computer networks, operating systems.

  • data structure 

1. Book: "data structure" Yan Wei Min  Tsinghua University Press 

2. Aids: "Algorithms and Data Structures PubMed questions refined analysis (Second Edition)" Machinery Industry Press

  • Principles of Computer Organization  

Textbook: "Principles of Computer" Tang Fei moon Higher Education Press

Counseling book:

"Guiding Principles of Computer Organization PubMed" Xu Aiping Tsinghua University Press 

"Principles of Computer - learning guidance and exercises answers" Tang Fei moon Higher Education Press  

  • operating system 

Textbook: "Computer Operating System (Revised Edition)" Tang Ziying  Xi'an University of Electronic Science and Technology Press  

Counseling books: "Operating System PubMed tutorials (Graduate Record Examination Professional Assessment home computer solution)," University of Electronic Science and Technology Press 

"Operating System PubMed guidance" Tsinghua University Press 

  • computer network 

Textbook: "computer network (fifth edition)," Xie Xiren Electronic Industry Press  

Counseling books: "Computer knowledge network elements and exercises parsing" Harbin Engineering University Press 

Video Tutorials

See above textbook tutorial estimate is very boring, here is what I think speak good Chinese universities open classes I heard part, said all the basics of computer science, if you have not learned or learn bad system, are brush is highly recommended video lesson.

Wuhan University - network data structure MOOC courses

Huazhong University of Science and Technology - Principles of Computer

University of Electronic Science and Technology - Principles of Computer

Huazhong University of Science and Technology - Operating System

Harbin Institute of Technology - Computer Network

This section write a bit more, because the foundation is so important! And non-Coban Coban gap is not who learn programming language and more, not who frame with slide, the essential difference is the difference between the theoretical knowledge base and use CS thinking ability to think independently analyze and solve problems.

C and C ++ syntax foundation

Grammar is the foundation of a language , C ++ foundation statements and grammar and C is like, the biggest class and exception handling, as well as the application of different templates, so there is C basic grammar to learn quickly, no C it does not matter basis, Kenwan following recommended book is almost, lip off skill, after reading the homework problems to knock over hot and compile it yourself by reading considered.

a:

"C ++ Primer Chinese version (5th Edition)" classic introductory books do not take strong university textbooks XX to compare, not a grade.

The standard library STL learning

STL provides a rich library of algorithms and supports various containers , C ++ standard library provides, including the most basic standard input and output iostrem, various containers vector、set、string, proficiency standard library, do not repeat create the wheel (the wheel to practice hand-made learning purposes except) write more C ++ code.

a:

"C ++ Primer Chinese version (5th Edition)"

"STL source code analysis"

Advanced C ++

C ++ school finished just above the foundation will use, but also need to learn to use well advanced , standing on the shoulders of giants write more robust and efficient code, you have not stepped on a pit predecessors have stepped on it again, about some of the language details and better coding practices, there are many excellent books to learn.

a

"Effective C ++" to improve the 55 specific practices and procedures designed, well worth a look, veteran and novice resulting difference!

"More Effective C ++ (Chinese version of"

The same author, following the Effective C ++, Scott Meyers in 1996 to launch "More Effective C ++ (35 Ge improve the programming and design effective method)" "sequel." Terms comparatively small, but added a few more pages, because the selection ratio, "an episode of" higher order, in particular, Chapter 5. Meyers This chapter named technology.

"Inside the C ++ Object Model" This book is also available in Chinese version, high quality translation "depth exploration of C ++ Object Model"

The new C ++ 11 standard

The new standard provides a solution to the existing problem is more elegant, more C ++ implementation . Most of the existing software or C ++ C ++ 98 standard, C ++ 98 is the first standard C ++, through so many years of development, in the past you need from the Boost library (C ++ a quasi-standard C ++ in 98 years ) for C ++ extensions supported by most of the functionality available has been included in the C ++ 11 and C ++ 2X even among the newer standard, the times to pick up more advanced production tools, the tool is efficiency.

a:

"In-depth understanding of C ++ 11"

Linux system foundation and shell script

Today, almost all Internet services are running linux system above . Linux system that is more not to mention nothing about the background of the development, so we have to learn linux operating system, as file management, system commands, file system, rights management, system services and so on.

As shell script on a similar win batch scripts, believe me, sooner or later you will need it to work under linux, so as early as possible to learn the system.

a:

"Bird Brother Linux private kitchens based learning piece" of this series as well as a server set up articles, early learning personally feel no need to look

"Linux Shell Scripting Raiders"

"Shell Script Study Guide"

Linux high-level programming environment

Ordinary users only need to understand the operating system, software developers have to understand programming interface . On stage you have been able to skillfully complete Linux operating system, know some conventional systems commands and services and can use shell script to write some small tools to improve the daily development efficiency.

Our goal is to sea stars, as a software engineer, but also a deeper grasp of linux system programming skills, learning systems programming interface, the system call API, between memory management, interprocess communication (IPC) , which was learning objectives of this phase.

a:

"UNIX Advanced Programming Environment" This is a must-see linux programming APUE, highly recommended read it again, read the follow-up worth repeating.

"Linux / UNIX System Programming Manual" book and APUE a little repetitive, I read this on dancing APUE read, you can usually see the catalog reference.

Network Programming Linux sockets

On the same machine inter-process communication (IPC) has a variety of ways, it may be a message queue, FIFO, shared memory or the like. Sockets Network Programming means: a network communication interface program distributed on different machines provided by the system, across the network to connect processes on different machines, network communications across machine. Generally UDP sockets, TCP sockets, Unix Domain, of course, if you are a practitioner of SCTP socket communication certainly not unfamiliar.

a:

"UNIX Network Programming Volume 1: The Sockets Networking API (3rd Edition)"

"UNIX Network Programming, Volume 2: Inter-Process Communication (2nd Edition)"

Database and Storage

Running data in volatile memory, you need a database when required persistent storage . A background service system in general need to consider the issue of landing and persistent data storage, then it will involve selection and database applications, databases into relational databases and non-relational database.

Relational database refers to the use of the relational model database to organize data, representing a MySql.
Relational model refers to the form of two-dimensional model, and a relational database is organized by a data link between the two-dimensional table and composed.

Non-relational database to store the key-value pair is not fixed, and the structure, each element can have a different set of fields, each tuple can increase the number of keys necessary for its own, is not limited to the fixed structure, can be reduced spending some time and space. Representatives redis, memcached, Tencent internal components ckv is non-relational database.

a:

"SQL must know will be"

"High Performance MySQL"

Official documents redis redis Chinese network

About redis there are many applications, such as distributed lock redis applications, such as high concurrency model based on grab a red envelope, the back can write an article about the principles and applications of distributed locks.

Algorithms basis

It is to write a computer algorithm to solve the problem of the computer can understand the use of programming languages.

Good algorithm can be more concise and efficient solution to the problem, whether it is now or community college recruit recruit, manufacturers will study the written algorithm, written as if not for software practitioners should exercise regularly algorithm, keeping hand. Learning algorithm is a universal way to learn problem-solving help to improve logical thinking.

study method

In my personal experience, do not recommend direct assiduously way learning algorithm, it is recommended reading combined with the way the brush line programming algorithm problem.

Specifically: Introduction watching data structures or algorithms, while cattle off or leetcode brush on the topic, reading is boring because it is easy to lose patience, the benefits of the online problem is that you can brush set goals every day, enjoy the pleasure of each topic through, there is a positive feedback it easier to stick with it.

Architecture capability

Architecture is the ability to use existing knowledge to design capacity of the entire back-office services system. It requires not only skill but also to grasp the depth dimension, needs according to the different needs and system constraints make different designs.

This time will be more things to consider, including service model design: a multi-process or multi-threaded coroutines even micro-threaded, distributed or centralized;

Selection of storage: Consider database selection with what? According to the data needs to distinguish characteristics of the storage and application scenarios, if the data is non-social applications with a relational database to store it may be better, if it is the type of electricity supplier orders data, then use a relational database to store may be better;

Of course, there are other aspects to consider back-end systems, not one by one example.

More practice

Having said that, the most important thing is to practice practice practice. Theoretical knowledge base is a necessary condition, the mobile Internet era we come into contact with fragmented information too complex too messy, my personal experience, a high concentration of knowledge essence still need to learn from the masters of the books, so reading is the most correct and rapid learning path there is no short cut.

But reading is not enough light, programming and technical ability is also a modern craft activities, also need daily constant grinding technology, as the law of ten thousand hours :

The reason why talented people in the eyes of remarkable, not talent superior adult, but paid a sustained effort. 10,000 hours of exercise is a necessary condition for any person to become world-class masters from the ordinary. To become an expert in the field, you need 10,000 hours of pro rata is this: If you work eight hours a day, five days work week, then become an expert in a field of at least five years. This is the law of ten thousand hours.

How polished improve programming capacity? Find items, find interesting things in code to make it happen, interest is the best teacher, this point in the programming and technical learning is also fully applicable.

People always tend to do things quickly get a sense of pleasure, like playing 30 minutes a game can get pleasure. On the contrary, it improves the technological debris is a long process, three minutes is certainly difficult to succeed.

So, to use technology to do things of interest and with interesting programming, such as writing a small program reptiles crawl the site data or write a small game, or re-create the wheel to their own use, and never tired of optimized wheels. So that each step can get a little sense of accomplishment and motivation to continue to go slowly there will be a qualitative leap.

A website

The site must tell you that the website is a C ++ encyclopedia, similar to Linux man pages, usually developed forget to check the function name or containers directly at the search is very convenient, I downloaded the offline version.

URL: C ++ Reference: cppreference

to be continued

Write down the breath is certainly not perfect, the article will be kept updated and modified, I thought to add the article to keep it updated.

I compiled and recommendations mentioned in the text of e-books and video materials, is a learning process to collect, search " back-end technology in the classroom " reply " 1024 " to others.

Writing is not easy, praise concern support point at it

I will continue to share software programming and programmer those things, welcome attention.

Guess you like

Origin blog.51cto.com/14773857/2482928