IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++面试知识笔记 -> 正文阅读

[C++知识库]C++面试知识笔记

C++面试必备????????

1、C++中如何调用C语言代码

可以通过extern关键字进行设置,将.c文件按照编译c文件的方式编译

/************************a.c***************************/#ifdef __cplusplusextern "C"{#endif??//func1函数定义??int?func1(int?a,int?b){????return?a*a+b*b;  }??//func2函数定义??int?func2(int?a,int?b){    return a*a-b*b;  }#ifdef __cplusplus}#endif
/************************a.h***************************/#ifndef?__A_H#define?__A_H
#ifdef __cplusplusextern "C"{#endif  int?func1(int?a,int?b);???int?func2(int?a,int?b);???  #ifdef __cplusplus}#endif  #endif
/************************b.cpp***************************/#include <iostream>#include "test1.h"using namespace std;int main(void){??int?param1?=?1;??int?param2?=?2;??int?param3?=?func1(a,b);??cout<<"a*a+b*b="<<param3<<endl;}

2、值、指针、引用传递区别

1、传值是函数的形参拷贝值的过程,将传入的值(可能为类或者结构体)等拷贝存储在栈上,这样会消耗一定的空间。

2、?传指针是形参向函数所属的栈拷贝数据的过程,但传入的是四字节的指针地址。

3、传引用是形参的数据拷贝过程,其相当于为数据所在的地址起了一个别名。从效率上看传指针和引用效率高,传值消耗空间和时间,效率低。

3、进程的通信方式

进程的通信方式有:信号量、管道、命名管道、共享内存、套接字、信号、消息队列

管道:半双工通信,数据单向传输,仅在父子进程间使用;但命名管道可以在无亲子间的进程通信

共享内存:能够被其他任何进程访问的内存空间,由一个进程创建可以实现多个其他进程的访问,一般配合信号量等配合使用。

信号量:是一个计数器,一般作为锁使用,可以控制多个进程对共享内存的访问。

套接字:常用的进程间的通信方式;信号:用于通知进程某事件发生。

消息队列:是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。有写权限的进程可以向消息队列中添加新消息;有读权限的进程则可以从消息队列中读走消息。(引自csdn博主:ve2102388688)

4、http和https的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

  为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。(引自:博客园的博主:爱哭的蛙蛙)

5、STL的内存配置器

stl的内存管理一般通过默认的allocator来实现,不过也可以通过自定义的allocator实现(通过allocator模板定义的接口实现即可)。stl的内存分配分为两级分配器,一级分配器申请的内存大于128byte,通过malloc向系统的堆中分配内存;当所申请的内存小于128byte时,启动二级分配器,从预先分配好的内存池中取出一块最合适的交付出来。这个内存池由16个不同大小(8的倍数,8~128byte)的空闲列表组成,这样allocator会根据申请的内存大小选择相应的最接近的内存分配出来。

6、HTTPS工作流程

???来自简书:一杯刘,链接:https://www.jianshu.com/p/a68ca86183d7

  • client?向某网站发出请求

  • server?收到请求,并自己生成一对密钥,即?公钥?和?私钥S、

  • server?把生成的?公钥?传递给?client?

  • client?收到?公钥?后进行判断,若无效,弹出警告,否则生成一串随机数,即私钥?,然后?client?用?server?传过来的?公钥?对该随机数加密,形成私钥

  • client?把私钥传递给?server

  • server?收到会话私钥,用?私钥把会话私钥解密,然后把需要传递的数据用?会话私钥?进行加密

  • server?把数据传递给?client

  • client?收到数据,用?会话私钥?解密,完成数据接收。


7、什么是死锁,死锁的四个必要条件,如何避免死锁?

????死锁是两个或者多个进程在执行进程中,由于系统资源竞争或者通信而造成的阻塞现象,此时系统两个或者多个进程处于等待对方释放资源等现象称为死锁。

????死锁的四个必要条件:互斥条件(进程分配的资源防止其他进程请求使用)、请求与保持条件(所请求的资源处于其他进程汇总,进程请求处于阻塞,自身获得的资源保存不释放)、循环等待条件(循环等待请求在其他进程中的资源释放)、不可剥夺条件(进程所获得资源不能被其他进程夺走)。
???避免死锁:

1、占有部分资源的线程进一步申请其他资源时,如果申请不到,主动释放它占有的资源。

2、分配每个进程所需的全部资源。

2、具有相同的加锁顺序。如果多个线程需要对多个?Lock?进行锁定,则应该保证它们以相同的顺序请求加锁

3、使用定时锁。程序在调用?acquire()?方法加锁时可指定?timeout?参数,该参数指定超过?timeout?秒后会自动释放对?Lock?的锁定

8、map?和?unordered_map?的区别

map的底层原理是使用红黑树实现的,红黑树可以做到在O(log?n)时间内完成查找,插入和删除等操作;另外,红黑树是一种二叉查找树且有序,其中序遍历时得到的元素是有序的。对于一些需要用到有序性的应用场景可采用map。unordered_map的底层采用的是哈希表hash_table实现,其由一个大的数组,其中数组的元素节点可挂接链表实现hash冲突。哈希表的最大优点就是数据的存储和查找时间大大降低。

是基于hash_table实现,一般是由一个大vector,vector元素节点可挂接链表来解决冲突来实现。hash_table最大的优点,就是把数据的存储和查找消耗的时间大大降低,可以看成是常数时间,但是缺点又在于其建立哈希表的时间消耗较大。

9、vector与deque的比较

deque支持头部的快速插入与快速移除,这是deque的优点

Vector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间

deque允许于常数时间内对起头端进行元素的插入或移除操作?

deque没有所谓容量观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来

deque访问容器元素的效率比vector容器慢很多(原因deque要跨内存块来访问,而vector只是使用一个内存块)。

10、deque的实现原理

deque是一种双向开口的连续线性空间,并由一段一段的定量的连续空间构成。一旦有必要在deque前端或者尾端增加新的空间,便配置一段连续定量的空间,串接在deque的头端或者尾端。

??deque采取一小块连续的内存空间,其中每一个元素都是一个指针,指向另一段连续性内存空间(缓冲区是deque的存储空间的主体)。

?????当?deque?需要在头部或尾部增加存储空间时,它会申请一段新的连续空间,同时在?map?数组的开头或结尾添加指向该空间的指针,由此该空间就串接到了?deque?容器的头部或尾部了。

—?END?—


?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-08 11:36:46  更:2021-10-08 11:39:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:47:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码