找工作----C++面试题库

找工作----C++面试题库


文章目录

  • 找工作----C++面试题库
  • 一、TCP和UDP区别?
  • 二、TCP三次握手和四次挥手?
  • 三、请你说说 GET 和 POST 的区别?GET 和 POST 方法都是安全和幂等的吗?
  • 四、请你介绍一下死锁,产生的必要条件,产生的原因,怎么预防死锁?
  • 五、说一说进程通信的方式有哪些?
  • 六、请你说说进程和线程的区别?
  • 七、浏览器从输入 URL 开始到页面显示内容,中间发生了什么?
  • 八、请你说说 HTTP 状态码及其含义?
  • 九、说一说常用的 Linux 命令?
  • 十、请你说说MySQL索引,以及它们的好处和坏处?
  • 十一、请说说你对Redis的了解及数据类型?
  • 十二、请你介绍一下数据库的ACID?
  • 十三、什么事SQL、MySQL,数据库三大范式是什么?
  • 十四、HTTP 与 HTTPS 有哪些区别?
  • 总结


一、TCP和UDP区别?

  1. TCP是面向连接的可靠传输;而UDP是面向无连接的不可靠传输
  2. TCP确保所传输的数据一定会到达目的地,但时间却不能保证;而UDP不确保数据会按原来顺序到达,但具有实时性 。
  3. TCP的使用场景是不在意传输数据速度,但在意传输数据准确;而UDP的使用场景则是对实时性要求较高。
  4. TCP的首部开销大,占用20字节;而UDP的首部开销小,只占用8个字节
  5. TCP只支持点对点的数据传输;而UDP支持一对一、一对多、多对多等各种场景。
  6. TCP有拥塞控制和流量控制来确保数据的安全性,但如果网络拥塞的话,速度会比较慢;UDP即使在网络拥塞的时候,传输速度也不会慢。

二、TCP三次握手和四次挥手?

三次握手
1、客户端主动建立连接,发送控制位SYN=1报文,同时数据序号seq=x,进入SYN_SENT状态 。
2、服务器端接收到报文,返回一个控制位SYN=1,ACK=1,数据序号seq=y,确认应答号ack=x+1的报文,同时进入SYN_RCVD状态。
3、客户端接收来自服务器的确认报文,返回对该报文的确认ACK=1,seq=x+1,确认应答号ack=y+1,进入ESTABLISHED状态 。服务器接收到确认报文,进入ESTABLISHED状态 。

  • 但是为什么一定要三次握手而不是两次,为什么客户端最后还需要发送一次确认报文呢?
    其实主要是为了防止已经失效的连接请求报文突然又被传送给了服务器端,然后产生错误。
    假设现在有一种情况,客户端发出的第一个连接请求报文段并没有丢失而是在某些网络节点上被滞留了,直到客户端和服务器端的新连接已经释放后的某个时间点,第一个连接请求报文段才到了服务器端,这时候服务器端以为客户端又发起了一次请求,于是服务器端向客户端发起了确认连接报文段,同意连接。假设不采用三次握手,这时候连接已经建立了,但是客户端并不知道这个情况,服务器端会一直等待客户端的数据报文,这样服务器端的资源就会被浪费,占用大量的资源。所以采用三次握手可以防止这种现象,保护网络和系统资源。
    四次挥手
    (1)客户端向服务器发送FIN关闭连接请求,进入FIN—wait1 。
    (2)服务器确认断开客户端的连接发送ACK信号,进入close—wait状态,客户端进入FIN—wait2 。
    (3)服务器剩余数据发送完毕,向客户端发送FIN信号关闭连接,服务器进入last—ACK 。
    (4)客户端相应服务器的请求发送ACK信号,双方连接关闭。

三、请你说说 GET 和 POST 的区别?GET 和 POST 方法都是安全和幂等的吗?

  • Get ⽅法的含义是请求从服务器获取资源,这个资源可以是静态的⽂本、⻚⾯、图⽚视频等。⽽ POST ⽅法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报⽂的 body ⾥。

  • GET ⽅法就是安全且幂等的,因为它是「只读」操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。

四、请你介绍一下死锁,产生的必要条件,产生的原因,怎么预防死锁?

  • 死锁 两个或两个以上的进程在执行过程中,因争夺共享资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。这些永远在互相等待的进程称为死锁进程。
  • 产生死锁的必要条件 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件: - 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放; - 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放; - 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放; - 环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合 {P0,P1,P2,···,Pn} 中的 P0 正在等待一个 P1 占用的资源;P1 正在等待 P2 占用的资源,……,Pn 正在等待已被 P0 占用的资源。
  • 产生死锁的原因 - 竞争资源 - 进程间推进顺序非法
  • 预防死锁 - 有序资源分配法 - 银行家算法

五、说一说进程通信的方式有哪些?

进程间通信主要包括:管道、命名管道、信号、消息队列、共享内存、内存映射、信号量、Socket。

  • 管道 管道也叫无名(匿名)管道,它是是 UNIX 系统 IPC(进程间通信)的最古老形式,所有的 UNIX 系统都支持这种通信机制。
  • 命名管道 匿名管道,由于没有名字,只能用于亲缘关系的进程间通信
  • 信号是 Linux 进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。
  • 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级,对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以从消息队列中读走消息,消息队列是随内核持续的。
  • 共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会称为一个进程用户空间的一部分,因此这种 IPC 机制无需内核介入。
  • 内存映射 内存映射(Memory-mapped I/O)是将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件。
  • 信号量主要用来解决进程和线程间并发执行时的同步问题,进程同步是并发进程为了完成共同任务采用某个条件来协调它们的活动。
  • Socket 套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象

六、请你说说进程和线程的区别?

得分点 地址空间、开销、并发性、内存 标准回答 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

  • 本质区别:进程是资源分配的基本单位,线程是CPU调度的基本单位。
  • 内存消耗:进程有独立的虚拟地址空间,而同一个进程的线程之间共享进程的资源,自身只有栈和寄存器等少量独立的空间。
  • 切换开销:进程和线程切换时,需要切换上下文,进程的上下文切换时间开销远远大于线程上下文切换时间,各种页表、打开的文件等都需要切换,耗费资源较大,效率要差一些。
  • 并发性:进程的并发性较低,线程的并发性较高。
  • 健壮性:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃导致整个进程都死掉。所以多进程要比多线程健壮。

七、浏览器从输入 URL 开始到页面显示内容,中间发生了什么?

得分点
DNS解析、TCP握手、HTTP缓存、重定向、服务器状态码、渲染引擎和JS引擎互斥、渲染过程、浏览器进程、网络进程、渲染进程

  • 输入地址,浏览器查找域名的 IP 地址。

  • DNS地址解析:首先向本地DNS服务器进行询问,如果不在本地缓存中,则本地DNS服务器向根服务器进行查询,根服务器返回顶级域名服务器的地址给本地服务器,然后查询顶级域名服务器,返回权限域名服务器地址,权限域名服务器返回该域名对应的IP地址。

  • 浏览器向该 IP 地址的web 服务器发送一个 HTTP 请求,在发送请求之前浏览器和服务器建立TCP的三次握手,判断是否是HTTP缓存,如果是强制缓存且在有效期内,不再向服务器发请求,如果是HTTP协商缓存向后端发送请求且和后端服务器对比,在有效期内,服务器返回304,直接从浏览器获取数据,如果不在有效期内服务器返回200,返回新数据。

  • 请求发送出去服务器返回重定向,浏览器再按照重定向的地址重新发送请求。

  • 如果请求的参数有问题,服务器端返回404,如果服务器端挂了返回500。

  • 如果有数据一切正常,当浏览器拿到服务器的数据之后,开始渲染页面同时获取HTML页面中图片、音频、视频、CSS、JS等内容。

八、请你说说 HTTP 状态码及其含义?

得分点 1xx、2xx、3xx、4xx、5xx
1xx:表示服务器成功接收了请求
2xx:表示成功处理了请求
3xx:重定向,需要进一步的操作以完成请求
4xx:客户端错误,请求包含语法错误或无法完成请求,403无权限 404资源找不到
5xx:服务器错误,服务器在处理请求的过程中发生了错误 503服务器没有资源

九、说一说常用的 Linux 命令?

cd:切换当前目录
ls:查看当前文件与目录
grep:通常与管道命令一起使用,用于对一些命令的输出进行筛选加工
cp:复制文件或文件夹
mv:移动文件或文件夹
mkdir file:创建文件夹
touch file:创建文件
cmake …:使用 …/CMakeLists.txt 文件作为起始点在当前目录中生成makefile
make:使用生成的makefile作为输入构建程序
rm:删除文件或文件夹
ps:查看进程情况
kill -9:强制杀死进程
tar:对文件进行打包
cat:查看文件内容
top:查看操作系统的信息,如进程、CPU占用率、内存信息等(实时)
free:查看内存使用情况
pwd:显示当前工作目录
chmod:赋权限命令
apt-get install:安装包命令

十、请你说说MySQL索引,以及它们的好处和坏处?

得分点 检索效率、存储资源、索引维护

  • 索引就像指向表行的指针,是一种允许查询操作快速确定哪些行符合WHERE子句中的条件,并检索到这些行的其他列值的数据结构。
  • 好处:不仅能大幅提高匹配where条件的检索效率,还能用于排序和分组操作的加速。
  • 坏处:索引必定会增加存储资源的消耗;同时也增大了插入、更新和删除操作的维护成本,因为每个增删改操作后相应列的索引都必须被更新。

十一、请说说你对Redis的了解及数据类型?

  • Redis是一款基于键值对的NoSQL数据库,与其他键值对数据库不同的是,Redis中拥有string(字符串)、hash(哈希)、 list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、 HyperLogLog、GEO(地理信息定位)等多种数据结构,这给Redis带来了满足多种应用场景的能力。
  • Redis主要提供了5种数据结构:字符串(String)、哈希(Hash)、列表(List)、集合(set)、有序集合(zset)。
  • Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
  • Redis 与其他 key - value 缓存产品有以下三个特点:
    Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
    Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
    Redis支持数据的备份,即master-slave模式的数据备份。

十二、请你介绍一下数据库的ACID?

得分点 原子性、一致性、隔离性、持久性

  • 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  • 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
  • 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  • 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
    找工作----C++面试题库_第1张图片

十三、什么事SQL、MySQL,数据库三大范式是什么?

  • 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。作用:用于存取数据、查询、更新和管理关系数据库系统。
  • MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。
  • 第一范式:每个列都不可以再拆分。
    第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
    第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
    在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。

十四、HTTP 与 HTTPS 有哪些区别?

1.HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。
2. HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
3. HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。
4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

你可能感兴趣的:(2022秋招准备,面试,网络,udp)