1.设a是整型变量,不能表达数学关系式11<a<15的C++表达式是
11<a<=14
当编译时会把 a<=14 当做bool值进行判断。
2.左值引用和右值引用的区别?
右值引用:通过移动语义把变量的生命周期延伸到作用范围之外。
语义:RAII通过语义控制对象的生命周期
3.C++函数中值得传递方式有哪几种?
3种:值传递,指针传递和引用传递。
4.虚函数问题
虚函数在父类中起提示作用,提示此函数可能被子类给重写还有它应该被动态绑定。
虚函数必须在运行时根据对象的实际类型进行确立,完成多态的效果。
5.死锁
死锁的概念以及产生条件:死锁是两个或两个以上的进程之间由于竞争现象而导致进程都不能继续执行的现象。产生死锁的三个必要条件是互斥、不抢占和占有并等待,这些条件都具备只是有可能会造成死锁,只有第四个条件循环等待也具备的时候才会必然出现死锁。
6.GET 和 POST 的区别
get主要用来获取数据,而post是提交或修改数据。get有长度限制(2048字节)而post没有。get的参数是显式的,而post是隐式的。
7.TCP和UDP的区别
1、TCP是面向连接的可靠传输,UDP是面向无连接的不可靠传输; 2、TCP适用于对传输数据准确、而对速度没有很高要求的场景,UDP适用于对实时性要求高的场景; 3、TCP是面向字节流的协议,UDP是面向报文的协议; 4、TCP仅仅支持一对一通信,UDP支持一对一、一对多、多对一、多对多等通信方式;
8.tcp三次握手
三次握手:第一次是客户端向服务器端发送请求连接报文,包含自己的字段。 第二次握手是服务器端接受到连接请求后,如果同意便向客户端发送应答,包含自己的字段。 第三次握手客户端接受到应答并向服务器端发送确认报文,此时建立起了长连接
9.多态
分为静多态和动多态,静多态是在编译的时候进行函数重载和运算符重载;动多态是在运行的时候完成,是根据对象的实际类型进行确立自身的类型
10.进程通信方式
套接字,管道,共享内存,消息队列,信号量。
11.栈和堆的区别
管理方式:栈是由编译器进行自动管理;堆是由程序员动态开辟释放的。
空间大小:栈空间有限;堆几乎没有限制。
生长方向:栈是朝内存地址减小的方向生长;堆是向内存地址增大的方向生长。
分配效率:栈由于是编译器自动管理,所以效率高于堆。
12.链表和数组的区别
1、内存不同
数组静态分配内存,链表动态分配内存。
2、连续情况不同
数组在内存中连续,链表不连续。
3、元素位置不同
数组元素在栈区,链表元素在堆区。
4、复杂度不同
数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。
13.C++和C和Java的区别
1指针
Java没有指针的概念、从而有效地防止了在CC+语言忠.容易出现的指钛援作失误(如指钛悬空所漠成的系统鹿溃)。在CC央,指助缓作内存时,经常会出现错误。在Java史没有指针、要有利于Java程序的安全。
2多重继承
C++支持多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。所以Java不支持多重继承,但允许一个类实现多个接口。可见,Java既实现了C++多重继承的功能,又避免了C++的许多缺陷。
3数据类型
Java是完全面向对象的语言,所有方法和数据都必须是类的一部分。除了基本数据类型之外,其余类型的数据都作为对象型数据。例如对象型数据包括字符串和数组。类将数据和方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点的行为。而C++将函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。此外, Java还取消CIC++中的结构和联合,使编译程序更简洁。