测试开发岗实习面试准备(佛脚版)
Mj不是北极熊
前言:最近在准备测试开发的实习面试,于是搜罗了一些资料整理成笔记,临阵磨枪;参考的文章资料我已经列于文中,如有任何错误不妥之处,欢迎大家批评指正。也非常希望各位大佬能够一起交流分享求职经验。最后,希望大家都能找到自己心仪的实习!
1. 测试岗位的工作理解(测试思维)
1. 对于软件测试的理解
- 测试的核心目的:预防缺陷,有效率的保证产品质量
- 测试是什么:已知测试需求(测试项)+ 探索式测试(基于头脑风暴的业务场景+测试数据)
- 测试人员必须要深入理解业务。测试工程师不仅是发现缺陷,更要从整个流程项目流程去考虑,尽量帮助项目开发和测试融为一体,把质量体系全部搭建出来
- 测试的思维:全面,联系,分清主次,优先级
- 测试的核心:彻底的理解需求和测试策略
理解需求: 开发是从实现的角度考虑,而测试是从用户的角度考虑
测试策略: 从预防角度
2. 预防缺陷应该在哪个阶段介入?
- 尽量将测试左移,在需求分析阶段就应该介入,把设计上的缺陷,或产品经理,开发,测试间理解不一致的问题都找出来,并达成一致,预防由于理解不一致导致的不必要的缺陷的发生
- 推动开发完成单元测试,从而保证提交给我们的测试版本是高质量的,这样会节省大量项目时间,整个研发团队共同为质量负责任
3. 测试的基本流程是什么?
1. 确认需求: 首先会召开需求分析会议,参加人员有产品(或者叫业务)、开发和测试,主要是探讨需求需要的一些功能点,出一份需求文档
2. 开发设计文档: 就根据主管写出来的计划、分配到的任务编写测试用例
3. 评审: 写完之后会进行用例评审,需要修改的就修改整理形成最终的用例版本
4. 接到测试版本并执行:开发人员将软件开发完成并部署到SIT测试环境后,我们会依据测试用例来执行测试
5. 提交 Bug + 开发人员修改 + 回归测试 : 测试过程中,对于发现的BUG提交到缺陷管理工具禅道,并跟踪bug状态直至关闭,首轮测试完后还需要第二轮回归测试或者第三轮回归测试
6. 测试完成后编写测试报告
4. 如何设计测试?
1. 测试点是怎么写的?
测试点是根据产品需求打造出来的草稿;在设计测试点的时候应该考虑正例和反例以及等价类和边界值,加上优先级(以便回归测试时候的策略选择)
2. 测试点转化为测试用例?
测试用例设计工作应该有个准出标准 ; 如果这个测试点,符合真实用户的行为的时候,它就应该被写成测试用例 ;但是这个测试点单独使用,无法构成真实用户的行为,那么应该与其他测试点融合或加入现有的用户场景测试用例
5. 测试报告内容
执行人、执行用户场景、执行时主要用到的测试数据、执行的证据,执行结论,有没有没有发现的 bug 或者可以优化的建议。
6. 关于上线的准出标准
所有需求被覆盖(测试用例),测试完毕;测试执行率100%;测试通过率>95% 且 这剩下的5%不可以有1级缺陷,只可以有3个2级缺陷,3级缺陷要在30个以下。
7. app和web端测试的区别
1. 从系统架构来看的话:web测试只要更新了服务器端,客户端就会同步更新;而如果是app端下修改了服务端,意味着客户端用户所有使用的核心版本都需要进行回归测试一遍。
2. 客户端性能方面:Web端可能只会关注响应时间;App则还要关心流量、电量、cpu、等;
3. 兼容方面:Web是基于浏览器的,所以更倾向于浏览器(IE, Chrome, firefox)和电脑硬件,电脑系统方向的兼容;App测试则必须依赖于手机或者pad,不仅要看分辨率、频目尺寸、重要看设备系统。
8. 黑盒白盒测试
- 黑盒测试:
黑盒测试会把被测的软件看作是一个黑盒子,测试时不去关心盒子里面的代码结构和逻辑是什么样子的,只需要关心盒子的输入数据和输出结果。
黑盒测试一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否能得以实现。它把被测试的程序当作一个黑盒子,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明书来确定测试用例和推断测试结果的正确性。
- 白盒测试:
白盒测试也把被测的软件看作是一个盒子,但是需要考虑盒子的内部结构和逻辑。所以根据待测产品的内部实现细节来去设计测试用例的方法称为白盒测试。
白盒测试需要根据软件内部的逻辑结构分析来进行测试,是基于代码的测试。把被测程序当作盒子的话,它需要考虑盒子的内部结构和逻辑。测试人员通过阅读程序代码或者通过编写测试代码的方式来判断软件的质量。
9. bug处理
1.对于复现率不高的bug如何处理?
首先只要是出现的bug都必须记录到缺陷管理平台。bug出现的信息尽量描述清楚:包括操作系统、浏览器版本,app写明机型型号;附带问题截图及日志截图,且标题注明偶现。
提交后对于bug的跟踪。每一轮回归测试,都会尽可能去重现这个bug;多轮回归测试中仍然不能重现,会依据这个bug的严重程度决定是否继续跟踪。bug严重程度高,在上线前需要开发一起协助复现,如果还是复现不了,记录到bug平台后续版本再跟进。
2.印象最深的一个bug?
有个网页重定向的bug是源于前期需求分析设计的时候没有分析好,所以前端页面原本设计的跳转变成了新开页面。本身并不是程序出错,而是与产品设计不符。这让我更感受到测试环节多部门沟通、测试左移的重要性。
3.你发现一个bug,开发认为不是bug,怎么办?
- 仔细检查测试环境和测试过程:首先,测试人员应该仔细检查测试环境和测试过程,以确保发现的问题确实是一个bug,而不是由于测试环境或测试过程中的其他问题导致的误报。
- 提供详细的bug报告:测试人员应该提供详细的bug报告,包括问题的描述、截图、复现步骤等信息,以便开发人员更好地理解问题。
- 与开发人员进行沟通:测试人员应该与开发人员进行沟通,解释问题的严重性和影响,并与开发人员讨论解决方案。
10. 回归测试和冒烟测试
- 冒烟测试是对系统进行最基本功能的测试,保证基本的功能和流程能走通 ;假如冒烟测试通, 则会进入到集成测试和系统测试环节,反之,会打回给开发人员重新开发并自测。
- 回归测试是修复bug后在新代码环境下再次测试,来确保没有新的缺陷。其主要目的是确保主流程走得通,以及之前在测试环境下修复过的bug在复杂的生产环境下没有“复发”。
3. 接口测试方向(网络7层协议)
1. 概括:
应用层, 表示层,会话层 定义应用程序的功能
传输层,网络层,数据链路层,物理层 主要面向网络的端到端,点到点的数据流
2. 分工:
- 应用层: HTTP, FTP, SMTP 对应程序的通信服务
- 表示层: 主要定义数据格式以及加密,包括多个消息的控制和管理
- 会话层: 定义如何开始结束、控制对话;包括多个双向信息的控制管理
- 传输层: 差错恢复协议以及无差错恢复协议,以及对于顺序不对的数据包重新排序,比如TCP和UDP
- 网络层: 定义了标识所有节点的逻辑地址,路由的实现,以及一个包分成更小包的分段方法,比如IP
- 数据链路层: 定义了单个链路上如何传输数据,如ATM,MAC
- 物理层: 定义了传输介质的特性
3. 优点:
- 使人们容易探讨和理解协议的许多细节。
- 在各层间标准化接口,允许不同的产品只提供各层功能的一部分。
- 创建更好集成的环境。
- 减少复杂性,允许更容易编程改变或快速评估。
- 用各层的headers和trailers排错。
- 较低的层为较高的层提供服务。
- 把复杂的网络划分成为更容易管理的层。
4. TCP
1. 特点
- 面向连接的、可靠的字节流服务
- 仅两方通信,广播和多播不能用于TCP
- TCP使用校验和,确认和重传机制来保证可靠传输
- TCP使用滑动窗口来实现流量控制,通过动态改变窗口大小来进行拥塞控制
- 使用累积确认保证数据的顺序不变和非重复
3. 与UDP比较
- UDP不需要建立连接,直接传输数据(不可靠)
- UDP支持一对一,一对多,多对多的交互传输
- UDP是尽最大努力交付,而不是可靠性交付
- TCP有拥塞控制和流量控制机制,而UDP没有,网络拥堵不会影响发送速率
- TCP是流式传输,UDP是一个包一个包传输,没有边界
- TCP 和 UDP 可以使用一个端口*
4. TCP的三次握手
三次握手:建立TCP连接,需要服务器和客户端发送三个包
- 客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。
- 服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入
SYN_RCVD状态。 - 客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED状态,TCP 握手结束。
第三次握手是可以携带数据的,前两次是不可以携带数据的。*
5. 为什么TCP不是两次握手?
防止已失效的连接请求又传送到服务器端,因而产生错误,两次握手不能保证是否建立了通信连接,因为客户端并不能保证一定能接收到服务器端发来的信息;
经过三次握手之后,客户端A 和服务器端B 都可以确认之前他们的所发送的消息,各自都能收到且报文也都成功发送给对方了,所以四次是多余的。
5. IP
1. 使用浏览器访问域名的全过程:
- 浏览器向DNS服务器发出解析域名的请求
- DNS服务器将域名解析为对应的IP地址,并返回给浏览器
- 浏览器根据IP地址与目标服务器建立TCP连接
- 浏览器发出HTTP请求报文
- 服务器回复HTTP请求报文
- 浏览器解析响应报文,并显示在Web页面上
- 收到报文结束,释放TCP连接
使用的协议:*
- 应用层:HTTP, DNS
- 传输层:TCP/ UDP
- 网络层:IP(IP数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将目的主机的IP地址映射成MAC地址)
2. IP和MAC区别(网络层和链路层):
MAC只负责某一个区间之间的通信, 而IP负责把数据包发送给最终的地址
3. IPV4: 32位点分十进制
6. HTTP
1. 基本信息
HTTP是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 HTTP是一个无状态的面向连接的协议
2. 常见状态码:
2: 成功 3: 重定向 4: 客户端错误 5: 服务端错误
3. 基本请求格式
HTTP协议传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,消息体是可选的,而消息头是必须的。(消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干)
HTTP 请求由三部分组成:请求行、请求头和请求正文。
1. 请求行:请求方法URI协议版本
请求的第一行是“方法 URL 协议/版本”,并以 回车换行作为结尾。请求行以空格分隔。格式如下:
POST /index.php HTTP/1.1
以上代码中“POST”代表请求方法,“/index.php”表示URI,“HTTP/1.1代表协议和协议的版本。根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。
2. GET和POST的区别
-
在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放在HTTP包的body中。
-
GET方式提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST则没有此限制。
-
安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。
-
服务器取值方式不一样。GET方式取值,如php可以使用
$_GET来取得变量的值,而POST方式通过$_POST来获取变量的值。
3. 请求头
每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。
4. 基本响应格式
状态行*
状态行由协议版本、数字形式的状态代码,及相应的状态描述组成,如:HTTP/1.1 200 OK (CRLF)
响应头
7. 广播风暴
广播风暴(broadcast storm)简单的讲是指当广播数据充斥网络无法处理,并占用大量网络带宽,导致正常业务不能运行,甚至彻底瘫痪,这就发生了“广播风暴”。一个数据帧或包被传输到本地网段 (由广播域定义)上的每个节点就是广播;由于网络拓扑的设计和连接问题,或其他原因导致广播在网段内大量复制,传播数据帧,导致网络性能下降,甚至网络瘫痪,这就是广播风暴。
8.接口测试的关注点应该在哪里
接口测试是测试系统组件间接口的一种测试。 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。 测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
4. 编程与算法
1. Python的深拷贝与浅拷贝
- 直接赋值: 其实就是对象的引用(别名)。
- 浅拷贝(copy): 拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
- 示例
2. Python多线程
3. 闭包
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
- 代码示例
- 特点
这段代码有两个特点:
1. 函数b嵌套在函数a内部;
2. 函数a返回函数b。
这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,这是因为函数a外的变量c引用了函数a内的函数b。也就是说,当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。 - 作用
简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制不会
收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。 在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后console.log出i的值。
那么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被回收。
4. 僵尸进程
- 概念解释
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。
我们都知道进程的工作原理。我们启动一个程序,开始我们的任务,然后等任务结束了,我们就停止这个进程。 进程停止后, 该进程就会从进程表中移除。
你可以通过 System-Monitor 查看当前进程。
In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie. 在UNIX系统中,一个进程结束了,但是它的父进程没有等待(调用wait / waitpid)它, 那么它将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管他,成为他的父进程.
5. 内存泄漏
- 概念解释
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 - 一个例子(来自维基百科)
以下的例子無需任何程式設計的知識,但能表明如何導致記憶體漏失及其造成的影響。請注意以下的例子是虛構的!
在此例中的應用程式是一個簡單軟件的一小部分,用來控制升降機的運作。此部分軟件當乘客在升降機內按下一樓層的按鈕時運行。
當按下按鈕時:
- 要求使用記憶體,用作記住目的樓層
- 把目的樓層的數字儲存到記憶體中
- 升降機是否已到達目的樓層?
- 如是,沒有任何事需要做:程式完成
- 否則:
- 等待直至升降機停止
- 到達指定樓層
- 釋放剛才用作記住目的樓層的記憶體
此程式有一處會造成記憶體漏失:如果在升降機所在樓層按下該層的按鈕(即上述程式的第4步),程式將觸發判斷條件而結束執行,但記憶體仍一直被佔用而沒有被釋放。這種情況發生得越多,漏失的記憶體也越多。
這個小錯誤不會造成即時影響。因為人不會經常在升降機所在樓層按下同一層的按鈕。而且在通常情況下,升降機應有足夠的記憶體以應付上百次、上千次類似的情況。不過,升降機最後仍有可能消耗完所有記憶體。這可能需要數個月或是數年,所以在簡單的測試下這個問題不會被發現。
而這個例子導致的後果會是不那麼令人愉快。至少,升降機不會再理會前往其他樓層的要求。更嚴重的是,如果程式需要記憶體去開啟升降機門,那可能有人被困升降機內,因為升降機沒有足夠的記憶體去開啟升降機門。
記憶體漏失只會在程式運行的時間內持續。例如:關閉升降機的電源時,程式終止運行。當電源再度開啟,程式會再次運行而記憶體會重設,而這種緩慢的漏失則會從頭開始再次發生。
6. 排序
1. 冒泡排序与插入排序
- 冒泡排序:这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端, 冒泡排序时间复杂度:O(n^2)
- 代码示例
- 插入排序:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入, 插入排序时间复杂度:O(n^2)
- 代码示例
2. 归并排序、快速排序
-
归并排序:归并排序的核心思想是分治;又分为自上而下的递归以及自下而上的迭代(分割+集成),归并排序的时间复杂度是O(nlogn)
-
代码示例
-
快速排序:快速排序也采用了分治的思想,策略就是:把原始的数组筛选成较小和较大的两个子数组,然后递归地排序两个子数组。快速排序的空间复杂度是O(logn),时间复杂度是O(nlogn)
-
挑选基准值:从数列中挑出一个元素,称为"基准"(pivot);
-
分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成;
-
递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元素的子序列排序。
-
代码示例:
5. 数据库
哥们儿没学过,考到认栽,以后学了再补😅
6. 自动化技术方面
1. 用的什么框架?
我用的是Cypress。
Cypress是一个以开发人员为中心的测试自动化框架,它使测试驱动开发(TDD)成为开发人员的现实。它的设计原则是能够打包和捆绑所有东西,使整个端到端测试变得简单。
Cypress的架构与Selenium不同。Selenium WebDriver远程运行在浏览器外部,而Cypress运行在浏览器内部。这种方法有助于理解浏览器内部和外部发生的一切,从而提供更一致的结果。
Cypress可以用来编写所有类型的测试:端到端的测试、集成测试、单元测试。只要有一个浏览器来给它运行,它就可以来测试web里任何东西。
2. 哪个测试阶段使用自动化?
在软件测试领域中,自动化测试通常在以下阶段使用:
- 单元测试阶段:自动化单元测试旨在验证代码的正确性,并尽早发现和修复代码缺陷。开发人员通常使用单元测试框架(如JUnit、NUnit、PyUnit等)编写自动化测试用例来测试代码的单个模块或方法。
- 集成测试阶段:自动化集成测试旨在验证不同模块之间的集成是否正确。自动化集成测试框架(如TestNG、Cucumber、Behave等)可用于编写自动化集成测试用例。
- 系统测试阶段:自动化系统测试旨在验证整个系统的功能是否符合规格说明书和用户需求。自动化测试工具(如Selenium、Appium、Robot Framework等)可用于执行自动化系统测试用例。
- 接受测试阶段:自动化接受测试旨在验证软件是否符合用户需求并已准备好发布。自动化测试工具可用于执行自动化接受测试用例并生成测试报告。
需要注意的是,虽然自动化测试可以在上述测试阶段中使用,但它并不能完全替代手动测试。
3. 定位元素习惯用什么方式?
- CSS选择器:CSS选择器可以根据元素的标签名、类名、ID等属性来定位元素。它是一种简单而有效的方式,可以快速定位元素。
- XPath:XPath是一种查询XML文档的语言,也可以用来定位HTML元素。XPath语法相对于CSS选择器更加强大,可以使用更多的属性来定位元素。
- Link Text和Partial Link Text:这两种方式通常用于定位超链接元素,可以使用driver.findElement(By.linkText())和driver.findElement(By.partialLinkText())方法来获取元素。
4. testNG的作用?
TestNG 是一个开源的自动化测试框架,其灵感来自JUnit 和NUnit,但它引入了一些新功能,使其功能更强大,更易于使用。 TestNG 的设计目标是能够被用于进行各种类型测试:单元测试、功能测试,端到端测试、集成测试等等。
7. linux操作系统
-
路径
绝对路径(路径必须完整): C:/Users/a1394/Desktop/OneDrive
当前目录: ./ 上层目录: ../
主目录: ~/
切换目录:cd -
进程
查看当前进程:ps
执行退出:exit
查看当前路径:pwd -
Ls
ls 执行的功能:列出指定目录中的目录,以及文件
参数: a 所有文件 l 详细信息,包括大小字节数,可读可写可执行的权限等 -
链接:
软链接:ln -s slink source (快捷方式)
硬链接:ln link source -
创建:
创建目录:mkdir
创建文件:典型的如 touch,vi 也可以创建文件,其实只要向一个不存在的文件输出,都会创建文件
复制文件:cp 7. 文件权限修改用什么命令?格式是怎么样的?
文件权限修改:chmod 将当前的目录栈打印出来:dirs -
查看:
vi 文件名 #编辑方式查看,可修改
cat 文件名 #显示全部文件内容
more 文件名 #分页显示文件内容
less 文件名 #与 more 相似,更好的是可以往前翻页
tail 文件名 #仅查看尾部,还可以指定行数
head 文件名 #仅查看头部,还可以指定行数 cat file_name.txt | more #一页一页地查看一个大文件的内容 -
输出:
向屏幕输出带空格的字符串:echo hello world -
终端与黑洞文件
终端 /dev/ttv 黑洞文件 /dev/null -
移动、复制和删除
移动 mv 复制 cp 连同文件夹一起复制 cp -r 删除 rm 连同目录下文件一起删除 rm -r 删除空文件夹 rmdir -
通配符
“?”可代替单个字符 “*”可代替任意多个字符 “[]”可代替方括号中的任何单个字符 -
统计
wc 命令 - c 统计字节数 - l 统计行数 - w 统计字数 -
文档搜索
grep [stringSTRING] filename grep [^string] filename 正则表达式搜索文本 -
进程状态:
D 不可中断 Uninterruptible(usually IO)
R 正在运行,或在队列中的进程
S 处于休眠状态
T 停止或被追踪
Z 僵尸进程
W 进入内存交换(从内核 2.6 开始无效)
X 死掉的进程 -
进程信息
ps -ef (system v 输出) 显示进程
ps -aux bsd 格式输出 查看指定进程的信息
job -l 查看后台任务
fg 把后台任务调到前台执行
bg 把停下的后台任务在后台执行起来
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>] 终止进程
disown -r 可以将所有正在运行的进程移除 -
搜索文件
find<指定目录><制定条件><指定动作>
whereis 加参数与文件名
locate 只加文件名
find 直接搜索磁盘(较慢)
find / - name ‘string.’ -
查看主机或者终端信息
who am I 查找自己所在的终端信息
who查看当前谁在使用该主机 -
查看磁盘
df -hl 查看磁盘
repquota 显示磁盘配额 -
网络
netstat 网络是否连通
ifconfig 查看ip地址以及接口信息 -
环境变量
env 查看所有
home:env $HOME 查看某个 -
du和df区别:
- du 显示目录或文件的大小,df 显示每个<文件>所在的文件系统的信息,默认是显示所有文件系统。
- du 命令是用户级的程序,它不考虑 Meta Data,而 df 命令则查看文件系统的磁盘分配图并考虑 Meta Data。
- df 命令获得真正的文件系统数据,而 du 命令只查看文件系统的部分情况。 -
绑定一个宏或者按键
- 可以使用bind命令,bind可以很方便地在shell中实现宏或按键的绑定。
- 在进行按键绑定的时候,我们需要先获取到绑定按键对应的字符序列。(比如获取F12的字符序列获取方法如下:先按下Ctrl+V,然后按下F12 .我们就可以得到F12的字符序列) 再用bind进行绑定。 -
查看一个linux命令的概要与用法
whatis :显示出这个命令的用法简要
compgen -c:可以打印出所有支持的命令列表 -
数据字典
数据字典是属于’SYS’用户的,用户‘SYS’ 和 ’SYSEM’是由系统默认自动创建的 -
数学运算
let可以用于整数型的数学运算
8. 软件测试工具
9. 参考资料
面经参考:
www.nowcoder.com/discuss/424…
www.cnblogs.com/51QA/p/1523…
cloud.tencent.com/developer/a…
cloud.tencent.com/developer/a…
zhuanlan.zhihu.com/p/405985082
深拷贝与浅拷贝:
www.51cto.com/article/714…
性能测试面试题总结
zhuanlan.zhihu.com/p/475937339
Python多线程:
blog.csdn.net/weixin_4451…
广播风暴:
baike.baidu.com/item/广播风暴/3…
图解网络:
xiaolincoding.com/network/#%E…
Linux经典面试题:
zhuanlan.zhihu.com/p/74935718
软件测试理解:
blog.csdn.net/weixin_4617…
排序面试:
juejin.cn/post/684490…
冒泡排序,插入排序:
www.runoob.com/python3/pyt…
www.runoob.com/python3/pyt…
归并排序,快速排序:
www.runoob.com/python3/pyt…
www.runoob.com/python3/pyt…
面试算法:
www.zhihu.com/question/24…
Python深拷贝与浅拷贝:
www.runoob.com/w3cnote/pyt…