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 
 
 
 
面经定位:

测开-面试题-OS、Linux、算法、其他的更多相关文章

  1. 测开面试 | Python常问算法

    1.排序 从小到大排序:sorted(list) 从大到小排序:sorted(list, reverse=True) sort() 方法,改变原有数组的顺序 sort(reverse=True) #! ...

  2. 测开需要熟悉的Linux基本知识

    安装软件-编辑 yum -y install 安装软件-上传下载 yum -y install lrzsz 查看当前目录 ls 查看所有 ls -a 创建一个文件夹 mkdir Foldername ...

  3. Python测开面试题之装饰器

    Python的装饰器是面试常被问到的问题之一,在面试Python测试开发时被问到的概率不低于70%,那么装饰器的原理是什么,怎么快速写出一个装饰器呢,接下来我们详细讲解装饰器的实现方法. Python ...

  4. [转]linux C/C++服务器后台开发面试题总结

    linux C/C++服务器后台开发面试题总结  https://www.cnblogs.com/nancymake/p/6516933.html 一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别 ...

  5. php开发面试题---Linux常用命令大全

    php开发面试题---Linux常用命令大全 一.总结 一句话总结: ls 查看目录中的文件 cd .. 返回上一级目录 cat 查看文件内容 touch 新建文件或修改时间 1.linux 系统信息 ...

  6. 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题

    ##2017.10.30收集 面试技巧 5.1 面试形式 1)        一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2)        面试官喜欢什么样的人 ü  技术好. ...

  7. 各大公司java后端开发面试题

    各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...

  8. php开发面试题---Redis和Memcache区别,优缺点对比

    php开发面试题---Redis和Memcache区别,优缺点对比 一.总结 一句话总结: Redis相当于Memcache的扩展,增加比如持久化.多种数据结构.集群分布式功能 反思的回顾非常有用,因 ...

  9. 前端开发面试题总结之——JAVASCRIPT(一)

    ___________________________________________________________________________________ 相关知识点 数据类型.运算.对象 ...

  10. 前端开发面试题总结之——CSS3

    ____________________________________________________________________________________________ 相关知识点 布 ...

随机推荐

  1. 第一百一十七篇: JavaScript 工厂模式和原型模式

    好家伙,本篇为<JS高级程序设计>第八章"对象.类与面向对象编程"学习笔记   1.工厂模式 工厂模式是另外一种关注对象创建概念的创建模式. 它的领域中同其它模式的不同 ...

  2. MYSQL的回忆录(适合有基础的小伙伴看,没基础的看着估计够呛)

    SQL分类 MYSQL的数据类型 Text 类型 数据类型 描述 CHAR(size) 保存固定长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的长度.最多 255 个字符. VARC ...

  3. [机器学习] Yellowbrick使用笔记3-特征分析可视化

    特征分析可视化工具设计用于在数据空间中可视化实例,以便检测可能影响下游拟合的特征或目标.因为ML操作高维数据集(通常至少35个),可视化工具将重点放在聚合.优化和其他技术上,以提供对数据的概述.这是Y ...

  4. 使用Prometheus监控docker compose方式部署的ES

    需求 收集 ES 的指标, 并进行展示和告警; 现状 ES 通过 docker compose 安装 所在环境的 K8S 集群有 Prometheus 和 AlertManager 及 Grafana ...

  5. CVE-2020-13933

    漏洞名称 Apache Shiro 身份验证绕过漏洞复现CVE-2020-13933 利用条件 Apache Shiro < 1.6.0 漏洞原理 Apache Shiro是一个强大且易用的Ja ...

  6. 在 K8S Volume 中使用 subPath

    使用 subPath 有时,在单个 Pod 中共享卷以供多方使用是很有用的. volumeMounts.subPath 属性可用于指定所引用的卷内的子路径,而不是其根路径. 下面是一个使用同一共享卷的 ...

  7. Java安全之JDBC Attacks学习记录

    Java安全之JDBC Attacks 写在前面 很早就看到了Make JDBC Attacks Brilliant Again议题,一直想分析学习下,但是太懒. MySQL 原理概述 "扩 ...

  8. 图文并茂解决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 ...

  9. 使用字节流丢读取中文的问题-Reader类

    使用字节流丢读取中文的问题 当使用字节流读取文本文件时,可能会有一个小问题.就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储.所以Java提供一些字符流类,以字符为 ...

  10. Java 进阶P-6.4+P-6.5

    狐狸和兔子 狐狸和兔子都有年龄 当年龄到了一定的上限就会自然死亡 狐狸可以随即决定在周围的兔子中吃一个 狐狸和兔子可以随即决定生一个小的,放在旁边的空的格子里 如果不吃也不生,狐狸和兔子可以随机决定走 ...