个人总结

# 突然发现博客的侧栏点击进去不会自动用HTTPS,导致打不开页面,有时间得去解决一下,应该不是浏览器的问题,因为火狐和chrome都是这样。。不过手机端倒是会默认HTTPS。。。

居然好了,估计是之前DNS被劫持了。。。

个人总结

既然还是学生,就按照基础课程的脉络开始总结一下自己吧吧。

整理路线:
对[‘语言’,’网络’,’操作系统’,’数据结构与算法’,’数据库’, ‘设计模式’]其中的每一个大块,做以下整理:
书籍(除去教材看了哪些相关的专业书籍)->
结合该书籍学到的知识(学习涉及的领域):
其中掌握的知识(能够弄清楚原理及底层实现)->
其中能应用的知识(能自己动手写什么代码,做出什么项目,用具体成果来展示) ->

不足的地方(进步的空间,努力的方向)

语言

C/C++

书籍:

C:

《C语言接口与实现》

  • C语言的标准库函数,写过博客

  • 原子操作接口

  • Chan接口

《C陷阱与缺陷》

C++:

《C++ Primer》

  • 结合北大的coursera->C++基础

《Effective C++》

《C++并发编程实战》

  • 实现有锁的数据结构

  • 实现无锁的线程安全数据结构

python

python技巧全面总结

其他

源码:

Lua GC

  • Lua 是怎么做到增量回收的?

  • 能不能把GC一些主要的流程独立在每个线程中?

语言部分需要学习的不足之处

  • 还没仔细看python源码,python的异步编程部分如twisted、gevent学习的太少

  • C/C++从编译原理的角度来说,理解的不够深入

网络

《Unix网络编程卷一》

  • TCP流程+画出TCP状态图(TIME_WAIT的作用(维持将关未关的全双工,允许旧的重复分节在网络中消逝)

  • 流量控制(滑动窗口、Nagle算法+ack延迟确认)

  • 拥塞控制(减少拥塞数据(慢启动+拥塞避免算法),减少拥塞时重传时间(快重传+快恢复))

  • TCP、UDP区别(老生常谈)

  • 何时用UDP代替TCP(1.必须使用广播和多播之时 2.简单的请求-应答程序 3.对于海量数据(如文件传输)传输不应该使用UDP,被TFTP打脸2333,但是TFTP用UDP的原因在于在系统自举引导代码中,UDP更容易实现,并且其只在局域网上引导系统,而不是跨广域网传送海量数据,不过它还是要额外实现 和超时、重传能力; 另一个打脸的是NFS2333,实际上只是一个较大的请求-应答应用系统,略)

  • 实现可靠的UDP(超时和重传:用于处理丢失的数据(客户为每个请求冠以一个序列号,服务端必须在应答中回射) + 序列号:供客户端验证一个应答是否匹配相应的请求(先发送一个请求并等待N秒钟,没有应答则继续,直到一定次数后放弃,另外一个高端的方法是TCP用于应对“长胖管道-顾名思义就是有较高带宽或较长RTT,抑或两者皆有的网络”的扩展,不仅需要回射序列号,还为每个请求冠以一个服务器同样必须回射的时间戳))

  • PING原理 -> ICMP

  • Tracerout原理 -> TCMP

  • 大端小端,之前有过写一篇博客

《Unix网络编程卷二》

  • 各种IPC的优缺点,场景:

  • 管道

  • 信号 -> 消息队列

  • 信号量

  • 共享内存

  • socket

《Unix环境高级编程》

  • 创建一个守护进程的步骤(fork()创建子进程-> setsid()创建新的session -> double fork()比较老的一个技术,确保当前进程无法控制终端 -> chdir()更改守护进程的工作目录 -> umask(0)消除原有文件掩码对守护进程的影响)

《HTTP权威指南》
《HTTP下午茶》

  • HTTP协议的全面理解

  • 反向代理

  • HTTPS

  • cookie缓存

  • 重定向与负载均衡

源码:

Nginx

  • Nginx实现负载均衡(加权轮询,IP hash)

  • 如果要你实现一个Nginx反向代理,你会怎么实现?

Tornado

  • 实现了一个Tornado正向代理

Libevent

  • 典型的Reactor

  • Libevent是怎么把signal集成到事件主循环框架中的?

Memcached

  • 用到Libevent,Epoll + 多线程 + master通过pipe通知线程 最大程度化并行

  • 这种模式和Nginx的单/多进程的单线程模式相比?

网络部分需要学习的不足之处

  • 还没认真看《TCP/IP详解》以至于对协议的一些细节了解的不够多

操作系统

《Linux内核设计与实现》

《CSAPP》

《连接器与加载器》

  • 好像更属于编译原理部分,不过编译原理部分实在太弱了,汇编什么的学的不太好,就放这里吧。

操作系统需要学习的不足之处

  • 《CSAPP》没看完

数据结构与算法

《算法导论》

《Python algorithm》

《编程之美》

《编程之法》

《十五种算法》

数据结构需要学习的不足之处

  • 《算法导论》看的不够仔细

  • 高级的数据结构学习的不够多
    这里的看完感觉就差不多了

数据库

  • ACID

  • 事物隔离级别

  • 数据库中的锁

  • 索引原理

  • 数据库优化

数据库需要学习的不足之处

  • redis 的源码还没仔细看

  • 数据库的设计了解的不够多,只知道一些大概的组成及内部设计,算了还是先把SQL学的滴水不漏再说吧😂

设计模式

《C++设计模式》

  • 单例模式

懒汉和饿汉,线程安全,以及改进直至最好

  • 工厂和抽象工厂

python 设计模式

数据库需要学习的不足之处

  • C++的设计模式只熟悉比较常用的几个,其他的不够熟悉

  • python的设计模式了解的不够多