一面:
计算机网络:
说一下OSI包括几层?分别是什么?
OSI参考模型分为七层结构,从下到上顺序依次为:
OSI (开放系统互联(Open System Interconnection))
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层
- 表示层
- 应用层
各层的作用
- 物理层功能:
利用传输介质为数据链路层提供物理连接,负责处理数据传输率并监控数据出错率,实现数据流的透明传输。
- 数据链路层:
在物理层提供的服务基础上,数据链路层在数据实体之间建立数据链路连接,传输以帧为单位的数据包,在采用差错控制和流量控制方法,是有差错的物理链路便成无差错的数据链路。
- 网络层:
为分组通过网络选择合适的路径,实现路由选择和分组转发拥塞控制等。
- 传输层:
向用户提供的端到端服务,处理数据报错误,数据包次序,向高层屏蔽了下层数据通讯细节。
- 会话层:
维护两个计算机之间的传输链接,保证点到点传输不中断,以及管理数据交换等。
- 表示层:
用于处理两个通信系统中交换信息的表示方式,主要有数据格式交换,数据加密数据解秘,数据压缩等。
- 应用层:
为应用软件提供服务。
TCP属于OSI哪一层,IP属于哪一层?
TCP是TCP/IP的第三层传输层,对应OSI的第四层传输层;
IP是TCP/IP的第二层互联层,对应OSI的第三层网络层。
HTTP有哪些操作,常用端口是多少?
Get 、post 、put 、head 、options 、delete
HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
HTTPS服务器,默认的端口号为443/tcp 443/udp;
操作系统:
CPU调度算法?
批处理系统中的调度算法:
先来先服务: FCFS:
优点:实现简单
缺点:可能造成周转时间长
2.最短作业优先 SJF(非抢占式)
优点:平均周转时间最短
缺点:不公平,短任务多时,长任务一直得不到执行,产生starvation。
3. 最短剩余时间优先 SRTN :Shortest Remainning Time Next
SJF的抢占式版本
4. 最短相应比优先 HRRN:highest response ratio next
是一个综合考虑的算法
调度时,先计算每个进程的响应比,之后总是选择响应比高的执行。
交互式系统中的调度算法
1.RR-round Robin (时间片轮转):
目标:为改善短任务的平均响应时间
主要思想:
1.周期性切换
2.每个进程分配一段时间片
3.利用时钟中断进行进程切换
物理内存和虚拟内存,虚拟内存如何映射?
物理内存:在应用中,真实存在的,插在主板内存槽上的内存条的容量的大小。从本质上来说,物理内存是代码和数据在其中运行的窗口。
虚拟内存:使程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
死锁?会不会写代码,(不会写代码,大致说了一下死锁的原理)
死锁产生的4个必要条件
1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。
2、占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。
3、不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。
4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。
当以上四个条件均满足,必然会造成死锁,发生死锁的进程无法进行下去,它们所持有的资源也无法释放。这样会导致CPU的吞吐量下降。所以死锁情况是会浪费系统资源和影响计算机的使用性能的。那么,解决死锁问题就是相当有必要的了。
我们可以通过破坏死锁产生的4个必要条件来 预防死锁,由于资源互斥是资源使用的固有特性是无法改变的。
进程与线程的关系?
二面:
学姐、学长总结的面试题 感谢学姐(针对质量部测试开发)
1.几种常见算法看下,能够大概描述出来算法的过程,复杂度(排序、查找等)
2.给你设定几种场景,让你解答:比如给你两部手机,让你站在一百层楼高的地方,假设在第n层手机摔下就会摔破,问你怎样用着两部手机确定这个临界层。
(场景测试-百度质量部)
3.怎样知道一个链表里是否有环的存在,以及确定环的位置 如何确定两个链表是否有相同的部分
4.网络一些知识,比如http几次握手的情况,ack等包,结束是否只能由服务器段先断开之类的。网络几层,常见网络设备属于哪层?
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
5.测试几种方法.
黑盒测试(black-box testing):只关心输入和输出的结果
白盒测试(white-box testing):去研究里面的源代码和程序结构
静态测试(static testing):是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档可能存在的错误的过程。
动态测试(dynamic testing),是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程
- 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。 桩模块(stud)是指模拟被测模块所调用的模块,驱动模块(driver)是指模拟被测模块的上级模块,驱动模块用来接收测试数据,启动被测模块并输出结果。 (2)集成测试(integration testing),是单元测试的下一阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部门。 集成测试就是用来检查各个单元模块结合到一起能否协同配合,正常运行。 (3)系统测试(system testing),指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。 系统测试的主要依据是《系统需求规格说明书》文档。 (4)验收测试(acceptance testing),指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。
6.给定一个很大文件,内存里放不下,怎样搜索里面是否有需要的关键字,从百度搜索内容,描述一下大致的过程
搜索大文件放不下时,可以按照规则将大文件分割成内存可以放下的小文件,然后依次将小文件调入内存,进行搜索。
如果对于搜索结果有一定限制,比如找到出现次数最多的关键字,分隔文件时hash将相同关键字放到同一文件,对每一小文件统计最多次数,然后再比较所有小文件。
8. C语言 内存分配机制(堆栈区别,静态存储区)
栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统)回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
文字常量区 —常量字符串就是放在这里的。程序结束后由系统释放。
程序代码区—存放函数体的二进制代码。
9. 数组指针和指针数组有什么区别
12.深度搜索算法 单链表 就地 反转
13.Linux常见的命令看看(必考)
ls命令 cd命令 pwd命令 mkdir命令 rm命令 rmdir命令
man 命令 功能:man命令格式化并显示某一命令的联机帮助手册页。
cp命令
mv命令
功能:mv命令对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。
14、TCP与UDP的区别
16、socket
1.对Linux内核有一定的了解;
2.熟悉数据库的使用,
4.了解TCP/IP协议
5.测试流程 有几种方式像什么白盒 黑盒 功能测试 性能测试 单元测试等等
实际遇到的面试题
一面
首先要自我介绍
1、进程与线程的区别
2、标准模板库STL 用过的库函数 (一面)
Fill函数 sort map.find set.find
String字符串中的 find 、substr 、erase 、insert 、 length 都要很熟练使用
stoi 和 to_string 能让整形与字符串互相转换
3、做过的有关测试的项目,没有问很细,测试用例是不是自己写的,根据做的项目,设计怎么测试自己的项目
4、静态函数库、动态函数库 区别 自己做的项目是属于动态的还是静态的
静态函数库
这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。
动态函数库
这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。
算法题
1、在栈中,找出最小值,给出push pop 求最小值min函数(不破坏栈的原始的顺序、用最小的时间)
用两个栈即可解决。