CMU 11-601 Coding & Algorithms Bootcamp (24Fall) 总结

课程总述

这一门课相当于就是一门算法刷题课,使用的教材是大名鼎鼎的 《Cracking the coding interview》:一学期分为三个阶段:Java, Python和Javascript,在每一个阶段的学习的时候,class exercise,homework以及shuffle interview都需要用对应的语言去完成。之前24Spring的时候在Berkeley听过CS 170 (Efficient Algorithms and Intractable Problems 。Berkeley的这一门课更加理论,可以理解为有点偏CS Theory,学的内容甚至涉及到了虚数等概念。CMU的这门课就更加偏实践,每周的workload并不是很大, 在Codio平台完成作业的基础上稍微费一点时间的就是需要去约mock interview(每周自己需要作为面试官和面试人分别和不同的同学进行Shuffle Interview);一学期中还需要和教授和TA进行Interview。在第三阶段学习Javascript的时候,因为确定了以后主要往前端方向发展并且觉得Python在实际工业开发中应用得不是很广泛,于是将刷题从Python切换到了Javascript。另外,值得一提的是,这门课除了一些要求的线下interview,其他包括作业考试等都是在Codio这个在线平台完成的。每个人每学期需要交50刀来充值使用这个平台,但是相比于纸质的考试我个人还是更喜欢这种形式。

课程成绩 (94.47% -- A)

这门课是Curve的一门课,也就是说最后的 Letter Grade 是根据学生的位次来设置的 threshold。最后也算运气比较好,刚好达到了 94.41% A 的门槛。实际上在中期的时候只有B+的水平:因为第一次考试是用的Java,自己当时对Java没有特别熟练再加上研究生阶段没有像本科的时候将绩点和考试看得那么重要,于是第一次考试也就没有很理想。在半期之后的两次考试(分别使用Python和Javascript)之后成绩还算令人满意,尤其期末考试使用JS因为题目不是很难再加上语言比较熟悉,拿到了满分的成绩。

课程内容

课程本身的内容其实就是围绕算法考察来进行的,其中在介绍不同的语言的时候也会有不少的语言特性方面的介绍和对比。这门课是 LTI (Language Technology Institute) 开设的 Graduate Level 的课所以有很多同学来自于MSAII项目,不过也有很多INI,ECE或者S3D的同学选了这门课。

再说回 Shuffle Interview:在 Peer Interview 总共10次中拿到了 98.54%的成绩。总共10次 Peer Interview。每一次Shuffle的时候会告诉你作为 Interviewer 需要问到别人的三道(这些题目都在教材《Cracking the coding interview》里面可以找到)。并且这门课为了让我们适应不同的面试形式,在前几次 Shuffle Interview的时候分别规定只能采取线上/线下的形式。之后和 TA 的面试是线上,而和教授的又是线下去他的办公室。对于Peer Interview, 个人经验就是每一次把自己作为 Interviewer 需要问到的题目准备好,如果 Leetcode 上面有原题就在 Leetcode 上做一遍来保证通过所有的 Edge Case。

TA  Interview (线上)的时候当时直接是用的 Zoom + https://leetcode.com/interview/ 这个 Leetcode 官方提供的 OJ 工具。和TA 连上之后他人很 nice ,做题前先给我了一些鼓励。第一道题是一道 Binary Tree 的 easy 题,简单的层序遍历就能解决;在热身完之后第二道题是一道链表的 mid 题,链表的题是出了名的很多 Edge Case,程序很容易出 bug。当时可能因为睡了午觉之后注意力也比较集中,第一遍很快就写完了,然后走查了一遍发现一处小 bug ,然后直接运行就得到了预期的结果。这一轮发挥比较好20分钟就完成了两道题,于是在TA interview 拿到了满分。

Instructor Interview (线下)是感恩节前一周的一个周四,当时晚上还有 Secure Coding 的 deadline。下午去教授办公室面试,也是两道题的形式,但是需要在黑板上完成。对于每一道题,需要先 propose 思路,并用 test case 来验证思路的可行性,然后写下完整代码,再用之前的 test case 再在代码里面进行走查,最后对代码正确性,复杂度进行分析。因为每一个流程想解释得尽量清晰,在第二题的最后分析代码复杂度的时候教授告诉我没有时间了。好在最后几乎只因为这里扣了分,还是拿到了 59 / 60 分的成绩 (平均分 55 分)。

最后对于 homework,在Codio平台上面每周以选择题和大题的形式。一般大题一道题耗时比较长,经常以图论,DFS,DP等等形式来考察。期间有一道分割木板的题目的两个子问题都需要用到DP,最后写的代码差不多有100行了。那一道题一位金牌大佬直言这个就是竞赛水平的题了,当时做了整整一个周末直到星期一晚上ddl前一个小时才通过了所有的case。做完的那种通透感真的是……

课程感受

作为一门纯刷题课,11601 这门课的 workload 没有很大,并且能够督促自己刷题。个人感受是学到了一些面试时候的小技巧,例如作为 Interviewee ,我们在拿到一道题的时候并不是刻意地追求立马把它解出来,而是应该通过与 Interviewer 的交流与追问来 clarify 任何的 confusion,让自己思路更清晰的同时也能够让自己和 Interviewer 来保持同步。这其实也是自己作为 Interviewer 来做出评价的一项 rubric。我认为这也是中美文化差异的一点体现:在中式教育中,我们可能在拿到一道题目后只是埋头苦干,而不敢立马去提出任何追问,而美国的课堂就是同学有思路就会立马提供一些 idea,不仅仅是提出 confusion,甚至直接和老师说 “Can you repeat your question?” 来让老师知道自己没有理解问题是什么。回到 Interview,我认为这其中考察的不仅仅是 Interviewee 的做题能力,其中也包括团队沟通能力,提出问题是为了让双方甚至整个团队更好地进行同步。