目录
一、谈谈共享内存相关的api 1
二、介绍一下智能指针… 2
三、请你谈谈Redis和memcached的区别… 2
四、谈谈stl中的容器… 3
五、请你讲讲reactor模型组成… 4
六、请你谈谈深拷贝和浅拷贝… 5
七、请你说明智能指针是否存在内存泄露的情况… 5
八、c++的三大特性… 5
九、请你谈谈C++中类成员的访问权限… 6
十、请你说明一下static关键字的作用… 6
十一、请你简要说明c++和c的区别… 6
一、谈谈共享内存相关的api
Linux允许不同进程访问同一个逻辑内存,提供了一组API,头文件在sys/shm.h中。
新建共享内存
shmget int shmget(key_t key,size_t size,int
shmflg);
key:共享内存键值,可以理解为共享内存的唯一性标记。
size:共享内存大小 shmflag:创建进程和其他进程的读写权限标识。
返回值:相应的共享内存标识符,失败返回-1
连接共享内存到当前进程的地址空间
shmat void *shmat(int shm_id,const void
*shm_addr,int shmflg);
shm_id:共享内存标识符
shm_addr:指定共享内存连接到当前进程的地址,通常为0,表示由系统来选择。 shmflg:标志位 返回值:指向共享内存第一个字节的指针,失败返回-1
当前进程分离共享内存
shmdt int shmdt(const void *shmaddr);
控制共享内存shmctl 和信号量的semctl函数类似,控制共享内存
int shmctl(int shm_id,int command,struct
shmid_ds *buf);
shm_id:共享内存标识符
command:有三个值
IPC_STAT:获取共享内存的状态,把共享内存的shmid_ds结构复制到buf中。
IPC_SET:设置共享内存的状态,把buf复制到共享内存的shmid_ds结构。 IPC_RMID:删除共享内存 buf:共享内存管理结构体。
常见的IPC
pipe:只能在有血缘关系的的进行进程间通信
fifio:在无血缘关系的进程间通信
内部数据只能读一次
mmap:在无血缘关系的进程间通信
内部数据支持反复读取
信号:开销小。携带数据简单
本地套接字:稳定性好 实现复杂
shm: 。共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程
二、介绍一下智能指针
智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。
std::unique_ptr c++11
std::unique_ptr是一个独享所有权的智能指针,它提供了一种严格语义上的 所有权,包括:
拥有它所指向的对象
无法进行复制、赋值操作
保存指向某个对象的指针ÿ