这样学才能拿高分——山东大学数据方向四门课复习笔记(2021版)
每年期末考试季,总有一批人抱着手机问"数据可视化要考什么""OS重点是什么",我也曾经是其中一员。2021年那个学期,我同时修了数据可视化、数据科学导论、操作系统和数据库这四门硬课,临考前三周才开始系统整理,最后踩着踩过的坑才摸索出一套"考点优先、手写为主、画图为辅"的复习路径。这份从试题回想到知识点梳理的内容,前后整理了两三遍,现在分享出来,给后来的学弟学妹做个参考——不管你是想拿高分,还是只想少挂一科,这套整理思路都值得你花十分钟读一遍。
先交代一下适用背景。资料对应的是2021年山东大学数据科学方向课程,涉及课程包括数据可视化、数据科学导论、操作系统和数据库,考试形式偏向综合题加少量概念的简答填空。不同老师和不同年份的题会变,但重点范围变化不大,尤其是基础概念和常考题型,几乎年年重复。我这份整理的价值在于:把散落在PPT和课本里需要背的知识,浓缩成一份可以直接拿来记忆和串联的内容。
1. 这份整理的由来:三轮复习法逼出来的东西
第一轮复习时,我只是把PPT从头到尾翻了一遍,效率极低,看完第四章忘了第一章。后来我干脆换了一个思路,先把每个科目的往年试题和老师划的重点全部收集齐,再针对每一个考点去翻书、补笔记、画脑图,形成自己的知识框架。
具体做法是这样的:
- 先把四门课的PPT和教材章节列成一张总表,标注课时覆盖范围和老师强调过的章节。
- 然后回忆和收集历年题型,包括选择题、填空题、简答题、计算题、SQL写作题、画图题等,按科目分类整理。
- 之后,针对每个题型倒推知识点,把可能考到的名词解释、流程步骤、对比表格全部做一遍。
- 最后,每门课整理一份手写版(后来誊成电子版)的重点提纲,把容易混淆的和必考的内容用表格对比出来。
三轮下来,每门课的笔记大概控制在十页A4纸范围内,信息密度高,考试前翻起来很顺手。这比我最初堆了四十多页笔记的方法高效太多。
这就是为什么在这份整理里,你会看到大量表格、对比、公式和代码片段,而不是大段大段的文字——这些全是从"可能出题的角度"倒推出来的,基本属于考场上能用得上的内容。
2. 数据可视化:画图只是手段,视觉编码才是核心考点
数据可视化这门课,在2021年的考核里最有意思的一点是:手绘图表和给图表纠错占了很大分值,反而ECharts的具体代码写不写得出是次要的。这也说明了课程的重点不在工具而在原理。
2.1 视觉编码优先级,几乎是必考的一道简答题
再怎么考都绕不开的一个知识点,就是视觉通道的优先级。记住这个顺序会非常有用:位置优于长度,长度优于角度,角度优于面积,面积优于颜色饱和度,颜色饱和度优于颜色色相。简单说,人眼对位置的感知最敏锐,对色相的感知最弱,所以在设计图表时,需要表达最重要的数据关系时,优先级应该给位置和长度,而不是用一堆花花绿绿的颜色。
考题最常见的方式是给你一张设计得很丑的图,让你指出哪里不合理并提出改进方案。这时候套优先级顺序来分析就很好用。
2.2 图表选型对照:看见数据先想关系,再选图
考试里也会让你为特定数据设计可视化方案。我的经验是先分析数据关系类型,再套图表:
| 数据关系 | 推荐图表 | 慎用 |
|---|---|---|
| 趋势变化 | 折线图、面积图 | 柱状图(类别多时) |
| 排名对比 | 条形图(水平) | 饼图 |
| 构成占比 | 堆叠柱状图、饼图 | 3D饼图 |
| 相关性 | 散点图 | 雷达图(比较维度多时可用) |
| 地理分布 | 地图、热力图 | 表格 |
| 流程关系 | 桑基图、流程图 | 饼图 |
在作答时,记得写清楚选图理由——比如"用折线图因为它适合展示连续时间序列的趋势变化"这种表述。2021年考试里就有一道给城市气温数据选图的题,用折线图加散点图双组合作答通常能拿高分。
2.3 ECharts上手时最容易踩的坑:option配置项
虽然ECharts代码考察没那么严格,但作为数据可视化方向的学生,工具实战还是得掌握。我当时写ECharts踩了不少坑,整理出来给同专业的同学提个醒。
第一个坑是series的类型别搞混。line是折线,bar是柱状,pie是饼图,scatter是散点,地图是map。同一个图表里想混搭类型,可以放多个series对象,但每个series都需要单独的type字段。
第二个坑是坐标轴类型。类目轴category和数据轴value如果设错,图表会直接不显示或者显示成空白。判断方法是横轴是比如月份名称、城市名称这类离散值,就用category;横轴是数值范围,就用value。
第三个坑是数据格式。数据量大的时候,不要直接在series.data里手写数组,优先用dataset配置项来管理数据,这样组件之间好联动,切换维度也方便。
下面这个例子是一个简单的折线图入门配置:
option = { title: { text: '2021年气温变化' }, tooltip: { trigger: 'axis' }, legend: { data: ['最高气温', '最低气温'] }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: { type: 'category', data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] }, yAxis: { type: 'value', name: '温度(℃)' }, series: [ { name: '最高气温', type: 'line', data: [11, 11, 15, 13, 12, 13, 10] }, { name: '最低气温', type: 'line', data: [1, -2, 2, 5, 3, 2, 0] } ] };这份配置是我当年练手用的,核心是把option对象的三要素(data、xAxis、yAxis、series)理清楚。真正考试不要求默写这么完整的配置,但理解结构对笔试中关于图表组成的简答有直接帮助。
2.4 常见图表错误清单
数据可视化知识点里,有一类题是判断某个做法是对是错。总结起来就几种常见错误:
- 饼图超过5个扇区还硬用,应该改用条形图;3D饼图更是灾难,透视会严重干扰面积判断。
- 配色混乱,用了高饱和对比色但数据类别根本没有可比性。
- 坐标轴不从零开始却硬撑"柱状对比",在视觉上夸大了趋势差异。
- 双坐标轴滥用,两个不同的量纲放在同一张图,却不在标注中说明。
- 颜色只用纯色,忽略色盲用户。
2021年试卷里就有一道题是让指出一张双轴图的问题,我当时列了三条错误和修订方案,得分很稳。建议把这几个点背熟。
3. 数据科学导论:统计思维比代码能力更拉分
数据科学导论,名字听起来偏概念,实际上考试里最狠的是统计推断和Python结果解读这类题。很多人以为这门课就是讲什么是大数据、什么是机器学习,结果在假设检验上栽了跟头。
3.1 数据科学全流程:从问题到决策
整门课的骨架是数据科学的完整流程:业务理解、数据采集、数据清洗、探索性数据分析、特征工程、建模、评估、部署、决策、反馈。考试喜欢让你把几个阶段排序或者指出某个操作属于哪个阶段。
我当时整理了一个口诀:业务定问题,采集定范围,清洗定质量,探索定方向,建模定核心,评估定优劣,部署定价值。这套口诀配合例子挺好用,比如"处理缺失值"属于数据清洗阶段,"用箱线图看离群点"属于探索性数据分析阶段。
3.2 必考的统计基础:置信区间与假设检验
数据科学导论不会考太深的高数,但最基本的描述统计和推断统计一定会涉及。需要掌握的包括均值、中位数、方差、标准差、四分位数、相关系数、协方差等概念,以及p值、显著性水平、置信区间、假设检验的基本步骤。
尤其需要记住假设检验的四步流程:提出原假设和备择假设、选择检验统计量、计算p值、对比显著性水平得出结论。考题可能出现一个具体案例,比如"某产品改进后平均时长下降是否显著",让你完成上述步骤。
2021年印象里有一道题给出了一个数据集的均值和标准差,要求计算95%置信区间。公式得上场:
置信区间公式:均值 ± (z或t临界值) × (标准差/√样本量)
如果样本量大于30,可以用z值(近似1.96);小于30用t分布。考试允许带简单计算器,所以思路比计算过程更重要。
3.3 用Python做数据分析:pandas操作经常出现在选择题和填空题中
即使不让你写完整代码,也会考你一行代码的功能或者输出结果。复习时值得掌握的操作有几个:
import pandas as pd df = pd.read_csv('data.csv') df.head() df.info() df.describe() df.isnull().sum() df.dropna() df.fillna(df.mean()) df['column'].value_counts() df.groupby('category')['value'].mean()如果考试让写代码,像加载数据、查看缺失值、填充缺失值、按列分组聚合的这种基础操作,是最容易出的题。建议把这几个函数熟记,尤其注意fillna里传的是填充值,dropna是删除含有缺失值的行,两者别搞混。
3.4 机器学习中的基础术语
数据科学导论也会涉及机器学习的入门概念,包括监督学习和无监督学习的区别、训练集和测试集划分的意义、过拟合与欠拟合、常见的评估指标(准确率、精确率、召回率、F1值、AUC等)。
考题可以结合一个例子,比如用分类模型预测用户流失,然后问你精确率和召回率哪个更重要。这类题没有绝对标准答案,关键是逻辑自洽。我当时的回答思路是:用户流失场景,一般更看重召回率,因为流失用户没被识别出来,损失更大;但如果干预成本很高,可以更看重精确率。考试时写出权衡逻辑就能得分。
4. 操作系统:不要背概念,要在纸上走流程
OS这门课在2021年的考试风格很偏向"给你一个场景,让你动手推流程",纯概念背诵题比例不高。这一点很重要,因为很多同学把时间花在背定义上,忽略了对原理的推演,考场上遇到计算题就傻眼。
4.1 进程与线程的对比,出简答题的概率极高
进程和线程的区别是每年必考的一道题,关键在于对比要完整:
- 进程是资源分配的基本单位,线程是CPU调度的基本单位。
- 同一进程内的线程共享地址空间,不同进程之间的地址空间互相独立。
- 进程切换开销大,线程切换开销小。
- 进程间通信更复杂,线程间通信更简单(通过共享变量)。
- 一个进程崩溃通常不影响其他进程,而一个线程崩溃可能拖垮整个进程。
最好再补充一个具体的例子,比如浏览器每个标签页是一个进程还是一个线程,不同浏览器设计不同,但用这个例子能说明"独立性和共享性"的概念。
4.2 调度算法比较:那张对比表一定要记住
进程调度算法是必考内容。需要掌握的算法包括FCFS(先来先服务)、SJF(短作业优先)、RR(时间片轮转)、优先级调度、多级反馈队列。考试可能直接给你一组进程到达时间和执行时间,让你求平均等待时间、平均周转时间。
我当时整理了一张表,把每个算法的核心特征压到一行里:
| 算法 | 特点 | 缺点 | 适用场景 |
|---|---|---|---|
| FCFS | 公平,简单 | 长作业可能导致 convoy effect | 批处理 |
| SJF | 平均等待时间短 | 需要预知执行时间,可能饥饿 | 非抢占式批处理 |
| RR | 公平响应快 | 时间片设置不当则开销大 | 分时系统 |
| 优先级调度 | 按紧急程度 | 低优先级可能无限等待 | 实时系统,需配合老化技术 |
| 多级反馈队列 | 兼顾响应和吞吐 | 实现复杂,参数难调 | 通用操作系统 |
考场上如果给你具体的到达时间和执行时间,最稳妥的做法是先画甘特图,再一步步算等待时间。绘图的过程本身就能帮你理清思路,也能保证步骤分。
4.3 死锁四大条件与银行家算法:推理题的重头戏
死锁必考,这一点没什么悬念。四大条件是:互斥、持有并等待、不可抢占、循环等待。考题往往让你分析一个场景是否会造成死锁,并设计破坏其中一个条件的方案。
2021年的试题中有一道银行家算法的题,给出系统资源总量、各进程已分配资源和最大需求,问当前状态是否安全,并找出安全序列。这类题的做法是:
- 计算每个进程还需要的资源数。
- 计算系统当前可用资源数。
- 依次尝试找一个进程,其需求可以被现有可用资源满足。
- 假设分配给它,回收它占用的资源,继续下一轮。
- 如果能找到一条序列分配完所有进程,则系统安全。
记住做题步骤,多练几道,基本能稳拿分。
4.4 页面置换算法:计算题中的常青树
虚拟内存管理部分,最经典的考法是页面置换算法,包括FIFO先进先出、LRU最近最久未使用、OPT最优置换。考试会给一个页面引用串和物理块数,让你写缺页次数和缺页率。
有一个容易丢分的坑:FIFO在分配块数增加时缺页率反而上升(Belady异常),而LRU和OPT没有这种问题。这个点考试经常以判断题或简答题形式出现。
计算的时候注意区分"刚开始内存为空"时算不算缺页,一般算,但不同教材口径可能不同,答题前如果题目没有明确说明,可以在草稿上标注自己的假设,避免因口径问题丢冤枉分。
4.5 信号量与PV操作,2021年考了一道原题
信号量的P操作(wait)和V操作(signal)是进程同步的经典考点。考题通常是生产者-消费者问题、读者写者问题或哲学家就餐问题,让你用信号量实现同步。复习时至少要能手写出生产者-消费者模型的伪代码:
semaphore mutex = 1; // 互斥访问缓冲区 semaphore empty = n; // 空缓冲区数量 semaphore full = 0; // 满缓冲区数量 // 生产者 while (true) { produce_item(); P(empty); P(mutex); put_item(); V(mutex); V(full); } // 消费者 while (true) { P(full); P(mutex); take_item(); V(mutex); V(empty); consume_item(); }建议把P、V操作封装成"申请资源、互斥访问、释放资源"三步来理解,即使换了题目,只要识别出这三步,就能套用。这个思路在应对OS考试的主观题时非常管用。
5. 数据库:SQL是基本功,设计才是分水岭
数据库这门课,知识点密度是四门课里最高的。SQL写作题、关系代数题、范式判断、ER图转关系模式、事务隔离级别,几乎每个章节都能出大题。刚开始复习时感觉无从下手,后来按"基础语法—约束设计—范式理论—事务并发"四层拆解后,思路清晰了很多。
5.1 SQL高频题型:增删改查之外的三个隐藏考点
大多数人都知道SELECT、INSERT、UPDATE、DELETE,但考试想拉开差距,通常会考三类平时容易被忽略的内容。
第一类是聚合查询配合GROUP BY和HAVING。记住:WHERE在分组前过滤,HAVING在分组后过滤。比如"查询平均成绩大于80分的课程",SQL顺序应该是先GROUP BY course_id,再HAVING AVG(score) > 80。
第二类是JOIN多表连接,尤其是LEFT JOIN和INNER JOIN的区别。考试常让你写"查询所有学生及其选课情况,没选课的也要列出来",这时候必须用LEFT JOIN,而不是INNER JOIN,否则没有选课记录的学生会被筛掉。
第三类是子查询和EXISTS。比如"查询选了所有课程的学生",这类题在关系代数里叫除法运算,在SQL里通常用NOT EXISTS双重否定来实现。
下面是一个可能用到的示例:
-- 查询选修了课程号为C001的学生姓名 SELECT s.name FROM student s INNER JOIN sc ON s.stu_id = sc.stu_id WHERE sc.course_id = 'C001'; -- 分组统计每个学生的选课数和平均分 SELECT stu_id, COUNT(*) AS cnt, AVG(score) AS avg_score FROM sc GROUP BY stu_id HAVING COUNT(*) >= 2;这些题其实难度不大,关键是平时多练,尤其注意表名和字段名的大小写、字符串用单引号、别名习惯等,细节错误在笔试中也容易被扣分。
5.2 范式理论:从1NF到BCNF,判断步骤要烂熟于心
范式判断是数据库考试中计算题的主阵地。复习的时候,我把每一步判断压缩成了一条流程链:
- 1NF:属性不可再分,表中的每个字段都必须是原子值。
- 2NF:在1NF基础上,消除非主属性对候选键的部分依赖。
- 3NF:在2NF基础上,消除非主属性对候选键的传递依赖。
- BCNF:在3NF基础上,消除主属性对候选键的部分依赖和传递依赖,即每个决定因素都含有候选键。
做判断题的步骤,我自己总结为:先找候选键,再找函数依赖,然后看是否存在部分或者传递依赖。这个流程需要多练几道例题才能熟练。2021年的考题给了一个选课表,包含学生、老师、课程、教室等字段,让你判断最高满足第几范式并分解到3NF。解法是先把函数依赖写出来,再依据流程逐步规范化。
5.3 ER图转关系模式,必修的转换规则
ER图的相关考题一般分两部分:画ER图和将ER图转换为关系模式。转换规则比较固定:
- 实体转成一个关系模式,实体的属性就是关系的属性。
- 1对1联系,可以在任一侧加对方的主键。
- 1对多联系,在多方加一方的外键。
- 多对多联系,单独转成一个关系模式,两端的主键作为联合主键(必要时再加自己的属性)。
考试时最容易丢分的是多对多联系,不少人把关联属性也塞进关系模式里,导致冗余。我的做法是先把规则背下来,然后在草稿上画一个简单的例子(比如学生-选课-课程)练一遍转换,五分钟搞定。
5.4 事务ACID与隔离级别,简答题高频库
数据库的事务部分,ACID四个特性必须能用口语解释清楚:原子性(要么全做要么全不做)、一致性(事务前后数据满足完整性约束)、隔离性(并发事务互不干扰)、持久性(提交后数据不丢失)。
隔离级别从低到高依次是:
- 读未提交(Read Uncommitted)
- 读已提交(Read Committed)
- 可重复读(Repeatable Read)
- 可串行化(Serializable)
考试如果问某个隔离级别解决什么问题,要注意区分脏读、不可重复读、幻读这三种异常情况。我整理的口诀是:读未提交可能脏读;读已提交解决脏读但可能不可重复读;可重复读解决不可重复读但可能幻读;可串行化全部解决,但性能最差。
2021年复习时,我把这几个级别画成了一张阶梯图,每抬一级,解决的问题多一层,但并发性能也随之下降,考场作答时描述这种权衡会显得理解得更透彻。
5.5 索引与存储引擎,选择题常客
索引方面需要掌握B+树和哈希索引的对比,以及什么时候索引会失效(比如对索引列使用函数、左模糊查询、隐式类型转换等)。存储引擎的对比也是数据库考核的重要考点,重点区别InnoDB和MyISAM。2021年的填空里就考了"InnoDB支持事务,MyISAM不支持事务",分值不高但丢了可惜。
6. 跨科目复习的排雷指南:我踩过的坑,希望你不要踩
四门课同时复习,最大的问题是知识点多而杂,互相干扰。我在复习过程里踩过几个很真实的坑,分享出来大家可以少走弯路。
第一个坑是直接用别人整理的资料而不做二次加工。别人的笔记再详细,也是别人的逻辑,你只看不写,考场上的记忆唤起效果很差。我的方法是拿到资料后,自己动手把关键的知识点转成表格、公式或思维导图。比如把OS的调度算法表重新画一遍,把数据库范式的判断步骤用自己的话写一遍,相当于做了一次深度加工,记忆效果好得多。
第二个坑是只看不算。OS的调度算法、页面置换、银行家算法,数据库的函数依赖和范式分解,都必须在纸上完整地算过几遍才能真的掌握。比如SJF的调度计算,我第一遍看觉得懂了,第二遍做题却算错,因为非抢占式SJF在作业到达后可能不是按初始顺序执行,而是按完成时间重新选择。这种细节不亲手做几遍根本发现不了。
第三个坑是轻视数据可视化里的设计原则。很多人觉得可视化就是画图,考前不用复习,结果考试考了视觉编码和选图题,只拿了一半分。实际上,数据可视化的很多概念和硬核知识一样,需要理解加记忆,还要能对比和评价。
第四个坑是数据库的SQL题只看不写。SQL的语法习惯和易错点非常多,比如JOIN顺序、GROUP BY子句与聚合函数的配合、NULL值的处理。如果不亲自敲一遍或者在纸上写一遍,到考场上容易提笔忘句。我复习时安排了一个专项训练:每天写三到五个SQL查询,坚持十天,效果非常明显。
7. 考前一晚怎么用这份整理冲刺
最后分享一个考前一晚的具体操作方式,这部分是纯个人经验,适合那些时间紧、任务重的复习场景。
考前一晚,先把所有科目的知识点大纲用思维导图的方式过一遍,不要深究细节,只做"无脑扫盲",看到关键字能对应出大概的知识点即可。然后做一件更重要的事:把最容易混淆的知识点找出来对比记忆。
一些容易搞混但常考的对比,包括:
- 数据可视化的视觉编码优先级 vs 图表选型规则。
- 数据科学里监督学习和无监督学习的典型算法。
- OS里进程调度算法和页面置换算法的特点和适用场景。
- 数据库的三种表连接(INNER、LEFT、RIGHT)在结果集上的差异。
- 数据库脏读、不可重复读、幻读分别对应哪个隔离级别被解决。
把这些对比过一遍,比摊开书本通读一遍高效很多。
第二天进考场前,只需要浏览一下自己整理过的重点表格和手写公式,心里会比较踏实。遇到没见过的题也不慌,按步骤拆解,多写推导过程,基本上都能拿分。而这份整理如果只是躺在网盘里不动,它的价值就发挥不出来,建议大家都动手改成适合自己的版本再使用。
操作系统的PV操作,直接在纸上反复默写生产者-消费者问题的伪代码,写完再对照标准答案,直到完全不出错。数据可视化则抽半小时画一张重点图表选型表,把常见的数据关系对应的图表类型写在纸上,看到题目能第一时间反应出来。
我自己的体会是,这些课程本身并不难,难的是平时没有及时消化,期末抱佛脚的强度太大。如果能把这份整理当成一个开始,在平时学习时就按照考点框架去理解课程内容,考试周的复习压力会小非常多。这大概也是所有课程学习的通用逻辑——知识不怕散,就怕你没有框架把它们串起来。