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而保证不重复的?

posted @ 2018-01-31 16:06  guhowo  阅读(354)  评论(0编辑  收藏  举报