C++面试题整理 1
1. new和malloc什么区别?
new和malloc都用于在堆上分配内存,new是c++中的关键字,分配内存后还会调用构造函数
2. std中unorded_map,map,multimap有什么区别?
- unorderd_map中元素不按键值排序,底层数据结构是哈希表,相对map查询速度快,内存开销大
- map中元素按键值排序,底层数据结构是红黑树,相对unorderd_map,查询速度慢,内存开销小
- multimap类似map,但是允许重复键值
3. C++中左值和右值的概念,以及使用右值常见的场景
简单来说,对于一个赋值表达式而言, 左侧的称之为左值,右侧的称之为右值。左值一般为常见的定义过的变量,在栈或堆上有具体的存储空间,右值一般为临时对象,作用域只限于赋值表达式期间。右值常见的有数字/字符常量,函数返回的非引用值,临时构造的对象。
4. C++内存泄漏怎么出现,如何定位与解决
内存泄漏是由于在堆上new出来的空间,没有delete释放掉导致的。可以通过重载new/delete加入log信息,比较申请和释放的内存,从而得知是否有内存泄漏;也可以通过各种检测工具,Windows下有UMDH,Linux下有valgrind工具
5. 解释下linux下虚拟地址空间
操作系统为了解决多进程管理中安全和效率问题,为每个进程分配的是虚拟内存地址,各内存地址相互隔离。在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,用户空间又分为栈,堆,数据,程序文件等。
6. 同步/异步与阻塞/非阻塞的区别
同步指的一条指令执行完,再执行下一条执行,各指令按照顺序依次执行,异步指的是,两条指令可以同时执行。阻塞指的是一个线程需要等待另一个线程的结果时,阻止当前线程继续向下执行,而非阻塞则是不阻止当前线程。
7. 有哪些架构类型
单体架构、分布式应用、微服务与Serverless
作者:robot2017
出处:https://www.cnblogs.com/stephen2023/p/18410719
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
出处:https://www.cnblogs.com/stephen2023/p/18410719
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任