这一步为什么必要?
计算机基础 · 小纸条
选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。
什么条件下选索引?
这种设计的好处是什么?
日志里为什么要记改前的值?
提交记录没写就崩了怎么办?
动手实现。
动手实现并测试。
至少测五个不同的崩溃点。
这样做的代价是什么?
列出你要测的十个场景。
参考答案(家长):条件用到了索引列、且预计筛掉大部分数据时。
参考答案(家长):语法对但语义错的语句必须提前拦住并给出清晰报错。
参考答案(家长):回滚时要靠它还原。
参考答案(家长):不用把中间结果全部物化在内存里。
参考答案(家长):倒序遍历,用改前值覆盖。
参考答案(家长):恢复时视为未提交,回滚掉。
参考答案(家长):能全部恢复正确,说明日志机制真的对了。
参考答案(家长):可以在程序里故意中途退出,验证重启后数据一致。
参考答案(家长):要包含空表、单条、大量数据、边界值、异常输入。
参考答案(家长):并发能力很差,但正确性有保证,先对再快。
找出你的瓶颈。
记录优化前后的数据。
动手写。
写下三条经验。
给每门课举出项目里的一个具体位置。
想想它需要哪些部分。
为什么范围又要砍这么小?
动手实现。
动手实现。
为什么不能一直读到没数据为止?
参考答案(家长):没测量的优化不算优化,可能还变慢了。
参考答案(家长):常见瓶颈是页的读写和序列化。
参考答案(家长):多数人的第一条是"存储格式应该早点定死"。
参考答案(家长):三个月后的自己能照着跑起来,才算合格。
参考答案(家长):网络监听、协议解析、请求路由、并发处理、日志监控。
参考答案(家长):能一一对应,说明知识真的串起来了。
参考答案(家长):四步调用完成,先做单线程版本。
参考答案(家长):同样的道理,先跑通再扩展。
参考答案(家长):连接可能复用,读过头就吃掉了下一个请求。
参考答案(家长):注意行结束符是回车加换行两个字符。
支持路径参数该怎么做?
长度写错会怎样?
这种模型的上限在哪?
线程数设多少合适?
动手实现。
它的代价是什么?
不加超时会有什么攻击?
怎么实现最简单的限流?
日志写文件要注意什么?
为什么要看分位而不只看平均?
参考答案(家长):客户端会一直等或者提前截断,都是难查的问题。
参考答案(家长):按段拆分,遇到参数段就记录下来继续匹配。
参考答案(家长):计算密集接近核心数,等待多的可以更大些。
参考答案(家长):线程占内存、切换有开销,几千个就吃力了。
参考答案(家长):代码复杂得多,且一处阻塞会拖住全部。
参考答案(家长):注意队列的加锁,以及关闭时怎么让线程退出。
参考答案(家长):记录每个来源的计数和时间窗,超阈值就拒绝。
参考答案(家长):攻击者开大量连接却不发数据,把资源占满。
参考答案(家长):平均会掩盖少数极慢的请求,用户体验取决于尾部。
参考答案(家长):多线程要加锁或用专门的写日志线程,还要考虑轮转。