打x的问题没答上来
[] 自我介绍
[] 讲一下C++里面的智能指针
[] 你提到了RAII的思想,能不能具体讲讲
[x] 按照RAII的思想,如果打开一个文件描述符失败了,一般会怎么处理?
[] 讲讲C++里面new和malloc的区别
[] new具体是怎么分配内存的?
[] 你提到了brk和mmap这两种分配方式,能详细讲讲吗?
[] 什么时候选择brk,什么时候选择mmap?内存阈值是多少?
[] 你提到了使用brk分配内存的时候,free的时候并不会立即归还给系统,为什么要做这样的事?
[] 如果用malloc频繁的申请小块的内存,会出现什么问题?
[x] 那你知道malloc会怎么管理这些内存碎片吗?具体是怎么做的?(答了会整理碎片,追问具体怎么做的没答上来)
[] 你提到了堆内存和共享内存,能讲讲还有哪些内存空间吗?
[] 栈区上面的内存是怎么开辟的?
[] 那你知道C++对象的最小的占用空间是多少吗?
[] 追问:为什么是1个字节?为什么不是0字节?为什么不能大于1个字节?
[] 如果一个空对象里面只有一个虚函数,那这个对象的大小是多少?(4字节或8字节)
[] 追问:为什么加了一个虚函数后大小就不是一个字节了?(多了个虚表指针)
[] 能不能讲讲虚表是怎么做的?(虚函数是怎么实现的?)
[] 比如有ABC三个类,A类里面有一个虚函数实现,B类和C类分别继承自A类,B类有自己的虚函数,C类没有。能不能分别讲讲B的对象和C的对象的内存分布情况?
[x] 操作系统如何做线程调度的?
[] 现在有一个多线程的程序,他们同时去修改一个int类型的全局变量,那这个时候会有线程安全问题吗?
[] 追问:为什么会有线程安全问题?比如多个线程同时对i++,会有什么问题?(只加了一次)
[] 追问:那应该怎么避免这种情况的发生呢?(单例模式)
[] 追问:你提到了全局变量使用单例模式来替代,那具体应该怎么做呢?(静态局部对象)
[] 追问:还有其他方法吗?(原子操作、加锁)
[] 追问:你知道C++里面提供了哪些原子操作吗?
[x] 追问:如果现在修改的不是int变量,而修改的是全局map,还能用原子操作解决并发问题吗?
[] 回到多个线程进行i++这个问题,a线程将i加了1,线程b也将i加了1,但是线程b并没有感知到线程a将i加了1,是什么原因导致了这个问题呢?(可能是缓存没同步)
[] 追问:你这里的缓存是什么缓存?(CPU缓存)
[] 追问:能讲讲CPU的缓存吗?它和内存有什么区别?
[] 追问:那你能讲讲如何做才能避免缓存不同步的问题吗?(MESI协议)
[] 追问:能讲讲这个协议吗?
[] DNS解析的过程是怎样的?
[x] 追问:DNS向其他几级服务器查询的时候,用的什么协议?
[] TCP的数据包有大小限制吗?(有,大了要分片)
[x] 追问:你知道这个限制是多大吗?(回答的1500字节,实际应该是1460字节)
[] 追问:比如我一个TCP发送方,在发送的时候一次性不能超过1500字节吗?(一个TCP包不能超过1500字节)
[x] 追问:实际上调用send的时候,这个地方会有限制吗?(不了解网络编程)
[x] 追问:接收方调用receive的时候,一次接受1500字节吗?(不了解网络编程)
[] TCP的servier端调用close关闭连接,这时候client端继续发送数据,会出现什么情况(我回答了正常的四次挥手的过程,但是面试官的不太满意,不了解close是怎么做的)
[] MySQL的事务怎么实现的回滚?(undolog)
[] 追问:讲讲undolog是个啥?
[x] 追问:它记录的是动作还是记录的数据?
[] 追问:每次操作都会向undolog中写内容,那如何解决undolog过大的问题?(我回答的效仿redis的AOF重写)
算法题如图:
#秋招##面经##腾讯##后台开发##软件开发投递记录##软件开发笔面经#