Todo list
C++:
1、vector的erase()实现,使用时注意事项,项目中遇到的bug。和remove的区别
2、vector swap()的用于修整空间?为什么不用clear(),因为clear()只是无法保证内存回收。
3、智能指针的用法shared_ptr,unique_ptr,weak_ptr
4、深拷贝浅拷贝概念及区别
5、关键字volatile的意义,多线程中的使用?因为寄存器是各个线程间私有的,编译器优化时会将变量从内存读出,放到寄存器,然后下次直接从寄存器读取这个变量(如果两次操作间没人改变这个变量的话,但是其他线程会改变这个变量)。
6、explicit和implicit (done)
7、指针和引用的区别
8、拷贝构造函数和=运算符重载区别
9、C++中的显式类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast的含义、使用场景
10、map的实现(rb_tree),和unordered_map的区别
C++练习:
- 用C++实现一个BigInt,支持128位的整形的加减乘除的操作。 https://github.com/guhowo/test/tree/master/BigInt
- 用C++封装一个数据结构的容量,比如hash table。
- 用C++封装并实现一个智能指针(一定要使用模板)。
线程:
- 线程和进程的区别,什么时候用进程,什么时候用线程
- 线程池和多线程
- IO复用之select和epoll
- 线程安全、可重入
- 多线程遇到的坑:基类构造函数返回了this指针,派生类的构造函数还没执行完,其他线程就已经获得了残缺的this。
项目:
1、ZeroTierOne的架构
2、ZT的多线程和多进程(使用的线程池,怎么实现,为什么)
3、使用到的设计模式(Topology是单例模式,。。。工厂模式。。抽象工厂模式)
4、如何着手开源项目(review源码->注释掉加密压缩函数->抓包->对着代码分析报文格式->一共有XXX种报文,逐一分析)
5、select和epoll的区别。详述IO复用
6、为什么使用UDP和不使用TCP传输,应用层如何保证数据的可靠传输
7、项目中遇到的问题,如何解决的
疑惑:
1、IO复用的本质是什么?
2、多线程、多进程的区别?什么时候用线程,什么时候用进程?有什么问题是多线程解决不了,要用进程的。
3、多线程和线程池的使用场景(结合短连接长链接)
4、zt中多线程下是怎么给每个请求分配IP而保证不重复的?