设计模式
见 设计模式。
组合(Combinatorics)与概率(Probability)
NP、NP-Completeness 和近似算法
- 知道最经典的一些 NP-Completeness 问题,比如旅行商问题和背包问题, 而且能在面试官试图忽悠你的时候识别出他们。
- 知道 NP-Completeness 是什么意思.
- 计算复杂度(视频)
- Simonson:
- Skiena:
- 复杂度: P, NP, NP-完全性, 规约(视频)
- 复杂度: 近视算法 Algorithms(视频)
- 复杂度: 固定参数算法(视频)
- Peter Norvik 讨论旅行商问题的近似最优解:
- 《算法导论》(CLRS)的第 1048 - 1140 页。
计算机如何处理程序
缓存(Cache)
- LRU 缓存:
- CPU 缓存:
进程(Processe)和线程(Thread)
- 计算机科学 162 - 操作系统 (25 个视频):
- 视频 1-11 是关于进程和线程
- 操作系统和系统编程(视频)
- 进程和线程的区别是什么?
- 涵盖了:
- 进程、线程、协程
- 进程和线程的区别
- 进程
- 线程
- 锁
- 互斥
- 信号量
- 监控
- 他们是如何工作的
- 死锁
- 活锁
- CPU 活动, 中断, 上下文切换
- 现代多核处理器的并发式结构
- 分页(paging),分段(segmentation)和虚拟内存(视频)
- 中断(视频)
- 进程资源需要(内存:代码、静态存储器、栈、堆、文件描述符、I/O)
- 线程资源需要(在同一个进程内和其他线程共享以上(除了栈)的资源,但是每个线程都有独立的程序计数器、栈计数器、寄存器和栈)
- Fork 操作是真正的写时复制(只读),直到新的进程写到内存中,才会生成一份新的拷贝。
- 上下文切换
- 进程、线程、协程
- C++ 的线程 (系列 - 10 个视频)
- CS 377 春季’14:马萨诸塞大学的操作系统
- Python 的并发 (视频):
测试
- 涵盖了:
- 单元测试是如何工作的
- 什么是模拟对象
- 什么是集成测试
- 什么是依赖注入
- James Bach 讲敏捷软件测试(视频)
- James Bach 软件测试公开课(视频)
- Steve Freeman - 测试驱动的开发(视频)
- 依赖注入:
- 如何编写测试
字符串搜索和操作
如果你需要有关此主题的更多详细信息,请参阅“一些主题的额外内容”中的“字符串匹配”部分。
字典树(Tries)
- 需要注意的是,字典树各式各样。有些有前缀,而有些则没有。有些使用字符串而不使用比特位来追踪路径。
- 阅读代码,但不实现。
- Sedgewick──字典树(3 个视频)
- 数据结构笔记及编程技术
- 短课程视频:
- 字典树:一个被忽略的数据结构
- TopCoder —— 使用字典树
- 标准教程(现实中的用例)(视频)
- MIT,高阶数据结构,字符串(视频中间有点困难)(视频)
编码与表示
浮点数
- 简单的 8 位: 浮点数的表示 - 1(视频 - 计算中有错误 - 请查看视频描述)
Unicode
字节序(Endianness)
- 大/小端序
- 大端序 Vs 小端序(视频)
- 由里入内的大端序与小端序(视频)
- 对于内核开发非常具有技术性,如果大多数的内容听不懂也没关系。
- 前半部就已经足够了。
网络(视频)
- 如果你具有网络经验或想成为可靠性工程师或运维工程师,期待你的问题
- 知道这些有益无害,多多益善!
- 可汗学院
- UDP 和 TCP:网络传输协议中的数据压缩(视频)
- TCP/IP 和 OSI 模型解释!(视频)
- 互联网上的数据包传输。网络和 TCP/IP 教程。(视频)
- HTTP(视频)
- SSL 和 HTTPS(视频)
- SSL/TLS(视频)
- HTTP 2.0(视频)
- 视频系列(21 个视频)
- 子网络解密 - 第五部分 经典内部域名指向 CIDR 标记(视频)
- 套接字(Sockets):