首页课程小红花墙

计算机原理 · 小纸条

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

第 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 章30第 26 章30第 27 章30第 28 章30第 29 章30第 30 章30第 31 章30第 32 章30第 33 章30第 34 章30第 35 章30第 36 章30第 37 章15
只印题目
第 1 页 · 正面(题目)
1及早求值与惰性求值

惰性有什么好处?

2短路求值

它有什么实用价值?

3作用域

现代语言用哪种?

4闭包

闭包捕获的是值还是引用?

5闭包的经典陷阱

怎么避免?

6高阶函数

举三个常见的高阶函数。

7一等公民

类型能不能是一等公民?

8纯函数

读取当前时间的函数纯吗?

9不可变数据

代价是什么?

10结构共享

这靠什么数据结构实现?

第 1 页 · 背面(答案)

参考答案(家长):能先判空再访问,避免空指针。

参考答案(家长):能定义无限序列,只取需要的部分。

参考答案(家长):不同语言不同,这也是常见的坑。

参考答案(家长):几乎都用静态作用域,因为读代码就能确定。

参考答案(家长):映射、过滤、归约。

参考答案(家长):每轮创建一个新的局部变量再捕获。

参考答案(家长):不纯,同样调用返回不同结果。

参考答案(家长):有些语言可以,那叫依赖类型系统。

参考答案(家长):树,改一个叶子只需重建它到根的路径。

参考答案(家长):可能产生更多对象,需要结构共享来优化。

第 2 页 · 正面(题目)
11副作用

能完全没有副作用吗?

12把副作用推到边缘

这样测试有什么好处?

13递归与尾递归

为什么必须是最后一步?

14类型是什么

类型的价值是什么?

15静态与动态类型

各适合什么场景?

16强类型与弱类型

举一个弱类型的坑。

17类型推导

推导不出来时怎么办?

18泛型

没有泛型怎么办?

19子类型

这个原则叫什么?

20协变与逆变

为什么参数要逆变?

第 2 页 · 背面(答案)

参考答案(家长):不用搭数据库和网络,跑得快也稳定。

参考答案(家长):不能,程序总要和外界交互,但可以把它集中隔离。

参考答案(家长):把一类错误从运行时提前到编译期。

参考答案(家长):否则返回后还要做事,栈帧不能被复用。

参考答案(家长):字符串和数字相加,结果取决于语言的隐式规则。

参考答案(家长):大型长期项目偏静态,快速脚本和原型偏动态。

参考答案(家长):要么每种类型抄一遍,要么用不安全的通用类型。

参考答案(家长):需要程序员标注,通常在函数签名处。

参考答案(家长):接受更宽泛的参数才能替代原函数,反之不行。

参考答案(家长):里氏替换原则。

第 3 页 · 正面(题目)
21空值问题

现代语言怎么解决?

22代数数据类型

什么是穷尽检查?

23模式匹配

它和 switch 的区别?

24类型即文档

为什么类型比注释可靠?

25让非法状态无法表示

举一个例子。

26内存管理三条路

各自的代价是什么?

27所有权

这解决了什么?

28借用

这条规则防止了什么?

29编译期防并发错误

为什么这很重要?

30错误处理:异常

这有什么问题?

第 3 页 · 背面(答案)

参考答案(家长):编译器检查你是否处理了所有可能的情况。

参考答案(家长):用可选类型,把"可能为空"明确写进类型,逼你处理。

参考答案(家长):注释会过期,类型不会 —— 不匹配就编译不过。

参考答案(家长):能匹配结构而不只是值,还能自动检查是否遗漏分支。

参考答案(家长):容易出错、有运行时开销、学习曲线陡。

参考答案(家长):用"要么是错误要么是结果"的类型,就不会同时有值和错误。

参考答案(家长):数据竞争 —— 一边写一边读。

参考答案(家长):既没有垃圾回收开销,又不会忘记释放或重复释放。

参考答案(家长):容易忘记处理,出错路径不明显。

参考答案(家长):并发 bug 难复现难调试,能提前挡住价值极大。

op599 课程