大学最应该学习的 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 版


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


相关文章
|
存储 关系型数据库 MySQL
|
6月前
|
JavaScript 前端开发 持续交付
实际工作中 Git Commit 代码提交规范是什么样的?
实际工作中 Git Commit 代码提交规范是什么样的?
428 7
|
7月前
|
人工智能 供应链 数据可视化
数字化时代企业怎么做,Quick BI 告诉你
随着企业数字化转型的加速,数据对于企业的用途愈发重要。在过去,数据对于企业来说,可能只是代表过去的战绩,对未来的影响力,企业并没有发掘。而在数字化进程中,数据已成为企业发展的核心战略资产,通过多维赋能推动企业转型升级。数据不仅为精准决策提供科学依据,优化运营效率与资源配置,还能深度挖掘客户需求以驱动个性化服务创新;同时,数据驱动的业务模式重构了产品研发、供应链管理和市场预测体系,助力企业形成差异化竞争优势。
|
8月前
|
运维
云产品评测|用操作系统控制台,让运维更简单 获奖名单公布!
云产品评测|用操作系统控制台,让运维更简单 获奖名单公布!
171 3
|
9月前
|
机器学习/深度学习 存储 人工智能
《LSTM与HMM:序列建模领域的双雄对决》
长短期记忆网络(LSTM)和隐马尔可夫模型(HMM)是序列建模中的重要工具。两者都能处理序列数据并基于概率预测,且都使用状态概念建模。然而,LSTM通过门控机制捕捉复杂长期依赖,适用于长序列任务;HMM基于马尔可夫假设,适合短期依赖关系。LSTM训练复杂、适应性强但解释性差,而HMM训练简单、解释性好,适用于离散数据。两者在不同场景中各有优势。
204 7
|
人工智能 搜索推荐 数据挖掘
2024中国CRM排行榜
中国的 CRM 发展经历了从萌芽到快速成长的过程。早期主要依赖手工记录,20 世纪 50 年代商用计算机普及后,CRM 开始发挥作用。90 年代末,CRM 理念引入中国,市场由国外厂商主导。2004 年后,SaaS 模式兴起,但因企业接受度低、成本高而遇到挑战。2008 年,移动互联网推动 CRM 快速发展,2015 年 SaaS CRM 迎来爆发。如今,市场规模不断扩大,预计 2024 年将突破 250 亿元。主要品牌如销售易、Zoho、SAP 和微软 Dynamics 365 等,各具特色,满足不同企业需求。
2024中国CRM排行榜
通义灵码一周年:灵码编码搭子新功能测评
作为一名软件开发工程师,我使用通义灵码个人版的@workspace和@terminal功能,快速进行项目初始化、代码熟悉、需求实现、代码审查及协作开发,整体效率提升30%。通过智能提示、自动补全、代码审查等工具,大幅减少手动配置时间和错误率,使我能够更专注于创新工作。
|
消息中间件 Java Kafka
实时计算 Flink版产品使用合集之可以将数据写入 ClickHouse 数据库中吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
438 1
|
存储 SQL NoSQL
数据库的介绍、分类、作用和特点
数据库的介绍、分类、作用和特点
667 1
|
资源调度 前端开发 JavaScript
前端技术栈
前端技术栈
403 0