1、git管理
1.1 git融合冲突的原因,怎么解决
答:冲突原因:对应相同的代码有两个不同的commit或者对同一个文件进行改名等等情况就会导致融合冲突,解决办法是避免不同的人修改相同的代码的情况,然后修改之前养成修改之前先使用git pull查看更新情况,再决定如何更改。
1.2 merge和rebase的区别
答:git merge是合并两个分支,并且会保存两个分支的父信息;而git rabase时,它会将子分支的父信息另外临时保存,然后将子分支更新到主分支,看起来好像没有经过合并一样
1.3 reset作用
答:可以用于丢弃所有本地更改,回退到某个历史版本
2、shell脚本,编译、链接
2.1 能否多核编译、多核链接?
答:可以多核编译,如使用make -j7就是使用多核编译,但是链接的时候不能或者链接,因为它需要进行串行操作。
3、C++
3.1 析构函数为什么是虚函数
答:为保证通过父类指针释放资源时子类对象也可以被回收,避免内存泄露;但是默认情况下C++的析构函数不是虚函数,因为使用虚函数意味着每个对象都需要维护一个虚函数表,这会占用一定的空间,对应不存在继承关系的类来说并没有必要将析构函数设置为虚函数,这样可以节省空间。
3.2 类的设计原则
3.3 多继承
一个派生类同时继承多个父类,这样的派生类将具有多个父类的属性
3.4 内联函数和普通函数
答:内联函数在每个调用点内联地展开,可以避免函数调用的开销,内联适用优化规模较小、流程直接、频繁调用的函数,编译器可能会忽略将规模大的函数声明为内联函数的请求
3.5 宏函数和普通函数
宏函数与内联函数类似,但是宏函数没有参数类型和类型检查,要注意括号的存在和匹配问题,因此使用出错率更高。