测试/测开 常见面试问题总结(1)

涉及课程

1、一种编程语言
2、数据结构(常见算法思想)
3、操作系统
4、计算机网络
5、数据库
6、Linux操作系统
7、软件测试理论
8、自动化测试
(测试用例的编写、测试框架的了解、测试工具的使用、自动化测试脚本及工具的编写)

常见面试问题(个人总结)

一、编程语言(个人使用C++,python)
1、Python常用的标准库:random,datetime,math,zlib,requests
第三方库:nose测试框架,game
2、python语言特点:简单、开源、可扩展、数据库接口、解释性语言,边编译边执行
缺点:速度慢,安全性不是很好,不能加密,源码以明文存放
3、Python数据类型:数字、字符串、元组、列表、集合、字典
个人总结Python基础
4、C与C++面向对象和面向过程:

面向过程:以步骤来划分问题;面向对象以功能划分问题,对象(属性+方法)具有同种属性的对象成为类,特点:封装性、继承性、多态性 面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、
Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 缺点:没有面向对象易维护、易复用、易扩展 面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低

5、全局变量和局部变量的区别如下:

1、作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等2.
内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区3.
生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了4.
使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量。
局部变量:“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。全局变量:“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。

6、在Python中切片是什么?
从序列类型(如列表,元组,字符串等)中选择一系列项目的机制称为切片。
7、Python中的反向索引是什么?
Python序列可以是正数和负数的索引。对于正索引,0是第一个索引,1是第二个索引,依此类推。对于负索引,( - 1)是最后一个索引,( - 2)是倒数第二个索引,依此类推。
8、list和tuple有什么区别?
列表和元组之间的区别在于列表是可变的而元组不是。元组可以被散列,例如作为词典的关键。
9、什么是python的内置类型?
Python中的内置类型如下:整型、浮点型、复数、字符串、布尔等。
Python的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个开源的。
10、Python里面如何拷贝一个对象?deepcopy 和 copy的区别?
copy 仅拷贝对象本身,而不拷贝对象中引用的其它对象。
deepcopy 除拷贝对象本身,而且拷贝对象中引用的其它对象。
11、Python是如何进行类型转换的?
Python提供了将变量或值从一种类型转换成另一种类型的内置函数。比如int函数能够将符合数学格式数字型字符串转换成整数。否则,返回错误信息。
12、Python是如何进行内存管理的?
Python引用了一个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),用于管理对小块内存的申请和释放。
13、重载:方法名称相同,参数的类型或个数不同;对权限没有要求,发生在一个类中(水平关系)
重写:方法名称、参数类型、返回类型全部相同;被重写的方法不能用于比父类更严格的权限;发生在继承中;垂直关系

14、python中is 和 ==的 区别:
Is 比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址。
== 比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法。
15、指针和引用的区别:

指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。

二、数据结构
链表、数组、二叉树、查找、排序等算法思想及编程题
三、操作系统
1、进程与线程

进程和线程的根本区别是进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。另外区别还有资源开销、包含关系、内存分配、影响关系、执行过程等。
资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的。
影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。

四、计算机网络
1、TCP三次握手:

  1. 主动发起请求端, 发送 SYN(同步序列编号,建立连接)
  2. 被动建立连接请求端 , 应答ACK 同时 发送 SYN
  3. 主动发起请求端,发送应答 ACK * 标志 TCP 三次握手建立完成。 —— server:Accept() 返回 。— client:Dial() 返回。

四次挥手:

  1. 主动关闭连接请求端, 发送 FIN(关闭连接)
  2. 被动关闭连接请求端 ,应答 ACK
    标志。半关闭完成。 —— close()
  3. 被动关闭连接请求端 ,发送 FIN
  4. 主动关闭连接请求端,应答 ACK
    标志。四次挥手建立完成。 —— close().

2、为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

3、为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum
Segment
Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

4、为什么不能用两次握手进行连接?

答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发
送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S
是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分
组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

5、如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

6、网络分层:OSI七层模型:物、数、网、传、会、表、应
TCP/IP四层模型:链路层、网、传、应
五层模型:物理层、链路层、网络层、传输层、应用层
7、IP地址+端口号:就对应一个socket。套接字;流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;b)数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用
8、“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
9、TCP与UDP的区别:

1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

10、dns 域名解析协议 域名>-IP ,使用tcp和udp的端口53 域名解析:根域名、顶级域名
递归、迭代
11、浏览器中输入url到返回页面的全过程:

1.根据域名,进行DNS域名解析;
2.拿到解析的IP地址,建立TCP连接;
3.向IP地址,发送HTTP请求;
4.服务器处理请求;
5.返回响应结果;
6.关闭TCP连接;
7.浏览器解析HTML;
8.浏览器布局渲染

12、一个 TCP 连接可以对应几个 HTTP 请求?
在 HTTP/1.0 中,一个服务器在发送完一个HTTP 响应后,会断开 TCP 链接。如果tcp连接保持长连接,Connection:keep-alive && http(s) 1.1 只要在tcp连接(默认两小时)不断开,可以一直串行发送数量无上限;如果tcp连接不保持长连接,Connection:close 只能发一次请求。
13、现代浏览器与服务器建立一个TCP连接后,是否会在一个HTTP请求完成后断开?什么情况下会断开?

1.连接的过程:初始化连接->SSL->发送请求->下载返回内容
2. HTTP/1.0会断开,除非设置Connection: keep-alive
3. HTTP/1.1不会断开,不会再次进行初始化连接和SSL,除非设置Connection: Close

14、一个TCP连接可以对应几个HTTP请求?
多个
15、一个TCP连接中,几个HTTP请求可以一起发送吗?
HTTP/1.1不可以,可以建立多个TCP连接
HTTP2可以
16、为什么有时候刷新页面不需要重新建立SSL连接?
TCP连接没有断开
17、浏览器对同一个Host建立TCP连接的数量有么有限制?
跟浏览器设置相关
18、HTTP 与 HTTPS 的区别

1、HTTPS 协议需要到 CA (Certificate
Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)

2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP
协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

19、get和post的区别:

1、get通过地址栏传输,post通过报文传输;get用于获取数据,post传输数据;
2、get以明文传输,post可以明文也可以密文,安全性较高 3、get在url中传送的参数有限制,post没有
4、GET产生一个TCP数据包;POST产生两个TCP数据包

20、TCP和HTTP协议的区别

1,http对应于应用层

2,Tcp协议对应于传输层

3,http协议是在Tcp协议之上建立的,http在发起请求时通过tcp协议建立起连接服务器的通道,请求结束后,立即断开tcp连接
4,Http是无状态的短连接,而TCP是有状态的长连接

21、A类地址:1.0.0.1-126.255.255.254
B类地址:128.0.0.1-191.255.255.254
C类地址:192.0.0.1-223.255.255.254
私有地址:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

22、状态码:

1** 信息,服务器收到请求,需要请求者继续执行操作 2** 成功,操作被成功接收并处理 3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求 5** 服务器错误,服务器在处理请求的过程中发生了错误

五、数据库
范式、索引及优缺点、视图、触发器
1NF:字段不可分,每个字段是原子级别的
2NF:有主键,非主键字段依赖主键
3NF:非主键字段不能相互依赖,每个属性都跟主键有直接关系而不是间接关系
六、Linux
linux常用命令:
ps -ef | grep 123.py查看进程
netstat -anp |grep 端口号
find 文件夹 -name 文件名(当前./)通过文件名查找文件
df -hl查看磁盘剩余空间
ls 查看文件或目录
mkdir创建目录
cd 切换目录
touch 创建空文件
cat 查看文件内容
mv 移动或重命名
rm 删除文件
find 在文件系统中搜索某文件
grep 在文本文件中查找某个字符串

系统管理命令:
who 显示在线登录用户
hostname 显示主机名
uname 显示系统信息
ping 测试网络连通
kill 杀死进程
tar打包压缩
halt 关机
reboot重启
sudo apt-get install
vim 命令、插入、编辑模式
su root
df 查看硬盘
find 查找文件或目录
grep在文件内搜索字符串匹配的行并输出
ps -aux查看系统中所有进程
netstat -anp | grep 50070 查看50070端口信息netstat -anp |grep 50070 netstat -anp|grep 50070
压缩zip解压unzip

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值