美文网首页每周500字C++linux c/c++杂谈
linux c/c++面试知识点整理(八)

linux c/c++面试知识点整理(八)

作者: cpp加油站 | 来源:发表于2018-07-24 11:20 被阅读10次

    71、能不能从构造函数调用虚函数,为什么?

           可以的,只是虚函数会使用基类的虚函数。

    72、什么时候可能会出现这种情况?设定的断点在main()函数的第一行,但是程序运行后没有执行到断点就崩溃退出了?

           全局变量的构造函数崩溃。

    73、如何处理一个析构函数失败,可以抛出一个异常?

           最好不要抛出,如果一定要抛出,那要在析构函数内部处理。

    74、如何处理构造函数失败?

           抛出异常,若有动态分配内存,则要在抛异常之前手动释放。

    75、friend违反封装原则了吗,为什么?

           违反了,友元函数可以不受访问权限的限制而访问类的任何成员。

    76、脏数据是怎么发生的?

           数据被删除,但另一用户没有刷新,使用了该数据,这就是脏数据。

    77、什么是模板的特例化?

           模板的特例化是指将typename指定类型用一个已知类型替代了,用已知类型重新实现了模板函数和类,如果模板有2个参数,只实例化了一个参数,则是偏特化(局部特化)。

    78、STL仿函数需要重载哪个操作符?

           operator(),仿函数是指可以“使用小括号传递参数,来调用某个东西”。

    79、c++中前置操作符和后置操作符有什么区别?哪个效率更高?

           前置是先将自身改变再参与表达式运算,可以当作左值使用;
           后置是先参与表达式计算再改变自身的值,返回的是右值,不能当作左值使用(i++=6 错误),前置效率高,因为后置会产生临时对象。

    80、fork后父子进程的内存布局

           调用fork之后,系统会为子进程建立父进程的副本,即子进程获得父进程数据空间、堆、栈的副本,父子进程之间并不共享这些存储空间部分,但父进程和子进程会共享正文段。
           而因为现在fork以后通常会执行exec函数,所以现在一开始的时候子进程并没有完全获得父进程的存储空间的副本,作为替代,使用了"写时复制"技术,即这些区域开始由父进程和子进程共享,而且内核将它们的访问权限改为只读,如果父进程和子进程任一个试图修改这些区域,则内核会为修改区域的那块内存制作一个副本,通常是虚拟存储系统中的一个页。
           调用fork()之后先执行哪个进程的是由Linux下专有文件/proc/sys/kernel/sched_child_runs_first的值来确定的(值为0父进程先执行,非0子进程先执行)。

    相关文章

      网友评论

        本文标题:linux c/c++面试知识点整理(八)

        本文链接:https://www.haomeiwen.com/subject/gkfesftx.html