百度提前批一面(c++开发):
1.关键字static作用,函数加static和不加static区别
首先回答出加上static为静态变量或静态函数
然后回答在C语言中static的作用,使得变量或者函数的生存周期为整个源程序
接着回答C++类中 static 修饰的变量或函数为整个类共有,即可。
2.const关键字作用,const和宏定义有什么区别,用哪个?(宏定义太多会导致代码膨胀)
首先回答const关键词修饰代表只读,read only,意味着该变量里的数据只能被访问,而不能被修改。
const和宏定义的区别
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
在C++ 中使用const
3.虚函数是如何实现的?
需要答出虚函数表与虚函数指针
C++中虚函数使用虚函数表和虚函数表指针实现,虚函数表是一个类的虚函数的地址表,用于索引类本身以及父类的虚函数的地址,假如子类重写了父类的虚函数,则对应在虚函数表中会把对应的虚函数替换为子类的函数的地址(子类中可以不是虚函数,但是必须同名);虚函数表指针存在于每个对象中(通常出于效率考虑,会放在对象的开始地址处),它指向对象所在类的虚函数表的地址;在多继承环境下,会存在多个虚函数表指针,分别指向对应不同基类的虚函数表。
4.线程和进程的区别,线程如何实现同步和通信,进程如何实现通信?
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
简单的说,一个程序就是一个进程, 线程是进程的一个执行单元
进程线程的区别:
- 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
- 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
简单的说,同一个进程的线程共享进程的地址空间, 共享堆空间, 栈空间独立,进程资源完全是独立的。一个线程崩溃,其他线程会受到影响,进程是独立的。
【3】线程间如何通信
1、全局变量
2、自定义消息
3、std::promise std::feture
4、IO完成端口
- 1
- 2
- 3
- 4
【4】进程间如何通信
1、管道(匿名管道和有名管道)
2、消息队列
3、共享内存
4、信号量
5、套接字
5.了解哪些线程模型?
6.手写二叉树中序遍历递归和非递归。
递归遍历简单,非递归有难度
7.socket如何进行通信?
借助TCP或UDP协议进行通信
8.poll,select,epoll区别。
三个函数均是IO多路复用函数,委托内核取监听IO事件
1)select==>时间复杂度O(n)
它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。
1)select==>时间复杂度O(n)
它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。
(3)epoll==>时间复杂度O(1)
epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实际上是事件驱动(每个事件关联上fd)的,此时我们对这些流的操作都是有意义的。(复杂度降低到了O(1))
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。
epoll跟select都能提供多路I/O复用的解决方案。在现在的Linux内核里有都能够支持,其中epoll是Linux所特有,而select则应该是POSIX所规定,一般操作系统均有实现
9.TCP四次挥手。
网易提前批(AI高性能)
1.快排代码
熟练写出对称形