c++面试题

3.python中 tuple 和 list的区别

Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]

4.python 和 C++的区别,两者的应用场景有什么差别。

1、运行效率:C++ >> Python
2、开发效率:Python >> C++

5.说一说二分法是什么,算法的思路,常见的用途

分法查找适用于数据量较大时,但是数据需要先排好顺序。

其实,部分有序也可以用二分法

6.说一说 链表和数组 的区别,我python最近用的少,就用C++的 list array vector举例说的底层实现以及数据结构的含义

vector (向量)——STL中标准而安全的数组。只能在vector 的“前面”增加数据。

deque (双端队列double-ended queue)——在功能上和vector相似,但是可以在前后两端向其中添加数据。

list (列表)——游标一次只可以移动一步。如果你对链表已经很熟悉,那么STL中的list则是一个双向链表(每个节点有指向前驱和指向后继的两个指针)。

set (集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的。

map (映射)——经过排序了的二元组的集合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序或搜索时使用,它的值可以在容器中重新获取;而另一个值是该元素关联的数值。比如,除了可以ar[43] = "overripe"这样找到一个数据,map还可以通过ar[“banana”] = "overripe"这样的方法找到一个数据。如果你想获得其中的元素信息,通过输入元素的全名就可以轻松实现。

multiset (多重集)——和集合(set)相似,然而其中的值不要求必须是唯一的(即可以有重复)。

multimap(多重映射)——和映射(map)相似,然而其中的键值不要求必须是唯一的(即可以有重复)。

序列式容器

vector -》底层数据结构为数组,支持快速随机访问
list -》底层数据结构为双向链表,支持快速增加和删除
deque -》底层数据结构为一个中央控制器和多个缓冲区
stack、queue -》(适配器:对容器的封装)底层数据结构为list或deque(vector容量大小有限制不使用)
priority_queue -》底层数据结构为vector,以堆的处理规则来管理

关联式容器

底层数据结构为红黑树,有序的
set -》不可重复
map -》不可重复
multiset -》可重复
multimap -》可重复
底层数据结构为哈希表,无序的
unordered_set -》不可重复
unordered_map -》不可重复
unordered_multiset -》可重复
unordered_multimap -》可重复

7.进程,线程是什么,区别和联系

https://zhuanlan.zhihu.com/p/60558136
对于操作系统而言,进程是整个现代操作系统的根本,操作系統是以进程为单位执行任务。随着技术发展,在执行一些细小任务,且本身无需分配单独资源时,进程的实现机制依然会繁琐的将资源分割,这样造成浪费,而且还消耗时间,所以就有了专门的多任务技术被创造出来——线程。 线程的特点就是在不需要独立资源的情况下就可以运行。如此一来会极大节省资源开销,以及处理时间。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
我们有如下对比图片:

但是对于 Linux 来说,它只支持轻量级进程,不支持线程,对于 Linux 而言:

  • 系统启动后的 第一个进程是 init,它的 PID 是 1。init 是唯一一个由系统内核直接运行的进程。
  • 除了 init 之外,每个进程都有 父进程(PPID 标识)
  • 每个进程还有四个 与用户和组相关的识别号
  1. 实际用户识别号 (real user ID,RUID)
  2. 实际组识别号 (real group ID,RGID)
  3. 有效用户识别号 (effect user ID,EUID)
  4. 有效组识别号 (effect group ID,EGID)

在 Linux 内核 2.4 版以前,线程的实现和管理方式就是完全按照进程方式实现的。在 2.6 版内核以后才有了单独的线程实现,为了弥补不支持线程的缺陷,Linux 引入线程组的概念,即该组中第一个轻量级进程的 PID,它被存入进程描述符的 tgid 字段中。getpid() 系统调用返回当前进程的 tgid 值而不是 pid 值,因此,一个多线程应用的所有线程共享相同的 PID。

如果是出于面试的角度,我们需要关注的点有哪些呢?

  • 进程的执行过程是线状的,尽管中间会发生中断或暂停,但该进程所拥有的资源只为该线状执行过程服务。一旦发生进程上下文切换,这些资源都是要被保护起来的。
  • 线程的改变只代表了 CPU 执行过程的改变,而没有发生进程所拥有的资源变化。
  • 计算机内的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
  • 进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源。
  • 线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源。

8.简历上说熟悉TCP/UDP,说一说TCP 和 UDP的区别

(建议往详细了说,大的特性要有提到)
TCP和UDP区别

TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠的 不可靠的
应用场合 传输大量的数据 少量数据
速度

TCP协议和UDP协议特性区别总结:

1. TCP协议在传送数据段的时候要给段标号;UDP协议不
2. TCP协议可靠;UDP协议不可靠
3. TCP协议是面向连接;UDP协议采用无连接
4. TCP协议负载较高,采用虚电路;UDP采用无连接
5. TCP协议的发送方要确认接收方是否收到数据段(3次握手协议)
6. TCP协议采用窗口技术和流控制

9.经典问题:TCP为什么要3次握手,2次,4次怎么样?(这两个问题之前面腾讯也问到了)

https://www.zhihu.com/question/24853633
https://www.cr173.com/exam/Cisco_17954_1.html

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。

通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。

三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。

但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我们举一个现实生活中两个人进行语言沟通的例子来模拟三次握手。

第一次对话:

老婆让甲出去打酱油,半路碰到一个朋友乙,甲问了一句:哥们你吃饭了么?

结果乙带着耳机听歌呢,根本没听到,没反应。甲心里想:跟你说话也没个音,不跟你说了,沟通失败。说明乙接受不到甲传过来的信息的情况下沟通肯定是失败的。

如果乙听到了甲说的话,那么第一次对话成功,接下来进行第二次对话。

第二次对话:

乙听到了甲说的话,但是他是老外,中文不好,不知道甲说的啥意思也不知道怎样回答,于是随便回答了一句学过的中文 :我去厕所了。甲一听立刻笑喷了,“去厕所吃饭”?道不同不相为谋,离你远点吧,沟通失败。说明乙无法做出正确应答的情况下沟通失败。

如果乙听到了甲的话,做出了正确的应答,并且还进行了反问:我吃饭了,你呢?那么第二次握手成功。

**通过前两次对话证明了乙能够听懂甲说的话,并且能做出正确的应答。**接下来进行第三次对话。

第三次对话:

甲刚和乙打了个招呼,突然老婆喊他,“你个死鬼,打个酱油咋这么半天,看我回家咋收拾你”,甲是个妻管严,听完吓得二话不说就跑回家了,把乙自己晾那了。乙心想:这什么人啊,得,我也回家吧,沟通失败。说明甲无法做出应答的情况下沟通失败。

如果甲也做出了正确的应答:我也吃了。那么第三次对话成功,两人已经建立起了顺畅的沟通渠道,接下来开始持续的聊天。

通过第二次和第三次的对话证明了甲能够听懂乙说的话,并且能做出正确的应答。

可见,两个人进行有效的语言沟通,这三次握手的过程是必须的。

同理对于TCP为什么需要进行三次握手我们可以一样的理解:

为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次握手。

10.平时用过数据库吗,项目里用过数据库吗,说说对数据库的理解以及自己怎么用的。

数据库系统原理

关系数据库设计理论

MYSQL数据库

数据库与文件系统的根本区别
主要区别是:文件系统不能解决数据冗余和数据独立性问题,而数据库系统可以。数据库技术的主要目的是有效管理和存取大量的数据资源,包括:提高数据的共享性,减少数据的冗余度,提供数据与应用程序的独立性。

(让我挑一个熟悉的数据库)

11.问了一些sql的语句(现场写)

(操纵表的,知道用什么,但是完整的没写出来,面试官还安慰我hhh,说平时用的应该增删查改多,这种操作表的少。)
SQL 语法
MySQL应知必会

12.说一说对MySQL 事务的理解

(我回答的ACID含义、关系常见的问题(脏读,不可重复读,丢失更新之类),及简单提到各个字母在Innodb中如何保证的)。

事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。

ACID

  1. 原子性(Atomicity)
    事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
    回滚可以用回滚日志(Undo Log)来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。

  2. 一致性(Consistency)
    数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。

  3. 隔离性(Isolation)
    一个事务所做的修改在最终提交以前,对其它事务是不可见的。

  4. 持久性(Durability)
    一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。

参考

TCP三次握手过程

原题

参考

2021年华为c++面试题及答案相关推荐

  1. 最新Java面试题2021年,常见面试题及答案汇总

    2021最新Java面试题[附答案解析]java面试题及答案2021,java2021最新面试题及答案汇总,2021最Java面试题新答案已经全部更新完了,有些答案是自己总结的,也有些答案是在网上搜集 ...

  2. 2o2021年安徽高考成绩查询,2021安徽高考数学答案-2021年安徽高考数学试题及答案...

    2021安徽高考数学答案专题:权威提供2021安徽高考数学答案,2021年安徽高考数学试题及答案,欢迎收藏无忧考网高考栏目获取更多最新2021安徽高考数学答案信息.[CTRL+D 收藏备用] 高考网发 ...

  3. 2021年C证(安全员)试题及答案及C证(安全员)模拟考试题

    题库来源:安全生产模拟考试一点通公众号小程序 2021年C证(安全员)试题及答案及C证(安全员)模拟考试题,包含C证(安全员)试题及答案答案和解析及C证(安全员)模拟考试题练习.由安全生产模拟考试一点 ...

  4. 2021年计算机网络期末考试题,2021年计算机网络期末考试试题及答案-20210515145802.doc-原创力文档...

    计算机网络期末考试试题及答案 填空题(每空 1 分,共 30 分) 1.在计算机网络定义中,一种计算机网络包括多台具备自治_功能计算机:把众多计算机有机连接起来要遵循规定商定和规则,即 通信合同:计算 ...

  5. 2021网易Java高级面试题及答案,王者笔记!

    前言 Spring 是一个非常流行和成功的 Java 应用开发框架.Spring Security 是 Spring 家族中的一个安全管理框架,提供了一套 Web 应用安全性的完整解决方案.在用户认证 ...

  6. 2021年高级保安员模拟试题及答案

    很多打算备考高级保安员考试的小伙伴,不知道考试的题型是什么样的,现在小编为你准备了几道题目,赶快来试试手吧! 一.单选题 1.犯罪客观方面要件可分为()要件. A.基础要件和充足B.先决要件和补充C. ...

  7. android秋招面试题及答案,2021中国移动秋招面试试题附答案(1)

    [导语] 1.为什么将持续经营作为会计假设?请简述持续经营的意义. >>>查看答案<<< 1.[答题要点] 持续经营是指企业或会计主体的生产经营活动将无限期地延续下 ...

  8. 2021前端必问面试题及答案

    web前端面试题[持续更新] js基础 原型链和继承 浅拷贝和深拷贝 js中的堆和栈 闭包 setTimeout 事件委托 this指向,call/apply/bind,回调函数 数组的常用操作 se ...

  9. 2021年最新vue面试题及答案

    1.什么是MVVM框架?它适用于哪些场景? MVVM框架是一个 Model-View-View Model框架,其中 ViewModel连接模型Model)和视图(View). 在数据操作比较多的场景 ...

最新文章

  1. Provision Discovery流程分析
  2. swift笔记三 使用xcode
  3. 计算机风冷散热系统的原理,显卡“发烧”的原因_显卡散热原理
  4. web开发中常用的算法和函数
  5. arcgis server发布地图服务中文标注不能显示
  6. Python简单试题3
  7. linux编码 form表单,Linux以form表单形式上传文件讲解
  8. Fluid给数据弹性一双隐形的翅膀 (1) -- 自定义弹性伸缩
  9. matlab读取高光谱影像
  10. python列表转dict
  11. 计算机网络信息安全定义,计算机网络与信息安全.pdf
  12. php 工资 2018,2018年PHP程序员的进阶之路
  13. Cramer`s Rule 克莱姆法则(克拉默法则)
  14. sqlite转sql2000数据库
  15. 在小程序中如何使用svg图标
  16. unity上线流程_新的Unity商店上线了
  17. fiddler应用--保存下载的数据--以奇书网下载小说为例
  18. ns-3学习手记11_ofswitch13安装教程
  19. 用友BIP产品矩阵亮相首届中小企业数字化转型大会,数智创新驱动企业高效成长
  20. 使用xenCenter启动虚拟机提示virtual disk could not be found

热门文章

  1. 数据分析八大模型:详解PEST模型
  2. OpenResty中cjson的两种方法
  3. Python requests 获取网易云歌手ID,根据ID下载歌手前50歌曲及歌词
  4. Hopcroft–Karp algorithm
  5. Spring(ioc和di)简介
  6. php教程燕十八_2PHP 3小时光速入门视频教程【燕十八】
  7. 佛山市“可持续城市出行规划(SUMP)”国家层面培训会顺利完成
  8. 【经验分享】20武汉理工计算机考研
  9. 文献阅读 | Distribution of Parental Genome Blocksin Recombinant Inbred Lines
  10. 黑苹果uhd630黑屏_i7-9700k,UHD630核显,HDMI接口,usb3.0,成功黑苹果!-远景论坛-微软极客社区...