面试题目啦

面试题目

1、进程和线程的区别
答:进程是CPU资源分配的最小单位,线程是CPU调度的最小单位
进程:
一个进程就是CPU执行的单个任务的过程,是程序在执行过程当中CPU资源分配的最小单位,并且进程都有自己的地址空间,包含了运行态、就绪态、阻塞态、创建态、终止态五个状态。
线程:
线程是CPU调度的最小单位,它可以和属于同一个进程的其他线程共享这个进程的全部资源
两者之间的关系:
一个进程包含多个线程,一个线程只能在一个进程之中。每一个进程最少包含一个线程。
两者之间的区别:
进程是CPU资源分配的最小单位,线程是CPU调度的最小单位。进程之间的切换开销比较大,但是线程之间的切换开销比较小。CPU会把资源分配给进程,但是线程几乎不拥有任何的系统资源。因为线程之间是共享同一个进程的,所以线程之间的通信几乎不需要系统的干扰。

2、进程和线程的优点?
答:进程的优点:
1)顺序程序的特点:具有封闭性和可再现性;
2)程序的并发执行和资源共享。多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。
进程的缺点:
1、操作系统调度切换多个线程要比切换调度进程在速度上快的多。而且进程间内存无法共享,通讯也比较麻烦。
2、线程之间由于共享进程内存空间,所以交换数据非常方便;在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
线程的优点:
1)它是一种非常"节俭"的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。当然,在具体的系统上,这个数据可能会有较大的区别;
2)线程间方便的通信机制,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便;
3)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上;
4)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
线程的缺点:
1)调度时, 要保存线程状态,频繁调度, 需要占用大量的机时;
2)程序设计上容易出错(线程同步问题)。

3、进程中的线程挂掉了, 进程会挂掉吗, 其他线程会挂掉吗?
答: 可能 会
4、进程间的通信?
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信机制。
进程间通信的几种方式
1.管道(pipe)
管道又名匿名管道,这是一种最基本的IPC机制,由pipe函数创建:
#include <unistd.h>
int pipe(int pipefd[2]);
返回值:成功返回0,失败返回-1;
调用pipe函数时在内核中开辟一块缓冲区用于通信,它有一个读端,一个写端:pipefd[0]指向管道的读端,pipefd[1]指向管道的写端。所以管道在用户程序看起来就像一个打开的文件,通过read(pipefd[0])或者write(pipefd[1])向这个文件读写数据,其实是在读写内核缓冲区。
等。

5、共享内存是什么?, 两个进程如何共享一块内存, 也就是Linux 的虚拟内存是怎么实现的
共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。

6、对于上一题的提示: 逻辑地址, 物理地址, 段基址, 虚拟地址之间的关系?
物理地址:
物理地址就是内存中每个内存单元的编号,这个编号是顺序排好的,物理地址的大小决定了内存中有多少个内存单元,物理地址的大小由地址总线的位宽决定!
虚拟地址:
虚拟地址是CPU保护模式下的一个概念,保护模式是80286系列和之后的x86兼容CPU操作模式,在CPU引导完操作系统内核后,操作系统内核会进入一种CPU保护模式,也叫虚拟内存管理,在这之后的程序在运行时都处于虚拟内存当中,虚拟内存里的所有地址都是不直接的,所以你有时候可以看到一个虚拟地址对应不同的物理地址,比如A进程里的call函数入口虚拟地址是0x001,而B也是,但是它俩对应的物理地址却是不同的,操作系统采用这种内存管理方法
什么叫段地址,偏移地址?之间有什么关系?
把内存地址分为若干段,每段有一些存储单元构成。用段地址指出是哪一段,偏移地址标明是段中的哪一个单元。
逻辑地址
一个逻辑地址,是由一个段标识符加上一个指定段内相对地址的偏移量,表示为 [段标识符:段内偏移量]

7、tcp/udp之间的区别, 使用的环境? 文件传输属于什么?

TCP的可靠性传输, 说一说滑动窗口和超时重传机制, 结合起来一起说?

如果TCP这边有1,2,3,4,5五个包, 他是会一起发还是一个一个发
接收方收到5个包后, 会回应什么? 如果3丢了, 服务端会回应什么?
tcp 三次握手能不能用两次握手实现?
socket 四元组是什么?
tcp 建立连接的标志是什么?
多态是什么? 怎么使用多态?
通常是基类的指针指向派生类对象或者基类的指针指向基类的对象可以实现多态, 那么值的类型可以实现多态吗?
大端和小端, 怎么用代码判断?
c++ 中static 关键字的作用? 分别修饰函数和变量有什么作用?
算法题: 找到单链表的倒数第K 个节点?
算法题: 手写哈希表, 你会怎么实现? 如果开链法解决哈希冲突, 头插和尾插有什么区别, 对哈希的查找有影响吗?
算法题: 快排的递归思路?

7.14乐鑫二面
1、C++类继承中的构造函数和析构函数 调用顺序
建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推;析构对象时,其顺序正好与构造相反。
2、写一个返回值为int ,参数是int的,函数指针名称为test的函数指针声明
int (* test)(int);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值