C++面经总结4

说一下new和malloc的区别

new是操作符, malloc是函数
malloc申请的空间是不能初始化的, 而new是可以初始化的
malloc申请空间的时候需要手动计算空间大小,而new可以直接在[]里面给个数就行。
malloc的返回值是void*, 使用时必须强转, 而new不需要,他后面跟的是类型。
malloc申请失败返回NULL,而new申请失败抛异常。
在申请自定义类型对象的时候,malloc只会申请空间, new会在申请空间后调用构造函数

C++中的异常,C中的异常是怎样的。在C中遇到异常如何处理

异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者处理这个错误。

C++中,其中抛出异常throw, 捕获通常用try …catch。我们通常是抛出子类对象,用父类对象去接受。
C的异常 : 1,直接终止程序, 例如assert, 2,返回错误码,让程序员根据错误码自己去处理对应错误。

C++处理异常的优点 :
1, 异常对象定义好了, 我们就可以清晰的知道错误的原因和位置,方便定位bug,而C的错误码方式,需要自己去匹配查看
2,对于C直接终止程序的方式来说,C++在抛出异常后进程还可以继续执行。
3,返回错误码的方式还有一个最大的问题是,深层的函数返回,需要层层返回才能让最外层拿到错误码。而C++可以就近捕获。

C++中一个空类有哪些成员函数

8个 : 构造,析构,拷贝构造,赋值重载,取地址重载,const取地址重载, 移动构造,移动赋值 (C++11的新特性)。

深浅拷贝的区别。

构造函数可以是虚函数吗?析构函数呢?原因是什么?

构造函数不能是虚函数,因为虚函数表的指针是在构造函数初始化列表阶段初始化的。
析构函数 : 如果是在继承体系中,我们尽量把父类和子类的析构函数定义成虚函数,让他们构成重写。
因为如果子类和父类不构成重写关系的话,当析构父类指针(指向子类对象的时候),会出现不调用子类析构函数的情况。

map和vector在删除元素是,底层(内存结构)是如何变化的

map : 底层是红黑树 ,删除元素的时候可能涉及到元素的变换 和 旋转问题。
vector : 可以通过挪动元素的方式直接覆盖。

Linux下有一个2G的文件,操作系统如何找到这个文件

Linux命令 : du -h -a | grep “2G”

单核模式下,使用多线程有好处吗?有什么好处?

在处理I/O密集型应用的时候,是可以重合IO等待时间的。 有利于提高IO效率的。

fork函数做了哪些事?fork函数返回值有几个,代表什么意思?

创建了一个子进程,分配新的内存块和内核数据结构给子进程。
将父进程部分内核数据结构的内容拷贝到子进程。
添加子进程到系统进程列表当中。

fork函数返回值有2个, 给父进程返回的是子进程id, 给子进程返回的是0。

Linux线程有哪些同步机制?

互斥锁, 条件变量, 信号量, 读写锁

进程间通信机制,IPC最快的是哪个?管道是什么?如何用管道如何实现双工通信?

管道, 共享内存,消息队列,套接字。 最快的是共享内存
管道是一种半双工通信,实际上就是OS提供的一段缓冲区。 可以建立两个管道

进程间同步机制有哪些?如何同共享内存实现进程间的同步机制?

互斥锁,条件变量,信号量,读写锁。

可以通过两个有名的信号量,一个信号量来控制写, 一个信号量来控制读。
也可以通过互斥锁的方式。

多个进程想访问同一块共享内存,为保证数据一致,需要采取的数据同步措施?(提示:文件锁)

可以通过文件锁的方式,当一个进程正在读或者修改文件的某一个部分的时候,
他可以阻止其他进程修改同一个文件区。

TCP断开连接为社么需要四次挥手机制?详细描述过程,等待2MSL的原因

略。

DOS攻击的原理

拒绝服务攻击。无脑的一直发送恶意请求,服务端需要处理这些恶意请求,从而消耗资源,让正常的请求得不到响应。
可能会导致服务端不能对正确的请求进行响应,会导致服务器崩溃和宕机。

数据库用过吗?数据库事务,ACID

原子性: 事务由一组SQL语句组成, 这一组语句要么全部执行, 要么全部不执行, 不会停留在某一个中间状态。
持久性: 事务一但提交, 则数据会被永久保存在磁盘上,即便是系统崩溃也不会丢失。
隔离性, 对于并发执行的事务而言,一个事务不受其他事务的影响。
一致性 : 事务在提交前和提交后,都应该满足之前预设的规则,并且处于一个一致性的状态。

描述请求从浏览器端到服务端的过程

1, 构建http请求完成后, 浏览器会先查看缓存中是否存在请求的资源。
2, DNS域名解析 (先查看本地缓存,然后host文件 。 向本地本地DNS要----> 根DNS要-----> 顶级DNS----->域名解析服务器)获得IP
3,三次握手建立连接。(客户端发送syn报文, 服务端接受并发送ack+ syn, 客户端发送ack报文, 服务端接受。 三次握手成功)
4,http请求然后依次经过传输层,网络层,数据链路层 进行头部的封装。
5,通过网络发送给对端主机服务器,然后服务器经过数据包的依次向上分用拿到http请求。

断点续传下载的位置从哪里知道的 (浏览器自己记录)

断点续传 : 就是在上传或下载的断开点继续开始传输,不用再从头开始。
这个位置由浏览器自己记录的。

tcp协议的三次握手四次挥手, 为什么握手三次挥手四次

略。

四次挥手有可能产生什么问题.

如果是服务端主动断开链接(例如某些用户不活跃,), 可能会处于大量的TIME_Wait链接,由于没有
完全断开链接,这种TIME_WAIT链接还占用着一个通信5元组(源ip, 目的ip, 源端口, 目的端口, 协
议),而服务端的ip和端口都是固定的, 当新的用户来链接的ip和端口与TIME_WAIT占用的链接相同的
时候就会出现问题。

当被动断开链接的一方如果没有close关闭文件描述符,那会进入close_wait的状态,非常浪费资源。

tcp为什么是可靠的

序号---->保证了报文的到达的顺序
确认序号—>保证了报文已经被接受。
超时重传—>保证了报文必须被应答。

介绍一下超时重传

当主机A发送数据给主机B的时候, 由于一些原因,可能无法按时到达主机B,经过一个特定的时间间隔,如果一直没有收到应答,就会进行重发。
这个时间间隔一般都是浮动的, 在Linux操作系统下, 一般是500ms,
重传一次, 2 * 500ms , 重传2次,4倍的500ms,3次是8倍500ms,经过一定的次数,认为网络或者对端主机出现问题,则
强制关闭连接。

介绍一下http协议, 能工作在udp上吗

http协议是一个应用层协议, 是一种无状态协议, 一次请求–>一次响应–>建立链接–>断开链接。
http请求的格式 : 首行, 头部,正文。
其中首行 : 请求方法 + 网址+协议版本。
头部: 请求属性,由冒号分割的键值对。 例如有content_type, content_length, host, user_agent…http响应的格式基本上一样,
就是首行有些区别, 是协议版本, 状态码, 状态码的描述。
可以改造UDP协议, 如谷歌的QUIC协议,就是将udp经过改造让他具备了一定程度的可靠性。

http1.0和1.1的区别.

1, http1.0是一种短链接, 一次请求–>一次响应–>建立链接–>断开链接 http1.1是一种长链接协议 ,可以在一次连接上进行多次通信。
2,http1.1在请求的头部中多了一个Host域,允许一台物理服务器上可以存在多个虚拟主机,共享一个IP,而对于http1.0来说,
一台物理务器占用一个IP地址。
3,http1.0存在浪费带宽的现象,也不支持断点续传。 例如在客户端只请求某个对象资源的一部分的时候,
http1.0必须将整个对象请求。 而http1.1因为头部引入range域, 可以支持请求资源的一部分,也支持断点续 传。
4, 另外的就是http1.1在http1.0的基础上,增加了一些请求方法和状态码。

DNS域名解析详细过程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/6518.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg添加字幕的详细操作

FFmpeg添加字幕的详细操作 在视频中添加字幕可以使视频更具可读性,并为观众提供更好的观看体验,这在多语种内容中尤为重要。FFmpeg是一个流行的开源视频处理工具,它可以被用来给视频添加字幕。本文将介绍FFmpeg集成libass的编译流程&#xf…

【沐风老师】教你在3dMax中使用Greeble插件结合变形修改器建模

3dMax在Greeble中使用变形修改器 Greeble一个有趣的修改器插件,用于快速生成诸如低模城市建筑群、太空船模型、死亡星等的随机细节。。。 我们在之前的教程中介绿过Greeble的安装和基本使用方法,在本教程中,我们将学习如何使用Greeble插件和变形修改器来制作效果。 【开始…

深度学习数据集—水果数据集大合集

近期整理的各类水果(包括干果)数据集,分享给大家。 1、8类水果图片数据集(每类100张图片左右)[橘子,菠萝,苹果,木瓜,火龙果,香蕉,樱桃&#xff0…

聊天Chat

前言 加油 原文 聊天常用会话 ❶ Don’t count on him. 别指望他。 ❷ They underestimated the enemy’s strength. 他们低估了敌人的力量。 ❸ The plan went according to his perspective. 计划是按照他的想法进行的。 ❹ This project involves many difficulties. …

【C++】开散列哈希表封装实现unordered_map和unordered_set

在未达成目的之前,一切具有诱惑力的事物都显得那么不堪一击 文章目录一、unordered系列关联式容器二、哈希函数和哈希冲突三、闭散列(你抢我的位置,我抢他的位置)1.哈希表结构2.Insert()3.Erase()(标记的伪删除法&…

归并排序介绍、详解、案例

排序 计数排序介绍、详解、案例快速排序介绍、详解、案例归并排序介绍、详解、案例 归并排序也是基于分治法的排序算法,为了排序长度为n的数组,需要先排序长度为n/2的字数组,然后合并这两个排序字数组于是整个数组也就排序完毕。 排序过程 以…

浅谈JVM(五):虚拟机栈帧结构

上一篇: 浅谈JVM(一):Class文件解析 浅谈JVM(二):类加载机制 浅谈JVM(三):类加载器和双亲委派 浅谈JVM(四):运行时数据区 5.虚拟机栈帧结构 ​ 方法是程序执行的最小单元,每个方法被执行时都会创建一个栈帧…

驱动开发:内核使用IO/DPC定时器

本章将继续探索驱动开发中的基础部分,定时器在内核中同样很常用,在内核中定时器可以使用两种,即IO定时器,以及DPC定时器,一般来说IO定时器是DDK中提供的一种,该定时器可以为间隔为N秒做定时,但如…

内卷?焦虑?35岁?找不到工作?端正态度激励一下正在挣扎的Android程序员

前言 亲爱的各位Android程序员,您们好: 我理解您们的焦虑和困惑,但我想告诉您的是:作为一名Android程序员,您依然是非常有前途和市场需求的职业人才。 首先,您要知道,移动互联网时代的普及率…

【数据结构】时间复杂度和空间复杂度

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法ing ✈️专栏:【数据结构】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点…

1662_MIT 6.828 JOS check_page_free_list实现分析以及boot_alloc问题修复

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续尝试完善分析JOS的代码中存储管理的部分。 上次看到了这里,本来想先去看看这两个函数实现。但是缺失了调用场景,感觉理解也不一定准确。…

对拍程序 并查集专题 (C++ | 洛谷 | acwing | 蓝桥)

文章目录【蓝桥杯专题】 (C | 洛谷 | acwing | 蓝桥)1249. 亲戚836. 合并集合837. 连通块中点的数量238. 银河英雄传说 【带权并查集】145. 超市 【并查集 贪心】4793. 危险程度 (连通块并查集 )普通oi 读文件对拍程序【蓝桥杯专题】 &#…

树和二叉树相关的练习(选择题)

目录 一、二叉树 二、堆 三、遍历二叉树 一、二叉树 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )。 A. 不存在这样的二叉树 B. 200 C. 198 D. 199 下列数据结构中,不适合…

C++ Primer Plus 学习笔记(八)——输入、输出和文件

1 流和缓冲区 C程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插入到输出流中。 缓冲区是用作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储工具,通过使用缓…

HTTP协议:当下最主流的应用层协议之一,你确定不了解一下吗?

一.HTTP协议的含义http是什么?超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。‘超’可以理解为除了文本之外的图片,音频和视频,和一些其他…

STM32基于HAL工程FREERTOS读取DS18B20数据+串口输出

STM32基于HAL工程FREERTOS读取DS18B20数据串口输出✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!🍁对于文中所提供的相关资源链接将作不定期更换。…

无需公网IP,远程连接SQL Server数据库【内网穿透】

文章目录1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置4.公网访问测试5.结语1.前言 数据库的重要性相信大家都有所了解&#xf…

现代前端开发者的自我迷失,你还会前端基础知识吗?

通常来说,我认为情况并不算糟糕,熟练的手可以几乎做到一切。然而,最近我注意到一些事情改变了我对这个行业的看法。似乎在这些无尽的趋势、范式和新奇玩意中,我们忘记了前端开发的支柱(意思是忘记了基础知识&#xff0…

【python】GIL全局锁

一、原理: 全局解释器锁(Global Interpreter Lock,GIL)规定全局范围内任意时候一个进程里只能同时执行一个线程。每一个线程在执行时,都会锁住GIL,以阻止别的线程执行;执行一段时间后&#xff…

OBCP第四章 SQL调优-SQL执行性能监控

(g)v$sql_audit 全局 SQL 审计表 基于虚拟表__all_virtual_sql_audit的视图, 该虚拟表对应的数据存放在一个可配置的内存空间中 由于存放这些记录的内存是有限的,因此到达一定内存使用量,会触发淘汰 可以用来查看每次请求客户端来源&…