面试2

对c++11了解吗?有哪些新特性?

我说了解,新增了一些新的类型,例如long long,unsigned long,一些宽字符;大括号类型初始化更普遍了;新增一些智能指针;

更多细节可以看我这篇博客

https://blog.csdn.net/lishun1422840684/article/details/100013684

 

说了这几点,面试官就打断了我,问了我share_ptr是否线程安全,我支支吾吾了好久,答了一个c++不支持share_ptr线程安全,需要我们自己实现线程安全………

在网上找了找资料

正如boost文档所宣称的,boost为shared_ptr提供了与内置类型同级别的线程安全性。这包括:

1. 同一个shared_ptr对象可以被多线程同时读取。

2. 不同的shared_ptr对象可以被多线程同时修改。

3. 同一个shared_ptr对象不能被多线程直接修改,但可以通过原子函数完成。

如果把上面的表述中的"shared_ptr"替换为“内置类型”也完全成立。

如果你能保证不会有多个线程同时修改或替换指针指向的对象,不用加锁是完全没有问题的,或者说指针指向的对象本身已经是线程安全(包括多线程下的读写安全和构造析构安全)。总之一句话智能指针指向的对象的线程安全,标准库是没有保证的。

 

问有接触过多线程吗?

回答说自己目前的工作中使用的操作系统就是多线程的

问是什么系统?

答ecos

 

cpu占有率过高可能是因为什么情况?

回答了可能是后台跑的一些线程占用资源过多,已经使用完的资源没有及时释放。

网上找了找,大概可以从这么几点回答:

1.可能使用了debug version,跑了很多打印信息,占用了资源

2.代码中有死循环一直在跑 ---- 加个睡眠时间,这样不会一直占用cpu

可以用使用vmstat查看系统维度的CPU负载,使用top查看进程维度的CPU负载

 

栈的默认分配大小?

这个记不清了,当时回答了个几KB。

Windows下默认2M,Linux下默认8M。

堆的大小就是看虚拟内存的大小,比栈大得多

你可能感兴趣的:(笔试面试题,笔试,面试)