面试遇到的问题解答

1.grep 如何递归地在一个目录里面搜索所需的字符串。

grep -nrw “test” path #在path目录下面递归地查找test字符串,并且显示行号

2.判断二叉树是否对称。

主要思想为递归,从根节点开始判断,如果根节点对称然后再递归左子女和右子女,平衡返回true,不平衡返回false

3.C++ 虚表

加入我们在一个类中声明了一个virtual函数,那么编译器会在类实例的开始或者结尾(编译器的不同会有不同的实现方式)插入一个指向虚表的指针。每一个含有继承关系或者声明了虚函数的类都会有一个虚表。在有子类的情况下,并且重写了对应的虚函数,那么子类的对应slot里面的函数地址会被修改。

4.c++多重继承如果两个基类有相同名字的成员函数/变量如何处理二义性。
4.1.第一种情况简单一些:

class A {
public:
    virtual void f() {}
};

class B {
public:
    virtual void f() {}
};

class C : public A, public B {
public:
    void f() {}
};

main () {
    C c;
    c.f();
    c.A::f();
    c.B::f();
}

这种情况我们可以使用域操作符来处理二义性。
4.2.第二种情况:

class A {
public:
    virtual void f() {}
};

class B : public A {
public:
    virtual void f() {}
};

class C : public A {
public:
    virtual void f() {}
};

class D : public B, public C {
public:
    void f() {}
}

main() {
    D d;
    d.f(); // ok
    d.B::f(); //ok
    d.C::f(); //ok
    A a = d; //error
}

在上面的例子中,由于B和C都继承了A,所以在发生裁剪的时候,A不知道该选那一个类的f函数,这里就会出现二义性,正确的做法是B和C都虚继承A,这样在D继承B和C的时候,就能确保在D类实例中只会存在一份A的实例,不会出现二义性.

5.在使用new malloc 函数时,如果出现内存不足的时候会出现什么情况。

在使用内存分配函数的时候,如果内存已经被耗尽,那么new会抛出bad_alloc异常,我们可以捕获这个异常,并且对异常进行处理.malloc函数在没有足够的内存来分配时,会返回NULL,这种我们也可以进行判断。[主要是对可能出现的情况的掌握]

猜你喜欢

转载自blog.csdn.net/nia305/article/details/79078106