面试常考问题

总结最近几次面试中经常被问到的题目!

线程和进程区别

  • 进程是运行中的程序,线程是进程的内部的一个执行序列
  • 进程是资源分配的单元,线程是执行单元
  • 进程间切换代价大,线程间切换代价小
  • 进程拥有资源多,线程拥有资源少
  • 多个线程共享进程的资源

线程之间通信

  • 全局变量
  • 消息机制:windows程序设计

线程同步方式

  • 临界区
  • 互斥量
  • 信号量
  • 事件

进程之间通信

  • 管道
    • 有名管道:任意进程之间,有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    • 无名进程:父子进程之间,管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系
  • 信号量: 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  • 套接字:套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
  • 共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
  • 消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

进程调度算法

  • FCFS:先来先服务
  • SJF:短作业优先
  • 按时间片论调
  • 优先级: 分前台任务和后台任务,前台任务重视响应时间,后台任务重视周转时间

堆和栈区别

  • 堆:由程序员申请释放,如果没有释放,则有系统自动释放,类似于数据结构中的链表
  • 栈:由程序自身自动释放,在调用参数时,主要用来存储形参和局部非静态变量,以及返回值,类似于数据结构中的堆

socket

TCP

HTTP

链表有无环以及找入点

虚函数和纯虚函数

  • 虚函数可以有函数体,如果子类没有重载虚函数,则调用父类的虚函数
  • 纯虚函数没有函数体,必须在派生类中重载函数

  • 虚函数主要实现多态机制,避免二义性

  • 纯虚函数是抽象类机制,提供接口,派生类提供实现,

最大的区别,有纯虚函数的抽象类不能定义对象,纯虚函数必须被重载,因此在被用来做基类的抽象类中肯定有一个或多个纯虚
函数。 而虚函数可以在继承中被重载,也可以不。

二者都实现了多态性。

class和struct

内存泄露

指针和引用的区别

  • 引用是别名,而指针是地址。
  • 声明时,必须给引用指定值,而指针可以为空。
  • 引用没有const,而指针有。
  • 引用不能为空,而指针可以为空。
  • 指针在运行期间可以改变值,而引用一旦和某个等值线绑定后就不能改变。
  • 程序为指针分配内存空间,而引用没有分配。
zxp wechat
欢迎关注微信公众号!