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

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

时间如白驹过隙,我竟然已经是一名拥有 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 版


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


相关文章
|
3月前
|
设计模式 前端开发 算法
如何顺利通过计算机专业毕业答辩
如何顺利通过计算机专业毕业答辩
如何顺利通过计算机专业毕业答辩
|
4月前
|
设计模式 NoSQL 算法
985、211毕业一年,面试八家大厂,四面拿美团offer(Java后端)
本人三年开发,985硕士,211本科,专业都是软件工程,一直投的是Java后台开发,只投过一次网易的测试,技术不是太牛,但是比较努力。实验室没有项目,so项目经验是0,在去年这个时候看到实验室师兄找工作的艰难,因此开始复习的时间比较早。
|
7月前
|
消息中间件 算法 NoSQL
秋招上岸“我”都做对了哪些事?
秋招上岸“我”都做对了哪些事?
83 2
秋招上岸“我”都做对了哪些事?
|
NoSQL 算法 关系型数据库
大学生应不应该大二就去实习, 大学应该去干些什么, 怎么知道自己是否适合竞赛
大学生应不应该大二就去实习, 大学应该去干些什么, 怎么知道自己是否适合竞赛
大学生应不应该大二就去实习, 大学应该去干些什么, 怎么知道自己是否适合竞赛
|
设计模式 移动开发 算法
【毕业季_进击的技术er】送别过去两年迷茫的自己。重整旗鼓,大三我来啦
我是starry陆离。2020级计算机专业的一名准大三的计科学生,一位喜欢写作的,不太擅长交流的男生,是 男生!!! 因为头像和文章风格两次被人误以为是女生了,我真的栓Q啊。
103 0
【毕业季_进击的技术er】送别过去两年迷茫的自己。重整旗鼓,大三我来啦
|
分布式计算 网络协议 算法
中科大软件学院硕士:实习秋招百多轮面试总结(中)
中科大软件学院硕士:实习秋招百多轮面试总结(中)
270 0
|
Arthas NoSQL 算法
二本院校学弟大二开始实习,大三收割阿里、腾讯实习offer
二本院校学弟大二开始实习,大三收割阿里、腾讯实习offer
二本院校学弟大二开始实习,大三收割阿里、腾讯实习offer
|
缓存 算法 Java
一位普通大学生秋招之旅
今天这篇文章是位朋友的投稿,2018年秋招经历。不推荐特别牛逼的,因为我们大都数人都是普通人,大家起跑线差不多,从文章中你或许可以收获到什么 。
78 0

热门文章

最新文章