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,这种我们也可以进行判断。[主要是对可能出现的情况的掌握]