程序员练级攻略:理论学科
数据结构与算法
不管是作业务仍是作底层系统,常常须要使用算法处理各类各样的问题。html
- 基础知识:《算法》,是算法领域经典的参考书,不但全面介绍了关于算法和数据结构的必备知识,还给出了每位程序员应知应会的 50 个算法,并提供了实际代码。最不错的是,其深刻浅出的算法介绍,让一些比较难的算法也变得容易理解,尤为是书中对红黑树的讲解很是精彩。其中,还有大量的图解,详尽的代码和讲解,也许是最好的数据结构入门图书。很差的是不深,缺少进一步的算法设计内容,甚至连动态规划都未说起。
-
- 算法书比较枯燥的话,你能够看看这本有趣的《算法图解》。
- 理论加持:偏于理论方面的书——《算法导论》。
- 思惟改善:《编程珠玑》来引导读者理解并学会解决这些问题的方法。
算法训练: LeetCode,两类算法题git
- 基础算法题。其中有大量的算法题,解这些题都是有套路的,不是用递归(深度优先 DFS、广度优先 BFS),就是要用动态规划(Dynamic Programming),或是折半查找(Binary Search),或是回溯(Back tracing),或是分治法(Divide and Conquer),还有大量的对树、数组、链表、字符串和 hash 表的操做。经过作这些题能让你对这些最基础的算法的思路有很是扎实的了解和训练。
- 编程题。好比:atoi、strstr、add two nums、括号匹配、字符串乘法、通配符匹配、文件路径简化、Text Justification、反转单词等,这些题的 Edge Case 和 Corner Case 有不少。这些题须要你想清楚了再干,只要你稍有疏忽,就会有几个 case 让你痛不欲生,并且一不当心就会让你的代码写得又臭又长,没法阅读。经过作这些题,能够很是好地训练你对各类状况的考虑,以及你对程序代码组织的掌控(其实就是其中的状态变量)。
文章做者在 Leetcode 上作的一些题的代码在这—— GitHub程序员
最后,咱们要知道这个世界上的数据结构和算法有不少,下面给出了两个网站。github
其它理论基础知识
- 《数据结构与算法分析》,这本书曾被评为 20 世纪顶尖的 30 部计算机著做之一,做者 Mark Allen Weiss 在数据结构和算法分析方面卓有建树,他在数据结构和算法分析等方面的著做尤为畅销,并广受好评,已被世界 500 余所大学用做教材。
- 《数据库系统概念》,它是数据库系统方面的经典教材之一。国际上许多著名大学包括斯坦福大学、耶鲁大学、德克萨斯大学、康奈尔大学、伊利诺伊大学、印度理工学院等都采用本书做为教科书。这本书全面介绍了数据库系统的各类知识,透彻阐释数据库管理的基本概念。不只讨论了数据库查询语言、模式设计、数据仓库、数据库应用开发、基于对象的数据库和 XML、数据存储和查询、事务管理、数据挖掘与信息检索以及数据库系统体系结构等方面的内容,并且对性能评测标准、性能调整、标准化以及空间与地理数据、事务处理监控等高级应用主题进行了普遍讨论。
- 《现代操做系统》,这本书是操做系统领域的经典之做,书中集中讨论了操做系统的基本原理,包括进程、线程、存储管理、文件系统、输入 / 输出、死锁等,同时还包含了有关计算机安全、多媒体操做系统、掌上计算机操做系统、微内核、多核处理机上的虚拟机以及操做系统设计等方面的内容。
- 《计算机网络》,这本书采用了首创的自顶向下方法,即从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深刻浅出,注重教学方法,理论与实践相结合。新版中还增长了无线和移动网络一章,并扩充了对等网络、BGP、MPLS、网络安全、广播选路和因特网编址及转发方面的材料。是一本不可多得的教科书。
- 《计算机程序的构造和解释》,这本书也很经典,是 MIT 的计算机科学系的教材。这本书中主要证明了不少程序是怎么构造出来的,以及程序的本质是什么。整本书主要是使用 Scheme/Lisp 语言,从数据抽象、过程抽象、迭代、高阶函数等编程和控制系统复杂性的思想,到数据结构和算法,到编译器 / 解释器、编程语言设计。
- 《编译原理》,这本书又叫 " 龙书 ",其全面、深刻地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,本书进行了全面的修订,涵盖了编译器开发方面的最新进展。每章中都提供了大量的系统及参考文献。