面试整理0301

这篇博客整理了面试中关于线程和进程的知识,如杀死主进程后子进程的存活状态,以及操作系统如何结束进程。在C++基础部分,讨论了静态成员的作用和实现,以及为什么使用智能指针。此外,还涉及了模板特化、移动构造函数的实际应用,以及手撕编程题目,如反转链表和求k个数的平均数。最后提到了GDB调试和如何发现内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试记录

线程和进程

  1. 杀死主进程后子进程是否会死亡?

    不会死亡,会挂在init进程下边

  2. 操作系统如何让一个进程退出(进程杀死的过程)

    发送一个中断信号给内核

  3. kill操作是在干嘛

    给进程发送中断信号。(不知道理解的对不对)

C++基础

  1. static的作用

    修饰静态成员变量或者函数,
    类内定义的静态成员变量需在类外访问,
    静态成员函数只能访问静态成员变量。

  2. shared_ptr的具体实现

    template<typename T>
    class SharedPtr
    {
    public:
        SharedPtr(T* ptr = NULL):_ptr(ptr), _pcount(new int(1))
        {}
    
        SharedPtr(const SharedPtr& s):_ptr(s._ptr), _pcount(s._pcount){
            (*_pcount)++;
        }
    
        SharedPtr<T>& operator=(const SharedPtr& s){
            if (this != &s)
            {
                if (--(*(this->_pcount)) == 0)
                {
                    delete this->_ptr;
                    delete this->_pcount;
                }
                _ptr = s._ptr;
                _pcount = s._pcount;
                *(_pcount)++;
            }
            return *this;
        }
        T& operator*()
        {
            return *(this->_ptr);
        }
        T* operator->()
        {
            return this->_ptr;
        }
        ~SharedPtr()
        {
            --(*(this->_pcount));
            if (*(this->_pcount) == 0)
            {
                delete _ptr;
                _ptr = NULL;
                delete _pcount;
                _pcount = NULL;
            }
        }
    private:
        T* _ptr;
        int* _pcount;//指向引用计数的指针
    };
    
    
  3. 为什么要用int* _pconut作为指针的引用计数

    确保同一对象的shared_ptr的引用计数唯一

  4. 可以用static int pcount代替吗?

    不可以。static修饰后变为静态成员变量,等于在全局区直接分配内存。多个对象的pcount变为同一个

  5. 模版特化怎么写的

    templete<T>
    func<int, int>(){}//两个入参都是int类型的
    func<int, T>(){} //两个入参一个是int类型一个是T类型的 
    
  6. 移动构造函数的作用

    用对象A初始化对象B,之后对象A不用了。
    此场景下,如果调用拷贝构造函数,用深拷贝的方法开辟一块新内存空间将A拷贝到B;但移动构造函数,是用浅拷贝的方法将B指针指向原来A指针指向的空间,同时使*A = nullptr,删除A指针完成构造过程。

手撕

  1. 反转链表
  2. 求k个数的平均数(前缀和)

其他

  1. GDB调试

  2. 内存泄漏怎么发现

    top命令观察进程占用内存状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值