我于这学期完成了DCU 的 Secure Software Engineering的所有考试,我在这里分享一下相关经验。
该项目总共包含8门课程,其中包含上半学期4门课程,下半学期4门课程,所有课程均需要考试通过,难度不小。
要想通过考试,其中最重要的有以下几点:
- 参与课堂。尽量参与每一堂课,课堂可以加深学习的印象,而且有时会明确说明考试考察的内容方向。例如,今年考察的某个题的题型是某一个特定方向的题型。这对通过考试帮助很大。
- 仔细做近年的题目。前往dcu.guruarchive.com下载历年的题目。仔细研究题型,若课程变动不大,则过去两年的题型可能不会考察。若课程变动,则过去两年的题型作为主要考察内容。建议至少做2年,最多做5年的题目。
- 仔细完成作业内容。每次提交的作业内容都将直接评分,并决定最终的成绩。通常来说,作业内容占据考试成绩的25%。由于作业是离线的,并不要求背诵和记忆任何内容,因此,只要肯付出努力,就可以取得较高的平时成绩,极大缓解考试通过的压力。
考试概述
上半学期课程
- Cryptography and Number Theory
- System Software/BlockChain
- Secure Programming
- Professional & Research Practice
下半学期课程
- Formal Programming
- Concurrent Programming
- Software Process Quality
- Network Security
上学期,课程压力不算大。其中重点的课程是Secure Programming以及Cryptography and Number Theory。另外还有一门课程,是System Software/BlockChain,具体是哪门课程,要看学校的安排。如果是BlockChain,则相对轻松,如果是System Software,则有一定压力。Professional & Research Practice这门课程相对轻松。总体而言,上半学期的课程相对轻松,有两门课是考试重点。
下学期课程,课程压力较大。几乎所有课程都有一定的难度。稍微容易一点的Software Process Quality 也不太容易取得高分。因此学业压力会有一点大。
下面是关于每一门考试的细节。
Cryptography and Number Theory
- 课程难度:⭐️⭐️⭐️⭐️⭐️
- 考试难度:⭐️⭐️⭐️⭐️⭐️
这门课程的前面几节课难度尚可,在哈希函数之后的内容,难度飙升。特别是关于Cryptanalysis和Number Theory的部分。不幸的是,难的内容反而是考试的重点。
想要通过这门课程,并且取得高分,并且花费最少的时间,建议操作方式如下:
- 认真听课,不缺席课堂。
- 在上课前,花费1小时时间,简单预习。对于Cryptanalysis和Number Theory的部分,花费2个小时预习。
- 如果课堂内容没有听懂,特别是密码分析和数论的部分,不需要太担心,只需要跟上课堂的节奏即可。
- 认真完成大作业,一般是线性攻击或者差分攻击分析,由于大作业必然出现在考试题目中,如果大作业不是自己认真完成的,则在考试中会带来挑战。作业难度相当高,并且高达25分。想要拿到满分,需要花费至少4天的时间,来完成程序的编写和验证。我的题目是Feistel 4 的差分密码分析。
- 在考试前,仔细做过去四年的卷子。并把课堂上没有听懂的密码学内容弄明白。
System Software/BlockChain
这门课程需要根据学校的设置。我参与的课程最终上的是BlockChain
- 课程难度:⭐️⭐️
- 考试难度:⭐️⭐️⭐️
BlockChain的内容主要是视频课程,并不需要参与线下的课程。这使得上学期的安排更加轻松。
作业内容是一份报告,以及2到3人的关于密码学的PPT演讲。
总体来说,这门课程理解上不需要花费太多的时间,考试也不算太难。尽管如此,这门课程通过难度不高,但是想要取得高分却很困难。若想要取得高分,需要深入理解考试卷子的内容,认真准备课程作业,并且背诵大量内容,同时在考试分配好时间,尽可能书写多的内容。
如何通过:
- 熟练背诵过去4年卷子中出现的题目即可。考试题目多为区块链的问答题,可以背诵模板回答。
- 认真准备PPT演讲的assignment以及对应的论文。论文需要有一定深度。
Secure Programming
- 课程难度:⭐️⭐️⭐️⭐️⭐️
- 考试难度:⭐️⭐️⭐️⭐️⭐️
我个人认为这是最有含金量的课程了。
这门课程的内容相当丰富,包含了计算机从顶层到底层的所有内容,例如Linux,操作系统,C语言编程,逆向工程,数据结构,GDB调试等等。
这门课程不包含作业,取而代之的是两场小的随堂考试。因此,这门考试加上期末考试,总共会有3场考试。
其中第一场考试是期末考试的预演,题型类似。第二场考试则是一个独立的,安全攻击的考试,需要自己研究并编写代码,进行攻击。
如何通过这门课程
- 尽可能的参与课堂,并且尽最大努力去记忆课堂出现的所有信息。要想通过这门课程,需要有非常扎实的计算机技术特别是计算机底层原理的相关知识储备。
- 取得平时考试的高分。这门课的老师非常的好,他总是会尽可能的将考点内容提前演练,所有的题目都是来自曾经考察过的内容的变体,因此,好好准备教授提供的复习材料是取得平时考试成绩的关键。
- 熟练做往年的卷子,保证彻底理解往年题目,特别是Linux Permissions 的部分。
- 考试时,6道题目可以选择5道题目回答,可以选择其中一题放弃,可以选择放弃关于安全攻击的那一题,因为安全攻击的已经随堂考察过了,本身内容也较多不好复习。你也可以根据自己水平放弃一题。
Professional & Research Practice
- 课程难度:⭐️⭐️⭐️
- 考试难度:⭐️⭐️⭐️
这门课程的平时成绩占比在50%。其中包含一个文献综述,一个视频演讲,一个论文。
考试成绩占比也是50%。
对于课堂的部分,可以参加也可以不参加。课堂主要以答疑为主。
如何通过这门课程:
- 作业内容尽量认真对待,取得一个很好的平时成绩的分数。想要获得高分,其中对于论文的部分,格式非常的关键。视频演讲的部分,需要足够的吸引人。
- 熟练背诵过去3年的考试题目。尽管考试可以二选一回答,仍旧需要准备所有的考察内容。
- 需要自己准备一份历年的标准答案。需要对整个课程的所有大纲有一个大致的了解。接下来,检查考试卷子的每一道题,使用对应的部分的材料,生成该题目的答案,然后背诵。
- 平时课堂可参与也可以不参与。因为主要是答疑为主。偶尔穿插一些关于practicum以及找工作的相关信息。
Formal Programming
- 课程难度:⭐️⭐️⭐️⭐️⭐️
- 考试难度:⭐️⭐️⭐️⭐️
这门课程的难度非常的高,其中涉及到复杂的逻辑推理过程。好在考察的难度还属于可接受的范围。
如何通过这门课程:
- 尽量参与每堂课,对课堂的内容进行听讲,尝试跟上并理解课堂内容,例如一些公式、原理或者推导过程。
- 认真完成课堂第三节课的作业题目,也就是Event-B建模题目。
- 对于课堂内容,如果没有听懂,不用太担心,考前复习时弄明白即可,特别是各种Law,大致有印象即可。
- 在考试前,认真完成过去3年的卷子,将课堂上没有听懂的内容完全搞明白。
Concurrent Programming
- 课程难度:⭐️⭐️⭐️
- 考试难度:⭐️⭐️⭐️⭐️⭐️
这门课程的难度并不算高,但是需要考察的内容非常多。
考试需要背诵大量的内容,需要会书写大量的程序片段,API接口,实现大量的方案、原型设计等等。
如何通过这门课:
- 平时作业需要认真完成。
- 对于考试,需要大量的做练习题,需要至少做5年以上的卷子才会比较保险。尽管题目6选5,但是由于题目考察不固定,难度波动大,建议所有题型全部复习,而不是针对性的放弃某个题型的题目。
- 参与每一堂课,尽可能对课堂中出现过的所有内容有一个大致的了解和记忆。因为考试涉及面广泛,所有出现过的内容都可能会是考点。
- 由于考试内容大量涉及到背诵和记忆类的内容,建议在上课时,提前确认当前所讲的内容是否是考试的内容,若是,则需要在课堂上尽可能的记住。
- 可是将历年试卷整理成资料库,在课堂上询问AI该部分的内容是否是考卷的内容。若是,则认真听讲。
- 这门课非常建议先浏览试卷,弄明白考察的内容。建议和AI沟通,确认过去3年的题型规律。由于这门课主要考背诵和记忆,因此课堂吸收很关键。
Software Process Quality
- 课程难度:⭐️⭐️
- 考试难度:⭐️⭐️⭐️
这门课程难度并不高,但考察的内容则比较杂。
- 考试复习时,优先复习重复往年卷子中考察的内容,例如Karnaugh和 Clause Coverage的题目。由于题目题型波动较大,尽管是6选5考察,仍旧建议复习所有出现过的题目类型。
- 课堂可以参与也可以自学。
- 作业内容并不难,认真对待,恰当的选择合适的题目可以取得高分。