大家好,我是小林。

相信不少 CS 学生都有关于项目到底要怎么准备的问题,可能大家认为要做个非常强的项目才有机会面试。

在前几个星期,有位大三非科班的读者的项目经历写的是国外 CS 课程的 lab,也就是课程的实验,并不是什么高大上的项目,他依然拿到了腾讯的实习。

他跟说,对于校招面试,项目其实并不要求做的很牛逼,但是要保证是你自己亲手做的,因为面试时,问项目主要是问你在项目中用什么技术解决了什么问题,然后达到了什么效果,你能回答出这些才是主要的。

然后面试过程中,计算机基础和算法才是大头,考的最多的还是这些。

他由于在学校里参加过 ACM 比赛,所以面试时的算法对他不是难度,他甚至都没刷过 leetcode,但是每次面试的算法他都是秒杀的。

他的弱点主要是在计算机基础知识,因为他不是非科班的,很多计算机专业课都没上过,或者有的没怎么认真学过。

他最开始因为没有准备计算机基础,面试屡屡挫败,后面他开始突击一两月这些八股文,我的图解网络和系统也对他起到来一定的帮助,最终成功拿到腾讯的实习。

我也邀请这位读者分享他的学习经验和做 lab 的经验

开车!

目录

  • 我跨专业是如何学CS的
  • 如何学习专业课知识
  • 关于 6.824 和 15445
    • 6.824 lab
    • 15445 lab
  • 参加竞赛对面试的帮助
  • 总结

简单概括我的情况就是非科班的 acm 选手,在准备面试之前这一段时间都没有系统的学习过专业课的知识。

我跨专业是如何学CS的

我是一名大三的机械系的学生。

大概在大二上学期过完的假期,我刷知乎偶然看到了同学校学长描述自己的竞赛经历,觉得很好奇,就入坑了算法竞赛也就是俗称的 acm,兴趣使然一直打到了大三下学期。

在这段时间里,我和队友或者其他计算机院的学生聊天的时候,偶尔会听到一些关于专业课的知识或者名词,然后会去搜这些相应的知识稍微进行了解,但是完全没有系统的学习过 CS 的专业课知识,基本上就是看到了什么知识点感觉好玩就去搜一搜。可以说,在面试之前我对CS的体系和知识是完全陌生的。

到了大三下学期,偶然看到学校群里有学姐发的实习招聘信息,我才意识到:我都大三了,是时候着手准备一下找工作的事了。

通过学姐发的招聘信息,我被内推去参加了 tx 的实习面试。

这一次面试的内容都十分简单,什么是多态,多态怎么实现的,进程和线程的内容是什么,计算机网络的几层结构是怎么样的…如果你有准备面试的话,你会发现这些问题简直就是送分题!

但由于我从来没有学习过相关的知识,被虐的惨不忍睹(面试官还和我说会进行评估,然后五分钟之后就把我挂了)才发现自己这一块有如此大的欠缺,开始着手一点点的从头开始补 CS 的知识。

如何学习专业课知识

不要上来就啃所谓的经典书。

先去找一些经典的网课看看。对于新手来说,网课的老师可能讲的更像人话一点。

我个人主要推荐:CSAPP。从计算机的组成比如浮点数的存储方式,存储金字塔结构到操作系统的进程线程,计算机网络的 socket 等都有介绍,一个性价比很高的课程能够让你了解整个计算机体系结构。

其次我个人认为面试中常考察的点就是 OS、计网、数据库和一些语言知识。语言大家自己去找对应的课程学习。

计网的话我是看小林的图解网络 + b站的湖科大的老师做的视频,都附带了很多图和动画,简单易懂。参考的文字材料就是自顶向下 + tcp/ip 详解卷1。

OS 没有找过网课看,觉得看完 csapp 之后挺好理解的了。用的文字材料主要是小林的图解系统 + 操作系统概论。

数据库网课看的是 15445,这是一个面向磁盘的数据库,后面发现大量的讲解的其实是mysql 的原理。然后文字材料参考的是 mysql 技术内幕,innodb存储引擎和 redis 设计与实现。

进阶的内容大家可以参照自己想要发展的方向学习啦,我认为学到这里的人对计算机体系结构有了了解之后,应该很容易找自己的方向。像我对分布式和数据库感兴趣,就选了 6.824 和 15445 作为扩展学习内容。

虽然我推荐了一些网课和书籍作为学习内容,但是我学习过程中绝对不止参考了这些东西。

对于一个知识点,我如果看不懂的话先考虑找公开课/博客,然后在书中找较为书面化的表达方式,最后我还会在自己博客中写笔记,用自己的话表达也是一种学习方式

关于 6.824 和 15445

6.824 和 15445 这两个一个是关于分布式系统的,他会讲一些关于 mapreduce 和 raft 的分布式算法,以及 15445,它一个基于磁盘的数据库(后来我看 innodb 引擎的时候发现其实就是对着 mysql 讲的)选择这两个课程学习的好处在于*他们的 lab 真的很好**,其实 CSAPP 出名的地方同样如此。

差不多的内容,讲师的水平肯定不会有决定性差距,差距主要体现在这些公开课由很好的 lab,带你手把手对一个知识进行实现算法/数据结构,让你对知识的理解更加深刻。

同时,由于这些是比较常见的算法,一般面试官都会懂,因此就喜欢和你聊一聊相关的问题,是一个面试的时候很好的谈资。你可以聊一聊你项目里面是怎么实现的,遇到了什么问题,如何解决的。

铺垫了这么多,如何学习这种公开课?

6.824 和 15445在b站上都是有相应的视频的,但据我了解免费放出来的貌似都是机翻的,可能有一些地方语义不是很通畅,这里我推荐一个组织叫simviso,人工翻译公开课的视频,会比机翻的看起来舒服一些

然后关于怎么做公开课的lab,其实你要实现的东西老师上课从答题思路到实现细节都会讲的很清楚,认真听了公开课之后你就知道里面的东西怎么运作的了,只需要自己再理一理怎么实现之类的问题就可以了。

同时,官网上也会有很详细的教程,告诉你要实现什么东西,然后每个模块你要实现什么样的函数,拥有什么样的功能,是保姆级教学!不用担心不会写的问题。

知识点在课上会说的很清楚,lab 做的东西绝对不会超纲,不仅课上会教你,官网的文档也写得很清楚,可能对于英语不是很好的小伙伴会造成一些困惑,但是我感觉当程序员面对英语文档应该会是很常见的事情。

6.824 lab

6.824 的官网地址:http://nil.csail.mit.edu/6.824/2018/schedule.html

6.824 的官网的 schedule,如下图:

下图是 lab1 的 mapreduce介绍,这一部分是教你怎么用git配置环境的。

下图是 lab1 的part1,告诉你你需要在 common_map.go 里实 现domap()函数等等…会写的很清楚让你去实现哪一部分的模块。

而且,还提供了一些 test 来测试你实现的对不对,如下图

15445 lab

15445 的官网地址:https://15445.courses.cs.cmu.edu/fall2020/schedule.html

15445 的官网 schedule 如下图,可以找到里面的 project released:…, 点进去。

下图是 lab1 的LRU模块,告诉你要去实现 src/…/lru_replacer.h 的 victim 函数啊,pin函数啊等等,写的十分清楚。

所以,大家有时间的话,一定要做lab

我个人认为国外的公开课的最大优势就是量身定制的lab,真的能将你课上所学知识完美的再复现一遍,让你的理解更加深刻。

参加竞赛对面试的帮助

这个问题可以转换为:学算法有什么好处?

其实面试中考察的算法,甚至是算法竞赛中考察的算法,都是很久以前计算机科学家们玩烂了的。在现实工程中有许多算法都是被淘汰了/用不上的。

那为什么还要学?

他们原本设计出来是为了解决某些特定问题的。比如最小生成树,原本就是为了解决计算机网络中的一些特定问题的,或者说二叉树,将二分这一个思想转换成了一个持久化的数据结构。

我个人的理解就是,学习算法你可以学习原本解决这些计算机问题的思维,培养了计算机思维,在后续的专业课学习中就打了一个很好的基础。

回到原问题,参加算法竞赛的好处在于奖项多了之后,简历更突出(帮助我一个双非的学生过了一些简历关),和具备扎实的编程功底,良好的计算机思维。

同时,参加了算法竞赛,基本上就是对面试的算法题进行了一个降维打击吧。

我虽然没有刷过leetcode,但面试的算法题基本都没什么压力写出来了*(中间也挂了不少面试,但不是挂在算法上,是当时八股背的不好)。

虽然面试不仅仅是由算法题组成的,但对于很多同学来说,专业知识都掌握好了,但是死在了算法上,这就有点气人。还是得多多刷题~现在太卷啦,尽量都做到最好吧。

总结

在我面试的过程中,算法环节遇到的题目都是十分简单或者十分常见的问题,因此只要多刷刷题,提高自己的实现能力就 ok 了。

最主要的还是基础知识的准备

首先对照着一些简单易懂的公开课/小林的图解系列等了解知识雏形,然后再自己从专业书里更详细的学习。

同时自己写博客,多刷刷面经,看看面试喜欢考什么,大概就ok了?

也许吧,大家都要加油哦!

国外计算机科学的 lab,真滴牛逼!相关推荐

  1. 这 HTTPS,真滴牛逼!

    HTTPS 常用的密钥交换算法有两种,分别是 RSA 和 ECDHE 算法. 其中,RSA 是比较传统的密钥交换算法,它不具备前向安全的性质,因此现在很少服务器使用的.而 ECDHE 算法具有前向安全 ...

  2. 在 B 站学编程,真滴牛逼!

    互联网让信息更容易触达,但是由于信息过于庞大,筛选出有价值的信息所花费的精力也会很大. 众所周知,B 站是一个学习的网站,很多人在 B 站上大学.考研.学编程,但 B 站的视频资源那更是五花八门,要从 ...

  3. 在线运行 Linux,真滴牛逼。

    作者:JackTian 来源:公众号「杰哥的IT之旅」 ID:Jake_Internet 转载请联系授权(微信ID:Hc220088) 原文地址:在线运行 Linux,强的离谱! 大家好,我是杰哥. ...

  4. GitHub 上的优质 Linux 开源项目,真滴牛逼!

    作为一名互联网人,提起 Linux 大家都不陌生,尤其是日常跟 Linux 操作系统打交道最多的,最熟悉不过了.互联网上关于 Linux 相关的教程和资料也非常的多,但是当你从中筛选出真正对自己有帮助 ...

  5. linux开源项目github,GitHub 上的优质 Linux 开源项目,真滴牛逼!

    作为一名互联网人,提起 Linux 大家都不陌生,尤其是日常跟 Linux 操作系统打交道最多的,最熟悉不过了.互联网上关于 Linux 相关的教程和资料也非常的多,但是当你从中筛选出真正对自己有帮助 ...

  6. 说实话,DataGrip真得牛逼,只是你不会用而已~

    点击关注公众号,Java干货及时送达 来源 | 程序不就是0和1 DataGrip 版是由JetBrains公司推出的数据库管理软件,DataGrip支持几乎所有主流的关系数据库产品,如DB2.Der ...

  7. 说实话,Jenkins 真得牛逼!只是你不会用而已~

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  8. Thymeleaf 人家写的博客真tm牛逼

    pom.xml依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId> ...

  9. 放弃 Notepad++,事实证明,还有 5 款更牛逼……

    点击关注公众号,Java干货及时送达 今天跟大家聊一聊,作为文本编辑工具,还有比 Notepad++ 更好的替代工具吗?别说,还真有另外5款(为啥有些粉丝说,要卸载Notepad++ 呢,其实这个No ...

最新文章

  1. java 流的概念_举例讲解Java中的Stream流概念
  2. html5div上下滚动,html5 – 在另一个div上滚动div
  3. Zabbix基本配置及监控主机
  4. GridView的Command命令集合
  5. http的方式调用接口
  6. 关于 STM32G0/G4/L4 HAL_IIC HAL_I2C_Mem_Read 函数读取M24C64存储芯片遇到的问题
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1010:计算分数的浮点数值
  8. 计算机本地连接怎么找不到了,网络,本地连接不见了解决办法
  9. github可以传java吗_如何在github上传本地项目代码(新手使用)----亲测使用
  10. mca终端_MCA的完整形式是什么?
  11. 程序员如何探索新技术
  12. zend studio 7.2.0怎么创建项目
  13. VS Code远程链接报错Could not establish connection to “hz-t2.matpool.com”
  14. AttributeError: ‘_thread._local‘ object has no attribute ‘value‘
  15. eclipse j2me 连接 KEmulator模拟器
  16. IGBT的绘制与逆变器的绘制-Visio制图总结【电控类】(三)
  17. vscode下载Visual Studio Code User System windows及 Mac安装文件下载
  18. 打开计算机不显示磁盘盘符,移动硬盘盘符不显示如何修复
  19. java中block标签_[Java教程]Clouda开发随笔之block标签
  20. 项目(百万并发网络通信架构)10.3---send()函数的极限测试

热门文章

  1. Opencv 笔记8 霍夫变换
  2. 微信小程序剪切图片的功能
  3. 如何用计算机打出下划线,电脑下划线怎么打?下划线怎么输入出来
  4. 用bat批量重命名不同文件夹下的同名文件
  5. 31. Git与Github
  6. 2012年度x86服务器虚拟化基础设施魔力象限,五载解读!Gartner x86虚拟化魔力象限...
  7. 快捷键切换(Linux)
  8. 基于JAVA小学生素质成长记录平台计算机毕业设计源码+数据库+lw文档+系统+部署
  9. 众人逃离北上广后又逃回:观念不合拍还要拼爹
  10. Java技术笔记1:类与对象实例之系统常用类