校招面试题演练

百度提前批一面(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.快排代码

熟练写出对称形

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值