C++面试题

C++面试题

1.C/C++ 传递动态内存的深入理解

关键:在函数的参数传递中,编译器总是要为函数的每个参数制作临时副本,如果参数为p的话,那么编译器会产生p的副本_p,使_p=p;

如果函数体内的程序修改了_p的内容

修改: 原形:void MyFunc(char *pReturn, size_t size)

[1]void MyFunc(char* &pReturn,size_t size)#很方便地利用引用这术

[2]void MyFunc(char ** pReturn, size_t size)#将双重指针的内容传递到了函数中。

函数过程利用改变指针的内容,这样pMyReturn很明显指向了开辟的内存

[3]char * MyFunc(void)#在内部创建,创建成功 return p

2.class和struct的区别

2.1struct默认是public的,class默认是private的

2.2 struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的

实现体

3.C++虚函数和纯虚函数的区别多肽

3.1.虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类。

3.2.虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调用,而纯虚函数必须在子类中实现该函数才可以使用,因为纯虚函数在基类有声明而没有定义。

3.3.虚函数和纯虚函数都可以在子类中被重载,以多态的形式被调用。

3.4.虚函数和纯虚函数‘通常存在于抽象基类之中,被继承的子类重载,目的是提供一个统一的接口。

3.5.虚函数的定义形式:virtual{};纯虚函数的定义形式:virtual { } = 0;在虚函数和纯虚函数的定义中不能static标识符,原因很简单,被static修饰的函数在编译时 要求前期绑定,然而虚函数却是动态绑定,而且被两者修饰的函数生命周期也不一样。

3.6 多肽:在程序运行时的多态性通过继承和虚函数来体现;在程序编译时多

态性体现在函数和运算符的重载上

4.一个班级中找出成绩前10名的学生

4.1 select b.* from (select a.*,dense_rank() over (order by source desc) ord from

student a) b where b.ord<11;

4.2 select * from student c where source in(

select source from (select a.source from student a group by a.source order by

a.sourcedesc) where rownum<11);

5.Linux IO模式及 select、poll、epoll

IO模式:阻塞 I/O(blocking IO)、非阻塞 I/O(nonblocking IO)、I/O 多路复用( IO multiplexing)、信号驱动 I/O( signal driven IO)、异步 I/O(asynchronous IO) 阻塞 I/O(blocking IO): 程序一直等待,等待数据全部拷贝到kernel后,从kernel中拷贝到用户内存,然后解除堵塞状态

非阻塞 I/O(nonblocking IO): 进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。

然后它可以再次发送read操作直到ernel中的数据准备好,然后从kernel中拷贝到用户内存

I/O 多路复用( IO multiplexing): 通过一种机制一个进程能同时等待多个文件描述符,而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态,select()函数就可以返回

6.多线程和多进程的区别

进程是资源分配的最小单位,线程是CPU调度的最小单位

多进程进程间不会互相影响多线程一个线程挂掉将导致整个进程挂掉

多线程需要频繁创建销毁的优先用线程需要进行大量计算的优先使用线程切换频繁

7.C++特性:封装、多肽、继承

8.new delete 和mallocfree区别

delete 会调用对象的析构函数new会调用对象的构造函数是运算符

malloc只会申请空间free只会释放空间是标准库函数

对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求

9.delete 和delete[] 区别

delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数

通常delete与new配套,delete[]与new[]配套

10.指针与引用的区别

1.引用是对象的别名,操作引用就是操作这个对象,必须在创建的同时有效得初始化(引用一个有效的对象,不可为NULL),初始化完毕就再也不可改变

11.C++中const作用

const修饰的内容不可改变,被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性

12.TCP与UDP区别总结:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实

时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

免费下载文档:下载地址