计算机专业,暑假需要提前自学吗?

软工大四刚毕业一年,拿到各大厂 offer 的学长来分享下我的经验,希望对后来的学弟学妹们有用~

首先,大一开始你要思考自己是毕业就业还是继续升学,升学的话最好把绩点弄高点,GPA保证在:


  1. 重点要理解Servlet的原理以及生命周期。在完成这一部分的学习后,可以简单的做个小网站,包括注册登陆,增删改查等功能。如果想继续折腾,可以考虑将项目部署在阿里云或者腾讯云上,一个完整可供他人访问的项目,所获得的成就感是非凡的。

这是大二最重要的一门课,说说这门课怎么学:

  • mooc 上浙大的《数据结构》: .
由知乎「陈越姥姥」和何钦铭教授联合授课,其大名在计算机领域可谓耳熟能详了。
这门课程对每一种重要的经典数据结构都从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学员增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。手把手教授小白如何将解决问题的抽象算法用具体的代码实现,从而引导初学者更好地入门。
  • 学堂在线上清华邓俊辉老师的《数据结构与算法》
邓俊辉教授讲课,非常的深入浅出,强烈推荐

这两个是我看过觉得不错的才在这推荐,第一个是初学数据结构时跟着看,第二个是大三复习时刷的。

这本书强烈推荐,难度适中,但是全面。
这个量力而行就好了。。。

详细版的路线,请看我另外一个回答:

到了大三,有几门重要的专业课,其中最为重要的就是操作系统和计算机网络

下面分别说说这两门课该怎么学:

需要掌握的网络协议和知识:

  • IP地址、MAC地址、OSI七层模型(或者 TCP/IP 五层模型)
  • HTTPS安全相关的:数字签名、数字证书、TLS

计网知识比较繁杂,很多同学都反映网络很难学,一大堆的网络协议,依次学完后,还是不知道网络是怎么构成的。

这就是没有用对学习方法,导致只见树木,不见森林。

学习时,推荐你抓住一条主线 「一个数据包是如何发送出去的?」

带着这个问题依次去学应用层、传输层、网络层、链路层,思考这些层之间是如何串联起来的。

这就是自顶向下的思路,那自然要推荐:

  • 《计算机网络:自顶向下方法》
这本书从我们最常接触的 HTTP、FTP、SMTP 等应用层协议讲起,可以清晰看到引入各个层的作用。

比如为了区分同一个主机的不用应用,引入了传输层,并使用不用的端口号作为区别;

为了在不同子网间传输数据引入了网络层,并使用 IP 地址寻址路由;

网络层解决了不同子网间路由的问题,但是同一个局域网内确定主机却是通过 MAC 地址,所以引入了链路层来承载 IP 数据包;

同时为了将 IP 地址和 MAC 地址做转换映射又产生了 ARP 协议。

层层递进,逐层揭开网络,非常推荐!

非常浅显易懂的描述了「一个数据包是如何发送出去的」,也不费时间,看惯了机工社的大黑书,看这种反而有种看小人书的感觉,有基础的话,一天左右就过完了。

只有把握住了整个网络脉络主线才不至于被纷繁复杂的网络协议所搞晕,剩下的就是不断的细化,填充这些主干上的细枝末节。

那么有哪些细节可以去填充呢?

比如 ARP 工作过程、IP 地址、IP 分片、NAT(UDP 打洞)、链路层访问控制协议等等。

还有最重要的 TCP 协议,TCP 也是面试和计网中最重要的概念:

  • 三次握手、四次挥手、状态转换、TCP 状态中 TIME_WAIT、拥塞控制、快速重传、慢启动等

这么多东西肯定需要背,但不要死记,最好带着问题去思考为什么要这样做。

  • TCP 如何实现可靠传输的(画外音:如何基于 UDP 实现可靠传输
  • TCP 连接建立为什么不是两次握手(画外音:三次握手的充分必要性说明
  • TIME_WAIT 的存在解决了什么问题,等待时间为什么是 2 MSL

整个 TCP 的核心就是围绕着 可靠传输 + 高效传输(流量控制和窗口管理)

由于 TCP 的细节实在太多,自顶向下那本书有点不太够,所以你需要去看看:

  • 《TCP/IP详解卷1:协议》
这本书不要从头看,而是挑出其中涉及到 TCP 的章节

到这里,对于整个网络以及 TCP 都应该有了一个全面而细致的认识。

但是计网中还是有一些有意思的问题,如果你没思考过,也许回答不出来。

  • 为什么有了 MAC 地址还要 IP 地址,IP 地址和 MAC 地址的区别是什么?
  • 如何理解广播域和冲突域?
  • 路由器和交换机有什么区别?
  • TCP 连接的本质是什么,真的是“链接”吗?(曾经被问过:Java socket 创建的 TCP 连接,对于主机挂了和 JVM 挂了有什么区别?

这些问题只有当你真正理解了才能回答出,仅仅记住协议的话,估计很难应对灵活的面试题。

此外,网络部分还需要准备 HTTP、HTTPS,推荐:

最后别忘了自己回答一遍那被问烂了、写烂了的问题:

  • 从 URL 输入到页面展现到底发生什么

越细越好,五百字以上吧,哈哈哈

操作系统这门课,我的感觉是易学难精,但是掌握到日常编程和面试够用还是比较容易的。

那么毕业生或者说你去准备校招面试应该达到怎样的水平:

  • OS 四大模块的理论知识: 进程与线程管理、内存管理、IO与文件系统、设备管理
  • 了解 Linux 内核部分实现原理,如内存管理、进程管理、虚拟文件系统等

其中内存、进程、IO 是重点,这几块也是和编程关系最密切的,这里推荐先挑本偏理论的书看看,了解操作系统的全貌:

  • 《操作系统—精髓与设计原理》

不必全看,两者任选一本都不错,我自己是仔细看了第二本,因为是我们教材,同时挑着看了现代操作系统部分章节。

这部分看完你应该对下面这些话题有一个清晰认知了:

  • 进程的状态、切换、调度
  • 进程间通信方式(共享内存、管道、消息)
  • 线程的实现方式(一对一、多对一等)
  • 互斥与同步(信号量、管程、锁)
  • 并发经典的问题:读者写者、哲学家就餐问题
  • 为什么需要虚拟内存,MMU 具体如何做地址转换的
  • 虚拟文件系统(VFS)是如何抽象的

除了学习理论以外,还需要懂一些Linux内核原理,而学习Linux内核的最好的方式是看书,书的脉络给你理得很清晰。

  • 《Linux内核设计与实现》
这本书恰到好处,即讲清楚了内核实现的要点,又不会通篇源码。

当然,还要强烈推荐几门国外的OS课程,绝对一级棒!

  • MIT 6.828,这门课会带着你去基于xv6完成一个mini os的各个模块,比如文件系统、线程管理等

都是有视频有lab的好课

数据库首先要学会 SQL 的使用,这里推荐《MySQL必知必会》。

数据库原理方面可以看看《数据库系统概念》,这本书挺厚的,包含了从 SQL 到数据库设计再到数据库原理、分布式数据库都有,可以挑着看,比如关系模型、数据库设计(三大范式)、数据磁盘存储和组织方式、索引、并发控制等。

当然了整个数据库最重要的还是索引和并发控制(锁、MVCC等),这部分也是面试常考的:

  • 索引存储结构:B树、B+树索引、Hash索引
  • 索引的使用:主键索引、覆盖索引、最左前缀原则、索引下推等
  • 锁:乐观锁、悲观锁、表锁,行锁,意向锁,读锁,写锁等等
  • 存储引擎:InnoDB、MyISAM等,各自的优缺点
  • 《MySQL技术内幕》
这两本主要对索引、innodb存储引擎、锁、并发控制讲得比较清楚,建议挑对应章节看。

内容持续更新中......

码字不易,觉得不错麻烦三连哟~

}

今年刚从 985 毕业的老学长说下吧,毕竟在计算机专业摸索了 7 年。

自学计算机主要做好下面两点

其实学习能力、团队协作能力、学历也会有一部分考量因素,但在这两个前提条件稳的基础上,其余的条件都会被弱化。

万年自学党了,直接说下学习路线吧:

计算机专业导论是面向非计算机专业人员和学生介绍计算机基础知识的计算机基础教程。

内容涉及计算机应用,Internet,与计算机交互,音频、视频和打印,数据处理,存储数据,操作系统,应用软件,网络,在线世界,数据库管理,信息系统,软件编程和开发,以及计算机安全等内容。

呃,说到这,我推荐看一门《计算机科学速成课》。

这门 40 集的课真的包含了超多的基础知识:

像计算机的早期历史、编程的发展史,到二进制、指令和程序,到算法入门、数据结构,甚至是计算机安全、黑客、加密、机器学习 & 人工智能、计算机视觉、自然语言处理、机器人等等等等都有涉及,感兴趣的可以看下,链接在下面:

立志做技术行的同学,从 C 语言入门百利无害。

很多人都觉得 C 语言入门难,不能像 Python 这种编程语言一样快速获得成就感。

为啥现在还有这么多技术大佬建议学一下 C 语言呢?

因为 C 语言是一门面向过程的语言,运行速度极快,是计算机产业的核心语言,像操作系统、硬件驱动、数据库这些都离不开 C 语言。不学 C 语言,就很难深入了解计算机底层的运行机制。

现在常见的高级语言的底层几乎都是 C 语言实现的。

在大学的时候搞 ACM,用过三年的 C 语言,自认为比较熟悉,给大家总结一下 C 语言的学习路线。

C 语言的学习其实就三个阶段就好了:

这个阶段学习 C 语言的基础语法知识。

目标是可以开发一些简单的控制台小程序。

这个阶段学习 C 语言自带的库函数,形成 C 语言的基本知识框架。

目标是开发一些基本的应用程序。

这个是实战阶段,要具备一定的综合性应用软件开发能力。

目标是能够开发像贪吃蛇、图书管理系统、学生信息管理系统等项目。

对于小白来说,建议上来看视频,不建议直接啃书,因为干看看不懂,容易劝退。

可以先从视频教程开始。

C 语言的视频教程我只推荐一人:浙江大学翁恺老师的 C 语言课,yyds!

是一个课程质量非常棒,讲课幽默,深入浅出的课程,非常容易理解!

当时学 C 语言的时候,自己还是个从来没接触过编程的菜鸡,当时的学习全靠翁恺老师了!

不多说,看过的都知道。翁恺老师的课是在 MOOC 上开的。

  1. 第一门是面向高考结束想提前自学一些编程的或者是刚开始学习的大一新生,叫《程序设计入门-C语言》,涵盖了主要的 C 语言知识点。

完成本课程之后,就能具有初步的运用C语言编写程序的能力。

2.第二门是《C语言程序设计进阶》,这门课就是要告诉你C语言到底有哪些独特的地方,为什么能长期占据15%上下的编程语言份额。这门课同样也是带你项目实操,和设计入门搭配使用,效果翻倍。

我姑且认为现在题主有了一点基础,可以能配合视频看书了。

入门书籍推荐《啊哈!C语言》

这是一本是一本非常有趣的编程启蒙书。

从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。

从开始学习与计算机对话到自己独立制作一个游戏,由浅入深地讲述编程的思维。

同时,与计算机展开的逻辑较量会让人觉得很有意思。

这本书是我学 C 语言一段时间后啃的书,一本大部头。

语法全覆盖,细节多,知识点讲的清楚,内容极多。在你觉得入门差不多,就可以啃一下这本书。

现在是第六版了,书的封面啥的都换了,内容也更贴合现在的需求。

  • 第1、2章介绍了C语言编程的预备知识。
  • 第3~15章详细讲解了C语言的相关知识。
  • 第16章、17章介绍C预处理器、C库和高级数据表示。

至于提高阶段和应用阶段,更加详细的学习路线可以看我下面这篇文章:

重要的计算机基础课是下面这些:

数据结构重要的主要是下面这几个:

算法的话,需要掌握以下内容:

学习数据结构与算法的第一课,我永远都选复杂度分析,在我看来,这是数据结构与算法中最重要的知识点,且不接受任何反驳。

复杂度分析包括时间复杂度和空间复杂度。

以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。

通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。

  • 《数据结构》,浙大陈越和何钦铭教授联合授课,其大名在计算机领域可谓耳熟能详了。

这门课的主要特点是:对每一种重要的经典数据结构,都会从实际应用问题出发,导出其定义、实现(存储)方法以及操作实现,并以更丰富的综合应用案例和练习题帮助学员增强对理论的感性认识,从而明白这些数据结构为什么存在以及在什么情况下可以最好地解决什么样的问题。

数据结构与算法的学习,往往要伴随着“刷题”,如果没特殊情况,我建议大家刷 LeetCode 就好。

刷题按照分类来刷,如果不知道刷哪几道题,可以看下这个前字节大佬的刷题笔记:

针对 LeetCode,题的解法有很多,我们往往追求的是最优解,这里有一份清华学长整理的 LeetCode 最优解,强烈推荐:

两者配合起来应该非常舒爽。

我在大学的时候参加 ACM,拿过亚洲区预赛银奖,刷题贯穿了我的整个大学生涯,总结了一些刷题的经验,感兴趣的可以看下。

针对算法小白,我总结了一套算法小白的刷题顺序,可以作为参考。

计算机组成原理,即“计算机”“组成”的“原理”。

我觉得它是所有计算机基础课程中最难学的一门课,整个课程的核心就是使用数字逻辑电路和触发器搭建一个可以运行汇编指令的机器。

《计算机是怎样跑起来的》、《程序是怎样跑起来的》

《深入理解计算机系统》

  • 视频首推卡内基梅隆大学的《深入理解计算机系统》系列课程,英语不好?没关系,有中英文字幕,看完这套视频,知识+六级顺利拿到手。

看这个视频的配套教材是《深入理解计算机系统》。

  • 此外,国内的可以看下哈工大刘宏伟老师的课程(135讲)

无论你学习什么语言,都避免不了和操作系统打交道。所有语言的最后执行,都是靠操作系统。

比如你学习 Java,用到多线程技术,实际上操作系统才是负责管理进程和线程的。

不懂操作系统,你在未来学习编程语言的高级特性,涉及到线程进程调度,内存分配,或者是学习 Linux 相关的知识时,都会一头雾水。

只有学会了操作系统,才能够更好地学习其他语言和技术。

所以,操作系统是程序员进阶必会的知识

《操作系统导论》、《现代操作系统》

《深入理解计算机系统》

操作系统,说实话,在刚开始学的时候不建议直接闷头看书。

因为书看起来是真没意思。

  • 这里推荐清华大学的操作系统课程,B站上可看。分上下。

看视频的时候可以结合着上面的【书籍推荐】。

看(上)的时候可以搭配《操作系统导论》

看(下)的时候可以搭配《现代操作系统》

计算机网络的相关知识在工作时使用的频率较多的。

学习计算机网络,你需要懂得Socket编程,知道TCP/IP网络模型,了解OSI七层网络架构,知道一个数据包是如何层层包装,再层层拆包,从客户端发送到服务端。

但是计算机网络好学的多,因为计算机网络不抽象,在现实生活中,都能找的到例子。

《图解 HTTP》、《计算机网络》

绝大部分都在用谢希仁的这本《计算机网络》,讲的很好,浅显易懂,同样也是考研 408 的常用教材。

  • 首先必须强推湖大教书匠的计算机网络微课堂,yyds!!!

一个动图做的最好的计算机网络视频课程,老师讲课逻辑清晰而且特别容易懂,b 站上有视频,可以 1.5 倍速使用哟。

  • 还有推荐哈工大李全龙老师的《计算机网络》

数据库就是存储数据的地方,但也不只是这么简单。

学习数据库,不仅要懂得SQL语句,表设计结构这些基础部分,还要懂索引、慢查询优化,配置参数调优。

再深入点儿还要学习SQL优化、备份与恢复、架构优化等等进阶内容。

《SQL必知必会》、《MySQL必知必会》、《SQL学习指南》、《数据库系统概论》

《MySQL技术内幕——InnoDB存储引擎》 《Redis设计与实现》

  • 推荐人大王珊老师的《数据库系统概论》,别问,数据库领域 YYDS!

我选的是 Python,那这里我就来说下 Python 的学习路线。

我们学任何东西学习之前,肯定要先快速的了解它是什么,大概做到心中有数,帮我们初步判断一下这个是不是想进一步学习的东西,帮助消解一下面对未知时的恐惧。

这里大家可以看一下GitHub上的这个项目,可以让你在短短几分钟之内了解一门技术

不管是零基础学习 Python 或者其他的编程语言,在刚开始的时候还是建议视频为主,书籍为辅。

毕竟啥也不了解,直接上来就看书,立马从开始到放弃。

1、[小甲鱼]零基础入门学习Python

我大二的时候有一段时间想转去 Python,当时也没买书,就想先了解一下,不知道怎么就搜到了小甲鱼的论坛,当时跟着他的视频学过一段时间,觉得讲的挺有意思,还专门去他网站冲了个永久的会员,好像一百多来着,后面好像再也没登陆过...

后来看到小甲鱼的这门课在 B 站上已经 1500w+ 的播放量,搜索排名第一(不过第一的那个应该别人发的,他们自己的账号是200w+播放)。

这个课程看起来有点老了,但是内容差别不大,后来又搜了一下,他们又录制了最新版的《零基础入门学习 Python》,现在是更新到了序列,觉得不错的小伙伴可以追一下,对新手还是比较友好的。

这是微软放出的一门免费的 Python 教程,名字叫 Python for Beginners,专为初学者打造,一共有 44 个视频,每个视频的时长大概在 2-6 分钟之间,只有极少数的几个时间在 10 分钟以上。

整个课程由两位讲师共同讲解,分别是微软高级项目经理Christopher Harrison和微软的 AI Gaming 开发经理 Susan Ibach,英文配中文字幕,食用起来极佳,同时课程的示例代码和 PPT 微软也同步到了GitHub 上,只能一句卧槽走天下了...

如果你觉得这个教程不错,学完了基础可以看一下后续的微软官方的进阶教程,其实也是基础语言的一部分。

这是我买的第一本 Python 书,当然也是刚开始学的时候看了别人的推荐,加之也是豆瓣评分 9.1 的书,就买来看看。理论 + 实践,前面是基础知识,后面是实战项目。

前面的基础知识讲的很详细,以至于给我当时的感觉有点过于啰嗦了,不知道其他人看会是什么感觉。每个知识点后面都带着“动手试一试”,我感觉这点比较好,学编程之初,就是要多练,多敲代码...

至于后面的实践部分,包括一个简单的 2D 游戏、数据可视化和 web 项目,可能是当时我太菜了,或者之前没有做过项目的原因,我觉得这三个项目出现的太突兀了,2D 那个游戏做完我就直接被劝退了,倒是没觉得有啥提升,没甚意思,sad...

而且跟着书做项目,因为书出版的时间太长,很多用法都变了,照着书上做,大概率会有运行错误的时候,可能心态有点崩...

我大二的时候有一段时间想转去 Python,当时也没买书,就想先了解一下,不知道怎么就搜到了小甲鱼的论坛,当时跟着他的视频学过一段时间(现在看来当时的视频比较老),还专门去他网站冲了个永久的会员,好像一百多来着,后面好像再也没登陆过...去年他的书出了第二版,就买来看了一下...

怎么说呢,算是为当初看的视频充值了...

非计算专业的同学可以拿来一看,如果你想系统学习一下的话,就别花这钱了,内容有点乱,这个得真的配合他的视频食用了,不然真的难顶,但如果一本书需要配合视频才能看懂,那也就不太推荐了...

这本书是我朋友送我的,书到了以后一直在吃灰,因为那时候 Python 学的差不多了膨胀了...

翻开也是很偶然,那天刚好很无聊,就随手拿出来翻了翻,然后就翻完了,怎么说呢,这本书的内容给人一种很舒适的感觉,我很少有觉得读起来很舒服的技术书...

整个的结构很清晰,内容简单但是不肤浅,整个基础知识的讲解简洁明了,一点也不啰嗦,很容易就看懂了,不会有那种我看了好几遍才理解的情况(os:我什么时候也能写成这样),各种小的代码片段比比皆是,在练习的过程中反过来再加深对概念的理解。而且作为实践部分,它后面带了十个小项目,按照实际开发的步骤介绍Python 项目的过程。

如果实在让我推荐一本,我是会推荐买这本书的...

码字不易,如果觉得不错,记得帮我 点赞呀。

}

华科毕业,研究生期间主要用cpp,基本靠自学拿到阿里巴巴校招offer

关于大学期间的学习规划和路径来分享一点自己的经验,仅供参考。

在开始之前,建议你先看一下我之前写的关于计算机专业大一新生的建议,已经获得7300+赞和收藏,是知乎的热门内容:

如果你现在在计算机专业学习的道路上
遇到了一些问题解决不了或者产生了迷茫
可以戳下面咨询入口把你目前的情况说明一下

注意!这是一套方法论

打牢基础!打牢基础!重要的事情说三遍!

基础非常重要,不管你以后从事什么方向,应用开发也好,大数据开发也要,客户端工程师也好,要想吃得开必须依赖这些基础课程:操作系统、组成原理、计算机网络、数据结构、算法、数据库

为什么一定要打牢基础???

几乎各个大厂面试前2轮面试都会重点关注基础,如果基础不扎实,那么就很难进入后面的面试。

2、明确自己的发展方向

打牢基础后,可以开始选择自己后面的发展方向了。

如大的方向是做硬件还是软件?
若是软件细分的话是前端?后端?客户端?或算法?
可能这些方向实际情况还会分的更细(如算法分为图像算法、数据挖掘、深度学习等等),但是暂时还不需要,可以到工作的时候再做具体选择。

另外在大学一定要利用好空闲时间,可以说大学是人生中最后一段拥有大段自己的时间的日子了。 要多实践,锻炼编程能力。不管是参加ACM比赛也好,做项目也好,都不错。

这个阶段需要深入学习一些专业知识,如算法,基础算法、图像识别算法、NLP等等。大数据方面比如现在火热的流式计算。

第二部分说到要多实战,那么大学大概有哪几种实战类型呢?

一是各种比赛,有含金量的比赛大概有ACM、天池、kaggle、阿里中间件性能挑战赛等等,这里不全部列出来。

之前总结过有含金量的IT证书,可以参考:

另外是做项目,跟着老师做项目是首选。因为有人带着,可以跟着老师和学长学到很多东西。 如果没有这样的机会,自己参与github开源社区也是非常不错的,社区有对应的邮件组和群聊,有非常热心的小伙伴。

一、大学四年应该如何规划?

上面是基础的方法论,很多人可能会问:具体要大学的每个学期,应该如何安排学习呢?(需要无脑的计划表~

如果你的目标是通过校招拿到大厂offer,那么大学四年可以这样规划:

大一(上):学好计算机导论。

大一(下):开始学习一门入门语言(大多数高校设置的都是C语言

大二(上):很多学校会安排学习一门面向对象设计语言(C++或java),另外开始学习数据结构。数据结构非常重要,不管后面参加ACM竞赛还是找工作还是实际编程都会用到这些基础知识。这个时候已经可以开始关注学校ACM竞赛的一些信息了,可以参与一些培训课程,会贯穿到整个大二大三。

大二(下):专业课程主要是算法设计和计算机组成原理

大三:大三开始没有了数学哪些基础课程,大多数都是专业课,并且有更多的时间来进行实践。这个时候可以开始参与一些项目(不管是实验室老师的项目也好还是自己去github上找开源项目都OK),也可以出去实习,尽早接触互联网的工作环境,有更深的体感。

大四:课程不多,时间相对更加自由和宽裕。需要保研和考研的可以准备起来了。这段时间可以实习也可以选择自己有兴趣的方向进行深入学习。

这里只列举了核心课程。

二、计算机专业如何自学?

推荐视频课程+书籍结合的方式,千万不要抱着大块头的书从头啃到尾。

看视频课程会比纯看书更生动,更容易理解。

另外这里强烈推荐网上的经典公开课,这些公开课久经考验,有深度,评价非常高。并附有详细的lecture和代码案例。

可能一开始会觉得比较难,尤其是国外大学课程,英文讲解,而且通常比国内学校讲的有深度,但是只要坚持,收获还是非常不一样的

为什么推荐国外顶尖大学的公开课?

国外顶尖大学都由顶尖大师执教,且有深度。
比如数据库实验课,国内课程是增删改查mysql做一个管理系统,而国外课程实验课都是从0开始实现一个数据库;
再比如操作系统,国内无实验课,考试是考死记硬背的ppt上的概念时,而国外课程是需要做项目的,实现一个简单的操作系统内核。

下面是standford大学CS346数据库系统实现课程的内容,需要每个人实现一个数据库系统,考核分数也是project占大头。

基础课程推荐的视频课程和书籍有:

MIT6.828 是一门公认的硬核课程,一直以来都有很高的知名度,也广受好评,是理论与实践相结合的经典

建议是在上过学校的OS课,或者阅读过操作系统导论类再来学习这门课。最好在开始之前熟悉C和汇编,也对计算机组成有一定了解。

然后只要你跟着项目一步一步走,做完 6 个实验,就能实现一个简单的操作系统内核。

lab是这门课的重点:

(2)国内哈工大的操作系统实验课

推荐standford课程cs144结合书籍《计算机网络:自顶向下方法》

这位知乎大佬 @胡津铭 有一个专栏讲如何自己实现一个TCP,强烈推荐:

如果想找一本简单的入门书籍,推荐《图解TCP/IP》

实战的话推荐《Wireshark网络分析就这么简单》,可以亲手尝试抓包分析数据报文的信息。

(2)伯克利的数据库导论

(3)CMU的数据库系统

数据库系统设计域实现,涵盖数据模型、存储模型、查询语言、存储架构、事务处理、恢复、并发架构等等,并结合开源和商业数据库给出案例讲解。

(4)书籍推荐《数据库系统概念》

4、数据结构与算法设计

MIT 6.006 是经典的数据结构和算法入门课程,涉及到排序、哈希、图论、动态规划。

Lecture非常翔实,伪代码可读性强,在辅以专门的practice,用py实现的。

(2)书籍推荐《算法》

比如普林斯顿大学教材使用的就是这本书,然后有配套的教程网站,上面有很多文档和demo:

建议通过可视化的方式学习算法和数据结构,能很容易看出其基本原理、各种操作是怎么实现的。

数据结构和算法可视化学习网站这里强烈推荐:

涵盖了主流的数据结构,可视化展示,支持对其进行各种操作,以及提供了很多示例。

如二叉树,我们对其插入一个节点71,会自动进行匹配,将节点插入到正确的地方:

同样是涵盖了主流数据结构和算法,提供动态演示功能。

国外大学是怎么学习计算机组成原理的-

关于公开课,更多的可以参考这个github项目,维护了众多推荐的公开课程资源:(star 14K)

老外OSSU组织总结的自学计算机学习路径,star 92K:

有些书籍最好不要买,比如21天精通XXX,完全就是割韭菜的。

学习计算机一定不要想着速成,没有什么捷径和超能力。要下苦功夫去啃那些经典书和源码,然后自己动手写,所有技术大佬都是一行行代码敲,一本本书啃出来的。

我看过的书籍里的一部分

我在大学期间,为了把专业学好,看了大量经典的专业书籍,整理了这份计算机必读的高分经典书籍

这份书单对于CS学习的同学帮助非常大且十分系统,这些书籍的电子版已经整理好了。

三、进阶学习-以Java举例

以终为始,目标导向,提前确定自己的目标岗位。

比如说你的目标是毕业后找到一份互联网大厂Java后端的工作,你就去看大厂的招聘要求,看自己需要学什么,给自己规划路径

按照现在的市场来讲,Java是现在工业上运用比较多的语言,也是最好找工作的语言之一。其次是C++、Python等。就目前的形式来看,iOS和安卓等移动端开发是比较不好找工作的,但如果你确实很感兴趣,成为了这方面的大佬,那么前景也还是不错的。

列举下目前主流语言的应用场景楼主可以参考下,方便做选择:

  • java:电商、金融等后端开发,使用非常广泛(大厂代表如阿里巴巴
  • go:代表大厂字节跳动
  • C++:游戏开发、基础软件、高性能交易平台等等(腾讯使用的多)
  • C:现在用的比较多的是嵌入式场景(物联网IOT)

关于如何拿到校招大厂offer的技能学习,我之前发布过一篇回答,可以进去学习:

关于Java从入门到进阶的学习路线, 可以直接看我下面这个文章:

再推荐一个总结得非常优秀的后端技能roadmap,查漏补缺:

除了Java后端岗位,Python在最近几年也特别火,特别是大数据方向

而且Python相对C++/Java等语言来讲是一门门槛稍低的语言,应用也非常广泛,如数据处理、网络编程、机器学习、游戏开发等场景,因此也广受欢迎。

下面再分享一下Python从入门到进阶的学习方法。

零基础Python入门非常简单,给大家推荐一门课程吧。百词斩旗下夜曲编程出品的Python课程,非常适合零基础的新人学习。

在手机上就能直接学习,而且省去了小白安装环境的复杂步骤。

课程采用的是交互式的学习方式,每节课都有几十个代码练习,模拟真实环境撰写代码,代码写错了也会自动报错,参考示例代码就能知道自己错在哪里。

课程学习是集代码卡闯关式的形式,学习时长完全可以自由控制,阅读和学习能力强的差不多5-8分钟就能完成一节课的学习。我觉得这种学习形式会比视频高效很多,视频必须得从头到尾看完。

而且整个Python课程设置很清晰,循序渐进,很适合小白入门,感兴趣的话可以关注【夜曲编程】公棕号发送【免费教程】先体验一下~

Python的学习进阶如何安排呢?

其实学完第一部分基础以后,就可以开始动手写代码,写实际的项目了,在实战中成长更快。

Python的应用很广,方向很多,在基础打扎实后可以挑选自己感兴趣的方向进行深入学习。

比如夜曲编程的Python进阶部分,分为编程应用和数据分析两大模块,不同模块又分为几个方向,你可以选择自己感兴趣的模块进行实战训练。

那么有哪些实战的方式呢?

有含金量的比赛大概有如下几个:

  • 数据挖掘/AI比赛:Kaggle比赛、天池比赛、KDD-CUP、腾讯广告算法大赛
  • 中间件-阿里巴巴中间件性能挑战赛

实习是非常好的实践方式,一方面可以提前了解和感受互联网公司的环境、氛围,另一方面向各路大牛学习,获取一手的经验,还可以参与实际的项目。

如果没有实习,也可以通过参与实验室项目或者github上的开源项目。github上开源社区有完善的文档、协作机制,可以和很多人一起交流,开阔视野。

推荐的值得参与的github开源项目:

主要是锻炼数据结构和算法能力、提高思维能力,推荐用LeetCode或牛客。

通常都非常有深度,有一步一步实现一个麻雀虽小五脏俱全能run起来的系统,如数据库或操作系统,或者一个tcp协议栈。

五、再说一些其他的很重要的

(1)自学能力的培养。

现在已经是互联网时代了,我们能从网络上很方便的获取大量、免费的资料,如公开课、电子书、github上的开源代码。我们需要有从大量信息中筛选有价值信息的能力,人的精力是有限的,我们不可能面面俱到,学习一定要学经典资料。二是提升自己的自学能力,掌握学习新知识的方法论。

(2)养成写博客的习惯。

写博客对我们好处很多:

  • 如果能讲出来让别人懂,那说明自己是真的懂了。勤总结可以不断加深我们对知识的理解;
  • 博客也是自己的一个标签,能够让自己在以后的面试中获得加分;

作为一名合格的计算机专业学生,我们应该培养哪些优秀的习惯,我专门写了一个回答。

为什么?因为我觉得太重要了,我到现在都非常后悔自己当初没有好好利用大学四年的时间精进自己,所以这个回答,答应我,一定要看!!!

再补充一个大家最近问的很多的,关于计算机专业电脑选购的问题

按照不同的预算给大家推荐了几款电脑,闭着眼睛买就行:

每个价位只帮大家挑了最值得买的几款
终结选择困难症戳下面文章看

最后,希望这几万字的回答能对你稍微有些帮助。

如果觉得我的回答不错,可以给个点赞

}

我要回帖

更多关于 大学自学计算机可行吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信