飞道的博客

大学最应该学习的 5 门课, 毕业后大厂 Offer 直接拿到手软!

347人阅读  评论(0)

时间如白驹过隙,我竟然已经是一名拥有 13 年编程经验的老油条了!

有些自豪,因为自己从大一就开始学习的 Java 语言依然坚挺,几乎是编程语言中的霸主了;但也有些遗憾,大学的时候没有把这些计算机基础课程学好,有些甚至没有学,导致工作后有很长一段时间蛮吃力的,全靠近些年“废寝忘食”的补课,才有所好转。

希望学弟学妹们,能从我这些经验中获得一些启发,少走一些弯路。

1)计算机编程的基石——数据结构与算法

2)计算机编程语言的母胎——C语言

3)计算机组成原理

4)计算机操作系统

5)计算机网络

一、数据结构与算法

无论什么时候,程序=数据结构+算法这种说法都是成立的。

常用的数据结构有:

  • 栈:栈是一种非常有用的数据结构,它就像一摞盘子,第一个放在最下面,第二个放在第一个上面,第三个放在第二个上面,最后一个放在最上面。栈遵循后进先出的原则,也就是“Last In First Out”(简称 LIFO)——最后的一个进的,最先出去。
  • 队列:只允许在队尾添加数据,队首移除数据。队列在 Java 中的出现频率非常高,有各种不同的类来满足不同的场景需求。像优先级队列 PriorityQueue、延时队列 DelayQueue 等等。队列遵循的是First In First Out,缩写为FIFO,也就是先进先出,第一个进入队列的第一个先出来。
  • 数组:数组这种数据结构最大的好处,就是可以根据下标(或者叫索引)进行操作,插入的时候可以根据下标直接插入到具体的位置,但与此同时,后面的元素就需要全部向后移动,需要移动的数据越多,就越累。
  • 链表:链表在物理存储空间是不连续的,但每个节点要么知道它的下一个节点是谁,要么知道它的上一个节点是谁,仿佛就像我们之间隔着千山万水,却心有灵犀一点链。像 LinkedList 就是最典型的链表结构,通过引用相互链接。
  • 树:树是一种典型的非线性结构,它是由 n(n>0)个有限节点组成的一个具有层次关系的集合。之所以叫“树”,是因为这种数据结构看起来就像是一个倒挂的树,只不过根在上,叶在下。
  • 哈希表:也叫散列表,是一种可以通过关键码值(key-value)直接访问的数据结构,它最大的特点就是可以快速实现查找、插入和删除。
  • 图:图是一种复杂的非线性结构,由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G 表示一个图,V 是图 G 中顶点的集合,E 是图 G 中边的集合。

常用的算法有:

  • 查找
  • 插入
  • 删除
  • 更新
  • 排序

算法研究的目的是为了更有效的处理数据,提高数据运算的效率,数据运算是定义在数据结构上的,各大公司的笔试基本都考这个,《剑指 Offer》上的所有题目如果能背下来,LeetCode 上的题如果能刷个一百到三百道,ACM 竞赛如果能拿到一些奖项。在找工作的时候会非常有优势,基本上大厂小厂的 offer 可能会拿到手软。

刷完 300 道 LeetCode 题后,我强到可以和面试官硬刚!纯正 Java 版

二、C语言

C语言是一门古老而常青的编程语言,具备现代程序设计的基础要求,它的语法是很多编程语言的基础,比如说 Java。C语言和 Java 常年霸占编程语言的前两名,都非常强。C语言学得好,对后续操作系统、编译原理,以及 Java 的学习都是很好的基石。

这里给大家推荐一下浙大教授翁恺教授的 C语言程序设计,可以到 B 站上看,有弹幕,学起来很愉快。

https://www.bilibili.com/video/BV19W411B7w1

初学编程语言的阶段,强烈建议大家把视频上的代码都敲一遍。由于不像工作后,有大量的项目可以实践,所以不能得到及时的反馈,刻意练习就显得特别的重要。另外,一定要分门别类保存好自己的 demo,以便以后可以快速得找得到,尤其是一些小套路,会很有用,积累得多了,可能就变成了自己的工具库。

三、计算机组成原理

我前段时间看了一本书,名叫《计算机是如何跑起来的》,虽然在豆瓣上的评分不是特别高,但很适合作为一本了解计算机组成原理的入门书。

它让我明白,计算机的组成是很“简单”的:

  • 输入、运算、输出是硬件的基础
  • 软件是数据和指令的集合
  • 计算机和人的思考方式不同,对计算机来说,什么都是数字

抽象到底层,确实是这么回事。计算机是由 CPU、内存、显示器这些设备组成的硬件,但我们大学毕业后,往往从事的是软件方面的开发工作。那怎样才能在硬件和软件之间自由穿梭呢?答案就是学好计算机组成原理。弄明白了计算机的组成原理,也就对整个软件开发有了一个系统的认知,不论是计算机的硬件原理,还是软件架构,都能很好的驾驭,随之而来的,我们的职业发展机会也就更多了。计算机组成原理这门课完全可以用一个词来概括,就是“抽象”。在我看来这也是整个计算机设计中所蕴含的的灵魂。

四、计算机操作系统

为什么要学习操作系统呢?

第一,面试要考;

第二,无论学习哪门子编程语言,比如说 Java、C/C++,都需要和操作系统打交道,像 Java 中的多线程技术,其实是由操作系统来负责进程和线程管理的;

第三,学习操作系统,还能学到内存分配方面的知识。

既然说到计算机操作系统,这里很有必要给大家推荐一门计算机科学速成课,在 B 站上也有,它讲的内容非常适合所有计算机专业的学生过一遍,如果学弟学妹们还没有看过这门课,记得一定要刷一遍!我先把目录列一下:

  • 计算机早期历史
  • 电子计算机
  • 布尔逻辑
  • 二进制
  • 算术逻辑单元
  • 寄存器 & 内存
  • 中央处理器
  • 指令和程序
  • 高级 CPU 设计
  • 早期的编程方式
  • 编程语言发展史
  • 编程原理
  • 算法入门
  • 数据结构
  • 阿兰图灵(我最喜欢的一集)
  • 软件工程
  • 集成电路 & 摩尔定律
  • 操作系统
  • 内存 & 储存介质
  • 文件系统
  • 压缩
  • 命令行界面
  • 屏幕 & 2D 图形显示
  • 个人计算机革命
  • 图形用户界面
  • 3D 图形
  • 计算机网络
  • 互联网
  • 万维网
  • 计算机安全
  • 黑客 & 攻击
  • 加密
  • 机器学习 & 人工智能
  • 计算机视觉
  • 自然语言处理
  • 机器人
  • 计算机心理学
  • 天网 & 计算机的未来

全部都是计算机专业需要掌握的基础知识,至少是应该了解的知识点。视频的制作非常精良,我相信大家看完后一定会大有所获。

英文中字版的,观看起来毫无压力。我自己每天会刷一集。像二进制这一集,以前经常被二进制搞得晕头转向,刷了这集视频后,明显感觉对二进制没那么生疏了,仿佛一个陌生人坐在对面,喝了一杯酒后,就成了老熟人。

https://www.bilibili.com/video/av21376839

我看弹幕有人说,“第一次用 B 站看这么正经的东西。”好他喵的真实呀!我也是。

然后是两本书,《深入理解计算机系统》和《鸟哥的Linux私房菜 基础学习》。


《深入理解计算机系统》,按理说,这本书的名字应该叫《计算机系统导论》,有 C语言、数据结构的知识就可以学这本书了,想在毕业后去大厂的学弟学妹值得花时间去三刷一下这本书,注意是三刷,第一刷大致了解,第二刷精度,第三刷温习。可以说得上是程序员了解计算机系统的最佳书籍了,可以去 CSAPP 课程官网找 Lab 配合刷起来。

《鸟哥的Linux私房菜 基础学习》,这是一本 Linux 方面的畅销书了,全面详细地介绍了 Linux 操作系统,如果要学习 Linux 的话,首选。生产环境下,几乎所有的服务都是在 Linux 环境或者类 Linux 环境下运行的,像 Linux 的基本命令:top、cp、mv、rm 等等命令都是必须得熟练到记忆到手指上的。

五、计算机网络

当今这个时代,没有网络简直无法生存,哪怕是在电梯里的一分钟,我都受不了那种手机没有网络的状态。我们所学的编程知识,如果脱离了网络,将变得毫无意义,因为没有哪个编程语言是要在单机环境下运行的。

计算机网络课怎么学习,给大家推荐四本书,一门公开课。

《网络是怎样连接的》,这本书从在浏览器中输入网址开始,一路追踪到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了网络设备和软件是如何工作的。

《TCP/IP 详解》,这是一本完整而详细的 TCP/IP 协议指南,基本上做通信的是人手一本。对于大多数程序员来说,了解这个 TCP/IP 对面试和编程也有很大的帮助。

《图解 HTTP》,HTTP协议是互联网的基石,学完后可以尝试实现一个属于自己的 HTTP 服务器了。

《计算机网络-自顶向下方法》,算是一本经典的大学教材了,

关于计算机网络这块,可以配合 B 站上的《计算机网络微课堂》一起来学习。

https://www.bilibili.com/video/BV1c4411d7jb

记住一点,我们学的是计算机科学,不是编程语言,不管你的主力编程语言是 Java、C++、Python,还是 Go,一定不能只停留在编程语言本身,像数据结构与算法、操作系统、计算机组成原理、计算机网络等方面的基础一定要打好!

参加工作后,编程语言是会根据公司的需求进行切换的, 所以只有把我推荐的这五门课程的基础打牢,切换到任何一门编程语言你都是可以胜任的。

最后,多 BB 几句,希望能给学弟学妹们一些参考。

无论什么时候,一定要找到学习的目标,以及学习的套路。找不到的话,就只能事倍功半,付出了很多努力,却迟迟得不到最好的回报。学习的时候一定要把自己当成一台计算机,既有输入,也要有输出。只输入不输出会堵塞,只输入不输出会枯竭。

这五门课程有些大学应该都会讲到,那么恭喜你,在这样的学校,你很幸运;如果哪一门没有,记得一定要在课余的时间补上。

多看信息密度大、质量高的学习资料,像大学图书馆那些《21 天学会 XXX》的书就不要去浪费时间了,可以把精力花费到我推荐的这些课程上。

多交流,多思考,刻意练习。像算法,基本上面试是必考的项目,不要产生厌恶的情绪,该刷还是要刷!你不刷,岗位可能就给别人了。推荐大家到 LeetCode 上刷题,如果觉得自己没有解题思路的话,可以看看下面这份刷题攻略。

刷完 300 道 LeetCode 题后,我强到可以和面试官硬刚!纯正 Java 版

最后,我再强调一下,一定要动手敲代码,做笔记,把自己没有理解的知识点总结下来,哪怕是画一些思维导图。有一句话很糙,伟大的牛逼之前总是傻逼式的坚持,但理是这么一个理的,学习计算机的过程中,你可能会遇到各种各样的困惑,重要的是,一定要坚持。

我是二哥呀,如果内容对你有帮助的话,记得给我三连(点赞、收藏、关注)——做个手有余香的人。如果你有什么学习问题,可以在评论区留言,我看到的话会第一时间回复,学习路上一起手拉手,小步快跑~


转载:https://blog.csdn.net/qing_gee/article/details/116256082
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场