Welcome to XDU-CS-Learning-Cracker!¶
序¶
临近毕业,在整理自己笔记本中的资料的时候,回忆了大学四年来的学习的经历,成绩也还是比较令人满意的。结合我个人的一些经历,却觉得西安电子科技大学大学本科计算机科学与技术专业的教育也存在的许多急需解决的问题,这也是我个人感到比较遗憾的一个地方,花费了大量的时间做了很多的无用功。同时,在大学期间也收到诸多的学长的帮助和经验的传授。希望通过下面的一些经验,帮助学弟学妹们能够更好的完成自己本科的学业。
本文适用学生,并且同等重要:
- 有自我驱动的能力,而非喜欢填鸭式教学,自己不愿意稍微做一点探索。
- 对编程不感冒,喜欢倒腾编程,也许可以从折腾双系统开始,进阶点可以装arch,甚至可以build linux from scratch。
- 对英文不感冒,并且有能力自学并且使用英文教程完成学习任务。
本文首先介绍一些必备的技能,然后尽可能详细的介绍每一个学期课程学习的要领,并且会做课程资料的拓展,最后会进行一个总结。
欢迎各位优秀的学长学姐,同级小伙伴一起完善这份经验分享。
本项目受清华大学相关项目启发,并且希望能够切实的帮助到之后的学弟学妹。
由于该页面是自动生成,在原repo中并未包含该文件,因此右上角Edit on Github
无效
→ 点我进入原repo ←¶
如果觉得有帮助,可以到github点一波star。由于个人的局限性很难,若觉得有可以改进和完善的地方,请提request,若对其中有疑问,请提issue。
致谢¶
本项目不能离开各位慷慨的贡献者们! (emoji key):
babydragon |
TobiasLee |
wym6912 |
wkf |
zhouxuan009 |
Percivale |
Acmenwangtuo |
larry6799 |
zlmh |
Vsingeryh |
This project follows the all-contributors specification. Contributions of any kind welcome!
贡献¶
欢迎来贡献,由于个人的原因,很多的课程经验并不是最好的,也是不完善的。 可以通过如下方式参与项目:
- 帮忙上传: 可以发给仓库维护者帮忙上传,或者提 issue。
- 用网页操作或者桌面版 fork and pull request. 操作方式可以参考blog。
为保证未来的时效性与参考性,记得在修改的地方添加自己的年级+github账号,注明出处。
许可¶
由贡献者编写部分的许可如下:
(Creative Commons BY-SA 4.0) 知识共享署名 - 相同方式共享 4.0 国际许可协议
其他部分的版权归属于其各自的作者。资料仅供参考,请自己判断其适用性。
前置技能¶
也许这些技能、工具和思想会陪伴你职业的一生,善于利用这些工具将会事半功倍。
硬件¶
内存不要低于12G,否则Chrome页面开多了都卡,一般的笔记本应该都能自己加内存吧,除非板载那就尴尬了
windows有一个非常大的不足就是terminal了,目前可以WSL2,不过目前我是windows+remote-ssh
学习观念¶
- 将自己当成一个开发者,而非是一个学生:以问题进行驱动,不要学生思维:我要学完《JavaScript高级编程》才会网页开发。实际上,你应该先给自己布置一个任务,比如写一个网页游戏,写一个Chrome插件,然后主动的去找相关的开发环境和需要学习的东西,最后在完成任务的同时,你也就学会了某项技能了。不要永远处于一个我要做的状态,而是我已经开始做的状态。
- 不要逃课。哪怕老师讲的很烂,你可以不听,但是也可以坐到教室看自己的书,也许有的时候讲的东西也会对你有所启发。
- 找准重心,作为一个计算机相关的同学学习什么是最重要的:数据结构、算法、操作系统、计算机组成与体系结构、计算机网络、数据库、编译原理、设计模式等等。
- 多去找找这门课的英文优质课程,尝试着去完成其中的project,哪怕是借鉴别人的代码,多去读读里面的代码逻辑与思路,比同课上老师讲理论有意思的多了,并且理解更加深刻。
- 初入大学,希望还是拿出半年时间来对未来规划,确定发展方向(短期的即可)。在这半年里,多多尝试,毕竟大学的包容性很高。
git&github¶
善于利用,多上传代码,去体会云端同步的优点(说不定你代码写了一大半电脑进水了,说不定你毕业论文即将提交电脑烧毁了,被人偷了2333),每天打卡也是一种激励自己的方式。
阅读源码的能力¶
由于项目结构的多样化,往往需要快速的读懂一个框架的逻辑结构。
首先找到函数的入口,例如c语言中的main(),然后依照主逻辑,不断的往后找到自己想查看的分支就可以了。当然JavaScript这种异步性很强的语言就可能有些难读。
工具建议多使用vscode中的peek
和go to definition
的功能。
stack overflow¶
解决问题的利器,多到上面去搜索你想要解决的问题。
搜索能力¶
自建梯子(vultr)or买服务(ssr cloud)都是可以的,少用baidu。。。浏览器用Chrome/FireFox不解释。。。账户云同步,等换笔记本就知道好处了,以及强大的插件生态。
善于锻炼自己的__搜商__。记住搜集信息的能力也是很重要的。
vscode¶
微软的这个开源项目也是非常的厉害,当然是基于它丰富的插件生态。当然还有最新出的云vscode,直接远程操控你的vscode。
remote-xxx¶
remote-xxx表示remote-wsl, remote-ssh, remote-docker等等工具链。建议也不要什么双系统了,直接windows+虚拟机+remote-ssh美滋滋。
linux 命令行¶
学会构建自动化的脚本来完成自己想要完成的任务。同时命令行中包含有大量的易懂的说明文档,简直就是一个宝库。
搭建自己的博客¶
多尝试的去写点什么与他人分享。如果觉得对他人有用,可以发表到社交媒体,如知乎的文章功能,与他人交流也是促进自己的一种非常有效的手段。
公开课资源¶
可以参考一些优质的 MOOC 网站来补充自己的知识,推荐:
bilibili:众所周知,b站是个学习平台。上面有非常多的公开课课程和搬运的付费课程等,不仅仅包括理论知识,如李宏毅的2020机器学习深度学习,李飞飞的cs231n;还包括诸如黑马程序员Java, 尚硅谷Springboot等的编程相关培训知识,拿来肝大作业和为实习/工作做准备还是足够的。
Coursera:斯坦佛教授发起的一个在线 MOOC 网站,上面有许多高质量的世界名校的课程,需要科学上网以及较好的英语能力,课程的 project 能完成的话加成很大;推荐课程:普林斯顿的算法、斯坦佛的机器学习。
中国大学 MOOC:网易出品的公开课,国内很多知名大学都在上面有开课(包括西电)
学堂在线:清华大学主导的网课平台,推荐邓俊辉老师的数据结构。
CS¶
大一上¶
计算机导论与程序设计基础¶
某老师在上课时不会用Dev C++ debug的场景依然记忆尤新。。。
所以在上完课你不会编程很正常。学校会通过一个 OJ 定期的布置作业,并且测试(会计入总成绩),一定要把OJ中的每一个题目完全自己的写出来。尝试着加入 ACM 的大家庭,学校的ACM总群:116225686。(本人从ACM竞赛的训练中收获颇丰,极大的锻炼了自己的编程能力)
一些入门级的OJ:百练、PAT等等,善用自己的搜索能力。
多看相关的书籍,多动手敲代码。
自己多敲代码!自己多敲代码!自己多敲代码!不能光听老师讲课,编程语言语法什么的学个大概,关键是实践巩固。 没有基础的同学通常会在这门课上感到吃力,这是很正常的,摆正心态,多刷OJ题就好。
其他公共学科¶
主要是刷题为主,个人感觉大物之类的学过之后就再也没有用到了。。
推荐微信公众号 今日西电
维护者:西电小花坊(校内学生团队,QQ群号 347372179 / 819195739)
公众号里面有西电各种公共学科的电子教材,练习册答案等
大一下¶
Python 、java程序语言学习¶
IDE选择¶
建议使用IDEA(Java)和PyCharm(Python) , 两者都是JetBrains公司的产品,使用西电学生邮箱注册可以免费使用。 @16-larry6799
课程选择¶
根据自己的喜好来进行选择吧。
在2016级是第一次开Python语言课程,李光夏的Python感觉还不错,对刚学习编程语言的同学很友善,课程难度不高,无介绍经验。
教Java的王煦老师人不错,可是我听的课程感觉听的稀里糊涂,直到大三学了C++。
Java中重点在于面向对象编程的思想,建议先花点时间看看C++的面向对象程序设计,这样就能很快适应从C编程到Java编程。
线性代数¶
之后机器学习会用到很多,但是这门课好像学得很浅,而且考察很水,建议找MIT的线性代数课程看一看。中英双语,老师语速很友好,顺便可以练一下听力。
线性代数还有两次考试应该,如果想需要使用matlab但是又不想装(是在太大了),可以使用线上matlab环境。例如免费的 User.me , 相当于一台装了matlab的私人云主机,能满足计科学生学习matlab的基础需求。
大二上¶
数据结构¶
这个时候不知道你有没有参加大一下暑假的ACM集训,养成刷OJ的习惯,如果有的话这门课应该是很轻松的。当初我很划水的过了。
机试占30%,笔试占50%。好好学的话笔试我感觉基本可以考满分。机试一共四个题,两个满分,多做一个总分加五分,所以这门课很多100分的;四个题一定都要看,做不出来也要骗分。
[@20-semikonductor]
概率论¶
这可能是大多数同学的最后一门数学课了。这里面的有些东西很有趣,建议认真听,如果以后往机器学习方向发展,可能会有用到。
非常重要,概率论和线性代数知识在保研面试/考研复试中出现率非常高,好好学,做好笔记,大三的时候能够快速回忆拾起知识。
学校考试很简单,基本都是同一个套路,这门课学好要自己花时间理解,理解了就会豁然贯通。 @20-semikonductor
大二下¶
最难顶的一学期来了
计算机组织与体系结构¶
这个课非常的重要,也主要是理论的讲解,不会涉及到太多的编程,但是与计算机有紧密的联系,比如冯诺依曼结构,数字的表示,内存的映射,磁盘如何存储数据和寻找数据,CPU流水线等等。
上课好好听,认真完成老师布置的作业。
这个课与大三上《微机原理与系统设计》课程紧密联系,偏向于理论上的研究。
在西电学堂上有一套完整的视频讲解,搜索”计算机组织与体系结构”(其实也是上课回放),如果有上课听不懂的地方可以去听。
这门课关键是需要多想,想想为什么要这么设计?与其他方法相比好在哪里?
这门课还有一个重要思想,在很多时候设计中有 A 方案,也有 B 方案,但是他们都不是最完美的方案,就需要取一个折中的 AB 方案,既有 A 和 B 的优点,在某种程度上也克服了 A 和 B 的缺点。
赞刘博老师坚持用板书不用ppt~
考研的核心课程,要好好听,不管是保研还是考研都很重要。
计算机通信与网络¶
这个课我还专门的写过一个帖子吐槽
建议看另外一本书籍《计算机网络:自顶向下方法》。建议关注一个知乎用户:车小胖。学习的时候多去问几个为什么,然后把里面得帖子文章都浏览一遍,还是相对而言比较的通俗易懂。因为教科书里面的话比较的严谨,并且经过了字斟句酌,导致经常不说人话。
另外期末考试的题目直接上考研难度,建议买一本考研相关的计算机网络的书籍,一是这些书比较系统和全面,二是多做做里面的题目。当时一些同学考完直接傻了。。。
也是一门自闭的课程,书都没有上完,最后一节课上完三章,如行云流水。最后考试背书都感觉背不完,但是最后老师捞了我们一手,还行,不用过于担心不及格。
操作系统¶
也是让人自闭的一门课,原因是当时讲的老师自己她就不懂操作系统。。。
建议自己学,推荐6.828课程及里面的实验部分,实在一个人推不动,建议参考JOS。
真是自闭,考的也很难,我是按照b站北大陈向群老师的课程来学习的,老师语速有些慢但是很清楚,可以考虑倍速播放。(ps:中途发现清华的学生这门课的实验是自己做一个小操作系统,orz,具体是什么忘记了。。。)
考试分数贼低,还不到80,不说了,贼自闭,复习的和考的基本没关系。。
信号与系统¶
这个我本来是不想提的,但是建议学好FFT相关原理。
关于《信号与系统》,可以在中国大学 MOOC 上搜索 “郭宝龙 信号与系统”,讲解的比较细致,习题也设置合理。课程本来就很难,但是这门课为后续做图像处理、机器学习打下了很好的数学基础。
学习者需要有电路分析的基础,也是大三开设的数字信号处理的基础课程。
这里推荐一个 西电老师的微信公众号:信号与系统的结构与解释
里面有各种考试,习题等的分析,受益匪浅。
模拟电子技术基础¶
关于《模拟电子技术基础》,可以在中国大学 MOOC 上搜索”孙肖子 模拟电子技术基础”,讲解的比较细致,可以帮助你理解很多基本概念。请按照上课的课程顺序学习。
这门课难度较大,但是学好了可以更好的理解计算机设备的制造上的某些细节问题,例如晶体管。
数理逻辑(拔尖班)¶
20 级是刘西洋老师上的,因为是第一年给本科生开这课所以卷子出的很水而且大作业占比60%(阅读 Trustworthy AI 论文写总结)
网上可以搜到研究生做的笔记和往年题
笔记:https://www.jianshu.com/p/2e3552f1d06a
课程补充知识¶
大二到大三 计科 的大部分的课程的PPT,课后习题答案,考试相关资料等 都可以在QQ群 512043533 (过气课件共享群)里面找到,希望学弟学妹积极扩充资料 QQ 群 创建者:保研P大的朱大佬,现在是18级的学弟在管理
大三上¶
又是一个身心俱疲并且几乎没有自己的周末的学期。。
必修¶
数据库系统¶
关系型数据库。
如果对这个非常的感兴趣的话,可以去做做pingcap社区做的talent plan。
我当时做的大作业:database
好好做一下大作业,团队合作,挺好玩。学好SQL语言(以后有用,和考试倒是关系不太大)。
王小兵老师验收大作业贼严格,他也会叫研究生帮忙验收。但是小兵老师刀子嘴,豆腐心。小兵老师人还是非常好的,现在还记得他的76行sql语句吧。比较建议大家选赵亮老师的课程,因为长的帅,颜值即正义。
微机原理与系统设计¶
这个课还是比较难的,建议直接去旁听车向泉的课。
好像西电学堂上也有录播。
这个课与大二下《计算机组织与体系结构》紧密联系,偏向于具体的实现,例如 8086 、8088。
要与上学期学的课程联想一下,这样有助于理解。
同时也要回忆起《数字电路与逻辑设计》中的各种电路的设计方法,这样有助于理解这学期的一些系统设计。
汇编语言也需要深刻的理解。
推荐一个电院老师讲的《微机原理与系统设计》:去 bilibili 搜索 “周佳社 微机原理与系统设计”。
直接翘课去听车向泉老师的课,如果不放心可以借个账号看回放。回放不是在西电学堂,而是在教务系统,上完这节课后,不到一天就会有录播传上去,所以可以借个车向泉老师班上学生的账号登录教务系统看回放。(看来这个功能推广不够呀,知道的人不算多)另外配套实验做的东西都挺有趣的!
能选车老师的课程就选车老师的,选不了建议借选到的同学的账号看录播,尤其是车老师最后一节课的总结内容,会说考试内容形式,而不会像XX老师。
方向必修¶
计算机视觉(大数据方向必修)¶
苗院长讲了几课中途跑路了,新的老师没有能力把这门课讲好。。。
ppt直接照搬的康奈尔大学的课程,我当时做的大作业:计算机视觉
建议自求多福。考试前把ppt里面的每个原理自己推一遍,实在不会推找大佬帮你推,找不到就死记硬背吧2333
考试点琐碎无比,所以要推理的一定自己手动推一遍,该死记硬背死记硬背。
反正上完这个课我是再也不想去碰计算计视觉了,直接当场劝退。
感觉这个课程其实是按照4个大作业来走的。提前说:大作业都能在网上找到答案,但不建议去抄。 大作业的形式就是让你去补充未填写完成的函数,也就是对前几次知识点的考核,建议自己写。 考试的话,基本死记吧,有一些些线代的东西。
计算机安全导论(网络、大数据方向必修)¶
通识课,考试难得要死,跟学的完全不一样,建议好好做最后的大作业。
当时我在课上做的演示主题:堆栈溢出攻击
演讲ppt:堆栈溢出攻击
会让挑选做两个大作业,可水也可好好做。ps:老师画的重点一个都没考。。。。
考试大部分都是概念性的东西,依稀记得有https和http,加密算法, 防火墙。。。沈院长看完我们考试的试卷可能觉得我们都是垃圾吧,监考的时候走出考场就很生气。
面向对象程序设计(C++, 软件方向必修)¶
这个课比较简单,建议先学这个再学Java。
大作业是一个比较简单的小小的系统设计,比如员工管理系统,数据存储可以写在文件或者数据库中。
最后的考试内容以PPT为准,重点是对封装,继承,多态,虚函数,生命周期等的理解。
算法分析与设计(双语)(软件方向必修)¶
挺水的,感觉之前都学过。
建议没有打过ACM的修读,主要内容是算法复杂度分析,排序,并查集,字符串,堆,图论相关算法知识。
一共有几次大作业,算法实现语言不限,不过建议使用Java语言,因为这本书配套了学习资料,以及官方封装的Jar包,可以在此基础上进行编程。最后一次的大作业是dijskra算法的改造,A*算法相关。
考试需要计算和思考的内容还是非常大的,一定要把课后习题全部弄懂。
数字信号处理(嵌入式方向必修)¶
个人感觉难度大于《信号与系统》。教学上围绕DFT、FFT展开,讨论针对序列的不同方式的傅立叶变换的特性及联系,其次教学内容是针对IIR、FIR滤波器的设计方法。上机作业也是在matlab上设计几种不同的滤波器,现场解释设计方法及对信号的处理结果分析。平时也会布置课后作业。
考试为闭卷考试,占60%以上,不过题目基本源于课后习题。
平时认真对待课后习题,这门课还是很轻松能过的。
学院选修¶
组合数学¶
打ACM的一定要学一下,Polya和burnside自学,而且这门课没有考试是考察,就交一个小paper就行了。
我当年纯自己写的小paper:[Burnside引理和Polya定理之间的联系]
补充:课程最后有个开卷几道题的随堂测试,不是很难,反正这是一门性价比非常高的选修课。
大数据时代的软件开发模式与技术¶
是中途开的课程,请的外教(中国人)
所有作业均为组队,上课之前会点名
中间有几次编程作业,最后是英文PPT答辩展示。
2个学分,只要作业交了就能通过,最低档次的分数由老师的心情来定,
16级最低分好像是70左右,每个组的组长比组员高2分
补充¶
大二到大三 计科 的大部分的课程的PPT,课后习题答案,考试相关资料等 都可以在QQ群 512043533 (过气课件共享群)里面找到,希望学弟学妹积极扩充资料 QQ 群 创建者:保研P大的朱大佬,现在是18级的学弟在管理
大三下¶
必修¶
人工智能¶
水过
比较简单,人工智能的发展史~
有一个遗传算法的实验,验收会给定一个不同位数的基因型,再给不同函数的优化,所以整理成模版以便方便修改各个参数和目标函数F(x,y)。可以参考我的博客:遗传算法求解模版(两元)@18-Vsingeryh
方向必修¶
数据挖掘(双语)(大数据方向必修)¶
水过,不喜欢
我感觉还挺好玩的,做两个实验,不难。马小科老师讲的挺好,上课比较严格。 同学说实验是三选二,但我记得我当时是二选二了,可能因为某些原因没看到题? 选的是电影推荐和聚类技术——复杂网络社团检测。这类型的实验自主性还是比较大的,做完有一丝丝成就感。
媒体数据管理(大数据方向必修)¶
好好做平时的作业,期末考试只占20%,开卷。最后考试全是主观题,相当于当场写小论文。
崔老师讲的还是比较好的。
水过,上课折服于崔院长的颜值。
这节课基本每年实验都会不一样,实验比较混杂,可以说什么方向实验都会来一个,可以部分参考:Media_xdu@18-Vsingeryh
编译原理(软件工程方向必修)¶
这个是我本科写过最硬核的作业了。
老师讲的很一般,建议看SICP。
认真完成大作业,我当时不分昼夜的肝了两个星期:sql parser
这门课张南老师给分还挺高的,个人感觉。老师还会给夏令营的同学签推荐信,爱了爱了❤️
网络应用程序设计 (软件工程方向必修)¶
课程所以的实验都在Linux下完成的,很硬核这个课程。
感觉老师讲课讲的也不是太好,基本到课率在30%左右。
第四次实验是写个手机作为电脑鼠标的程序,老师给的程序我都没有跑通,我枯了,所以只交了前三次实验报告。
考试更是究极纯粹,就四道大题,写思路+代码。
建议非方向必修不要选择这么课程,体验不是很好。
分布式计算(软件/网络方向必修)¶
李龙海老师讲的很仔细认真,但是我当年结课了还是没有入门分布式计算。
建议直接上6.824 2018。
当时的大作业:dis_lab
2016级因为时间的关系,所以实验只进行到hadoop那块,缺少 Paxos 分布式一致性算法的实验,希望2017级以后的同学补充上。
机器学习(大数据方向必修)¶
建议直接搜优质学习教程。。。老师水平有限。。。这个课全程划水。。。(求求未来从事这方面研究的同学可以来补充一些)
建议通过优质公开课自学。
实验都不难,难的都可以调库,当然也有大佬不掉库自己写svm的smo算法等等,如果真的想以后做这方面科研可以深入学习,不然直接水过不香吗?同样实验每年都不完全一样,可以部分参考:mlexp@18-Vsingeryh
嵌入式系统(嵌入式方向必修)¶
我是其他方向选修的,考试轻松水过,平时也有实验。
没有教材,课程和考试全都基于PPT,实验也有对应的实验手册。课程内容则是针对ARM汇编程序、ARM下C编程、uCOS-II操作系统、部分外设等。
大四¶
基本上有下面几种选择:工作、保研、考研、出国。
当然还有最重要的毕业设计。
毕业设计¶
- 本科毕业论文latex模板 @16-babydragon
- 2020本科生论文word排版 @bilibili zl
- 保研的学生要求良好及其以上,保研学生认真务必认真对待毕业设计 @16-larry6799
SE¶
写在前面¶
@16-TobiasLee:在西电求学四载,一路上受到了许多师长的指点与帮助,甚为感激。毕业之际,也希望把自己四年的一些微不足道的经验与后来的学弟学妹分享,如果这份经验能够帮到你,深感荣幸。如有疑问,欢迎使用邮件的方式与我交流。注:本人为2016级软件学院(后与计算机学院合并为计算机科学与技术学院)软件工程专业,培养方案可能与你的有些许不同,部分经验可能不存在普适性,请自行斟酌。
大一上¶
高等数学(I)¶
神奇的数学课,前面两节课你觉得自己都会,后面突然发现自己听不懂。不要慌张,老老实实做作业,期末刷完卷子你就肯定能过了。至于学会求一堆函数的微分和积分有没有用,就见仁见智了。
大一下¶
数据结构¶
CS 专业的一门非常重要的课程,学习的内容包括链表、队列、栈、哈希表等经典的数据结构,以及简单的排序算法。请认真听课并完成作业,这门课的知识在三年后求职、深造中都是会被经常考察到的。
考试成绩分为笔试+机试,机试的形式为在线 OJ,建议可以在西电 OJ 上刷题锻炼基本的编码能力。
补充一下针对机试的练习, 可以学习一个《挑战程序设计竞赛》 前两章,配合GPLT 天梯赛的OJ食用(找不到链接了..不知道这OJ还在不在了),可以帮助加深对数据结构的理解,提高实现算法的能力。此外春季学期会有GPLT天梯赛,刷题有助于在学校的选拔中取得好成绩。题解的话可以参考这个博客。
线性代数¶
一门可能学完你还是不知道他究竟在干什么的课程,学了行列式的计算、矩阵求逆但你还是不知道有什么用。建议配合 B 站的线性代数的本质课程一起服用,理解比计算更为重要。
大二上¶
面向对象程序设计¶
又名 C++ 程序设计,前半部分会介绍面向对象编程(OOP)的概念,后半部分则会介绍 C++ 这门语言,大作业可能会涉及到的 GUI 编程,推荐使用 QT。对于要找工作的同学来说,课上讲授的内容面试中很有可能会碰到(例如,我曾经被问过虚函数的相关内容),请好好学习,并且适当编一些小 case 加深理解。
大二下¶
计算机系统与设计(Ⅰ)¶
又名《计算机组成原理》,推荐顾新老师的课程。会从较为底层的视角讲述计算的原理(例如,计算机是如何表示浮点数的?)。教科书(蓝色,李伯成与顾新编著)写的还是不错的,同时也可以参考《深入理解计算机系统》这本书进行学习。
Java技术¶
第二门语言课程 Java,同样是很多找工作的同学今后吃饭的工具。Java 整个内容比较多,需要同学们自己根据需要去学习相关的内容,其特性也是工作面试中常考的(例如,动态绑定、虚拟机的垃圾回收等)。推荐 IDE:IDEA(JetBrain)推荐课外读物《深入理解 Java 虚拟机》。大作业是一个 GUI 的日历程序,工程量相对来说还是较大的,尽量不要拖到 DDL。
此外,似乎 16 级以后有 Python 可选,也可以选择。
大三上¶
必修¶
操作系统¶
CS 核心课程之一,建议从头到尾过一遍教科书(英文版)。配套的实训课程需要对 Ubuntu 内核进行一定程度的修改,照着教学视频做也会有很多 Bug,请耐心等待,最后都能过的。
数据通信与计算机网络¶
计算机网络,核心课程,推荐严体华老师,讲课虽然你听不懂但他似乎都是懂的(x;
好好学,期末挂科率很高一门课。
这门课的特点是知识点太多而且需要记忆。除了老师规定的英文课本外,可以配合《计算机网络(第7版)》 服用,后者讲地挺细( 《王道考研 计算机网络》算是后者薄一点的版本)。不过主要还是课本,因为考试以课本为纲。另外为了应付考试,要学会快速手算CRC,考试可能会出一个很恶心的数值把人心态算崩
选修¶
海量数据管理¶
云计算方向的必修课,其他方向的选修,主要内容是 Hadoop 的学习和使用。验收内容就是 Hadoop 的基本使用,大作业是一个报告。难度不大,给分合理,推荐星级:4.5 / 5
机器学习导论¶
这门课是非常火爆的,第一节课 B 楼大教室都坐不下的程度。随着课程的进行,教室座位的稀疏程度逐渐上升。一方面是因为课程难度加大,另外一方面也是任课老师的教学一言难尽。教材用的是周志华老师的西瓜书,侧重公式的推导。推荐星级 2.5 / 5 。如果不是为了学分,真的想学习相关内容的同学,出门左转 Coursera 吴恩达老师的 Machine Learning 课程。
通信技术基础¶
数据管理技术¶
Android应用开发¶
Windows 8 应用开发¶
大四¶
大四的课程所剩不多,大多同学在为自己的前途奋斗。
竞赛¶
数学建模竞赛¶
程序设计竞赛¶
acm-icpc(现在貌似应该叫JB-icpc ?) 是计算机行业内认可度最高(?大概)的竞赛(当然信息安全方向的话应该是ctf,我不是很了解,可以咨询西电信安协会)。
春季学期有校赛和省赛。校赛是个人赛,省赛是组队赛。秋季学期有区域赛。
CodeForces 里经常有比赛,CodeForces GYM里有组队赛。
各种经典OJ,如POJ
对于大学刚接触编程的同学来说,鼎鼎大名的《算法竞赛入门经典》不能作为一个好的入门教材(大概率是我太菜了,无法参透此书的奥义)。建议一开始多刷“水题”。“水题”其实不水,可能是比赛中除了签到题外最简单的题,或者是CodeForces里面的A,B题,叫它“水题”的原因是它似乎难以归结到任何一种具体的算法类别之下。初期多刷这种题可以提升算法实现能力。网上随便一搜就有“水题题号合集”应该就能找到很多。基础的算法实现能力提升后可以在不同算法类型(动态规划,图论,网络流,搜索,数论,贪心,字符串, 数据结构…)挑选少数进行专项练习(网上有许多合集)切忌博而不精。
对于初学者如果对基础的数据结构和搜索还不熟悉,可以练习GPLT 天梯赛的题目并参加此比赛。详情请见SE/大一下.md的数据结构部分。不过这个比赛和acm比赛的做题思路差别蛮大的。
鄙人不才,一点拙见权当抛砖引玉,西电acm大神非常多,希望大神们可以来分享人生经验。
程序设计竞赛的相关知识可以参考[oi-wiki](OI Wiki (oi-wiki.org))
现在在大一刚入学的第一个学期末会有新生赛,将颁发校级证书和奖品
最终能进入校队参加区域赛的只有一小部分人,如果你想提升自己的编程水平,还可以参加以下比赛
如同时期的IEEExtreme极限编程比赛,csp认证(一年3~4次)以及ccsp(一年一次)。
参加CSP认证并达到一定分数能够获得参加CCSP的资格。CSP系列比赛的题目类型和ICPC也不太一样,且和IEEExtreme一样目前都是IOI赛制
还有一些线上比赛,如百度之星、力扣周赛、codeforces、atcoder、google kickstart等,都可以尝试参加
你也可以在新生赛前报名参加各校内技术俱乐部,如浪潮俱乐部、微软开源社区等,在俱乐部中结交志同道合的朋友。
升学¶
保研¶
请关注西电保研群(367490352),里面有很多大神学长学姐。
在西电的 CS、SE 拿到保研名额的同学,最后基本上都能有一个比较好的去处,所以请大家保持自信,我们都是很棒的!上研的方向包括:系统、数据库、AI(NLP、CV、ML Theory 等)、分布式、软件工程等。
机试¶
对于计算机/软工学科,不管是是保研夏令营还是考研复试,都需要通过机试这一关。
机试如果取得了不错的成绩,基本上就相当于夏令营优秀营员/考研复试稳了。
这里仅针对没有打过ACM的同学,打过ACM的聚聚到哪里都是乱杀。
- CCF CSP认证/PAT
许多学校如 北航,可用CCF CSP 认证成绩当作机试的成绩; 还有比如浙大,可以使用 PAT 成绩当作机试成绩。
- 准备机试时间选择
保研的同学可以在3.4月开始准备夏令营的机试;考研的同学初试完成之后寒假准备就行 不建议过早准备,考前常规训练能够提高自己的手感
- 参考资料/OJ选择
- 往年该校机试题
该校的OJ系统/学长学姐/知乎专栏/CSDN/简书/王道论坛
经验帖¶
- 经验贴00:2020计算机保研经验贴!(北航、北邮、中科院)
- 经验贴01:2020年计算机推免研究生经历分享 - babydragon的文章 - 知乎 @16-babydragon
- 经验贴02:北邮,北理,北航,中山大学夏令营总结 @16-larry6799
- 经验贴03:西电保研至东南经验贴 @csdn 16-月半 月半
- 经验贴04:西电to北航 一路保研经验分享
- 经验贴05:2019保研回顾——西电计科到北理工计科
- 经验贴06:知乎问题-在西电排名10%的学长学姐都去了哪里?
- 经验贴07:知乎问题-可否分享一下你的西电保外历程?
AI-NLP¶
@16-TobiasLee:自然语言处理,是 AI 中一个偏应用的方向之一,同时也是近几年很~~火热~~内卷的方向。总的来说,选热门方向就会面临一个取舍,即学校档次会有所下降,例如,本来你可以去清华的系统方向,但你如果选择是 NLP 方向的老师,你大概率无法去到 THU,因为 THU 的 NLP 太火爆以至于本校学生都难进。当然,如果您有 ACL 系列会议的论文发表,出色的编程能力(区域赛金牌)以及不错的英语水平(六级 600+),那就天高任鸟飞,海阔任鱼跃了(x
附一个当初收集的 NLP-teacher list(注:排名不分先后,且方向、主页不一定准确,信息仅供参考):
北京大学:
万小军 http://www.icst.pku.edu.cn/lcwm/wanxj/ 文本摘要,情感分析
严睿 http://www.ruiyan.me/ 对话系统 文本生成
李素建 http://123.56.88.210/ 文本挖掘
孙栩 http://xusun.org/ 自然语言生成、结构表示和学习
穗志方: http://eecs.pku.edu.cn/EN/People/Faculty/Detail/?ID=6024
清华大学:
刘知远 http://nlp.csai.tsinghua.edu.cn/~lzy/ 知识图谱,表示学习
刘洋 http://nlp.csai.tsinghua.edu.cn/~ly/ 机器翻译
唐杰 http://keg.cs.tsinghua.edu.cn/jietang/ 社交网络理论
黄民烈 http://aihuang.org/p/ 对话系统、强化学习
复旦大学:
邱锡* http://nlp.fudan.edu.cn/xpqiu/ 情感分析 文本生成
黄萱菁 http://nlp.fudan.edu.cn/xjhuang/ 信息检索 自然语言处理
上海交通大学:
俞凯 http://speechlab.sjtu.edu.cn/~kyu/ 语音理解,对话系统,语音识别,语音合成
赵海 http://bcmi.sjtu.edu.cn/~zhaohai/ 数据挖掘、生物信息
南京大学:
陈家骏:https://cs.nju.edu.cn/chenjiajun/
黄书剑 http://nlp.nju.edu.cn/huangsj/ 机器翻译 Seq2Seq
中科院:
刘群 http://nlp.ict.ac.cn/~liuqun/index_zh.htm 中文自然语言处理,机器翻译,信息提取
刘康 http://www.nlpr.ia.ac.cn/cip/~liukang/index.html 情感分析
西湖高等研究院
张岳 https://frcchang.github.io/ 解析和生成,机器翻译
哈尔滨工业大学
车万翔 http://ir.hit.edu.cn/~car/chinese.htm 语言技术平台 对话技术平台
秦兵 http://ir.hit.edu.cn/~qinb/ 信息抽取 篇章语义 情感分析
徐睿峰(深圳)http://219.223.252.33/body/shizi/detailcn.php?strID=492 情感计算 社交媒体分析
香港中文大学:
Prof. LAM, Wai (林伟) http://www1.se.cuhk.edu.hk/~textmine/ Text Mining IR NLP
香港理工大学:
Wenjie Li(Maggie) http://www4.comp.polyu.edu.hk/~cswjli/ 自然语言生成、理解
出境深造¶
请关注西电飞越群,里面有很多大神学长学姐。
关于各国大学计算机水平排名,可以参考csranking
可以关注一亩三分地论坛。留学中介的话不能全信,因为有的中介会提供错误的信息,为了避免此类情况可以多和学校前辈或同辈交流。
暑期科研¶
现在很流行的一个东西。大三暑假(我也听说过有强者大二、大三各一次)去境外学校和那边的老师合作进行科研,这样可以拿到境外学校老师的推荐信。我看到清北,华五和境外大学都有很多官方的暑期科研项目,985学校许多和UCLA合作有UCLA-CSST项目(我也听说过自己申请这个项目并成功的,学弟学妹可以试试)。西电没有官方合作项目,可以自行投递简历给教授。
这对想申PhD来说是很好的机会。PhD的申请推荐信很重要,教授会倾向于信任熟悉的其他教授。或者甚至表现良好直接留组也有可能。申master的话推荐信也会很有用。
找教授的话,可以在csranking里面找。csranking还可以帮助挑选出某一方向的教授。有的新来的教授可能在csranking上没有,如果不想有遗漏,可以去大学官网cs/ece/ee faculty下寻找(只在cs faculty下寻找可能会有遗漏,比如一些做深度学习的老师会在ee系,一些做计算机架构、嵌入式系统、计算机系统的老师会在ece下面)。
申请的细节,签证问题等一些比较tricky的东西,我在此不多表。
去了以后,好好干活,可以偶尔旅游一下体验异域风情放松心情,但是要记得自己来的目的。因为工作态度是会被教授看在眼里,不好好干也出不了成果。而且不能只闷头苦干,要多向教授邮件汇报成果(毕竟教授很忙,可能见不了几面),比如每周写周报,我还见过强者天天汇报的… 如果有组会要做好准备,认真准备slides,写稿练习发言(毕竟刚去一个不同语言的环境,要做到辩才无碍很难)。从平时多是上课的学生到一个不同学术体系中的科研项目参与者,这其中的思想转变会有难度,核心就是对工作要负责(其实这也是做所有事情应该有的态度吧,“世界上怕就怕’认真’二字”)。
美国¶
学位分两种 - master和PhD,算是两种完全不同的体系
master | PhD | |
---|---|---|
费用 | 自费授课型项目(少数学校有研究型硕士,但是申请难度近似PhD) | 有工资,如果所在城市物价不高可以覆盖学费和生活费、房租 |
去向 | 读master者大多选择毕业后拿着工作签证在美国找工作(需要刷LeetCode题库),少数人继续申请读PhD | 工作、教职 |
时间 | 多为1.5年-2年 | 大多为5年 |
申请时什么最重要(个人观点) | 本科学校,GPA | 推荐信,论文 |
另外申请还需要英语成绩(都接受托福,少数接受雅思)、GRE成绩(极少数学校不需要)、推荐信(大多学校要求至少三封)、简历、文书。
据我所知acm竞赛,数模的等竞赛成绩对申请帮助几乎为0,这与保研非常不同。所以说选择了不同的目标,大学前三年的努力方向会有很大不同,学弟学妹们最好早做决定,做好取舍,毕竟人的精力是有限的。
西电与一些美国学校也有学分交换项目,比如UCR3+1, UIC,或者也可以自行申请其他学校的学分交换项目(UCB等学校有类似项目,强者可以试试)。和美国学校本科生一起上课,提前适应环境。如果是一年的项目,还可以申请OPT签证,可以在美国实习。西电对于有合作的学分交换项目的政策还是蛮友好的,比如UCR3+1大四出去的一年西电这边几乎没有事,毕设也可以拿UCR这边的课的学分换。我在UCR遇到国内别的学校来的学生,有的还要做国内的毕设远程答辩。
日本¶
可以关注西电和早稻田大学合作的3+3项目
法国¶
西电与许多法国学校有合作
香港¶
香港也分为两种,Master/MPhil与PhD,和上面美国的表格类似
Master | PhD | |
---|---|---|
费用 | 授课型硕士Master(一年开销20w-30w)、研究型硕士MPhil(全额奖学金,金额与PhD相同) | 全额奖学金,20fall的奖学金标准为17500-18000 港币/月,每年9月会涨奖学金,每月涨500左右。即21fall奖学金标准可能为18000-18500 港币/月。 |
去向 | 港校基本不收研究型硕士,因为老师得花钱养你两年,好不容易出点成果你就要毕业走人把香港当跳板去其他地方,老师会很亏。因此大多硕士是授课硕士,毕业可以回大陆工作或者继续申请PhD。找工作各凭本事,一年制硕士由于时间短,收获程度与看这一年的努力程度成正比。继续申请PhD同理,一年内论文出的多可以考虑继续申请。 | 去其他地方做Postdoc或者回大陆工作。工作可分为工业界和学术界。工业界打工进大厂应该没问题,学术界找教职就得看PhD期间的论文数量。 |
时间 | 授课硕士:10个月,(9月入学,第二年7月毕业)研究型硕士:2年。 | 一般都是4年(无论读完本科申请还是读完硕士申请),某些学校读完硕士再申请可以3年PhD毕业。 |
申请所需 | 本科学校档次、GPA、语言成绩(建议考雅思) | 本科学校档次、GPA、语言成绩(建议考雅思)、科研成果、推荐信 |
一些碎碎念:申请香港PhD的同学,不必一股脑朝着港三校(港大、港中大、港科技)申,港三校竞争极其激烈,本科西电211背景能申上的寥寥数人。可以尝试港城大(CityU)和港理工(PolyU),毕竟读PhD,老师和方向与你match与否才是最关键的因素。比如:港城大的system和networking方向,在香港能排上前两名。
Tips1: 香港尤其看重国家奖学金。如果你的国奖数量>=2个,学校的committee基本就不会卡你(当然硬性指标如语言成绩得过线),这时只要你联系的老师有意向要你,你基本是可以稳拿offer。
Tips2:AI的内卷程度大家也看到了,希望大家在深造时考虑好这个因素,选择也很重要。CS不止人工智能,还有很多有意思的方向等待着大家 :-)。
Tips3: 奖学金真的挺多的hhhhh,就是开销也比较大,香港物价比较高,不过每个月能省下来的钱还是非常可观的。有能力的同学(三次国奖+均分95+托福105+/雅思7.5+若干paper)可以尝试申请香港政府奖学金HKPFS,4年140万奖学金等你来。
新加坡¶
澳大利亚¶
考研¶
实习&工作¶
Leetcode刷题经验¶
写在前面¶
毫无疑问,对于面试者代码能力的考察,是面试很重要的部分,尤其是近些年,几乎互联网大厂都加强了对于代码能力的考察,尤其是字节跳动对代码的考察最为严格,体现在两个方面,一是初试,也就是机试会给你2-3道编程题,在规定的时间内进行作答,通过一定的测试样例会有相应的得分,拿到一定的分数才能进入下一轮的面试,有些公司甚至根据做题个数定位面试者的薪水档位。二是面试手撕代码,面试官当场出题,盯着你给你一定的时间完成一个特定的算法题,比较考察面试者在高压下的编码能力。如果手撕代码失败,这轮面试也会大概率凉凉,所以在面试之前有一定的刷题数是十分必要的。
本人利用大四保研时间,做了leetcode站上700道算法题,分享一下自己的做题经验和技巧。本人leetcode个人主页:Amazingt
注:本教程只适合在本科期间没有ACM经验的,算法比较薄弱的学生。ACM算法和LeetCode难度不在一个水平。有ACM经验/奖牌的大佬可以忽略这条经验。
什么是LeetCode¶
LeetCode无疑是找工作刷题的首选网站,其次还有牛客网(UI太乱,不够清爽)等等,但是很多手撕代码的经典题都来源于leetcode原题。目前leetcode有中文站、英文站两种.
leetcode的题分为Easy , Mid , Hard三个难度,一般的公司考察到Mid基本就差不多,最近几年由于内卷严重,Hard考察也屡见不鲜(尤其是字节跳动),建议大家根据自己的水平循序渐进。如果不满足于Leetcode,可以去做更难的OJ,当然这是更好的,多学总没有坏处。
怎么刷¶
首先建议初学者使用中文站,熟悉代码的提交方法,并熟悉整个站的组成,初学者应该从探索卡片刷起,熟悉基本的算法概念。建议初学者使用C++/JAVA来进行刷题,不建议使用Python,强大的api会让初学者基础不牢。
你需要了解的数据结构和算法有
- 数据结构
数组。包括数组(一维,二维)前缀和、差分,数组的一些基本操作,添加删除等。
栈。栈特别是要注意单调栈的使用,这是一个经常的考的考点。
队列与优先队列。队列用于BFS中,优先队列一般是为了降低算法的复杂度。
树。最基础的,树的各种遍历方法,递归和迭代都要会。
哈希。你需要知道c++这些数据结构的用法,如何进行查找等
图。图需要会使用DFS/BFS进行遍历。其他常见的例如最短路、拓扑排序等。
————————下面是一些高级数据结构————————–
并查集。并查集解决联通分量,十分好用。
Trie树。也叫字典树,用来解决查询问题。
树状数组、线段树。这类题较少,但是不排除考察的可能。
- 算法
排序。各大排序算法。其中手撕快排堆排,在面试中最为常见,需要熟知每个算法的稳定性,复杂度等。
二分查找。二分查找难点在于边界的选择,和有些题,你不知道如何使用二分。
贪心。贪心算法难点在于找到贪心的策略,一般找到之后,代码十分简单。
动态规划。动态规划是比较难的一类题,没有什么比较好的方法,应该就是多做题,背套路。将DP可以分为好几大类(后面会进行补充)
位运算。位运算的题比较灵活,建议初学者学习补码,反码等计算机基础知识后,再去理解位运算。
————————-模板算法(只需要进行套模板)—————–
滑动窗口。滑窗题模板固定,题的类型也大同小异。只要多打几遍模板,就能熟练运用。
回溯。回溯算法模板比较固定,一般集的在递归后恢复现场即可。
BFS的模板。BFS模板十分固定,一般借助队列,就可以轻松秒杀。
…………..其他算法具体见leetcode上的tag
一些建议和资料¶
建议¶
对于想找一份大厂工作(又觉得ACM太难)的同学,建议从大一开始,就在leetcode上做题,我认识已经有大一1200题的学弟(自愧不如。。。)
周赛与双周赛。周赛是leetcode每周日在早上10.30-12.30一个半小时。双周赛是每两周的周六晚22.30-0.0。两个比赛都是四道题,基本前两题都是送分(有时候第二题会很难),第三题需要一定的算法知识,第四题是你成为大佬的试金石。很多人卡在常年三题(比如我。。。)每场比赛会有一定的积分奖励(可以兑换周边,做题还有衣服穿他不香嘛),而且会更新rating排名,是很好的检验自己学习成果,并锻炼自己在短时间解决问题的方法。所以极力推荐参加周赛/双周赛。
每次双周赛在B站都有大佬实况录像解题,学习别人的思考方法无疑也是重要的学习手段。推荐UP主:
资料¶
最好的资料应该就是题解区的题解。一些国服题解少,或者质量不高,可以转向世界服(具备一定的英语能力),其次还有b站各大up如上。
同时推荐背包九讲和labuladong的算法小抄
还有很多资料需要大家自己学习去整理。
实验室&科研¶
什么是科研¶
科研就是将一个问题,翻过来调过去,掰开揉碎了看。
首先讲两个故事
气泡可以掀翻美国航母吗¶
中国曾经给过一个科研最大的funding,这个科研的问题是“有什么方法能够对美国的航母造成致命的打击,但是我们却不需要承担道德的责任”。当时国防科大有一哥们儿奇思妙想有一idea:把一个气泡,一个很大的气泡,通过高压的方式压缩至很小,并且保存在深海之中。由于在海底压力很大,气泡不会很大。一旦美国航母经过,就释放改气泡,随着海拔不断的升高,那么压力越来越小,气泡也就越来越大,最后通过相关的理论计算,这个气泡到达海平面能够达到航母的20倍,足以掀翻整个航母。这个武器的基本成本是零蛋。虽然最后没有实现,但是这个idea非常的奇妙,并且初期的时候具有一定的科学性。
人类寿命提高到150岁?¶
在20实际80年代,一些生命科学家找相关的科研机构要钱,大部分是一些药品的研究制造。一科学家提出这个样的idea:将人类的寿命提高到150岁。该科学家挑了13种与人类相似的脊柱类动物,发现有九种动物有下面的规律:它的生长期结束的时候与整个的生命周期的比值为6.5-7.8,平均是7。人类在长完最后一个智齿算是停止生长了,一般20-25之间。如果按照平均值计算的话,那么人类应该活到140岁啊,这里面有什么原因呢?结果国家机构拨款6千万美元,这个科学家研究了20多年没研究出来就死球了。
科研与工业产品¶
科研工作中,100个点中如果一个点特别的亮,即使整个方法不work,你也会想办法使之work,那么完全就可以中顶会。
而实际的工业产品中,需要的是每一个部分比较的均衡,但凡有一个部分没有做好,那么这个产品就不能使用。妄想用科研改变世界的人都是错误的,能不能实现?很少一部分能实现。科研是不断积累新发现、新经验和新角度,新产品的过程,把获得的钱转化为知识点,在人类的发现里增加一点点。
工业产品是将知识点没有过的组合,一点点的组合,做成可用的产品,换成钱。科研与工业创新是可逆的。
也许之后你会经常听到,科研其实就是讲好一个故事。放平心态,尝试着去增加人类insight。
而insight可以从下面的方面来进行:
- 某种现象别人没发现
- 某种问题别人没发现
- 某种现象某种问题,但是解决思路有创新,有奇效。最理想的齐效就是理论进行证明。大部分的实验是没有groundtruth。
总结¶
本来这篇文章是想借鉴清华大学计算机系课程攻略来完成的,但是很可惜本人直到大二才使用github,并且没有保存自己一些作业的习惯,导致很难成一个体系结构。
其中需要提到一个大佬的githubSincereXIA,里面包含了很多的课程笔记。
推荐的计算机课程大家可自行知乎搜索,这里就不嫌丑了。
建议可以多看看下面的这些人的文章:
牛岱,编程思维的转变
孟永康,关注大佬刷了哪些课程的project。
希望各位西电的大佬踊跃提request来舔砖加瓦啊。