程序员修炼之路

时间:2022-05-10 02:52:28

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

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

(一)计算机科学

离散数学与具体数学。

(二)算法分析设计

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

1)基础

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

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

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

2)线性表

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

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

3)排序

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

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

4)搜索

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

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

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

5)字符串

非常重要,单列一章。

6)图

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

7)设计总结

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

附:《算法导论学习笔记》

当年《算法导论》的学习笔记,坚持到动态规划就浅尝辄止了,DP挺难……

《<算法导论>第二章 入门》

《<算法导论>第6 堆排序 (1)最大堆与堆排序

《<算法导论>第6 堆排序 (2)优先级队列》

《<算法导论>第6 堆排序 (3)K路归并

《<算法导论>第8 线性时间排序 (1)计数排序

《<算法导论>第6 堆排序 (4)Young氏矩阵

《<算法导论>第7 快速排序 (四种变形)

《<算法导论>第9 顺序统计学 (1)最小值和最大值

《<算法导论>第9 顺序统计学 (2)随机选择

《<算法导论>第10 基本数据结构 (2)链表

《<算法导论>第11 散列表 (1)直接寻址表

《<算法导论>第11 散列表 (2)散列表

《<算法导论>第11 散列表 (3)开放寻址

《<算法导论>第12 二叉查找树 (1)遍历

《<算法导论>第12 二叉查找树 (2)查找、插入与删除

《<算法导论>第12 二叉查找树 (3)基数树

《<算法导论>第14 数据结构的扩张 (1)动态顺序统计

《<算法导论>数据结构的扩张 (2)

《<算法导论>第15 动态规划 (1)装配线调度

关于算法学习的总结和感悟

(三)系统平台

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

1)计算机架构

       《深入理解计算机系统》,绝对的经典,永远的CSAPP

六星经典CSAPP笔记(1)计算机系统巡游

《六星经典CSAPP笔记(2)信息的操作和表示

《六星经典CSAPP笔记(3)程序的机器级表示

2)操作系统

《操作系统概念》9分的好书,不知道与《现代操作系统》相比哪本更好:

《<Operating System Concept>进程基础知识

《<Operating System Concept>进程调度

Linux C一站式学习》,挺经典的一本书,还是国产吧:

              《<Linux C一站式学习>第一章 程序的基本概念

《<Linux C一站式学习>第三章 简单的函数

《<Linux C一站式学习>第七章 结构体

《<Linux C一站式学习>第八章 数组

       学习操作系统特别是LinuxShell也是必不可少,有一阵子还很热衷写Shell

              《<Shell脚本学习指南>第一章 背景知识》

              《<Shell脚本学习指南>第二章 学习笔记

《<Shell脚本学习指南>第三章 查找与替换

《<Shell脚本学习指南>第四章 文本处理工具

Windows平台下的编程实践:

       《<Windows游戏编程大师技巧>二、Windows编程模型

       《<Windows游戏编程大师技巧>三、Windows高级编程

       《<Windows游戏编程大师技巧>四、GDI、控件和突发奇想

       《<Windows游戏编程大师技巧>五、DirectX基础知识和令人生畏的COM

       《<Windows程序设计>第一章 起步

       《<Windows程序设计>第二章 Unicode简介

       《<Windows程序设计>第三章 窗口和消息

3)计算机网络

Java网络编程基础:

《Java Socket编程(一)TCP/IP简介》

《Java Socket编程(二)Socket基础

《Java Socket编程(三)发送和接收深入

《Java Socket编程(四)Socket进阶

《Java Socket编程(五)NIO

4)数据库

       这一部分目前比较杂,之前看的《数据库概念》没有及时整理,待补充。

              《<高性能MySQL>读书笔记(上)

《10条关于数据库的技巧和经验》

《<MongoDB权威指南>入门笔记

5)编译链接

 

(四)编程实现

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

       C语言:

《<C程序设计语言> 第一章导言

《<C程序设计语言> 第二章 类型、运算符与表达式

《<C程序设计语言> 第三章 控制流

《<C程序设计语言> 第四章 函数和程序结构

《<C和指针>读书笔记》

《<C和指针>第14 预处理器》

深入学习有趣的位运算

附:我的业余实践项目

主要是为了练习C,业余时间写了不少代码,从Web到桌面到游戏到算法类的,涉猎有些杂了… 但不管怎样,收获还是很大,未来还是要坚持多实践,多写一些实用的小东西!

用Qt开发简单的浏览器(一)用Qt开发简单的浏览器(二)

《PSP应用开发入门

《<Windows游戏编程大师技巧> T3D游戏控制台程序实例及第一部分总结

我的第一个Chrome插件:天气预报应用

贝叶斯公式与拼写检查器《Trie的应用及拼写检查器的优化

开发一个小工具重温C#经典问题

       《Java版的Redis

       用Groovy和JFreeChart生成报表

(五)代码设计

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

(六)测试验证

单元测试等技术。