牛客网模拟面试的题目1

1、请你谈谈共享内存相关的api


  参考回答:Linux允许不同进程访问同一个逻辑内存,提供了一组API,头文件在
sys/shm.h中。 1)新建共享内存shmget int shmget(key_t key,size_t 
size,int shmflg); key:共享内存键值,可以理解为共享内存的唯一性标记。 
size:共享内存大小 shmflag:创建进程和其他进程的读写权限标识。 返回值:相
应的共享内存标识符,失败返回-1 2)连接共享内存到当前进程的地址空间shmat 
void *shmat(int shm_id,const void *shm_addr,int shmflg); shm_id:
共享内存标识符 shm_addr:指定共享内存连接到当前进程的地址,通常为0,表示
由系统来选择。 shmflg:标志位 返回值:指向共享内存第一个字节的指针,失败
返回-1 3)当前进程分离共享内存shmdt int shmdt(const void *shmaddr); 
4)控制共享内存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:共享内存管理结构体。

2、请你介绍一下C++智能指针


  参考回答:智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈
对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内
存泄漏。C++ 11中最常用的智能指针类型为shared_ptr,它采用引用计数的方法,
记录当前内存资源被多少个智能指针引用。该引用计数的内存在堆上分配。当新增一
个时引用计数加1,当过期时引用计数减一。只有引用计数为0时,智能指针才会自动
释放引用的内存资源。对shared_ptr进行初始化时不能将一个普通指针直接赋值给
智能指针,因为一个是指针,一个是类。可以通过make_shared函数或者通过构造函
数传入普通指针。并可以通过get函数获得普通指针。

3、求1+2+3+…+n,要求不能使用乘除法。

class Solution {
public:
    int Sum_Solution(int n) {
        //f[n]=f[n-1]+n
        int sum=0;
        if(n>0)
        {
            sum=Sum_Solution(n-1)+n;
        }
        return sum;
    }
};

你可能感兴趣的:(面试题目)