大学计算机专业要学什么?

论坛 期权论坛 股票     
期权匿名问答   2023-2-10 19:51   7398   5
好学吗?前景怎么样?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2023-2-10 19:52:03 发帖IP地址来自 北京邮电大学
对不起,这题我会!
开门见山地说吧,计算机这个专业从它呱呱坠地到现在一直都是大热门。借这个机会,刚好可以重新梳理一波计算机专业的学习路线,给学弟学妹们一个参考。
看完这个回答后,同学们不仅会知道大学计算机专业课该学什么,还会知道该怎么学,这样的话,大学的黄金时光就不会再悄悄地从指尖溜走了。
(记得收藏了)
------手动开始分割线--------
我这里拿到了一份计算机科学与技术专业的大学排名,来看一下。


创办于北京(后迁至合肥市),首任校长为郭沫若,钱学森曾在这里任教的中国科学技术大学排名第六,可以说中国科学技术大学的计算机专业课的教学计划非常值得参考和借鉴了
为什么我相中了中国科学技术大学呢?因为我在 GitHub 上发现了一个中国科学技术大学开源的仓库:GitHub - USTC-Resource/USTC-Course,目前已经有 11k 的 star,里面收录了中国科学技术大学的众多课程资源的笔记、总结、经验等,主要来源于学生的原创投稿
也就是说,学长们的经验和心得全部都在这了!
先来看一下主要课程关系的结构图。


再来看一下课程目录:

  • 编译原理和技术
  • 操作系统原理与设计
  • c程序设计
  • 代数结构
  • 概率论与数理统计
  • 光学与原子物理
  • Java软件开发基础
  • 计算方法
  • 计算机图像学
  • 计算机网络
  • 计算机系统详解
  • 计算机组成原理
  • 马克思主义基本原理概论
  • 模拟与数字电路
  • 数据结构
  • 数理方程
  • 数理逻辑
  • 算法基础
  • 随机过程
  • Web-信息处理与应用
  • 微机原理与系统
  • 自然语言处理
看完后同学们就明白了,大学计算机专业要学什么,一目了然。只不过,对于新人来说,可能看起来有点多,怎么办呢?如果你打算以后从事 Java 后端研发岗的话,可以主修下面这 8 门课。


具体到每个学年该怎么学呢?
首先是基础课程。


然后专业的核心课程。


最后是专业方向课程。


知道了学什么,然后就是怎么学。
首先要保证不能挂科,不然还得补考,如果补考再没过,就会拿不到毕业证,学历这块就是硬伤。然后就是把重心放在计算机基础课程上,也就是我给大家推荐的主修课程上。

  • 初学可以看视频,或者网上的在线教程
  • 进阶就需要啃一些经典的书籍:计算机必读经典书单
  • 一定要多敲代码,不要眼高手低
我上大学那会,资源还是蛮匮乏的,Java 入门看的是李兴华的教学视频。印象很深刻的是,李老师上课用的是智能 ABC 输入法,大家是不是觉得不可思议?
那段时间非常崇拜李老师,于是把谷歌输入法都卸载了,改成了智能ABC,硬坚持了两个月,最后没坚持下来,因为实在是没到李老师那个熟练程度,一些不常用的字需要找好久。
现在好了,网易云课堂、慕课网、B 站、享学课堂、Coursera 等等,上面有大量优质的公开课,北京大学的、清华大学的、浙江大学的、哈尔滨工业大学的,可以说琳琅满目,应有尽有。
除了优质的公开课,还有各大培训机构的视频课程,尚硅谷、动力节点、黑马,都在 B 站上公开了,播放量还挺大。
不藏着掖着了,这次把我看过的优质课程全部给大家分享出来。
一、C 程序设计

C 语言是一门古老而常青的编程语言,它的很多语法是很多其他编程语言的基础,比如说 Java 和 C++,学习 C 语言,完全可以零基础。这里推荐浙江大学翁恺教授的视频课。
程序设计入门--C语言_浙江大学_中国大学MOOC(慕课)C语言程序设计进阶_浙江大学_中国大学MOOC(慕课)二、Java 软件开发

大家可以先看看我整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点。
GitHub 星标 115k+的 Java 教程,超级硬核!然后推荐尚硅谷宋红康老师的 Java 入门课,从Java语言起源开始,循序渐进,知识点剖析细致且每章配备大量随堂练习。
全网最全Java零基础入门教程(含百道Java真题)_哔哩哔哩_bilibili三、计算机组成原理

计算机组成原理,也叫“计算机系统结构”,是了解软件底层的重要视角,但却很容易被忽略。弄明白了计算机的组成原理,也就对整个软件开发有了一个系统的认知,不论是计算机的硬件原理,还是软件架构,都能很好的驾驭,随之而来的,我们的职业发展机会也就更多了。如果想深入学习计算机组成原理的话,我推荐哈工大的这门视频课,整体评价非常高。
计算机组成原理(唐朔飞)_哔哩哔哩_bilibili四、操作系统原理与设计

操作系统是介于计算机硬件和用户之间的中间程序,它的设计目的是为了让人们更加方便高效地使用计算机。
对于用户来说,操作系统是为了能更加方便地操作硬件,提高日常工作的效率。
对于计算机来说,操作系统是一个资源分配器,它管理、调度、分配各种资源,使计算机更加高效地运行。

操作系统 - 清华大学 - 学堂在线这门课程以主流操作系统为实例,以教学操作系统 ucore 为实验环境,讲授操作系统的概念、基本原理和实现技术,是一门非常值得推荐的视频课。
五、编译原理

如果你懂得编程语言和编译器是如何工作的,你就能写出更好的代码,更轻松地学习新的编程语言。“手把手教你构建 C 语言编译器” 这一系列教程将带你从头编写一个 C 语言的编译器。
在我看来,能不能理解“递归”像是程序员的第一道门槛,而会不会写编译器则是第二道。我推荐的这个好资源,只需要懂点C语法和知道编译是什么就能看懂。
手把手教你构建 C 语言编译器(0)- 前言比看“龙书”让人昏昏欲睡强得多了。
六、数据结构

学了一门编程语言不知道能干啥?来学数据结构就对啦! 学会编程相当于会砌猪圈的泥瓦匠,学完数据结构就会盖个双层小楼啦~推荐浙江大学陈越姥姥的数据结构课。
数据结构_浙江大学_中国大学MOOC(慕课)七、算法

知乎上看到 @栗子 的一句话,写代码是将先进生产力落地于现实应用的最为快捷的方式之一,而算法,就是代码的灵魂。感觉非常有道理。
要想学好算法,我觉得最简单粗暴的方法就是到力扣上刷题。


推荐一份美团技术大佬的刷题笔记:刷完 300 道 LeetCode 题后,我飘了!
七、计算机网络

B 站上的这个
计算机网络微课堂(有字幕无背景音乐版)(陆续更新中......)_哔哩哔哩_bilibili视频课非常不错,强烈推荐。
这里重申一下我学习计算机专业的理论。
如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。
整个学习过程,是自底向上的。但是学计算机,这样行不通。
先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python?
显然这样是行不通的!计算机的学习最好是自顶向下
一开始,应该先学一门高级的编程语言,比如说 Java。之后,当你了解到 Java 的性能问题时,你才会发现,啊,原来 Java 是一门解释型的编程语言,而 C 语言是一门编译型的编程语言,所以 Unix/Linux 这种操作系统要用 C 语言来实现,因为要最大限度的利用硬件。
当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习操作系统,学习计算机组成原理,然后你的一系列问题就会逐渐被解决。
当你发现,用 Java 实现某个业务需求时,人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,然后你就会去学习数据结构,接着了解一些高效的算法,比如动态规划等。
跟着需求去学习,才能真正学好计算机。没有编程基础就去啃《深入理解计算机系统》这类黑皮书,你很快就会被劝退的。
同学们记得点赞啊,不要只收藏,不然我会哭的。
-----手动补充分割线---------
既然说到《深入理解计算机系统》,就再 BB 几句吧。


英文名叫《ComputerSystem:A programer perspective》,简写为 CSAPP,很多大学都拿它来作为教材,比如说北大、交大、哈工大等等。
先说一下阅读这本书的前提条件,就是你要先学习一下 C 语言。接下来,我来推荐两个辅助学习教程。
第一个视频地址:
https://www.bilibili.com/video/BV1iW411d7hd
这是 CSAPP 这本书的两个作者授课的视频,B 站上有 UP 主做了中英文字幕的校对。
我截了一张图,给大家看一下,这门课的目的:“让你深入了解代码在执行的时候到底发生了什么?”可以说包含了计算机专业的方方面面,计算机组成原理、操作系统、计算机网络等等。



第二个视频地址:
https://www.bilibili.com/video/BV1cD4y1D7uR
这是一位大佬对 CSAPP 这本书的解读视频,我个人觉得简直就是——雷锋?宝藏?任何我目前能想到的赞美的词汇都不足以代表我此时此刻对这位大佬的尊敬!
首先,我必须得承认一点,这个视频的唯一缺点就是麦克风的噪音比较大,原因我想有两个,第一可能是大佬没有买声卡这种设备,第二就是没有对声音做降噪处理。
不过,瑕不掩瑜。
视频主要分为 4 个部分:

  • 计算机系统漫游
  • 程序结构和执行
  • 如何在系统上运行程序
  • 进程间的交互和通信



给大家一个建议,学习,不要怕自己看不懂学不会,因为对于大部分普通人来说,包括二哥在内,接收知识的过程都是一个由易到难、循序渐进的过程,没办法一蹴而就。
对于经典的书籍,优质的课程,可能你穷极一生都没办法全部掌握。我这样说可能有些夸张,但事实可能确实如此。你不需要对自己太过苛刻,你需要记住的是,考 1 分比考 0 分强,考 60 分比考 59 分强;只要你肯去花时间学习,哪怕只学到了皮毛,也会比没学强很多。
这也是我一直以来对待学习的一个态度。
就像 CSAPP 这门课,确实经典,确实牛逼,但当你只是一个编程初学者的时候,尽量先不去碰它,免得被劝退。除非你是万里挑一。
但当你有了一定的编程经验后,你就不应该再去逃避这门课了。你应该去学习这门课程,无论头皮硬不硬,因为它能真正提升你的竞争力
-------手工分割线-------
我是二哥 @沉默王二 呀,希望我的回答能同学们一点点帮助,笔芯~


3#
期权匿名回答  16级独孤 | 2023-2-10 19:52:46 发帖IP地址来自 北京
很棒!
不夸张的说,提出这个问题的你(哪怕是看到这个问题的你)已经超过了很多计算机专业的学生了,我认识很多 CS 毕业的人,学了 4 年临近毕业都不知道大学计算机专业学了什么。


所以,我花了三天的时间整理这个答案,希望可以帮到努力的你,让你更进一步。
不求什么回报,
只希望你先点个赞、感谢与收藏~
一是当做对我的鼓励,
二是作为你进步的开始,
三是防止下次想看却找不到

事不宜迟,我们马上开始!
题主的问题是大学计算机专业要学什么??
首先,这个问题是不完整的。问题只问了一半,事情也只能做到一半。我们要看到更深层的需求,比别人多想一点,才能比别人优秀一点。
思考一下,弄清楚大学计算机专业学什么目的是为了什么?
为了名?为了利?为了打发时间?
事实上,在大学期间,我们学的很多知识都是为了毕业之后找工作所准备的,而计算机专业的同学肯定是想进入互联网大厂比如腾讯、字节跳动、阿里巴巴等。
而提高技术可以帮助我们在毕业的时候有更多的选择机会
那么这个问题,就可以拆解成两个答题要点:
1)怎么样提高自己的技术水平
2)如何准备进入大厂
一、怎么样提高自己的技术水平 ?

首先,我们来看一下,大学期间计算机专业的学生需要学习哪些专业课程,了解后才能知道有哪些方面可以提高,所以,请先务必学好以下几门课程。
1、计算机组成原理
2、计算机操作系统
3、计算机编译原理
4、数据结构与算法
5、计算机网络
一、计算机组成原理

计算机组成原理这门课很好地向我们阐述了计算机是如何工作的,妹子咨询你电脑问题的时候,答案就藏在这门课程里面(大雾)。
推荐书籍:《深入理解计算机系统》
这本书是从程序员的角度来看待整个计算机系统的,所以是非常适合程序员的。但是这本书不仅仅包含了计算机硬件的相关知识,同时还包含了包括操作系统、计算机网络等相关知识。
书籍下载:计算机必看经典书籍(含下载方式)


二、计算机操作系统

操作系统真的可以说是 Super Man,它为了我们做了非常厉害的事情,以至于我们根本察觉不到,只有通过学习它,我们才能深刻体会到它的精妙之处,甚至会被计算机科学家设计思想所震撼,有些思想实际上也是可以应用于我们工作开发中。
操作系统比较重要的四大模块,分别是内存管理、进程管理、文件系统管理、输入输出设备管理。这是我学习操作系统的顺序,也是我推荐给大家的学习顺序,因为内存管理不仅是最重要、最难的模块,也是和其他模块关联性最大的模块,先把它搞定,后续的模块学起来我认为会相对轻松一些。
学习的过程中,你可能会遇到很多「虚拟」的概念,比如虚拟内存、虚拟文件系统,实际上它们的本质上都是一样的,都是向下屏蔽差异,向上提供统一的东西,以方便我们程序员使用。
还有,你也遇到各种各样的调度算法,在这里你可以看到数据结构与算法的魅力,重要的是我们要理解为什么要提出那么多调度算法,你当然可以说是为了更快更有效率,但是因什么问题而因此引入新算法的这个过程,更是我们重点学习的地方。
你也会开始明白进程与线程最大的区别在于上下文切换过程中,线程不用切换虚拟内存,因为同一个进程内的线程都是共享虚拟内存空间的,线程就单这一点不用切换,就相比进程上下文切换的性能开销减少了很多。由于虚拟内存与物理内存的映射关系需要查询页表,页表的查询是很慢的过程,因此会把常用的地址映射关系缓存在 TLB 里的,这样便可以提高页表的查询速度,如果发生了进程切换,那 TLB 缓存的地址映射关系就会失效,缓存失效就意味着命中率降低,于是虚拟地址转为物理地址这一过程就会很慢。
你也开始不会傻傻的认为 read 或 write 之后数据就直接写到硬盘了,更不会觉得多次操作 read 或 write 方法性能会很低,因为你发现操作系统会有个「磁盘高速缓冲区」,它已经帮我们做了缓存的工作,它会预读数据、缓存最近访问的数据,以及使用 I/O 调度算法来合并和排队磁盘调度 I/O,这些都是为了减少操作系统对磁盘的访问频率。
……
还有太多太多了,我在这里就不赘述了,剩下的就交给你们在学习操作系统的途中去探索和发现了。
还有一点需要注意,学操作系统的时候,不要误以为它是在说 Linux 操作系统,这也是我初学的时候犯的一个错误,操作系统是集合大多数操作系统实现的思想,跟实际具体实现的 Linux 操作系统多少都会有点差别,如果要想 Linux 操作系统的具体实现方式,可以选择看 Linux 内核相关的资料,但是在这之前你先掌握了操作系统的基本知识,这样学起来才能事半功倍。
入门系列

对于没学过操作系统的小白,我建议学的时候,不要直接闷头看书。相信我,你不用几分钟就会打退堂鼓,然后就把厚厚的书拿去垫显示器了,从此再无后续,毕竟直接看书太特喵的枯燥了,当然不如用来垫显示器玩游戏来着香。
B 站关于操作系统课程资源很多,我在里面也看了不同老师讲的课程,觉得比较好的入门级课程是《操作系统 - 清华大学》,该课程由清华大学老师向勇和陈渝授课,虽然我们上不了清华大学,但是至少我们可以在网上选择听清华大学的课嘛。课程授课的顺序,就如我前面推荐的学习顺序:「内存管理 -> 进程管理 -> 文件系统管理 -> 输入输出设备管理」。


B 站清华大学操作系统视频地址:https://www.bilibili.com/video/BV1js411b7vg?from=search&seid=2361361014547524697
该清华大学的视频教学搭配的书应该是《现代操作系统》,你可以视频和书籍两者结合一起学,比如看完视频的内存管理,然后就看书上对应的章节,这样相比直接啃书相对会比较好。


清华大学的操作系统视频课讲的比较精炼,涉及到的内容没有那么细,《操作系统 - 哈工大》李治军老师授课的视频课程相对就会比较细节,老师会用 Linux 内核代码的角度带你进一步理解操作系统,也会用生活小例子帮助你理解。


B 站哈工大操作系统视频地址:https://www.bilibili.com/video/BV1d4411v7u7?from=search&seid=2361361014547524697
深入学习系列

《现代操作系统》这本书我感觉缺少比较多细节,说的还是比较笼统,而且书也好无聊。
推荐一个说的更细的操作系统书 —— 《操作系统导论》,这本书不仅告诉你 What,还会告诉你 How,书的内容都是循序渐进,层层递进的,阅读起来还是觉得挺有意思的,这本书的内存管理和并发这两个部分说的很棒,这本书的中文版本我也没找到资源,不过微信读书可以免费看这本书。


当然,少不了这本被称为神书的《深入理解计算机系统》,豆瓣评分高达 9.8 分,这本书严格来说不算操作系统书,它是以程序员视角理解计算机系统,不只是涉及到操作系统,还涉及到了计算机组成、C 语言、汇编语言等知识,是一本综合性比较强的书。


它告诉我们计算机是如何设计和工作的,操作系统有哪些重点,它们的作用又是什么,这本书的目标其实便是要讲清楚原理,但并不会把某个话题挖掘地过于深入,过于细节。看看这本书后,我们就可以对计算机系统各组件的工作方式有了理性的认识。在一定程度上,其实它是在锻炼一种思维方式 —— 计算思维。
三、计算机编译原理

首先正式一个问题:编译原理并非随随便便就能入门的
换言之,需要准备一些基础知识在学习。
编译原理的学习和实践通常基于对计算机编译过程、计算机基本工作原理、甚至一定的数学知识有一定积累,这些知识分别分布并应用在了编译原理的不同阶段。没有这些基本知识的积累,很快就会在某个阶段由于功底不够而无法再继续后面的学习。
所以,先认认真真的积累上述的一和二在入门学习吧。
四、数据结构与算法

相信无论是已经毕业的同学还是正在学校学习的同学,都或多或少地被数据结构与算法这门课给折磨过。数据结构与算法这门课开篇就讲了一个非常重要的概念:程序 = 数据结构 + 算法,对于初学者可能还不能完全地理解这句话,不过对于已经工作两三年的同学相信对这句话是深信不疑的。
对于数据结构与算法的学习,我个人认为应该分层三个步骤:首先先大致了解什么是算法,可以通过一些科普读物来入门,这个过程我称之为入门阶段;接着可以尝试实现一些比较容易的数据结构和算法,这样可以更加深对数据结构和算法的了解,这个过程我称之为实践阶段;最后去了解数据结构与算法背后的相关数学原理等,这个过程我称之为原理阶段。
具体的学习过程可以阅读我之前的一篇回答:
程序员必须掌握哪些算法?不管你认为数据结构与算法重要与否,你都必须有所了解,因为在面试环节肯定会问的!
书籍推荐:
入门系列

入门的同学,我建议你不要过度追求上去就看经典书。
不要一来就拿着《算法导论》开始啃,初学就去啃这些书肯定会很费劲。你一旦啃不下来,挫败感就会很强。
然后就放弃学算法了。
所以,入门的同学,我建议你找一些比较容易看的书来看,比如《大话数据结构》和《算法图解》。
不要太在意书写得深浅,重要的是能不能坚持看完。
《大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。而且每个数据结构和算法,作者都结合生活中的例子进行了讲解, 能让你有非常直观的感受。
虽然这本书有 400 多页,但是花两天时间读完,应该是没问题的。
如果你之前完全不懂数据结构和算法,可以先从这本书看起。
《算法图解》 跟《大话数据结构》走的是同样的路线,就像这本书副标题写的那样,“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂。它只有不到 200 页,所以内容比较少。
作为入门,看看这本书,能让你对数据结构和算法有个大概的认识。
当然,这些入门书共同的问题是,缺少细节,不够系统,也不够严谨。
所以,如果你想要系统地学数据结构和算法,看这两本书肯定是不够的。
基础系列

通过基本入门算法书的调教,你已经逐渐体会到了算法的魅力,现在正是时候踏入基础系列算法的领域!!!
这些书籍需要你费点心思去阅读。
很多同学在学习的过程中,看到一篇算法科普文章经常会有这样的想法。
哎呀,要是文章的代码是 Java 语言就好了呀。
哎呀,要是文章的代码是 Python 语言就好了呀。
虽然代码并不会很严重影响阅读,但还是有很多强迫症的同学喜欢看到文章的解释代码是自己擅长的。
我这里推荐《数据结构和算法分析》,这本书非常系统、全面、严谨,而且又不是特别难,适合对数据结构和算法有些了解,并且掌握了至少一门编程语言的同学。而且,这个作者也很用心。
他用了三种语言,写了三个版本,分别是:《数据结构与算法分析 :C 语言描述》《数据结构与算法分析:C++ 描述》《数据结构与算法分析:Java 语言描述》。
面试实战系列

大家都知道,对于程序员来说很大程度上算法就是为了应付面试的。
所以,推荐三本有益于面试的书籍,分别是:《剑指 offer》《编程珠玑》《编程之美》。
《剑指 offer》这本书的目的非常明确,就是为了面试。
这本书几乎包含了所有常见的、经典的面试题。如果能搞懂这本书里的内容,应付一般公司的面试应该不成问题。
我做了一个 图解《剑指 offer》的小程序,应该能帮助你学习,感兴趣的可以在微信搜索 图解剑指offer。
我也在 B 站录制了一些图解剑指 offer 的免费视频课程,感兴趣的也可以看看,每个视频控制在5分钟以内。

图解剑指offer:二维数组的查找_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili「双指针」的魅力!图解 LeetCode 第 11 号问题:盛最多水的容器_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
《编程珠玑》这本书的豆瓣评分非常高,有 9 分。
这本书最大的特色就是讲了很多针对海量数据的处理技巧。这个可能是其他算法书籍很少涉及的。面试的时候,海量数据处理的问题也是经常会问的,特别是校招面试。不管是开拓眼界,还是应付面试,这本书都很值得一看。
《编程之美》这本书有多位作者,其中绝大部分是微软的工程师,所以书的质量很有保证。不过,这里面的算法题目稍微有点难,也不是很系统,这也是我把它归到面试这一部分的原因。如果你有一定基础,也喜欢钻研些算法问题,或者要面试 Google、Facebook 这样的公司,可以拿这本书里的题,先来自测一下。
想进大厂少不了学习算法,我写了三百篇算法题解,在 GitHub 上收获了 63k 的star,关于如何刷题有些话我想对你说。
写了三百篇算法题解,关于如何刷题有些话我想对你说我的不少粉丝拿到腾讯字节快手offer,因为用了这套算法刷题笔记:
BAT大佬写的Leetcode刷题笔记,看完秒杀80%的算法题!推荐我自己搭建的一个不错的算法学习网站,讲解视频短,每个视频都精心规划过,全部都有动画过程,争取五分钟讲清楚。
AlgoMooc-一个专属于程序员的平台,和大家一起刷题
五、计算机网络


部分内容参考来源
作者:小林
原文链接:小林coding:大学四年我是怎么写操作系统和计算机网络的?掏心掏肺的分享!
原文链接:https://mp.weixin.qq.com/s/yopn5PqC7ESQcxWOj0eBoQ
计算机网络相比操作系统好学非常多,因为计算机网络不抽象,你要想知道网络中的细节,你都可以通过抓包来分析,而且不管是手机、个人电脑和服务器,它们所使用的计算网络协议是一致的。
也就是说,计算机网络不会因为设备的不同而不同,大家都遵循这一套「规则」来相互通信,这套规则就是 TCP/IP 网络模型。


TCP/IP 网络参考模型共有 4 层,其中需要我们熟练掌握的是应用层、传输层和网络层,至于网络接口层(数据链路层和物理层)我们只需要做简单的了解就可以了。
对于应用层,当然重点要熟悉最常见的 HTTP 和 HTTPS,传输层 TCP 和 UDP 都要熟悉,网络层要熟悉 IPv4,IPv6 可以做简单点了解。
我觉得学习一个东西,就从我们常见的事情开始着手。
比如, ping 命令可以说在我们判断网络环境的时候,最常使用的了,你可以先把你电脑 ping 你舍友或同事的电脑的过程中发生的事情都搞明白,这样就基本知道一个数据包是怎么转发的了,于是你就知道了网络层、数据链路层和物理层之间是如何工作,如何相互配合的了。
搞明白了 ping 过程,我相信你学起 HTTP 请求过程的时候,会很快就能掌握了,因为网络层以下的工作方式,你在学习 ping 的时候就已经明白了,这时就只需要认真掌握传输层中的 TCP 和应用层中的 HTTP 协议,就能搞明白访问网页的整个过程了,这也是面试常见的题目了,毕竟它能考察你网络知识的全面性。
重中之重的知识就是 TCP 了,TCP 不管是建立连接、断开连接的过程,还是数据传输的过程,都不能放过,针对数据可靠传输的特性,又可以拆解为超时重新、流量控制、滑动窗口、拥塞控制等等知识点,学完这些只能算对 TCP 有个「感性」的认识,另外我们还得知道 Linux 提供的 TCP 内核的参数的作用,这样才能从容地应对工作中遇到的问题。
接下来,推荐我看过并觉得不错的计算机网络相关的书籍和视频。
入门系列

此系列针对没有任何计算机基础的朋友,如果已经对计算机轻车熟路的大佬,也不要忽略,不妨看看我推荐的正确吗。
如果你要入门 HTTP,首先最好书籍就是《图解 HTTP》了,作者真的做到完完全全的「图解」,小林的图解功夫还是从这里偷学到不少,书籍不厚,相信优秀的你,几天就可以看完了。


如果要入门 TCP/IP 网络模型,我推荐的是《图解 TCP/IP》,这本书也是以大量的图文来介绍了 TCP/IP 网络模式的每一层,但是这个书籍的顺序不是从「应用层 —> 物理层」,而是从「物理层 -> 应用层」顺序开始讲的,这一点我觉得不太好,这样一上来就把最枯燥的部分讲了,很容易就被劝退了,所以我建议先跳过前面几个章节,先看网络层和传输层的章节,然后再回头看前面的这几个章节。


另外,你想了解网络是怎么传输,那我推荐《网络是怎样连接的》,这本书相对比较全面的把访问一个网页的发生的过程讲解了一遍,其中关于电信等运营商是怎么传输的,这部分你可以跳过,当然你感兴趣也可以看,只是我觉得没必要看。


如果你觉得书籍过于枯燥,你可以结合 B 站《计算机网络微课堂》视频一起学习,这个视频是湖南科技大学老师制作的,PPT 的动图是我见过做的最用心的了,一看就懂的佳作。


B 站视频地址:https://www.bilibili.com/video/BV1c4411d7jb?p=1
深入学习系列

看完入门系列,相信你对计算机网络已经有个大体的认识了,接下来我们也不能放慢脚步,快马加鞭,借此机会继续深入学习,因为隐藏在背后的细节还是很多的。
对于 TCP/IP 网络模型深入学习的话,推荐《计算机网络 - 自顶向下方法》,这本书是从我们最熟悉 HTTP 开始说起,一层一层的说到最后物理层的,有种挖地洞的感觉,这样的内容编排顺序相对是比较合理的。


但如果要深入 TCP,前面的这些书还远远不够,赋有计算机网络圣经的之说的《TCP/IP 详解 卷一:协议》这本书,是进一步深入学习的好资料,这本书的作者用各种实验的方式来细说各种协议,但不得不说,这本书真的很枯燥,当时我也啃的很难受,但是它质量是真的很高,这本书我只看了 TCP 部分,其他部分你可以选择性看,但是你一定要过几遍这本书的 TCP 部分,涵盖的内容非常全且细。


要说我看过最好的 TCP 资料,那必定是《The TCP/IP GUIDE》这本书了,目前只有英文版本的,而且有个专门的网址可以白嫖看这本书的内容,图片都是彩色,看起来很舒服很鲜明,小林之前写的 TCP 文章不少案例和图片都是参考这里的,这本书精华部分就是把 TCP 滑动窗口和流量控制说的超级明白,很可惜拥塞控制部分说的不多。


白嫖站点:http://www.tcpipguide.com/free/t_TCPSlidingWindowAcknowledgmentSystemForDataTranspo-6.htm
当然,计算机网络最牛逼的资料,那必定 RFC 文档,它可以称为计算机网络世界的「法规」,也是最新、最权威和最正确的地方了,困惑大家的 TCP 为什么三次握手和四次挥手,其实在 RFC 文档几句话就说明白了。
TCP 协议的 RFC 文档:https://datatracker.ietf.org/doc/rfc1644/
实战系列

在学习书籍资料的时候,不管是 TCP、UDP、ICMP、DNS、HTTP、HTTPS 等协议,最好都可以亲手尝试抓数据报,接着可以用 Wireshark 工具看每一个数据报文的信息,这样你会觉得计算机网络没有想象中那么抽象了,因为它们被你「抓」出来了,并毫无保留地显现在你面前了,于是你就可以肆无忌惮地「扒开」它们,看清它们每一个头信息。
那在这里,我也给你推荐 2 本关于 Wireshark 网络分析的书,这两本书都是同一个作者,书中的案例都是源于作者工作中的实际的案例,作者的文笔相当有趣,看起来堪比小说一样爽,相信你不用一个星期 2 本都能看完了。



你可以发现,大学四年,计算机专业的学生要学的东西挺多的,
现在回答小标题:怎么样提高自己的技术水平
请踏踏实实的先完成对专业课程的学习,虽然有些课程比较难,但这是区分科班出身的你与半路出家的程序员的区别,否则,说实话,就实战而言,你还比不上培训班出来的学生。
然后再提升。

以操作系统为例,看看这些知识是如何用到的?

组成原理:是不是学过中断、8259A、保护模式寻址等等?体现在操作系统里,为了实现进程调度,你要用时钟中断,为了会用中断,你要写8259A的控制程序;为了实现实模式到保护模式的切换和保护模式编程,你必须理解处理器的段保护机制等

数据结构:是不是觉得红黑树很高大上,好看不好用?去看看linux内核中有关查找的算法,用到红黑树的很多;再去看看最近已经在Fedra中取代ext4的文件系统btrfs,它用到的底层结构是B+树。看到了这些活生生的实例,你就会明白数据结构不仅仅是躺在教科书上的标本了。

计算机网络:去实现一个虚拟的网卡,自己去实现TCP/IP协议,网络上的东西就明白大半了。
最后再选择一门编程语言,把你的专业知识运用到上面去。
这里我以 Python 为例(事实上,我建议每个计算机专业的学生都了解一下 Python,掌握到可以简单的爬取数据即可,花个几天时间就能掌握,这些技能可以在后面的工作中带来极大的便利)。
Python 练习实例100 | 菜鸟教程一般而言,python爬虫需要以下几步:

  • 找到需要爬取内容的网页 URL
  • 打开该网页的检查页面(即查看 HTML 代码,按 F12 快捷键即可进入)
  • 在 HTML 代码中找到你要提取的数据
  • 写 python 代码进行网页请求、解析
  • 存储数据
1、找到需要爬取内容的网页 URL?
计算机网络:当键入网址后,到网页显示,其间发生了什么?
2、打开该网页的检查页面(即查看 HTML 代码,按 F12 快捷键即可进入)
3、在 HTML 代码中找到你要提取的数据
1)给定的种子 URLs,爬虫程序将所有种子 URL 页面爬取下来
2)爬虫程序解析爬取到的URL页面中的链接,将这些链接放入待爬取URL集合中
3)重复1、2步,直到达到指定条件才结束爬取
数据结构与算法:递归、优先队列、DNS缓存(这里需要设计一个 hash 表来存储已有的域名及其IP)
4、写 python 代码进行网页请求、解析
正则表达式、HTTP
5、存储数据
计算机操作系统:用 MySQL 还是 MogoDB
二、如何准备进入大厂 ?

相比较社招而言,在校招过程中面试官在面试过程中最看重的是你的基础能力与可塑性,而非项目能力。
来源:硬刚一周,3W字总结,一年的经验告诉你如何准备校招!
作者:努力努力再努力
要准备好校招,要有思想准备:这是一场持久战,基本上从你开始准备校招的那一刻开始,到你正式拿到 offer 的,最后确定去哪一家公司时,时间差不多一年左右。

  • 选择方向
  • 校招流程
  • 怎么投递,怎么内推
  • 校招知识储备
1、选择方向

在我看来,第一件事情应该就是选择你找工作的方向,这件事情应该在你开始找工作的半年前左右确定,比如,你2021年3月开始春招找工作,那么,我建议你最好在现在,也就是2020年10月就确定找工作的方向,为什么要这么早,后面我会具体分析。
说到工作的方向,就现在的互联网公司来说,其实可以选择的方向还是特别多的,也是看个人的选择,当然,也是可以有一些数据来做参考的;现在的校招的主流的方向有:算法,后端开发,前端开发,测试开发,运营开发,客户端开发,测试等等,这些岗位通常来说是选择最多的,对于几个岗位,我也给一下自己的建议,可以供参考。
首先是算法,算法这个方向,在我刚刚读研究生的时候也是有想过的,但是,随着深入的了解,以及对于市场对于这个岗位的需求分析,后来,我就慢慢的放弃了,当然这只是一方面的原因;对于算法岗位,现在比较热门的就是深度学习、机器学习了,由于CV方向特别火爆,这里的火爆并不是说好找工作,而是竞争太大了,就今年的算法岗位来说,或者说从去年开始,基本上就是神仙打架了,没有一两篇顶刊论文,你都不好意思说你是搞算法的,所以,如果你想找算法的工作,我的建议是,第一,是不是研究生,第二,是不是211/985以上,或者更直接点是不是985以上的学校,第三,有没有发过好的期刊的论文,我觉得这三点至少满足两点以上才可以考虑去找算法的工作,否则,建议转开发。
接下来说一下开发,开发现在其实竞争压力也不小,想进大厂的压力其实也很大,因为需求就这么多,当然,跟算法比起来就好很多了,后端毕竟方向很多,语言的选择也是很多的,比如,Java、C++、Python、Go这些语言的方向都是可以选择的,之前也说过,Go现在的需求也是在慢慢变大的,可以考虑一下这个方向,竞争可能小一些,其中,Java的竞争最大,可能是因为大家都觉得Java好找工作吧,导致投递的人数特别多,大厂就更不用说了,想找一个Java岗位的工作真的不容易,从我身边的朋友来看,以及身边同学找工作的感受来看,C++进大厂的难易程度还是小一些的,大家可以考虑一下,当然,这些选择也是看你对哪个方向更喜欢了,或者更熟悉了,这里只是给一些建议。
2、校招流程

面说了如何选择的问题,选择好了之后,就应该熟悉一下目前的校招流程了,刚刚开始的时候如果不了解的话,或者没有了解一些经验之类的,还是会犯一些错误的,所以这里给大家总结一下。
在现在的校招的模式下,校招分为春招和秋招,春招基本上是找实习的,还是少量的校招补招的,补招就是上一年秋招没有招满,然后在春招继续招人,而秋招基本上就是应届生找工作的最佳时期了。
在今年的春天,2月份开始吧,春招就开始了,很多的公司就开始招是实习生了,特别是字节跳动,在2月初就开始了提前批,2月底提前批就结束了。
所以,春招找实习的黄金时间就是2-5月了,这个两到三个月的时间都一直会有机会,也是拿实习offer的最佳时期。
接下来,6-8月这个时间段,如果你在春招找到了实习,那么一般你就在公司实习了,实习结束后,到9月开始就是要开始秋招了。
但是,这里其实有一个问题,在前面就讲到过,现在的秋招一般都会很早,可能在7月的时候很多的公司提前批就开始了,而提前批又是很好拿offer的时候,所以,选择去不去实习就显得很重要了,或者,你去实习了,如果发现你所实习的公司不是你想留的公司,建议尽早离职准备秋招。从今年的情况来看,可能因为疫情的影响,到了9月份开始秋招,发现其实已经晚了,拿我的情况跟身边的同学来说,今年9月份开始秋招,一般都是投了一大堆的公司,结果最后只有可怜的5个面试机会,这个时候才发现,提前批真的很重要,再对比一些没有实习的同学,通过提前批的面试,一般都有几个offer斩获,对比之下,发现实习的优势竟然没有了,可能这就是现在互联网公司的找工作的现实写照吧。
3、怎么投递,怎么内推

前面讲了校招的流程问题,这里讲一下在面试的过程中一定会遇到的问题,那就是投递简历。
大家应该都知道,现在互联网公司找工作,基本上都是在牛客网看相关的信息,这也是给大家提供了一个渠道。
关于投递,现在不同的公司也有不同的形式。
第一种,大公司,大公司一般都会有自己的投递官方网站的,都是在官方网站进行投递,这个麻烦的就是,很多的简历信息都是需要手动输入的,所以,还是比较耗时的,到时候遇到了你就会发现真的有点烦,有时候投递个简历需要半天;但是,有一个好处就是,可以比较实时的查看面试进度,直接在官网上进行查看就可以了。
第二种,有一些公司因为没有自己的官方网站,所以,就托管在第三方来进行这个操作,比如,在牛客网上直接进行投递,在牛客网上填写简历,然后,就可以一键投递了,这个方便一些,但是,就是感觉很多时候没有消息,我也不知道为什么。
第三种,也是依赖第三方公司,今年投递的感觉来说,一般都是依赖一个叫做https://www.mokahr.com/,这个网站一般就是公司进行内推的,这个投递网站好处就是方便投递,而且有些公司只需要你上传你的电子版的简历就可以,降低了投递成本,但是,不方便的就是查询投递进度。



然后,说到内推,其实,方式也就那么多。一般,如果有实验室的师兄师姐在比较好的互联网公司,那么,我们可以通过这种渠道进行内推,一般也是比较靠谱的,成功率比较高;其次,现在很多内推也都是在牛客网进行了,我很多时候也是在牛客网看有没有公司的内推,这种方式有一个问题就是一般内推的人很多,最终你能不能被筛选到是一个问题;最后,还有一种方式就是通过公众号,官方的公众号投递,或者有一些公众号也会提供内推码。
最后,就算没有内推,其实也不要紧,很多人直接在官网投递,也是能够机会的,而且,现在的内推跟前几年还不一样,现在就算是内推了,最多也就是有个笔试的机会,不会直接给面试机会,直接给面试机会除非是简历特别出众。
4、校招知识储备

基本上就是上面提到那些知识点。
1、计算机组成原理
2、计算机操作系统
3、计算机编译原理
4、数据结构与算法
5、计算机网络
在这些里面,着重考察算法,对于计算机专业的学生来说,从大学开始接触到计算机的必修课里面一定是有数据结构和算法这门课程的,而且也是相当的重要,而校招,从我自身面试的经历来说,算法可以说是十分的重要,再强调也不为过。
在现在的招聘流程中,首先是有笔试,大公司的笔试一般就是2-4道编程题,题目的难度leetcode的hard以上,所以,笔试就是检验你的算法的能力;进入到面试阶段后,基本上每一轮面试中,一定是会有算法题的,现在也是一般使用牛客网进行考核,所以,大家可以先去牛客网适应适应,那么,在一次面试中,算法的重要性怎么样呢?我这么说吧,如果一轮面试中,面试官出了一道算法题,如果你做出来了,其他的专业知识点回答的很一般,你有可能进入到下一轮面试,如果你算法题没有做出来,专业知识点就算回答的再好,基本上也是凉凉。因此,从我的经验来看,面试中A出算法题,至少可以拿到60分,A不出来,那就是0分,无一例外。
那么算法如何准备呢,这也是我想跟大家聊的一个话题,因为我在找工作之前,算法的能力可以说太一般了,很多的算法都是不懂的,基本的题目也是很难做出来,但是,经过这一年的训练,现在在面试中的算法题A出来基本上是没有问题的,除非是特别难的题目,那当我没说,有过几次经历,感觉被刷KPI了;因此,如果你现在也是对算法没有任何的自信的话,不用太担心,因为我也是这样过来的,只要你坚持,有方法的训练,应对基本的面试是完全没有问题的。
想进大厂少不了学习算法,我写了三百篇算法题解,在 GitHub 上收获了 63k 的star,关于如何刷题有些话我想对你说。
写了三百篇算法题解,关于如何刷题有些话我想对你说我的不少粉丝拿到腾讯字节快手offer,因为用了这套算法刷题笔记:
BAT大佬写的Leetcode刷题笔记,看完秒杀80%的算法题!推荐我自己搭建的一个不错的算法学习网站,讲解视频短,每个视频都精心规划过,全部都有动画过程,争取五分钟讲清楚。
AlgoMooc-一个专属于程序员的平台,和大家一起刷题关于算法的学习,这里就不再进一步的讲解了,详细的可以看一下这篇。
程序员吴师兄:如何系统地学习数据结构与算法?程序员吴师兄:谷歌工程师的 LeetCode 算法笔记是怎么样的?
我是 @程序员吴师兄,想和你一起成为厉害的程序员!
4#
期权匿名回答  16级独孤 | 2023-2-10 19:53:04 发帖IP地址来自 北京
直接来看中国科学技术大学计算机学院课程就知道了。




这些图片来源于 GitHub 上面的一个 repo:中国科学技术大学计算机学院课程资源,目前已经收集了中国科学技术大学的课程资源(主要是计算机学院的课程),包括课程电子版书籍、参考书、slides (ppt)、考试试卷、学习心得,甚至某些书的答案也包含其中。
仓库名称:USTC-CS-Courses-Resource
在工具类课程中,我们可以看到关于如何使用 LaTeX、Git、Makefile 的教材。


该 repo 最主要的内容当然是关于计算机的,我们来看下计算机与信息类课程都包括哪些内容。
我们可以从课程目录中看到该大类课程包括编译原理和技术、操作系统原理与设计、程序设计语言基础、计算机体系架构、计算机系统概论、软件工程、数据科学导论、数据库系统与应用、网络安全基础及应用、微机原理与系统等基础课程。此外,还有 block-chain、人工智能导论、人工智能基础等与时俱进的内容。
要想学好计算机,数学当然也得学好。该 repo 包含了部分数学类课程,涉及线性代数、微积分、概率论与数理统计、计算方法、数理方程、运筹学等。
该 repo 中每门课程的大致结构如下:

  • 教材, 答案在课程目录下
  • 参考书, 参考资料在 reference 下
  • 复习试卷, 习题课, 作业解答 在 review 下
  • homework-teacher1, homework-teacher2 ..., lab-teacher1, ...
  • 课程主页及其他链接资源记在 README.md 中
  • slides: 主要是 ppt 文件类型, 将所有 slides 打包成 zip, 放在 课程目录下(若有多个老师,则在课程目录建立 slides-teacherName1.zip, slides-teacherName2.zip...)
  • students(同学们上传的自己的一些资料, 作品,每个同学新建一个目录)
如「编译原理和技术」:


最后,给大家提供一些程序员必备的书籍。
程序员必备的书籍有哪些?(含下载方式)
看完三件事: 如果你觉得这篇内容对你挺有启发,我想邀请你帮我两个忙:

  • 点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-
  • 关注我@GitHubPorn 和专栏,让我们成为长期关系
5#
期权匿名回答  16级独孤 | 2023-2-10 19:53:56 发帖IP地址来自 CNNIC
2021.11:一口气更完吧~
2021.01:更新了部分出来给大家当新年礼物
2020.04:首发
本人南大计科,方向人工智能+计算机视觉,简单谈谈我眼中大学本科计算机专业会学些什么。希望能让其它专业或者正在选择专业的朋友们有个大概的了解。
本人分享的内容会受到学校、方向和个人理解的影响
总览




我所认知到的计算机本科知识框架

从上图中我们能看到五个大块,分别是
① 数学
数学是计算机的理论基础。数学不仅对于将来准备科研的同学及其重要,对于准备就业的同学来说,数学没学好,一些工作中遇到的概念就会很难理解。

离散数学(研究离散量,如整数,的结构、相互关系)在计算机科学中十分重要。由于计算机平台本身是离散的(基于 01 二进制),离散数学在传统算法设计、分析和平台架构设计等方面都起到了重要作用。

分析(以广义的微积分等研究工具,对”比较连续“的函数等进行研究)和代数(先定义数学结构,再研究该数学结构)中的内容也是作为理科生必须知道的,无时无刻不在用到的知识。
以上分法只是为了方便梳理课程,事实上相当不严谨。离散是数学中的一类对象,分析和代数是数学中的种方法论,相互之间都有很多重合
② 算法
算法本质上也属于数学。高中里常见的数学题有计算和证明。为了计算,课堂上会学习到很多问题的解法。算法就是对问题提出解题方案。
③ 系统
想要运行程序/软件,需要一个平台/系统(计算机、服务器、手机、嵌入式系统等)。每个系统从低向上构建,复杂而精美。

在系统的设计中,为了防止过于复杂,大牛们引入了抽象层,把功能较为独立的部分单独抽象出来设计,下层支持上层的实现,上层利用下层的接口(按规则即可使用的功能)。收益于此,我们在学习时也可以非常有层次地层层递进(图中从微电子到数据库、计算机网络等)
All problems in computer science can be solved by another level of indirection.
计算机科学中的每个问题都可以用一间接/抽象层解决                                      ——Jay Black
④ 语言
语言也算作系统的一部分(语言甚至可以看作是一个抽象层,下层由编译器支持,上层支持算法的实现)。将语言单独列出主要因为语言是因为,作为程序员,语言是我们最常用的工具。
此外,我把如何维护我们写出来的程序也放在这里。这是很工科的一个部分,就像造房子时如何维护整个工程。这样分类确实有问题,但语言和软件工程作为我们书写程序时的工具,可以一起学习。
⑤ 应用
在算法和系统的支持下,我们可以把计算机技术应用到各个邻域。计算机的应用自然有许多,这里只大概介绍了几个计算机的方向。
数学

① 离散
集合论(大一)
- 内容:将高中学过的集合公理化,研究集合这个数学对象。由于我们是计算机专业,学习的集合论内容可谓皮毛,与数学系的没有可比性。
- 举例:罗素悖论
- 应用:几乎其它数学的基础,微积分、抽象代数等等都要用到集合的概念。
数理逻辑(大二)
- 本校:特色的专业核心课
- 内容:在简单的逻辑运算(与、或、非等)和集合论的基础上,用公理化的方法定义一阶逻辑、高阶逻辑和时序逻辑(这里逻辑可看作由字母表、公式组成的一个系统。每个逻辑/系统可以有自己的语言、语义和语法,当然同样是用数学方法定义的),并研究逻辑这个数学对象
- 举例:选择公理
- 应用:在系统方向(程序形式化验证)、程序语言设计、人工智能(自动推理)等领域有广泛应用
- 研究前沿:证明论(研究语法),模型论(研究语义),公理集合论(研究与数学基础有关的一阶理论的模型),递归论(研究可计算性),非经典逻辑(对数理逻辑的扩展与修正),非形式逻辑(对形式化方法反叛的新道路)
抽象代数(大二)
- 本校:又称近世代数。离散数学中有群论基础,数学系开设。
- 内容:主要是研究群、环、域等数学对象,高屋建瓴的提炼了数学中的诸多共性,学起来可谓赏心悦目。
- 举例:用群理解魔方,5 次以上方程无解
- 应用:在密码学、组合数学、程序设计理论、计算机通信和分布式系统等方向上有广泛应用。课程上,线性代数中线性空间定义就要用域的概念。
图论(大二)
- 内容:定义了图(由点和边构成,地图上的城市与道路就可以抽象成图)这个数学结构,研究图的性质和图上的算法。
- 应用:算法设计(比如高德地图的导航,就要用到图论的算法),在计算机课程和应用中无处不在。
组合数学(选修)
- 本校:本校尹一通老师的组合数学课讲得很棒
- 内容:组合数学是理论计算机研究时强有力的工作。内容上主要分为计数和证明。计数在高中学习的排列组合基础上,进一步学习计数的方法;证明则是讲解如何利用概率证明存在性。
- 应用:作为研究工具,在科研时都有可能用到
值得一提的是,南京大学计算机系拔尖班和匡院计算机方向特殊课程《问题求解》(Problem Solving) 这门课持续四个学期,将程序设计、算法分析与设计、数据结构、离散数学等打通,一起教学,使得效率提高,可以讲更多的内容。
② 代数
线性代数(大二)
- 内容:定义了线性空间这个数学结构,研究线性空间中的对象、变换并用矩阵表示。
- 举例:线性空间
- 应用:作为最基本的数学工具,几乎无孔不入。在编码、机器学习等方向更是重中之重。
矩阵论
- 内容:在线性代数的基础上,进一步研究矩阵的性质,如果高效的进行矩阵的运算和分解。
- 应用:用到矩阵的地方都有用。
③ 分析
微积分(大一)
- 内容:在高中导数的基础上,严格定义导数等概念,并学习积分(可看做导数的逆操作,Riemann 积分)和级数等内容。
- 应用:计算机中与微积分打交道并不多。但随着深度学习的兴起,微积分由变得常用了起来。
实变函数
- 内容:在微积分的基础上,为了弥补 Riemannn 积分的缺点,引入了测度和 Lebesgue 积分。
- 应用:现代概率论的基础(暂时感觉没什么用)
概率论(大三)
- 本校:计算机系的概率论一般与数理统计合开
- 内容:定义概率,学习概率的计算和不加证明的大数定理、中心极限定理
- 举例:大数定理,中心极限定理
- 应用:可谓现如今机器学习的基石
数理统计(大三)
- 内容:概率论的一种应用,包括统计决断、估计、检验
信号分析与处理
- 本校:南大计科好像没开这门课,可能在电子系有开。但是在很多课程中都有应用。
- 内容:学习使用傅里叶变换等工具处理信号
- 举例:通俗理解傅里叶变换
- 应用:计算机通信、数字图像处理等
信息论
- 内容:在概率的基础上,定义熵,用于衡量不确定度/信息量
- 举例:熵
- 应用:计算机通信、密码学、机器学习等
计算方法
- 内容:又名数值分析,也可以算是算法的内容。用计算机进行数学问题的计算,而不会出现过大的误差
④ 物理
大学物理(大一、大二)
- 本校:计算机系的学生要上物理实验一学期,理论课一学期。拔尖班则理论课两学期,包括力、热、电、现代物理四个部分。与物理系相比,我们只是简单的科普。
- 内容
       力:在高中力学基础上,进一步学习各种力的分析,以及相对论的基础理论
       热:讲解三大热力学基本定律(包括第零)
       电:在高中电磁知识的基础,用麦克斯韦方程组统一电与磁
   现代:从黑体辐射等经典实验开始,讲解量子力学基础,了解基本粒子。
- 应用:很多人认为计算机系学物理没必要,我现在觉得不然。物理作为从实践走向理论的经典学科,一定程度上与现在的机器学习相似。此外,还可以提供跨学科研究的基础。
       力:游戏引擎
       热:熵、退火过程、玻尔兹曼分布等概念在计算机不同领域有很多推广和启发
       电:电路基础,计算机通信上利用电磁传播信号,计算机视觉中对光的分析等
   现代:量子计算基础
电路分析(大一)
- 本校:电子系单独开课,计算机系与微电子合开
- 内容:在高中电路分析的基础上,进一步学习电路分析工具和技巧
算法

算法设计与分析(大一)
- 内容:如何设计算法解决问题,如何分析算法的性能(时间复杂度,空间复杂度);如何评估问题的难度(P, NP 等复杂度概念)
- 举例:如何学习算法设计与分析
数据结构(大一)
- 内容:如何高效的将数据存放在计算机中(占用更小的空间,更快的存储)可以把数据结构看做是一个抽象层,现实中计算机文件系统/数据库提供实现的支持,向算法提供可调用的接口。我们将学习和分析常用数据结构(红黑树、哈希表等)
高级算法(选修)
- 本校:尹一通老师的高级算法,原名随机算法
- 内容:对比较难的问题,或是现有计算比较慢的问题,可以牺牲一定的精度获得近似解,牺牲一定的确定性利用随机构造算法。高级算法这门课教我们如何设计好的随机近似算法解决问题。
人工智能(大四)
- 内容:计算机的人工智能,其实就是针对人才能处理的较难问题,设计高效的算法达到人的处理结果。其具体实现的方法多种多用。该课概览式地学习了人工智能的算法,包括搜索、推理、概率图模型和机器学习相关的算法。
机器学习(选修)
- 内容:作为实现人工智能的方法之一,与利用规则逻辑的符号主义不同,机器学习用数据或以往的经验指导计算机解决问题。其中,具体的机器学习问题和方法也有很多,这门课概览式的学习了一些基本概念和常用的模型(如 SVM,决策树,神经网络等)
深度学习
- 内容:作为机器学习目前最火热的方法,深度学习(往往是深度神经网络)在各个领域得到了应用。网络结构、优化算法、损失函数等是入门者需要学习的基本对象。
量子计算(选修)
- 内容:有一说一,这节课我现在回想起来感觉都还给老师了,可能从中更多的是巩固了一些数学知识,了解了一些前沿方向。这门课不会关注物理层面的量子特性(薛定谔方程等),而是给定了一些量子的物理特性作为公理,在此基础上设计算法。
首先会复习线性代数,傅里叶变换和群论的基本知识,然后给出量子的性质和定理,接着会构建一些基本的量子算子和门。在这些基础上,会简单介绍一些经典的量子算法,量子密码学,量子纠错码和量子复杂度理论。其中精彩的一个是如何用量子计算机线性时间分解大素数。
系统

微电子(大一)
- 搭建整个计算机系统的基础。这门课包含两个部分,一方面是基础的电路分析技术(比较浅),另一方面是简单了解基础的电子部件,宏观上了解芯片如何从沙子一步步制作出来,并简单了解二极管,晶体管等的原理、特性和作用。
数字逻辑电路(大一)
- 本校:本校数字逻辑电路分为了理论+实验两个课程,放在两个学期进行。理论课程也有实验,就是插面包板。实验则是在 FPGA 上进行的,用 Verilog 编写一些简单的程序,综合出一些电路。实验课最后的大实验完成了一个支持部分 MIPS 指令集的带终端的 CPU,可以说很有成就感。
- 内容:首先是一些基本的数制数码理论和逻辑电路理论,接着是介绍组合电路的设计和实例,最后是时序电路的基本原件和设计。
计算机基础(大一)
- 本校:本校的 ICS (Introduction to Computer Science,计算机基础)可谓是一个经典课程了,用的是本校袁春风老师教材《计算机基础》,可以说是从理论知识和代码功力两个方法对新生进行了”特训“。为了增加同学的代码能力,PA (Programming Assignment) 作业要求大家在提供的简易框架代码上实现支持 x86 指令的虚拟机,最终可以将仙剑奇侠传跑在其中,可以说是很奇妙了。
- 内容:计算机中数的表示,汇编语言,编译过程,总线、内存,控制流,内存管理,上下文管理,中断等知识。
操作系统(大二)
- 内容:操作系统也是一个软件。围绕并发、持久化和虚拟化 (Concurrency, Persistence, Virtualization) 展开,讲解了并发的知识、并发编程,存储设备、文件系统和日志,任务调度、空间管理、进程空间等知识。同时还完成了一个玩具级别的操作系统。
编译原理(大三)
- 内容:编译器可以让我们把高级语言程序翻译为机器语言让计算机执行。在计算机基础中我们已经了解了 C 代码变成可执行文件的过程。本科中将进一步学习编译器知识,同时完成一个 C-- 编译器(部分支持 C 语言)。认识编译器的处理流程,前端(词法分析,语法分析,语义分析)到后端(中间代码生成,机器无关代码优化,代码生成,机器相关代码优化)以及各阶段的产物。
到这里,我们已经体验过书写自己的(玩具级别的)CPU,虚拟机,操作系统和编译器了。理论上,我们都可以编写一台给自己用的计算机了,我觉得这是很有成就感的事情。当然,实际上我们玩具级别的程序根本没法放到一起用,因为玩具级别的,没有优化,性能可以说是相当差了 Orz
数据库(大三)
- 内容:数据库的知识,包括理论层面的数据模型、关系的定义和演算,实际中数据集的安全性、完整性等。实验是学习了 SQL 语言。
计算机网络(大三)
- 内容:层次性的介绍计算机网络结构,根据七层协议层次,从低向上分别为:物理层 - 数据链路层 - 网络层 - 运输层 - 对话层 - 表示层 - 应用层。每层涉及一点的基础上,主要集中在数据链路层的以太网 IEEE 802.3,网络层的 IP 协议和传输层的 TCP 协议(TCP-IP)。
数据通信(大二选修)
- 内容:与计算机网络互为补充,主要集中在数据链路层及其以下的内容,包括物理层下物理上实际存在的媒介。主要讲解了数据传输理论、编码技术、差错校验和纠错,以及各种媒介的特性。
计算机图形学(大三)
- 本校:感觉本校的计算机图形学内容比较过时,下面内容主要是本校课上的内容,主要集中在二维图形绘制的算法。像三维渲染,光线追踪(ray tracing)等内容都没涉及到。建议上 B 站大学补课哈哈哈
- 内容:如何绘制图形,包括生成直线、曲线的算法,几何变换、剪裁的算法。最终实验完成了一个类似 Windows 画图的小程序。
语言

由于笔者在拔尖计划,没有修专门的语言课。基本上基础的 C 语言教学时在问题求解这门课上完成的,在 ICS 的 PA 中提高的。此外,问题求解课上有一节专门谈论了函数式编程、数据流编程等不同编程语言的介绍和区别。
汇编(大一暑假)
- 计算机基础的前导课,学习汇编语言和基本的计算机内部表示。
程序设计基础(大一)
- 似乎就是学 C 语言。笔者没上过。
面向对象程序设计
- 内容:面向对象设计(OOD)的基本内容,包括继承、接口等等。同时也会讲一些面向对象编程时可以用到的设计模式。
软件工程(选修)
- 内容:编写程序中、前、后应该注意的保证程序高质量的内容。理论上有软件过程的理论模型,编写程序前如何分析软件需求,如何进行软件设计;写代码时遵守设计模式;写完后要有软件测试、文档和验证。最后如何维护软件等。
特定语言的学习
- 本校:开有 Java, Scala 等语言的课程,但语言只是工具,一般还是在语言基础上学习新的内容。感兴趣的可以学习。
最后,想要了解更多学习内容的话,可以直接看教学计划。
南京大学计算机系教学计划都看到这里了,还不双击支持一下吗 (  )
6#
期权匿名回答  16级独孤 | 2023-2-10 19:54:14 发帖IP地址来自 北京
大一的话,需要学习大学基础课程,包括高等数学(微积分)、英语、(可能有物理)、大学语文、线性代数、C++或者C语言;
大二的话,数据结构、离散数学、数据库、概率论与数理统计、数字逻辑、计算机组成原理、还有一些其他课程比如算法导论、Java、汇编语言等;
大三的话,编译原理、操作系统、计算机网络,计算机接口等等;
大四应该没啥课了。
其余很多知识也可以自学,web技术栈(html、css、JavaScript 、PHP等等)、安卓开发等等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP