进入路线前
本路线不要求额外的站内先修,可从第一个精选章节开始。
路线目标
- 01程序设计、数据表示、数组计算、测试、版本管理与数值实验。
- 02数据结构、排序、动态规划、图算法、复杂度与可计算性。
- 03数据清理、变换记录、实验设计、统计比较与环境管理。
- 04二进制表示、数字逻辑、指令集、流水线、缓存与输入输出。
- 05进程、调度、线程同步、虚拟内存与文件系统。
- 06网络分层、以太网、IP 路由、传输协议与网络测量。
- 07关系模型、SQL、数据规范化、索引、事务与恢复。
路线检查点
完成 C00 · 编程与科学计算综合项目完成《编程与科学计算基础》后,检查各章练习的解答,并说明计算中使用的条件。
完成 C01 · 数据结构与算法综合复习完成《数据结构、算法与复杂度》后,检查各章练习的解答,并说明计算中使用的条件。
完成 C02 · 数据处理与实验设计综合复习完成《数据处理、实验设计与可复现计算》后,检查各章练习的解答,并说明计算中使用的条件。
完成 C03 · 输入输出与性能分析完成《计算机组成》后,检查各章练习的解答,并说明计算中使用的条件。
完成 C04 · 文件系统与崩溃恢复完成《操作系统》后,检查各章练习的解答,并说明计算中使用的条件。
完成 C05 · 网络测量与故障排查完成《计算机网络》后,检查各章练习的解答,并说明计算中使用的条件。
完成 C06 · 数据库日志与恢复完成《数据库》后,检查各章练习的解答,并说明计算中使用的条件。
路线综合练习
设计函数 sumFiniteIntegers(tokens),输入 ["1","2","bad","3"] 时采用“发现非法项即失败”策略。写出返回契约、失败结果和至少三个边界测试。
查看提示
解析与求和分开;失败对象要保留非法项索引,且失败时不得发布部分总和。
展开分步解答
契约可定义成功返回 {ok:true,sum:number,count:number},失败返回 {ok:false,index:number,token:string}。逐项解析到索引 2 时 "bad" 不是有限整数,因此返回 {ok:false,index:2,token:"bad"},不返回部分和 3。边界测试至少覆盖空数组成功得 0、负数可求和、首项非法立即失败以及超出安全整数范围失败。
结果核验:把 bad 改为 4 后应成功得到 sum=10、count=4;原输入的失败索引按零起始计数确为 2,且输出中没有可误用的 partialSum。
难度 4/5
《数据处理、实验设计与可复现计算》综合练习
A/B 实验两组各 100 人,A 转化 20 人、B 转化 25 人。计算转化率差、合并比例标准误和 z 值,并判断是否达到双侧 1.96 阈值。
查看提示
合并比例 p=(20+25)/200;标准误为 √[p(1-p)(1/100+1/100)]。
展开分步解答
两组转化率为 0.20、0.25,差为 0.05。合并比例 p=0.225,标准误 √[0.225·0.775·0.02]≈0.0591,故 z=0.05/0.0591≈0.85,小于 1.96,不能按该预设阈值宣称差异显著。
结果核验:近似 95% 差值区间为 0.05±1.96·0.0591≈[-0.066,0.166],包含 0,与 z 判断一致。
一个任务执行2000000 条指令,平均每条1.5 周期,频率为1.5 GHz;随后串行传输200000 字节,启动时间0.1 毫秒,带宽每秒 100000000 字节。求总时间以及处理器计算加速两倍后的总时间。
查看提示
先由指令数和频率求处理器时间,再把启动和数据传输时间相加。两阶段按题设串行执行。
展开分步解答
处理器时间为两毫秒,传输阶段为零点一加二,等于两点一毫秒,因此总计四点一毫秒。计算加速两倍后,计算阶段为一毫秒,传输阶段仍为两点一毫秒,总计三点一毫秒。
结果核验:两种方案的时间差均来自计算阶段减少的一毫秒;总加速比为四点一除以三点一,约一点三二。
两个线程各把同一计数器增加一次,初值为 0。说明未经同步的读改写为何可能只留下计数一,并设计既保护内存更新又向文件提交最终计数的顺序。假设写入成功后还要求文件同步完成。
查看提示
列出两个线程先后读取零的交错;锁保护共享内存的整个读改写,同步文件还需要单独的系统接口。
展开分步解答
若两个线程都先读到零,各自加一再写回,最终值为一。用同一互斥锁保护读取、加一和写回后,两次操作顺序执行,最终值为二。等待两线程完成后,由单一写入者把二写入文件,检查写入返回值,再调用文件同步接口并处理错误。
结果核验:互斥后的两次状态变化为零到一、一到二;若文件写入或同步失败,应保留失败状态,不能把内存计数二当作已经持久保存的证据。
一条单向链路速率为每秒 100000000 位,传播时延为两毫秒。发送1000 字节分组,忽略排队、处理和协议头,求单向到达时间。说明两次不同时间测得的往返时延能否直接推导单向传播时延。
查看提示
先把字节换成位,计算发送时延,再叠加传播时间;往返测量还包含反向路径与应答处理。
展开分步解答
分组为八千位,发送时延为零点零八毫秒,加上两毫秒传播,单向到达时间为两点零八毫秒。往返结果还受反向路径、排队和响应端处理影响;只有额外假设路径对称且其他开销已知时才能按相应模型估计单向传播。
结果核验:八千除以一亿等于零点零零零零八秒,换算为零点零八毫秒。若链路速率加倍,传播时延保持两毫秒,单向总时间降为两点零四毫秒。
账户甲余额 100 元,账户乙余额 50 元,事务把 20 元从甲转入乙。写出事务成功后的余额与总额不变量,并说明日志已提交但部分数据页尚未写回时,重做恢复需要达到什么结果。
查看提示
扣款和入款属于同一事务;持久提交记录决定事务结果,恢复需把已提交修改反映到数据页。
展开分步解答
成功后甲为八十、乙为七十,总额仍为一百五十。若持久日志完整记录了该事务且提交已经持久化,恢复应重做尚未反映到数据页的修改,最终恢复到八十与七十。重复应用日志需要依靠日志位置或幂等操作避免重复扣款。
结果核验:恢复后的余额和为八十加七十等于一百五十。只保留扣款会使总额变成一百三十,直接暴露事务原子性被破坏。