Preface: the path of Programmer's cultivation-(0) Preface: On the road, then the road
In the preface, the Knowledge system has been combed, mainly divided into problem definition, algorithm and data structure, system platform API, programming language implementation, code design, test verification and so on. It's probably the hardest part to focus on writing algorithms and data structures, and then consider complementing the rest.
For this part of the content of the layout, mainly in the "algorithm design and Analysis basis","algorithm" and Leetcode algorithm problems classified as horizontal, with "algorithm design and analysis basis" The classic design techniques listed are longitudinal and run through each section. Because traditional algorithmic books are often structured to speak algorithms, Catalog content classification is rigid. What I want is to solve this kind of problem what algorithm? What skills and ideas are used to design?
(1) Basic Knowledge
The path of programmer's cultivation -(1) Foundation ( above ): Algorithm design
The path of programmer's cultivation -(1) basic ( Middle ): Performance analysis
The path of programmer's cultivation -(1) Foundation ( bottom ): proof of correctness
(2) Linear table
The path of programmer's cultivation -(2) linear table ( top ): Arrays and Lists
The path of programmer's cultivation -(2) linear table ( bottom ): Stack, queue
(3) Sort
The path of programmer's cultivation -(3) sort ( up ): basic sort
The path of programmer's cultivation -(3) sort ( Middle ): Merge and Quick sort
(4) Search
The path of programmer's cultivation -(4) search ( top ): linear and binary search
The path of programmer's cultivation -(4) search ( middle ): Two forks find tree
The path of programmer's cultivation -(4) search ( bottom ): Hash table
(5) String
Very important, a separate chapter. Graph algorithm is equally important, but can be categorized into a sort or search, and the interview is not a lot of test, not alone.
(6) Design Summary
"How to solve problems", poor solution, reduce the rule, divide and conquer, dynamic planning, greed.
(7) system Platform
Computer Architecture (Computer composition principle, assembly language, etc.), operating system (Linux and Windows common system APIs , etc.), compiling links (principles of compilation and linking).
(8) Code Implementation
C/c++/java and other mainstream languages, how to implement our design, including language grammar, memory allocation, encapsulation abstraction, sub-package library and other small details.
(9) Code Design
Abstract level definition, design patterns, refactoring to improve the design.
(Ten) Test Validation
Unit tests.
Programmer's Path to cultivation-(0) directory