2020 年毕业生,距离现在刚好在公司搬了一年多砖,从提升自己的编程能力 + 职场面试来说,帅地今天跟各位学习学妹讲一讲 CS 专业的几门核心课程,我先做一个排序,我觉得如下 5 门课是最值得在校生去死磕的。
1、数据结构与算法
2、计算机网络
3、操作系统
4、计算机组成原理
5、汇编语言
下面跟大家说一说这些课程的一些重点知识,以防大家漫无目的着学习
大学第一学期你入门了某种语言之后,就要开始学习数据结构与算法。当然,不一定是第一学期,对于非科班的也一样,也是建议这个学习顺序。当然,你有自己的目标,完全可以按照自己的来。
我的文章是主写数据结构与算法的,我秋招也是靠着这个优势拿到 offer 的,所以我认为数据结构与算法是非常非常重要的,可能你会听到工作都基本没用到这些知识啊,或者库函数都帮我们封装好了啊,我们干嘛要学。
如果你这样想的,那你就错了。对于想要找工作的来说,这方面的知识是必考的,所以你得学;对于已经工作的来说,这方面的知识,可以让你学习到很多设计思想,所谓 数据结构 + 算法 = 程序,而且你学了这个,你会发现学习其他知识,上手的特别快。综上,数据结构与算法必学。
好吧,上面扯了这么多,就是告诉你,数据结构与算法的重要性,好了,下面我介绍下入门数据结构必学的有哪些,不过你跟着书本的学习顺序来就是了。
1、基础数据结构的学习
1、时间复杂度、空间复杂度
2、链表、队列、栈
3、树(二叉树,查找二叉树、AVL树,红黑树等)
4、图(图有好多种算法,深度/广度搜索,最短路径、最小生存树等)
如果你是科班的,那么这些我觉得你大一第二学期都学完是最好的了,没学完也问题不大,有些人可能是先教《离散数学》这本课,为数据结构与算法做铺垫。
书籍推荐:《大话数据结构》、《数据结构与算法分析:C语言描述版》,学哪一本?都可以,问题不大,我当时学的是第二本。大家记得根据自己的语言去学,我上面列举的,都是用 c 语言来实现的。
视频:我只看过《小甲鱼的数据结构与算法》视频,你们自己看着办吧。
2、算法的学习
在大一大二,真心建议你们把算法基本功打好,后面就真的没啥时间刷题之类的了,因为无论你以后要学习哪个方向的,算法都是实用的,会一些算法,说话也都自信了。算法的学习,刷题是必须的了,但不建议盲目刷题,而是先学习一些算法思想,在找对应的题刷,要学的主要有:
1、十大排序算法
2、递归、贪心、回溯、动态规划、枚举等
推荐书籍:《阿哈算法》、《算法设计与分析基础》适合入门;《算法第四版》、《算法导论》、《编程之美》适合进阶
视频:这种还是挺建议看书,我没看过视频,,这里就不介绍了。
3、保持算法的学习
算法的学习,真的是靠积累的,而刷题是必须的。而且学校都会举办一些比赛,这里还是比较建议大家去参见的,这样也能让你更加有激情着去学习。当然,每年都会有很多 ACM 编程大赛,要不要参加呢?这个看你了,也不是说参加就一定好,看你自己吧
大家可以在 leetcode 长期保持刷题,一天一两道,或者一个星期三四道都行。
这里给大家推荐一个大佬的刷题笔记
下载链接:BAT大佬的刷题笔记太经典
把这份笔记突击学习一下,很多算法考察,基本都稳了
另外,再给大家推荐一份某大佬的 leetcode 刷题笔记,汇聚了上千道 leetcode 题解,并且代码都是 beat 100%:
下载链接:leetcode 分类题解(最优解)
上面提到的书籍可以在这个 GitHub 上下载:常用计算机类书籍汇总
在我们用的程序中,99% 都离不开网络,作为一个程序员,我觉得了解计算机网络是必须的,在大学的课程中,一般也都会开设这一门课。
在我学习这门课之前,我就特别好奇,一台电脑是怎么把消息发给另外一台电脑的呢?例如:
1、两台电脑啥线路也没有相连,怎么就能把消息发送给他呢?
2、世界上的电脑那么多,咋就能找到那台特点的电脑呢?有人说我们可以 MAC 或者 IP 来唯一标识啊,可是,我就有点疑惑了,世界那么大,电脑那么多,有了这个标识,我们该怎么找到他呢?遍历所有电脑?
3、多个程序同时发消息给一台电脑,电脑是如何准确把这些消息拿给这些不同程序的呢?
4、发送的消息丢失了怎么办?
总之,一大堆疑问,看了计算机网络之后,才豁然开朗。
所以这里,我是强烈建议大家学一下的,在面试中,计算机网络也是高频考点,这里我大致总结一下一些必学协议以及面试高频考点:
1、http协议,包括:封装格式,常见响应码,不同版本的区别,常见请求方法,存在哪些安全隐患,啥是无状态协议等。
2、https协议:http 是明文传输,https 是加密安全的,需要知道 https 是如何加密的、数字证书如何形成,啥的对称加密、非对称加密。
3、TCP协议:三次握手、四次挥手、如何保证可靠传输、流量控制、拥塞控制。
4、UDP:这个大致了解即可,好像内容比较少
5、DNS、ICMP、ARP、DHCP(我就不一个一个写了)
上面写的这些协议,我觉得是比较重要的,特别是在面试中。我公众号文章也写了好几篇这些协议的,大家可以去计算机基础那个模块找。
对于新手推荐视频:可以看韩老师讲的视频,在哔哩哔哩搜索韩老师就可以找到 韩老师讲高校《计算机网络原理》。
推荐书籍:《计算机网络:自顶向下》、《图解http》
上面提到的书籍可以在这个 GitHub 上下载:常用计算机类书籍汇总
操作系统也是一门非常重要的知识,在面试中也是问的非常多(当然,看公司,有些公司技术栈是 Java 的,可能问的比较少)。对于操作系统,要学的也挺多,例如:
啥是进程,啥是线程,他们的本质区别?我们运行一个程序时,数据放在哪里?代码放在哪里?咋就还要分堆和栈?线程切换时是上下文是啥意思?
虚拟地址是什么鬼东西?线程需要那么多种状态干啥子?什么是乐观锁、悲观锁?死锁是怎么造成的?解决死锁的策略有哪些?等等
有人说学操作系统太他妈枯燥了,确实挺枯燥,不过说实话,我还是学的挺有意思的,感觉可以学到很多种策略,一种比一种好,每次看完都是:我去,咋我就想不到呢。我觉得,对于前期,我们需要多参考别人的策略,看多了,有了一定的基础,慢慢形成自己的策略,总之,看这些书,不单要掌握这些知识点,更重要的是一种思维逻辑的提升
对于操作系统,我总结了下面一些比较核心,面试相对容易被考到的。
1、进程的通信方式
2、进程、线程究竟是由什么组成的?有哪些数据?
3、内存管理,包括:虚拟内存(重点)、分页、分段、分页系统地址映射、内存置换算法(重点)。
4、死锁的处理策略(死锁预防、死锁检测与恢复、死锁避免)
5、进程调度算法
6、磁盘寻道算法
上面说的这些,我认为是比较重要的,如果你没学过,我相信学了之后,你可以学到很多东西,知识点只是其中之一。
推荐视频:这个我没看过视频,所以想学的,我推荐去中国mooc大学找各大高校的课,也可以去国外找对应的课。
推荐书籍:我看过的书籍是《操作系统—精髓与设计原理(第八版)》,不过大佬们都推荐《深入理解计算机操作系统(原书第三版)》,我看过目录,感觉还不错,这里也推荐这一本。不过对于零基础的,我建议可以先看一本专门给小白看的书:《程序是如何跑起来的》。
我觉得,如何有时间,学习下汇编是必须的,学习了汇编,能够更好着帮助我们知道计算机是如何处理程序代码的,例如寄存器和内存是如何使用的?循环、函数调用、数组是如何实现的?地址是怎么一回事?等等。
很多二进制代码是可以反编译成汇编的,如何你会汇编,那么可以帮助我们更好着去理解一些东西。所以这里建议大家学习下汇编,并且要动手写一些程序。
对于汇编的资料,我可能没啥好推荐的,自己看的不多。看过两本书,对于入门的,我建议看 王爽的那本书《汇编语言(第三版)》,不过这本只适合入门,如果想继续,可以看《汇编程序设计》
另外,计算机基础的部分视频,可以在这里下载
计算机基础三门课视频下载、
如果觉得有帮助,也要记得来个赞啊,只收藏不点赞都是刷流氓,嘻嘻
作者:大家好,我是帅地,从大学、自学一路走来,深知算法,计算机基础知识的重要性,目前专注于写这些底层知识,提升我们的内功,帅地期待你的关注,和我一起学习,点击了解我四年大学学习之路 转载说明:未获得授权,禁止转载