
C++中概念区别专题
N1314N
有志者事竟成
展开
-
进程与线程的区别-----面试题
一、为什么引入进程?进程是为了提高CPU的执行效率,减少因为程序等待带来的CPU空转以及其他计算机软硬件资源的浪费而提出来的。二、为什么引入线程?为了减少进程切换和创建的开销,提高执行效率和节省资源 。三、线程和进程的区别?调度:线程是独立调度的基本单位,进程是拥有资源的基本单位。在同一进程中,线程的切换不会引起进程的切换;在不同的进程中,进行线程切换,则会引起进程的切换。拥有资源:进...原创 2019-04-19 19:12:24 · 899 阅读 · 0 评论 -
红黑树的特性
一、除了二叉树的基本要求外,红黑树必须满足以下几点性质。1、节点必须是红色或者黑色。2、根节点必须是黑色。3、叶节点(NIL)是黑色的。(NIL节点无数据,是空节点)4、红色节点必须有两个黑色儿子节点。5、从任一节点出发到其每个叶子节点的路径,黑色节点的数量是相等的。二、这些约束使红黑树具有这样一个关键属性:从根节点到最远的叶子节点的路径长与到最近的叶子节点的路径长度相差不会超过2。...原创 2019-06-05 14:22:56 · 6066 阅读 · 2 评论 -
拷贝构造函数专题(面试直播)
【1】拷贝有两种:深拷贝,浅拷贝。 当出现类的等号赋值时,会调用拷贝函数,在未定义显示拷贝构造函数的情况下, 系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据 成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单 的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两 次析构函数,而导致指针悬挂现象。所以,这时,必须采用深...原创 2019-06-07 10:18:13 · 340 阅读 · 0 评论 -
如何判断链表有环(三种方法)
方法一、穷举遍历方法一:首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新节点之前的所有节点当中存在相同节点ID,则说明该节点被遍历过两次,链表有环;如果之前的所有节点当中不存在相同的节点,就继续遍历下一个新节点,继续重复刚才的操作。例如这样的链表:A->B->...原创 2019-06-02 09:16:15 · 17887 阅读 · 1 评论 -
请你来说一下C++中类成员的访问权限
参考回答:C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象...原创 2019-06-21 14:23:55 · 1531 阅读 · 0 评论 -
请你回答一下什么是右值引用,跟左值又有什么区别?
参考回答:右值引用是C++11中引入的新特性 , 它实现了转移语义和精确传递。它的主要目的有两个方面:1. 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。2. 能够更简洁明确地定义泛型函数。3. 左值和右值的概念:左值:能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。右值:不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对...原创 2019-06-21 14:26:17 · 1178 阅读 · 0 评论 -
请你回答一下malloc的原理,另外brk系统调用和mmap系统调用的作用分别是什么?
Malloc函数用于动态分配内存。为了减少内存碎片和系统调用的开销,malloc其采用内存池的方式,先申请大块内存作为堆区,然后将堆区分为多个内存块,以块作为内存管理的基本单位。当用户申请内存时,直接从堆区分配一块合适的空闲块。Malloc采用隐式链表结构将堆区分成连续的、大小不一的块,包含已分配块和未分配块;同时malloc采用显示链表结构来管理所有的空闲块,即使用一个双向链表将空闲块连...原创 2019-06-21 14:31:05 · 1799 阅读 · 1 评论 -
请你来说一下什么时候会发生段错误
段错误通常发生在访问非法内存地址的时候,具体来说分为以下几种情况:1、使用野指针2、试图修改字符串常量的内容原创 2019-06-21 14:32:45 · 1373 阅读 · 0 评论 -
请你来回答一下什么是memory leak,也就是内存泄漏
参考回答:内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使用的内存情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的分类:1. 堆内存泄漏 (Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从 堆中分配的一块内存,再是完成后...原创 2019-06-22 09:21:51 · 3399 阅读 · 2 评论 -
请你来回答一下new和malloc的区别
参考回答:1、new分配内存按照数据类型进行分配,malloc分配内存按照指定的大小分配;2、new返回的是指定对象的指针,而malloc返回的是void*,因此malloc的返回 值一般都需要进行类型转化。3、new不仅分配一段内存,而且会调用构造函数,malloc不会。4、new分配的内存要用delete销毁,malloc要用free来销毁;delete销毁的时候 会调用对象...原创 2019-06-22 09:23:18 · 709 阅读 · 0 评论 -
请自己设计一下如何采用单线程的方式处理高并发
参考回答:在单线程模型中,可以采用I/O复用来提高单线程处理多个请求的能力,然后再采用事件驱动模型,基于异步回调来处理事件来原创 2019-06-22 09:24:11 · 1922 阅读 · 0 评论 -
请你说一说有了进程,为什么还要有线程?
参考回答:线程产生的原因:进程可以使多个程序能并发执行,以提高资源的利用率和系统的吞吐量;但是其具有一些缺点:1、进程在同一时间只能干一件事2、进程在执行的过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于等待的资源,仍然不会执行。因此,操作系统引入了比进程力度更小的线程,作为并发执行的基本单位,从而减少程序在并发执行时所付出的时空开销,提高并发性。和进程相比,线程的优势如下...原创 2019-06-26 09:29:32 · 3325 阅读 · 0 评论 -
请你说一说死锁发生的条件以及如何解决死锁
参考回答:死锁是指两个或两个以上进程在执行过程中,因争夺资源而造成的下相互等待的现象。死锁发生的四个必要条件如下:互斥条件:进程对所分配到的资源不允许其他进程访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源;请求和保持条件:进程获得一定的资源后,又对其他资源发出请求,但是该资源可能被其他进程占有,此时请求阻塞,但该进程不会释放自己已经占有的资源不可剥...原创 2019-06-26 09:34:57 · 939 阅读 · 0 评论 -
浅谈C++多态性
C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函...原创 2019-07-07 15:59:13 · 330 阅读 · 0 评论 -
请你说一下进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的
参考回答:基本概念:(1)进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;(2)线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动...原创 2019-06-24 17:14:12 · 1507 阅读 · 0 评论 -
请你来说一说用户态到内核态的转化原理
参考回答:1)用户态切换到内核态的3种方式1、系统调用这是用户进程主动要求切换到内核态的一种方式,用户进程通过系统调用申请操作系统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的ine 80h中断。2、异常当CPU在执行运行在用户态的程序时,发现了某些事件不可知的异常,这是会触发由当前运行进程切换到处理此。异常的内核...原创 2019-06-28 10:04:05 · 2375 阅读 · 0 评论 -
2019年阿里云,华为,腾讯等C++常见面试题汇总
机会是留给有准备得人https://yq.aliyun.com/articles/272338原创 2019-05-18 14:45:23 · 963 阅读 · 0 评论 -
C语言中唯一的一个三目运算符(条件运算符)
条件运算符(? : )是一个三目运算符,即有三个操作数。 使用条件运算符(?:)可以实现 If else 的功能,其一般形式为:表达式1 ? 表达式2 : 表达式3其意思是:如果表达式1为真,则运算表达式2,整个条件表达式的值为 表达式2的值;反之,则运算表达式3,整个条件表达式的值为表达式3的值。例:判断a,b 的大小#include<stdio.h>void mai...原创 2019-05-13 15:56:55 · 4679 阅读 · 0 评论 -
C++宏定义详解
一、#define的基本用法#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1.1 #defi...原创 2019-05-13 15:22:57 · 599 阅读 · 0 评论 -
栈和堆的具体区别-----面试题目
栈(stack)和堆(heap)的具体区别1、在申请方式上栈(stack): 现在很多人都称之为堆栈,这个时候实际上还是指的栈。它由编译器自动管理,无需我们手工控制。 例如,声明函数中的一个局部变量 int b 系统自动在栈中为b开辟空间;在调用一个函数时,系统自动的给函数的形参变量在栈中开辟空间。堆(heap): 申请和释放由程序员控制,并指明大小。容易产生memory leak。在C中...原创 2019-04-19 19:20:08 · 1774 阅读 · 0 评论 -
C++与C的区别-----面试题目
C是一个结构化语言,它的重点在于算法和数据结构。对于语言本身而言,C是C++的子集。C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理,得到输出。对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制。因此,C与C++的最大区别在于,它们用于解决问题的思想方法不一样。C实现了C++中过程化控制及其他相关功能。而在...原创 2019-04-19 19:23:37 · 679 阅读 · 0 评论 -
TCP和UDP的区别?----面试题目
TCP和UDP的区别:传输控制协议TCP的特点:(1) TCP是面向连接的运输层协议(2) 每一条TCP连接只能有两个端口,即:点对点(3) TCP提供可靠交付的服务(4) TCP提供全双工通信(5) 面向字节流,TCP中的“流”指流入到进程或从进程流出的字节序列用户数据报协议UDP的特点:(1) UDP是无连接的(2) UDP使用尽最大努力交付(3) UDP是面向报文(4)...原创 2019-04-19 19:33:12 · 495 阅读 · 0 评论 -
TCP状态中 time_wait 的作用?----面试题
TCP状态中 time_wait 的作用:客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间。这么做有两个理由:(1)确保最后一个确认报文段能够到达。如果 B 没收到 A 发送来的确认报文段,那么就会重新发送连接释放请求报文段,A 等待一段时间就是为了处理这种情况的发生。(2)可能存在“已失效的连接请求报文段”,为了防...原创 2019-04-19 19:35:26 · 1107 阅读 · 0 评论 -
HTTP 2.0与HTTP 1.0的区别 ?---面试题
1、什么是HTTP 2.0HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)。2、与HTTP 1.1相比,主要区别包括HTTP/2采用...原创 2019-04-19 19:40:22 · 1952 阅读 · 0 评论 -
HTTP与HTTPS的区别-----面试题
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全...原创 2019-04-20 08:21:32 · 1104 阅读 · 0 评论 -
产生死锁的必要条件?已经如何预防死锁?----面试题
一、计算机系统中的死锁竞争不可抢占性资源引起死锁竞争可消耗资源引起死锁进程推进顺序不当引起死锁二、产生死锁的必要条件互斥条件(资源独占)请求和保持条件不可抢占条件(不可剥夺)循环等待条件三、处理死锁的方法预防死锁避免死锁检测死锁解除死锁四、预防死锁破坏‘请求和保持’条件破坏‘不可抢占条件’条件破坏‘循环等待’条件(主要是破坏产生死锁的后三个条件)五、解决死锁...原创 2019-04-19 19:30:57 · 870 阅读 · 0 评论 -
TCP的三次握手和四次挥手的过程---面试题
一、三次握手的过程二、四次握手过程三、事务具有四个特性(ACID):原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持续性(Durability)原创 2019-04-20 08:31:13 · 189 阅读 · 0 评论 -
树的先序、中序、后序和层次遍历-C++实现----面试题目-----同时也可以说是树的层次历遍
一、先序遍历1、递归算法 struct Tree { int date; Tree* lchild; Tree* rchild; Tree(int x):date(x),lchild(nullptr),rchild(nullptr){} }; void PreOrder(Tree* root) { ...原创 2019-04-20 08:41:42 · 273 阅读 · 0 评论 -
时间复杂度的知识点以及习题
算法复杂度是在《数据结构》这门课程的第一章里出现的,因为它稍微涉及到一些数学问题,所以很多同学感觉很难,加上这个概念也不是那么具体,更让许多同学复习起来无从下手,下面我们就这个问题给各位考生进行分析。首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某个算法的时间耗费,它是该算法所求解问题规模n的函数,而后者是指当问题规模趋向无穷大时,该算法时间复杂度的数量级。当我们评价一个...原创 2019-04-18 19:59:19 · 6639 阅读 · 0 评论 -
二分查找专题
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在LeetCode中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目标有很多种,而且在细节写法也有一些变化。根据查找的目标不同,二分查找法主要分为以下三类:第一类: 需查找和目标值完全相等的数:这是最简单的一类,也是我们最开始学二分查找法需要解决的问题,比如我们有...原创 2019-04-25 17:12:00 · 244 阅读 · 0 评论 -
TCP如何保证可靠性
一、首先要知道不可靠的方面a、差错 使用端到端的校验和可以避免;b、丢包 超时重传+确认机制可以避免;c、失序 TCP的头文件都有一个序号seq可以避免;d、重复 TCP的头文件都有一个序号seq可以避免。二、TCP如何保证可靠性a、数据被分割成TCP最容易发送的数据块;b、TCP将保持他首部和数据的校验和;c、TCP发出一...原创 2019-05-14 11:19:27 · 327 阅读 · 0 评论 -
递归与循环的优缺点
(1)递归的优点 代码简洁,而且容易实现。(2)递归的缺点[a] 递归由于是函数调用自身,而函数调用是由时间和空间的消耗:每次函数调用,都需要在内存栈中分配空间已保存参数、返回地址以及临时变量而且往栈里压入和弹出数据都需要时间----效率上的问题[b] 在前面的分析中提到为每一次函数的调用在内存栈中分配空间,而每个进程中栈的容量是有限得。当递归调用得层级越多时,就会超出栈得容量,从而...原创 2019-05-07 15:21:41 · 1880 阅读 · 0 评论 -
C++2019年最新面试题目大总结,你了解吗?
1、为什么想找C++,谈一谈对于C++的理解?2、指针和引用的区别?3、智能指针的shared_pr写下代码?4、对于深拷贝和浅拷贝的理解?5、谈一谈对于volatile的理解?6、在进程间的通信方式中,请问共享内存的内存区是什么?7、TCP可靠传输,请问超时重传到底需要多久?8、判断常量指针和指针常量,数组传参退化成指针?9、C++的内存分布?10、linux平常用哪些命令?...原创 2019-05-16 15:24:39 · 435 阅读 · 0 评论 -
C++动态链接库中的全局变量面试题
其实主要问题是三个模块:模块 a, 静态库 a模块 b, 二进制 b, 静态引用a, 动态加载c模块 c, 动态链接库c, 静态引用a关键在于静态库a里有一个静态全局变量,没错就是我们的日志模块。原先的这个静态的模块中的静态全局变量是有构造函数的,也就是构造函数干了点事情。我们都知道,程序载入在进入主函数前会依次初始化全部的全局和静态变量。载入动态链接库时也不例外。这时候矛盾就来了,...原创 2019-05-25 19:58:58 · 1081 阅读 · 0 评论 -
请你说一说异步编程的事件循环
参考回答:事件循环就是不停循环等待时间的发生,然后将这个事件的所有处理器,以及他们订阅这个事件的时间顺序依次依次执行。当这个事件的所有处理器都被执行完毕之后,事件循环就会开始继续等待下一个事件的触发,不断往复。当同时并发地处理多个请求时,以上的概念也是正确的,可以这样理解:在单个的线程中,事件处理器是一个一个按顺序执行的。即如果某个事件绑定了两个处理器,那么第二个处理器会在第一个处理器执...原创 2019-06-28 20:04:46 · 564 阅读 · 0 评论