如题所述
计算机基础最全自学指南如下:
1、数据结构与算法
程序=数据结构+算法。
数据结构经常与算法放在一起,在有些高校,会存在“数据结构”和“算法设计与分析”这样两门课。
这就造成很多同学懵圈,数据结构与算法有什么区别?甚至有些同学认为这就是一种。
其实吧:
数据结构主要讲解数据的组织形式。就是我们要怎样把这些数据存储起来,所以有数组、链表、栈、队列、树、图,这是数据结构的重点。
算法,则注重的是思想。比如数组里的元素怎么排序、怎么找到最大的数和最小的数等等。说白了就是解决现实中问题的思想。所以才会有贪心、动态规划等这些算法。
数据结构与算法,不管你怎么想,一定要认真学!不管面试还是考研都是必考!
下面总结一些重要的知识点吧,这样才能有针对的学。
【复杂度分析】
时间复杂度
空间复杂度
学习数据结构与算法的第一课,我永远都选复杂度分析,在我看来,这是数据结构与算法中最重要的知识点,且不接受任何反驳。
文章推荐:
保姆级教学!彻底学会时间复杂度和空间复杂度
【数据结构】
数组(Array):数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。
链表(Linked List):链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。
栈(Stack):栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。
队列(Queue):队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。
散列表(Hash table):散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。
堆(Heap):堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。
树(Tree):树是典型的非线性结构,它是包括,2个结点的有穷集合K。
图(Graph):图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。
【操作数据结构】
查找:数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。
插入:往数据结构中增加新的节点。
删除:把指定的结点从数据结构中去掉。
修改:改变指定节点的一个或多个字段的值。
排序:把节点按某种指定的顺序重新排列。例如递增或递减。
【数据结构书籍推荐】
《大话数据结构》、《数据结构与算法分析》
《大话数据结构》这本书与市场上的同类数据结构图书相比,内容更加趣味易读,算法讲解细致深刻。
是一本非常适合自学的读物。
这本书通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。
如果你还是看不懂,可以看我写的图解,不过有点慢,但是绝对通俗易懂:
数组:蛋蛋惨遭数组滑铁卢,面试官建议回村养猪。
链表:链表,画几下就整明白了!
栈和队列:呔!“栈”住,队列!
字符串:关于字符串,你知道这些么?
【算法】
学习算法的套路很简单,多看、多写、多上机。
回溯算法
分治算法
枚举算法
贪心算法
动态规划
查找算法
二分查找
散列表查找
树结构查找
字符串匹配
暴力匹配
KMP算法
10大排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
堆排序
快速排序
计数排序
基数排序
桶排序
【算法书籍推荐】
《算法图解》
示例丰富,图文并茂,这是一本像小说一样的算法入门书。
无论你是专业程序员,还是编程爱好者,亦或是需要重温算法的计算机专业学生,这本书都是你不二的选择。
书中的前三章将帮助你打下基础,带你学习二分查找、大O表示法、两种基本的数据结构以及递归等。
余下的篇幅将主要介绍应用广泛的算法,具体内容包括:面对具体问题时的解决技巧,比如,何时采用贪婪算法或动态规划;散列表的应用;图算法;Kzui近邻算法。
《算法(第4版)》
算法领域的经典参考书,包含了经过几十年演化而成的算法核心知识体系。
书中讲解了多种算法和数据结构,让你能够在各种计算机环境下实现、调试并应用它们。
作为算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述
第4版具体给出了每位程序员应知应会的50个算法,提供了实际代码。
【视频教程推荐】
《数据结构》,浙大陈越和何钦铭教授联合授课,课程非常棒体系完整,上课体验不错,同时难度系数在线,质量也很好。能够学到很多的思维方法和技巧,想学好数据结构的同学们千万不要错过。
《数据结构与算法》,这门课程的最大特点是理论和实践的结合,你将学习到解决各种计算问题的算法技巧,并实现大约100个算法编码问题。
【网站推荐】
如果还是觉得学起来很吃力,可以借助下面这个网站来学习。
VisuAlgo,数据结构和算法动态可视化网站。
【刷题】
数据结构与算法的学习,往往要伴随着“刷题”,如果没特殊情况,我建议大家刷LeetCode就好。
针对LeetCode,题的解法有很多,我们往往追求的是最优解,这里有一份清华学长整理的LeetCode最优解,强烈推荐:
两者配合起来应该非常舒爽。
2、计算机组成原理
计算机组成原理,即“计算机”“组成”的“原理”。
我觉得它是所有计算机基础课程中最难学的一门课,整个课程的核心就是使用数字逻辑电路和触发器搭建一个可以运行汇编指令的机器。
【书籍推荐】
《计算机是怎样跑起来的》、《程序是怎样跑起来的》。
正是因为计算机组成原理难学,所以对于初学者来说,比起其他几门,这门课的入门书籍选择就更得友好。
《计算机是怎么样跑起来》和《程序是怎么跑起来的》,这是两本很薄,作者用大白话的方式来阐述知识,图文并茂,对初学者来说相当nice。
相比学习的心态,更多是带着好奇心的心态去读。
《计算机是怎样跑起来的》
本书倡导在计算机迅速发展、技术不断革新的今天,回归到计算机的基础知识上。通过探究计算机的本质,提升工程师对计算机的兴趣,在面对复杂的最新技术时,能够迅速掌握其要点并灵活运用。
《程序是怎么跑起来的》
本书从计算机的内部结构开始讲起,以图配文的形式详细讲解了二进制、内存、数据压缩、源文件和可执行文件、操作系统和应用程序的关系、汇编语言、硬件控制方法等内容,目的是让读者了解从用户双击程序图标到程序开始运行之间到底发生了什么。
【视频推荐】
视频首推卡内基梅隆大学的《深入理解计算机系统》系列课程,英语不好?没关系,有中英文字幕,看完这套视频,知识+六级顺利拿到手。
看这个视频的配套教材是《深入理解计算机系统》。
3、操作系统
无论你学习什么语言,都避免不了和操作系统打交道。所有语言的最后执行,都是靠操作系统。比如你学习Java,用到多线程技术,实际上操作系统才是负责管理进程和线程的。
不懂操作系统,你在未来学习编程语言的高级特性,涉及到线程进程调度,内存分配,或者是学习Linux相关的知识时,都会一头雾水。
只有学会了操作系统,才能够更好地学习其他语言和技术。所以,操作系统是程序员进阶必会的知识。
【书籍推荐】
入门推荐:《操作系统导论》、《现代操作系统》。
深入系列:《深入理解计算机系统》,以程序员的视角理解计算机系统。
这是一本入门级别的书,这本书其实并不“深入”,它谈论的内容还是相对比较浅的。
“覆盖面广”,其实就是这本书的最大优点。它告诉我们计算机是如何设计和工作的,操作系统有哪些重点,它们的作用又是什么。
看看这本书后,我们就可以对计算机系统各组件的工作方式有了理性的认识。在一定程度上,其实它是在锻炼思维方式——计算思维。
【视频推荐】
操作系统,说实话,在刚开始学的时候不建议直接闷头看书。因为书看起来是真没意思。
这里推荐清华大学的操作系统课程,分上下。看视频的时候可以结合着上面的【书籍推荐】。
看(上)的时候可以搭配《操作系统导论》,看(下)的时候可以搭配《现代操作系统》。
4、计算机网络
计算机网络的相关知识在工作时使用的频率较多的。
学习计算机网络,你需要懂得Socket编程,知道TCP/IP网络模型,了解OSI七层网络架构,知道一个数据包是如何层层包装,再层层拆包,从客户端发送到服务端。
但是计算机网络好学的多,因为计算机网络不抽象,在现实生活中,都能找的到例子。
【书籍推荐】
《图解HTTP》
图文并茂,简单易懂,很适合入门。把一本书写薄还好读并且覆盖主要的知识范围并不是一件容易的事情。这本书做到的,而且从对HTTP知识的覆盖程度到易读性都做得相当好。
本书的特色为在讲解的同时,辅以大量生动形象的通信图例,更好地帮助读者深刻理解HTTP通信过程中客户端与服务器之间的交互情况。
《计算机网络》
绝大部分都在用谢希仁的这本《计算机网络》,讲的很好,浅显易懂,同样也是考研408的常用教材。
【视频推荐】
首先必须强推湖大教书匠的计算机网络微课堂,一个动图做的最好的计算机网络视频课程,老师讲课逻辑清晰而且特别容易懂。
5、数据库
数据库就是存储数据的地方,但也不只是这么简单。
学习数据库,不仅要懂得SQL语句,表设计结构这些基础部分,还要懂索引、慢查询优化,配置参数调优。
再深入点儿还要学习SQL优化、备份与恢复、架构优化等等进阶内容。
【书籍推荐】
入门系列:《SQL基础教程》、《SQL学习指南》、《数据库系统概论》。
这本书介绍的节奏的更加平缓,并且用图示和关键字加粗更加生动地介绍知识,适合零基础的学生。
对于零基础的朋友来说Mick的《sql基础教程》更容易看懂学会,非常适合入门者学习。
深入系列:《MySQL技术内幕——InnoDB存储引擎》、《Redis设计与实现》。