最全的计算机基础自学指南!
1,数据结构和算法
程序=数据结构+算法。
数据结构经常和算法放在一起。有些高校有两门课程,分别是《数据结构》和《算法设计与分析》。
这就造成了很多同学的困惑。数据结构和算法有什么区别?甚至有同学认为这是一种。
实际上:
数据结构主要说明数据的组织形式。就是这样存储这些数据的,所以有数组,链表,栈,队列,树和图,这些都是数据结构的关键点。
另一方面,算法专注于想法。比如如何对数组中的元素进行排序,如何找到最大的数和最小的数等等。说白了就是现实中解决问题的思路。于是就有了贪心,动态规划等算法。
数据结构和算法,不管你怎么想,一定要认真研究!无论面试还是考研,都是必须的!
我们来总结一些重要的知识点,这样才能有针对性的学习。
复杂性分析
时间复杂度
空间复杂性
学习数据结构与算法的第一课,我总是选择复杂度分析。在我看来,这是数据结构和算法中最重要的知识点,不接受任何反驳。
文章推荐:
保姆式教学!彻底学会时间复杂性和空间复杂性。
数据结构
数组:数组是一种聚合数据类型,它是几个相同类型的变量按顺序组织的集合。
链表:链表是一种数据结构,数据元素存储在链式存储结构中,其特点是物理不连续。
Stack: Stack是一种特殊的线性表,只能在表的固定端插入和删除数据节点。
Queue: Queue是一种类似于stack的特殊线性表。与栈不同,队列只允许在表的一端插入,在另一端删除。
哈希表:哈希表来源于哈希函数。它的思想是,如果结构中存在一条key和T相同的记录,就必须在F(T)的存储位置中找到,这样就可以直接得到被搜索的记录,而不需要进行比较。
堆:堆是一种特殊的树状数据结构,通常讨论的堆是二进制堆。
树:树是典型的非线性结构。它是一个有两个节点的有限集合k。
图形:图形是另一种非线性数据结构。在图结构中,数据节点一般称为顶点,边是有序的偶数对顶点。
操作数据结构
查找:在数据结构中查找满足特定条件的节点。通常,给定某个字段的值,找到具有该字段值的节点。
插入:向数据结构中添加一个新节点。
删除:从数据结构中删除指定的节点。
修改:更改指定节点的一个或多个字段的值。
排序:按照指定的顺序重新排列节点。例如递增或递减。
数据结构书籍推荐
大话数据结构,数据结构和算法分析。
《大话数据结构》这本书与市面上的同类数据结构书相比,更加有趣易读,算法讲解详细深刻。
是非常适合自学的读物。
本书通篇以有趣的方式叙述,引用了大量生活知识进行类比,并充分运用图形语言体现抽象内容,对数据结构中涉及的一些经典算法进行了逐行分析,并与多种算法进行了比较。
如果你还是不能理解,你可以看我的图,虽然有点慢,但是绝对容易理解:
数组:球遭遇数组滑铁卢,面试官建议回村养猪。
链表:链表,几笔就能看懂!
堆栈和队列:哼!“栈”住,排队!
弦乐:你了解弦乐吗?
算法
学习算法的套路很简单,多看多写多用电脑。
回溯算法
分治算法
枚举算法
贪婪算法
动态规划
搜索算法
二进位检索
哈希表查找
树形结构查找
串匹配
暴力匹配
knuth morris pratt算法
10大排序算法
冒泡排序
选择排序法
插入排序
谢尔分类
合并分类
堆排序
快速排序
计数排序
基数排序
桶分类
算法书籍推荐
算法图
丰富的例子,图文并茂,这是一个小说般的算法介绍。
无论你是职业程序员,编程爱好者,还是需要复习算法的计算机专业学生,这本书都是你最好的选择。
书中的前三章将帮助你打好基础,带你学习二分搜索法、大O表示、两个基本数据结构和递归。
其余页面将主要介绍广泛使用的算法,包括:面对具体问题时的求解技巧,如何时采用贪婪算法或动态规划;哈希表的应用;图形算法;Kzui最近邻算法。
算法(第四版)
算法领域的经典工具书,囊括了几十年进化而来的算法核心知识体系。
书中讲解了多种算法和数据结构,让你可以在各种计算机环境下实现、调试和应用。
作为算法领域的经典参考书,本文全面介绍了算法和数据结构的必要知识,特别讨论了排序、搜索、图形处理和字符串处理。
第四版特别给出了每个程序员都应该知道和了解的50种算法,并提供了实际代码。
视频教程推荐
《数据结构》由浙江大学教授和何教授联合授课。课程优秀,体系完整,上课体验好,难度系数在线,质量好。可以学到很多思维方法和技巧,想学好数据结构的同学一定不要错过。
《数据结构与算法》,这门课程最大的特点是理论与实践相结合。您将学习解决各种计算问题的算法技巧,实现约100算法编码问题。
网站推荐
如果你仍然觉得很难学,你可以用下面的网站来学习。
数据结构与算法动态可视化网站。
锻炼
数据结构与算法的学习往往伴随着“刷题”。如果没有特殊情况,建议你刷LeetCode。
对于LeetCode来说,问题有多种解法,我们往往追求最优解。下面是清华学长整理的LeetCode最优解,强烈推荐:
两个人在一起,应该是非常放松和自由的。
2、计算机组成原理
计算机组成原理就是“计算机”和“组成”的原理。
我认为它是所有计算机基础课程中最难的一门课。整个课程的核心是通过使用数字逻辑电路和触发器,建立一个可以运行汇编指令的机器。
书籍推荐
计算机是如何运行的?程序如何运行?
正是因为计算机组成原理比较难学,所以对于初学者来说,相对于其他课程,这门课入门书籍的选择更加友好。
电脑怎么运行,程序怎么运行?这两本书很薄。作者用白话文阐述知识,图文并茂,对初学者来说相当不错。
相比于学习的心态,我更多的是抱着好奇的心态去阅读。
计算机是如何运行的?
本书倡导在计算机飞速发展、技术不断创新的今天,回归计算机基础知识。通过探索计算机的本质,可以增强工程师对计算机的兴趣,面对复杂的最新技术,可以快速掌握要点,灵活运用。
程序是如何运行的
本书从计算机内部结构入手,详细讲解了二进制、内存、数据压缩、源文件与可执行文件的关系、操作系统与应用程序、汇编语言、硬件控制方法等内容。以插图的形式。目的是让读者知道从用户双击程序图标到程序开始运行之间发生了什么。
视频推荐
该视频首次推广卡内基梅隆大学的“深入理解计算机系统”系列课程。英语不好吗?没关系,有中英文字幕。看完这个视频,我顺利拿到了知识+6。
看这个视频的配套教材是《计算机系统深度理解》。
3.操作系统
无论你学什么语言,都无法避免和操作系统打交道。所有语言的最终执行取决于操作系统。比如你学Java,用多线程技术,操作系统其实是负责管理进程和线程的。
如果不了解操作系统,以后学习编程语言的高级特性,涉及线程调度、内存分配,或者学习Linux相关知识,都会无所适从。
只有学习了操作系统,才能更好地学习其他语言和技术。所以操作系统对于程序员来说是一门高深的学问。
书籍推荐
入门推荐:操作系统和现代操作系统入门。
深度系列:深入了解计算机系统,从程序员的角度了解计算机系统。
这是一本入门级的书。其实这本书并不“深入”,讲的内容也比较浅。
“覆盖面广”其实是这本书最大的优点。它告诉我们计算机是如何设计和工作的,操作系统的关键点是什么,它们的功能是什么。
读完这本书,我们可以对计算机系统各组成部分的工作模式有一个理性的认识。一定程度上其实是在训练思维方式——计算思维。
视频推荐
操作系统,说实话,不建议一开始就直接看。因为这本书看起来真的很无聊。
这里推荐清华大学的操作系统课程,分为上下两级。看视频的时候可以结合以上书籍推荐。
可以看(一)带操作系统介绍,看(二)带现代操作系统。
4.计算机网络
工作中经常用到计算机网络相关知识。
学习计算机网络,需要了解Socket编程,TCP/IP网络模型,OSI七层网络架构,以及如何将一个数据包一层一层的打包,然后一层一层的解包,从客户端发送到服务器。
但是计算机网络就好学多了,因为计算机网络不是抽象的,现实生活中可以找到例子。
书籍推荐
图形HTTP
图文并茂,通俗易懂,非常适合入门。让一本写作的书容易阅读,并且涵盖主要的知识领域,这并不容易。这本书做到了,从HTTP知识的覆盖面到可读性都相当不错。
本书的特点是在讲解的同时,辅以大量生动的通信图例,更好地帮助读者深入理解HTTP通信过程中客户端与服务器端的交互。
计算机网络
大部分都在用谢希仁的《计算机网络》,很好,也很通俗易懂,也是考研408的常用教材。
视频推荐
首先要大力推广胡大老师的计算机网络微课堂,这是最好的带动画的计算机网络视频课程。老师讲课逻辑清晰,特别好理解。
5.数据库ˌ资料库
数据库是存储数据的地方,但它不仅仅是这么简单。
学习数据库,不仅要知道SQL语句和表设计结构的基本部分,还要知道索引、慢查询优化和配置参数优化。
深入学习SQL优化、备份恢复、架构优化等高级内容。
书籍推荐
入门系列:SQL基础教程,SQL学习指南,数据库系统入门。
这本书的介绍节奏更加温和,用大胆的插图和关键词将知识介绍得更加生动,适合零基础的学生。
对于零基础的朋友来说,米克的sql基础课程更容易理解和学习,非常适合初学者学习。
深度系列:MySQL技术内幕-InnoDB存储引擎,Redis设计与实现。