首页课程小红花墙

计算机基础 · 小纸条

选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。

第 1 章30第 2 章30第 3 章30第 4 章30第 5 章30第 6 章30第 7 章30第 8 章30第 9 章30第 10 章30第 11 章30第 12 章30第 13 章30第 14 章30第 15 章30第 16 章30第 17 章30第 18 章30第 19 章30第 20 章30第 21 章30第 22 章30第 23 章30第 24 章30第 25 章10
只印题目
第 1 页 · 正面(题目)
1手写一个分词器

动手写一个能切分简单算式的分词器。

2语法分析

这棵树叫什么?

3表达式变成树

把 2 加 3 乘 4 画成树。

4优先级怎么体现

加了括号的算式,树会怎么变?

5递归下降

为什么这种写法直观?

6语义分析

再举一个语法对但语义错的例子。

7符号表

作用域嵌套时符号表怎么组织?

8中间代码

为什么要加这一层?

9常见优化

x = 2 + 3 编译后会变成什么?

10优化不能改变语义

为什么这条很难保证?

第 1 页 · 背面(答案)

参考答案(家长):语法树(抽象语法树)。

参考答案(家长):一个循环加几个判断就够。

参考答案(家长):括号里的整体下沉到更底层。

参考答案(家长):乘号在下层、加号在上层。

参考答案(家长):如使用了没定义的变量、函数参数个数不对。

参考答案(家长):每条语法规则对应一个函数,读代码就像读语法。

参考答案(家长):支持 m 种语言和 n 种机器时,只要写 m+n 个部分而不是 m 乘 n 个。

参考答案(家长):一层一层叠起来,查找时从内往外找。

参考答案(家长):涉及溢出、浮点、并发时,"等价"的判断很微妙。

参考答案(家长):直接变成 x = 5。

第 2 页 · 正面(题目)
11目标代码生成

寄存器不够用怎么办?

12动手:做个计算器

先完成分词部分。

13动手:解析表达式

完成解析部分。

14动手:求值

完成求值并测试。

15动手:加变量

加上变量支持。

16你做了一个解释器

给它加一个内置函数试试。

17编译与解释的差别

你刚做的是哪一种?

18虚拟机

这样做的好处是什么?

19即时编译

为什么只编译热点?

20垃圾回收

怎么判断一块内存"不再被用"?

第 2 页 · 背面(答案)

参考答案(家长):切出数字、运算符、括号三类单元。

参考答案(家长):暂时存回内存,需要时再取,这叫溢出到内存。

参考答案(家长):递归几行就能写完,因为树的结构已经记录了顺序。

参考答案(家长):表达式管加减、项管乘除、因子管数字和括号。

参考答案(家长):在求值时识别函数名并调用对应实现。

参考答案(家长):赋值时写符号表,引用时查符号表。

参考答案(家长):一次编译到处运行,且比纯解释快。

参考答案(家长):解释器,边解析边求值。

参考答案(家长):从根出发沿引用能到达的都活着,到不了的就是垃圾。

参考答案(家长):编译本身要花时间,只编译值得的部分才划算。

第 3 页 · 正面(题目)
21编译原理有什么用

想一个你可能会写"小语言"的场景。

22编译原理小结

画出编译流程图。

23阶段小结

说说这两门课里你最意外的一个知识点。

24软件工程要解决什么

人多了会多出哪些问题?

25软件的生命周期

为什么维护最贵?

26需求为什么难

用户说"要个搜索功能",你该问什么?

27需求要可验证

把"界面要好看"改成可验证的表述。

28瀑布模型

它的最大风险是什么?

29迭代开发

为什么"小而完整"比"大而半成"好?

30最小可用版本

做一个记账 App,最小版本包含什么?

第 3 页 · 背面(答案)

参考答案(家长):从源码到目标码,标出每一步的输入输出。

参考答案(家长):如配置文件格式、公式计算器、查询过滤条件。

参考答案(家长):沟通成本、代码冲突、风格不一、责任不清。

参考答案(家长):常见的是"数据库索引就是 B+ 树"和"编译器也用递归"。

参考答案(家长):搜什么、按什么搜、结果怎么排、数据量多大。

参考答案(家长):时间最长,且要在别人写的代码上改。

参考答案(家长):走到最后才发现需求理解错了,返工代价极大。

参考答案(家长):如"主要操作三步内完成""关键按钮在首屏可见"。

参考答案(家长):记一笔、看列表、算总额,三样足矣。

参考答案(家长):能真实验证,半成品什么都验证不了。

op599 课程