在前言中已经对知识体系进行了梳理,主要分为问题定义、算法与数据结构、系统平台API、编程语言实现、代码设计、测试验证等等。目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分。其他部分之前零零散散有所涉及,之后再慢慢补充。
(一)计算机科学
离散数学与具体数学。
(二)算法分析设计
对于这一部分的内容编排,主要以《算法设计与分析基础》、《算法》以及LeetCode算法题中的问题分类为横向,以《算法设计与分析基础》中罗列的经典设计技巧为纵向,贯穿每一小节。因为传统算法书籍的结构经常是为了讲算法而讲,目录内容分类都很死板。而我想要的是解决这一类问题有哪些算法?都是用什么技巧和思路设计的?
(1)基础
《程序员修炼之路-(1)基础(上):算法设计》
(2)线性表
(3)排序
《程序员修炼之路-(3)排序(中):合并和快速排序》
(4)搜索
《程序员修炼之路-(4)搜索(上):线性与二分查找》
《程序员修炼之路-(4)搜索(下):哈希表》
(5)字符串
非常重要,单列一章。
(6)图
图算法也同样重要,但一来可以归入排序或搜索中,二来面试时考的不多,可以不单独列。
(7)设计总结
《如何解题》、穷解、减治、分治、动态规划、贪心。
附:《算法导论学习笔记》
当年《算法导论》的学习笔记,坚持到动态规划就浅尝辄止了,DP挺难……
《<算法导论>第12章 二叉查找树 (2)查找、插入与删除》
《<算法导论>第14章 数据结构的扩张 (1)动态顺序统计》
(三)系统平台
计算机架构(计算机组成原理、汇编语言等)、操作系统(Linux和Windows常用系统API等)、编译链接(编译和链接的原理)。
(1)计算机架构
《深入理解计算机系统》,绝对的经典,永远的CSAPP:
(2)操作系统
《操作系统概念》,9分的好书,不知道与《现代操作系统》相比哪本更好:
《<Operating System Concept>进程基础知识》
《<Operating System Concept>进程调度》
《Linux C一站式学习》,挺经典的一本书,还是国产吧:
学习操作系统特别是Linux,Shell也是必不可少,有一阵子还很热衷写Shell:
Windows平台下的编程实践:
《<Windows游戏编程大师技巧>二、Windows编程模型》
《<Windows游戏编程大师技巧>三、Windows高级编程》
《<Windows游戏编程大师技巧>四、GDI、控件和突发奇想》
《<Windows游戏编程大师技巧>五、DirectX基础知识和令人生畏的COM》
(3)计算机网络
Java网络编程基础:
(4)数据库
这一部分目前比较杂,之前看的《数据库概念》没有及时整理,待补充。
(5)编译链接
(四)编程实现
C/C++/Java等主流语言,如何实现我们的设计,包括语言语法、内存分配、封装抽象、分包引库等小细节。
C语言:
附:我的业余实践项目
主要是为了练习C,业余时间写了不少代码,从Web到桌面到游戏到算法类的,涉猎有些杂了… 但不管怎样,收获还是很大,未来还是要坚持多实践,多写一些实用的小东西!
《用Qt开发简单的浏览器(一)》和《用Qt开发简单的浏览器(二)》
《<Windows游戏编程大师技巧> T3D游戏控制台程序实例及第一部分总结》
《贝叶斯公式与拼写检查器》和《Trie的应用及拼写检查器的优化》
(五)代码设计
抽象层次定义、23种设计模式、重构改善设计。
(六)测试验证
单元测试等技术。