腾讯视频
代码:反转链表,单例模式
RAII,哪里用到
Web服务器怎样处理请求 get\post流程
项目使用的还是http1.0吗;http2.0:二进制、首部压缩、主动推送;Https
Epoll/select/poll ET/LT
进程地址空间。32位、64位区别
了解go吗
协程,项目中用过吗? 为什么更快?
Linux:
查进程信息 ps aux
查内存信息 : Top 查看进程cpu和内存信息
设计模式:
手写单例模式
懒汉、饿汉模式区别
C11版本懒汉怎样保证线程安全
STL:
Unordered_map map 底层,区别. 查询时间复杂度
索引、B+树 B+树层数
raft项目
分布式的使用场景,用来做什么?高并发、多副本????
Raft算法作用
强一致、最终一致区别
http 、rpc区别
序列化
拥塞控制
面试官建议
学习etcd,了解go;
打磨简历,突出和别人不同之处
微信支付
自我介绍:再打磨一下
C++
多态:重载、派生类重写。紧张,说的不好。
纯虚函数、抽象类
构造函数、析构函数是否为虚函数
析构函数不定义为虚函数,一定会造成内存泄漏吗?
基类指针指向派生类对象,若基类析构函数不是虚函数,则调用基类析构函数,不会调用派生类析构函数。这样一定会导致内存泄漏吗?不一定。
如果派生类没有动态申请资源,就不会导致内存泄漏。派生类非指针成员是保存在栈上的,离开派生类对象的作用域,内置类型成员会自动释放,类类型成员会调用其析构函数。派生类指针成员所申请的内存,需要在派生类的析构函数的函数体中手动释放。
析构函数:
函数体 + 隐式的析构部分(成员自动被销毁,按照初始化逆序)。函数体不直接销毁成员。
- 销毁类类型成员需要执行成员自己的析构函数,销毁内置类型成员什么也不用做。
- 指针成员会被自动销毁,但是指针所指向的空间需要使用delete手动销毁
- 智能指针是类对象,离开作用域时,会自动执行其析构函数
未定义析构函数,编译器会定义一个合成析构函数,函数体为空。
如果函数体什么也不做,是否可以认为析构函数什么也不做?而非指针成员的析构是自动完成的。
c++内存空间
static
指针和引用
什么时候使用引用?引用的好处
指针引用区别?
智能指针
RAII
将资源和对象的生命周期绑定。如lock_guard, 智能指针
自己说到了web服务器使用RAII思想自动释放数据库连接,但没说明白。。。。。。。
任务类初始化自动获取数据库连接,析构自动释放数据库连接。
连接断开怎么处理?tcp连接断开,数据库连接断开?布吉岛
RAII作用:
- 构造函数中获取资源,析构函数中释放资源,简化资源管理,使代码更简洁。
- 提供异常安全性,确保发生异常时资源正确释放。因为资源的释放放在析构函数中,析构函数是自动执行的,即使发生异常,也能正确释放资源,避免内存泄漏。
vector底层原理,扩容导致迭代器失效
map、unordered_map底层,红黑树是否了解
快排思想
IO多路复用 LT/ET
epoll就绪文件描述符怎样传递?内核中使用链表维护一个就绪队列,但需要拷贝传递
// 事件数组,作为epoll_wait()的传出参数使用,保存发生变化了的文件描述符的信息
epoll_event events[MAX_EVENT_NUMBER];int number = epoll_wait(epollfd, events, MAX_EVENT_NUMBER, -1);
OS
进程线程区别。说的太少了。
什么时候使用进程,什么时候使用线程:
使用进程:
需要独立地址空间,互不干扰
稳定、安全,一个进程崩溃不会影响其它进程
同时执行多个任务,每个进程使用一个cpu核心,并行执行
使用线程:
需要共享数据,同一进程的线程共享地址空间
高并发的情况,使用线程,因为线程切换开销低
死锁
进程通信。最快的方式-共享内存
MySql
引擎
事务特性ACID
事务隔离级别
幻读
索引
覆盖索引:创建覆盖索引时可以指定所包含的列,避免回表
raft项目
数据在内存中?怎样存储?
介绍了以下,说的很简单。需要把
没有细问。
总结:全部八股,基本没有问项目。注重基础。是不是项目不感兴趣?赶紧把协程库做了。