测开-面试题-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 反问:您对我的学习或者面试有什么建议吗?
问我写完了有没有做测试 项目部署在哪了
优惠券秒杀怎么确定解决了超卖问题
问我redis和mq部署在哪
压测的时候除了qps还有没有关注其他指标
问redis用的是单体部署的还是集群部署的
测开-面试题-OS、Linux、算法、其他的更多相关文章
- 测开面试 | Python常问算法
1.排序 从小到大排序:sorted(list) 从大到小排序:sorted(list, reverse=True) sort() 方法,改变原有数组的顺序 sort(reverse=True) #! ...
- 测开需要熟悉的Linux基本知识
安装软件-编辑 yum -y install 安装软件-上传下载 yum -y install lrzsz 查看当前目录 ls 查看所有 ls -a 创建一个文件夹 mkdir Foldername ...
- Python测开面试题之装饰器
Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法. Python ...
- [转]linux C/C++服务器后台开发面试题总结
linux C/C++服务器后台开发面试题总结 https://www.cnblogs.com/nancymake/p/6516933.html 一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别 ...
- php开发面试题---Linux常用命令大全
php开发面试题---Linux常用命令大全 一.总结 一句话总结: ls 查看目录中的文件 cd .. 返回上一级目录 cat 查看文件内容 touch 新建文件或修改时间 1.linux 系统信息 ...
- 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题
##2017.10.30收集 面试技巧 5.1 面试形式 1) 一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2) 面试官喜欢什么样的人 ü 技术好. ...
- 各大公司java后端开发面试题
各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...
- php开发面试题---Redis和Memcache区别,优缺点对比
php开发面试题---Redis和Memcache区别,优缺点对比 一.总结 一句话总结: Redis相当于Memcache的扩展,增加比如持久化.多种数据结构.集群分布式功能 反思的回顾非常有用,因 ...
- 前端开发面试题总结之——JAVASCRIPT(一)
___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...
- 前端开发面试题总结之——CSS3
____________________________________________________________________________________________ 相关知识点 布 ...
随机推荐
- 第一百一十七篇: JavaScript 工厂模式和原型模式
好家伙,本篇为<JS高级程序设计>第八章"对象.类与面向对象编程"学习笔记 1.工厂模式 工厂模式是另外一种关注对象创建概念的创建模式. 它的领域中同其它模式的不同 ...
- MYSQL的回忆录(适合有基础的小伙伴看,没基础的看着估计够呛)
SQL分类 MYSQL的数据类型 Text 类型 数据类型 描述 CHAR(size) 保存固定长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的长度.最多 255 个字符. VARC ...
- [机器学习] Yellowbrick使用笔记3-特征分析可视化
特征分析可视化工具设计用于在数据空间中可视化实例,以便检测可能影响下游拟合的特征或目标.因为ML操作高维数据集(通常至少35个),可视化工具将重点放在聚合.优化和其他技术上,以提供对数据的概述.这是Y ...
- 使用Prometheus监控docker compose方式部署的ES
需求 收集 ES 的指标, 并进行展示和告警; 现状 ES 通过 docker compose 安装 所在环境的 K8S 集群有 Prometheus 和 AlertManager 及 Grafana ...
- CVE-2020-13933
漏洞名称 Apache Shiro 身份验证绕过漏洞复现CVE-2020-13933 利用条件 Apache Shiro < 1.6.0 漏洞原理 Apache Shiro是一个强大且易用的Ja ...
- 在 K8S Volume 中使用 subPath
使用 subPath 有时,在单个 Pod 中共享卷以供多方使用是很有用的. volumeMounts.subPath 属性可用于指定所引用的卷内的子路径,而不是其根路径. 下面是一个使用同一共享卷的 ...
- Java安全之JDBC Attacks学习记录
Java安全之JDBC Attacks 写在前面 很早就看到了Make JDBC Attacks Brilliant Again议题,一直想分析学习下,但是太懒. MySQL 原理概述 "扩 ...
- 图文并茂解决Client does not support authentication protocol requested by server; consider upgrading MySQL
今天服务器部署node.js+mysql,调用接口报错ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protoc ...
- 使用字节流丢读取中文的问题-Reader类
使用字节流丢读取中文的问题 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为 ...
- Java 进阶P-6.4+P-6.5
狐狸和兔子 狐狸和兔子都有年龄 当年龄到了一定的上限就会自然死亡 狐狸可以随即决定在周围的兔子中吃一个 狐狸和兔子可以随即决定生一个小的,放在旁边的空的格子里 如果不吃也不生,狐狸和兔子可以随机决定走 ...