程序员修炼之路-(0)目录

前言:《程序员修炼之路-(0)前言:在路上, 再上路》

在前言中已经对知识体系进行了梳理,主要分为问题定义、算法与数据结构、系统平台API、编程语言实现、代码设计、测试验证等等。目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分,之后再考虑补充其他部分。

对于这一部分的内容编排,主要以《算法设计与分析基础》《算法》以及LeetCode算法题中的问题分类为横向,以《算法设计与分析基础》中罗列的经典设计技巧为纵向,贯穿每一小节。因为传统算法书籍的结构经常是为了讲算法而讲,目录内容分类都很死板。而我想要的是解决这一类问题有哪些算法?都是用什么技巧和思路设计的?

(1)基础知识

《程序员修炼之路-(1)基础(上):算法设计》

《程序员修炼之路-(1)基础(中):性能分析》

《程序员修炼之路-(1)基础(下):正确性证明》

(2)线性表

《程序员修炼之路-(2)线性表(上):数组与链表》

《程序员修炼之路-(2)线性表(下):栈、队列》

(3)排序

《程序员修炼之路-(3)排序(上):基本排序》

《程序员修炼之路-(3)排序(中):合并和快速排序》

(4)搜索

《程序员修炼之路-(4)搜索(上):线性与二分查找》

《程序员修炼之路-(4)搜索(中):二叉查找树》

《程序员修炼之路-(4)搜索(下):哈希表》

(5)字符串

非常重要,单列一章。图算法也同样重要,但一来可以归入排序或搜索中,二来面试时考的不多,就不单独列了。

(6)设计总结

《如何解题》、穷解、减治、分治、动态规划、贪心。

(7)系统平台

计算机架构(计算机组成原理、汇编语言等)、操作系统(Linux和Windows常用系统API等)、编译链接(编译和链接的原理)。

(8)代码实现

C/C++/Java等主流语言,如何实现我们的设计,包括语言语法、内存分配、封装抽象、分包引库等小细节。

(9)代码设计

抽象层次定义、23种设计模式、重构改善设计。

(10)测试验证

单元测试。

时间: 2024-08-03 03:12:07

程序员修炼之路-(0)目录的相关文章

程序员修炼之路

0.前言:在路上,再上路 在前言<程序员修炼之路-(0)前言:在路上, 再上路>中已经对知识体系进行了梳理,主要分为问题定义.算法与数据结构.系统平台API.编程语言实现.代码设计.测试验证等等.目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分.其他部分之前零零散散有所涉及,之后再慢慢补充. 1.计算机数学 离散数学与具体数学. 2.算法分析设计 对于这一部分的内容编排,主要以<算法设计与分析基础>.<算法>以及LeetCode算法题中的问题分类为横向,以&

程序员修炼之路-(1)基础(中):性能分析

3 算法分析 "分析"二字的含义很广泛,在算法分析的领域,指的就是算法的效率,包括运行时间效率(时间复杂度)和内存空间使用效率(空间复杂度)两方面.同时,研究表明,通常时间方面比空间能取得更大的进展,因此我们进一步将分析的重点放在时间复杂度上. 3.1 算法分析 - 科学实验方法 科学家用来理解自然世界的方法对分析程序的运行时间来说同样有效: 1)     观察:观察自然世界的一些特性,并用准确的度量表示. 2)     假设:假设一个能与观察保持一致的模型. 3)     预测:用上

程序员修炼之路-(1)基础(下):正确性证明

来自<Writing Solid Code>的一则小故事,Donald Knuth在其著名的排版软件TEX的封面上写到:"I believe that the final bug in TEX was discovered and removed on November 27, 1985. But if, somehow, an error still lurks in the code, I shall gladly pay a finder 's fee of $20.48 to

Java程序员修炼之路(一)我们为什么选择Java

我们为什么选择Java大多数人选择Java可能只是因为听说Java前景好.Java比较好找工作.Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么概念的.其实我选择Java也是出于以上的原因,但是现在确实真正地爱上了Java.那么现在我们来分析下Java的好处究竟在哪里.创一个小群,供大家学习交流聊天如果有对学JAVA方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步也希望大家对学JAVA能够持之以恒JAVA爱好群,如果你

程序员修炼之路-(2)线性表(上):数组与链表

1 两块基石 数组与链表构成各种数据结构的基石,是实现所有数据结构必不可少的元素. 1.1 数组 数组一般内置于编程语言中,直接通过索引(index)读写.索引一般为数字,有的语言甚至直接支持如字符串等其他类型的索引.在很多数据结构中都能看到数组的身影,例如字符串.动态数组.堆.栈和队列(用链表也可以,但用数组实现很高效)等. 1.2 链表 概念上都能理解,但实现起来还真有很多容易出错的地方. 实现细节 ?  表头(header):为什么要添加一个表头?因为有了表头,在第一个结点前添加结点或删除

程序员修炼之路-(3)排序(上):基本排序

1 基本排序 对于所有排序算法,被排序元素需要满足下列数学性质: ?  自反性(reflextive):for all v,v=v ?  对称性(antisymmetric):for all v and w,if v<w then w>v and if v=w then w=v ?  传递性(transitive):for all v,w and x,if v<=w and w<=x then v<=x 对于包含这样元素的数组,我们才能对其排序. 1.1 选择排序(selec

程序员修炼之路-(2)线性表(下):栈、队列

2 基础数据结构 数组和链表是实现各种数据结构的基石,本节中的三种最基本的数据结构都可以用数组或者链表来实现. 2.1 栈 用数组实现"栈"非常简单.下面以C++为例,实现一个简单的固定大小的"栈". 首先,接口API定义如下,核心函数就是push()和pop(): 2.1.1 数组实现 下面用数组方式的实现"栈",当然也可以用链表实现数组,但是一般尽管栈会处理很多操作,但任意时刻保存在栈中的元素不会很多,所以使用数组实现比链表会更加高效: Lo

程序员修炼之路-(4)搜索(中):二叉查找树

2 查找:鱼与熊掌 前面已经介绍了线程查找和二分查找的符号表(symbol table)实现,但现代应用的特点是查找与插入或删除操作交叉在一起,无法预测,并且表非常巨大.因此问题的关键就是我们能否设计出具有对数性能的search和insert/delete操作的数据结构和算法?为了实现高效的插入,我们需要链表结构.但是单链表却又阻止了二分查找的使用,因为二分查找依赖数组的快速访问才能快速定位到每次迭代的中间元素."为了结合二分查找的高效和链表结构的灵活性,我们需要更加复杂的数据结构,这就是接下来

Java程序员修炼之道 之 Logging(1/3) - Logback 配置

写在前面的话: 作为<Java程序员修炼之道>博文的第一个主题Logging,我计划中按照如下三篇来写: Logback的简单介绍和配置 在Java代码中如何使用SLF4J来写日志以及写日志的要点 作为一个程序员,在日常工作中如何分析和挖掘Log. PS:默认生成的目录不对,仔细检查过了,我的h1,h2,h3,h4用的都没错. 1. 缘起 写代码中的日志是一个除了用代码实现功能之外最基础最基础的一个技能了,是一个必须掌握的技能.但是目前为止,关于如何日志的文章和书籍还是不多. 1.1 写日志的