测开-面试题-OS、Linux、算法、其他

1 OS

1.1 进程、线程、协程区别?

 答:

1.进程是资源分配的单位;
2.线程是CPU调度的单位;
3.协程是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)


线程与进程的区别:
1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3) 线程是处理器调度的基本单位,但进程不是
4) 二者均可并发执行
5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制

协程与线程的区别:

1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。
2) 线程进程都是同步机制,而协程则是异步。
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。
6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

 

 

1.1.1 多进程和多线程的区别?

答:

一.两者区别
多进程和多线程的主要区别是:线程是进程的子集(部分),一个进程可能由多个线程组成。多进程的数据是分开的、共享复杂,需要用IPC;但同步简单。多线程共享进程数据,共享简单;但同步复杂。

(1)多进程

进程是程序在计算机上的一次执行活动,即正在运行中的应用程序,通常称为进程。当你运行一个程序,你就启动了一个进程。每个进程都有自己独立的地址空间(内存空间),每当用户启动一个进程时,操作系统就会为该进程分配一个独立的内存空间,让应用程序在这个独立的内存空间中运行。

在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态,这便是多进程,也称多任务。现代的操作系统几乎都是多任务操作系统,能够同时管理多个进程的运行。

多任务带来的好处是明显的,比如你可以边听音乐边打游戏,与此同时甚至可以将下载的文档打印出来,而这些任务之间丝毫不会相互干扰。

1.数据是分开的,共享复杂,同步简单
2.占用内存多,切换复杂,CPU利用率低
3.创建销毁复杂,切换复杂,速度慢
4.编程简单,调试简单
5.进程间不会相互影响
6.适应于多核、多机分布 ;如果一台机器不够,扩展到多台机器比较简单

(2)多线程

线程是一个轻量级的子进程,是最小的处理单元;是一个单独的执行路径。可以说:线程是进程的子集(部分),一个进程可能由多个线程组成。

线程是独立的。如果在一个线程中发生异常,则不会影响其他线程。它使用共享内存区域。

多线程是一种执行模型,它允许多个线程存在于进程的上下文中,以便它们独立执行但共享其进程资源。

1.多线程共享进程数据,共享简单,同步复杂
2.占用内存少,切换简单,CPU利用率高
3.创建销毁简单,切换简单,速度快
4.编程复杂,调试复杂
5.一个线程挂掉将导致整个进程挂掉
6.适应于多核分布

二.使用场景
1)需要频繁创建和销毁的优先用线程。

实例:web 服务器,来一个任务建立一个线程,完了就销毁线程。要是用进程,创建和销毁的代价是很高的。

2)需要进行大量计算的优先使用线程。

所谓大量计算,当然就是要消耗很多 cpu,切换频繁了,这种情况线程是最合适的。实例:图像处理、算法处理

3)强相关的处理用线程,弱相关的处理用进程。

4)可能扩展到多机分布的用进程,多核分布的用线程。

5)都满足需求的情况下,用你最熟悉、最拿手的方式。

三.通信方式
(1)进程间的通信方式
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

1.管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

2.有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

3.信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也来访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

4.消息队列( messagequeue ) : 消息队列存放在内核中,并由消息队列标识符标识。消息队列克服了信号量传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5.信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6.共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的通信 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。

7.套接字(socket ) : 套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

(2)线程间的通信方式

1.锁机制:包括互斥锁、条件变量、读写锁

a.互斥锁: 提供了以排他方式防止数据结构被并发修改。
b.读写锁: 允许多个线程同时读共享数据,而对写操作是互斥的。
c.条件变量: 可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

2.信号量机制(Semaphore):包括无名线程信号量和命名线程信号量.

3.信号机制(Signal):类似进程间的信号处理
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

 

 

1.2 进程间通信方式?

 

1.3 说一下socket长连接的概念?

 

1.4 同步和异步的区别?

 

1.5 了解IO操作吗?

 

1.6 线程如何切换的?

 

1.7 进程、线程 稳定性?

 

 

 

 

 

2 Linux

2.1如何查看进程 A 是否存活和端口号?

 

2.2 如何查看进程 A 的运行路径?

 

2.3 说几种免密连接的方法?

 

2.4 硬链接和软链接的区别?

 

2.5 互斥锁和自旋锁?

 

2.6 ifconfig能看出什么?

 

2.7 Linux查看资源使用情况和网络带宽?

 

2.8 docker的平台?

 

 

 

 

3 算法与数据结构

3.1 堆、栈区别?

 

3.2 用两种方法实现队列?

 

3.3 二叉树的层次遍历?

 

3.4 最长重复子数组?

 

3.5 二叉树最小深度?

 

3.6 马尔可夫链的用处?

 

3.7 在n个数中找出k个最小的数?

 

3.8 判断单向链表有无环?

 

3.9 二叉树的层序遍历?

 

3.10 删除链表的倒数第 N 个结点?

 

3.11 如何中序遍历,除了你说的递归还有呢?那你说迭代如何中序遍历实现呢?

 

3.12 手写“数组中的元素右移k位”我是新建数组实现的,空间复杂度大。需要进化。

 

3.13 快排的时间复杂度,并且你了解哪些速度最快的排序?

 

3.14 算法题:一个字符串的全排列,并讲一下代码逻辑?

 

3.15 单链表怎么判断有没有环(太简单了直接哈希表)又问我怎么优化啊(快慢指针)撕出来了

 

3.16 子链表翻转

 

3.17

 

 

 

4 其他

4.1 自我介绍?

答:从业时间 、教育背景、工作经验 、项目经验 、擅长技能、你的性格

 

4.2 你还有什么问我的吗?

答:培养机制,涉及的工作业务还有用到的技术栈这三个问题

 

4.3 讲讲你的性格特点,或者其他优点?

 

4.4 对我们公司的了解?

 

4.5 3~5年职业规划?

答:如果有幸入职咱们公司,1年内先做好本职工作、积累业务知识; 2-3年时间希望能完成公司项目的自动化架构,实现自动化测试;目前我已经开始在研究学习Python编程及编写自动化测试脚本; 3-5年的时间,希望能在技术上面上升到测试开发,能自己独立开发测试平台及工具,为公司带来更大价值。

 

4.6 对加班的看法?

答:

加班,主要是两种情况。第一种,工作效率低不得不通过加班来完成工作任务,

像这种加班我会尽可能提高自己的工作效率,不做无意义的加班。另外一种,像发版日、紧急任务需要加班,

这种情况的加班会义不容辞。

 

4.7 反问:您对我的学习或者面试有什么建议吗?

 
4.8  项目
项目经验 (我写了俩项目他问哪个比较熟练,我说第一个(黑马点评))
问我写完了有没有做测试 项目部署在哪了 
优惠券秒杀怎么确定解决了超卖问题 
问我redis和mq部署在哪 
压测的时候除了qps还有没有关注其他指标
问redis用的是单体部署的还是集群部署的
 
4.9 
 
 
 
面经定位:

 

 

posted @ 2023-02-10 12:03  1900_SD  阅读(82)  评论(0编辑  收藏  举报