软件测试面试题100道 【计算机网络】 1 介绍一下cookie, session 和token的区别 1.session和cookie区别:· 数据存放位置不同:Session数据是存在服务器中的,cookie数据存放在浏览器当中。· 安全程度不同:cookie放在服务器中不是很安全,session放在服务器中,相对安全。· 性能使用程度不同:session放在服务器上,访问增多会占用服务器的性能;考虑到减轻服务器性能方面,应使用cookie。· 数据存储大小不同:单个cookie保存的数据不能超过4K,session存储在服务端,根据服务器大小来定。2.token和session区别:· token是开发定义的,session是http协议规定的;· token不一定存储,session存在服务器中;· token可以跨域,session不可以跨域,它是与域名绑定的。 2, 输入url后到加载网页的整个过程是怎么样的? 1、浏览器的地址栏输入URL并按下回车。 2、浏览器查找当前URL的DNS缓存记录。 3、DNS解析URL对应的IP。 4、根据IP建立TCP连接(三次握手)。 5、HTTP发起请求。 6、服务器处理请求,浏览器接收HTTP响应。 7、渲染页面,构建DOM树。 8、关闭TCP连接(四次挥手) 3, DNS域名解析过程讲一下 我们知道在地址栏输入的域名并不是最后资源所在的真实位置,域名只是与IP地址的一个映射。网络服务器的IP地址那么多,我们不可能去记一串串的数字,因此域名就产生了,域名解析的过程实际是将域名还原为IP地址的过程。 4, DNS使用TCP还是UDP协议? TCP与UDP简介TCP—传输控制协议,是一种面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议。 UDP—用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议。 5, 介绍下三次握手和四次挥手,为什么是3次和4次呢?两次不行吗? 三次握手 我们的客户端(请求资源)和服务器端(发送资源)的建立连接是通过三次数据包的发送,所以我们形象的将其称为三次握手。 First 第一次发送时,由客户端向服务器端发送包,其中SYN标志位的值为1(表示是一个同步的请求,也就是说,代表了这是一个客户端希望和服务器端建立连接的请求)。ACK的值肯定为0啦,然后将发送序号设置为一个随机生成的随机数X,这里假设为1000。客户端随及进入了SYN发送状态。 Second 第二次发送的时候,是服务器像客户端发送包,SYN和ACK两个标志位都为1,发送序列号Y(同样是随机生成的),确认序号为1001(确认序号是在第一次发送包的发送序号基础上加上一个数字,为了方便解释,这里就记为1)。从此刻开始,服务器进入了同步(SYN)接收状态。 Final 第三次发送,客户端将服务端发送的SYN和ACK包接收到后,返回ACK包代表确认, 接受序列号为Y + 1, 从此以后,客户端和服务端就都进入了连接建立状态,三次握手完毕。 四次挥手 First 客户端发送FIN+ACK请求表示请求结束连接 Second 服务器端接收到客户端的请求,返回ACK表示收到请求,并让客户端继续等待自己将自己所有的数据发送完毕。 Third 服务端的数据发送完毕后,会向客户端发送FIN + ACK,表示这边数据已经发送完毕了。 final 客户端向服务器发送ACK,表示接收到了,然后服务器就放心的关闭了,然后客户端会等待一会儿,如果没有任何sigusoft的话,就认为服务器已经关闭了,自己也就关闭了。 当我们通过两次握手就可以建立连接时,客户端向服务端发送了连接请求A,但因为网络延迟,在服务端还没有收到这次请求的时候,客户端着急的发了第二次连接请求,这次连接成功了,大家心满意足的完成了不为人知的交易后,连接A这时却发给了服务端,服务端进行确认,但是客户端已经将延迟的请求做无效的处理了,所以,服务端会向牛郎等织女一样,这无疑会耗费我们服务端很多的资源,并且除了以上情况还有可能造成”死锁” 6, TCP是全双工的还是半双工的 全双工:客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息; 半双工:客户端可以给服务端发送信息,服务端也可以给客户端发送信息,但是客户端和服务端不能同时发; TCP是全双工的。 7, TCP和UDP的区别, 和它们各自的应用场景 1. 连接 TCP 是面向连接的传输层协议,传输数据前先要建立连接。 UDP 是不需要连接,即刻传输数据。 2. 服务对象 TCP 是一对一的两点服务,即一条连接只有两个端点。 UDP 支持一对一、一对多、多对多的交互通信 3. 可靠性 TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。 UDP 是尽最大努力交付,不保证可靠交付数据。 TCP 和 UDP 应用场景: 由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于: FTP 文件传输; HTTP / HTTPS; 由于 UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于: 包总量较少的通信,如 DNS 、SNMP 等; 视频、音频等多媒体通信; 广播通信; 8, HTTP请求有哪些类型?Get, Post, Put, DELETE…. 1、GET 请求指定的页面信息,并返回实体主体 2、POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被 包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 3、PUT 从客户端向服务器传送的数据取代指定的文档的内容 4、DELETE 请求服务器删除指定的页面。 5、HEAD 类似于 get 请求,只不过返回的响应中没有具体的内容,用于报头 6、MOVE 请求服务器将指定的页面移至另一个网络地址。 7、COPY 请求服务器将指定的页面拷贝至另一个网络地址。 9, HTTP请求有哪些请求头? Accept,接收的数据类型。Accept-Language,接收的语言。Accept-Encoding,客户端的编码方式。Connection,长连接还是短链接。Host,客户端的主机和端口号。Referer,请求来源网站。User-Agent,客户端的系统和浏览器的信息。Cache-Control,缓存设置(重点)。Cookie,存储用户信息。Range,的数据部分。 10, Get 和 Post请求的区别 GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长度限制的,而POST么有。对参数的数据类型,GET只接受ASCII字符,而POST没有限制。GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。GET参数通过URL传递,POST放在Request body中 11, 302状态码是什么意思?跟301状态码有什么区别?什么情况下出现304状态码? 302是临时重定向。301是永久重定向。301和302效果看起来一样,但为集权,最好是用301。304表示未更新。出现这种情况要注意做好网站内容更新 12, 状态码101/401/501的意思是什么? 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。 13, 什么是长连接? 一个可以连续发送多个数据包的连接 长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。 【Fiddler】 14, Fiddler打断点的方式有哪些? 打断点有两种方式:分别是响应断点和请求断点 响应断点:对响应的数据进行修改,是服务器已经处理完请求了,准备给前端返回数据了,但是fiddler把这里拦下来了,想对响应数据做一些修改。比如前端需要展示今日登录次数,我想看前端展示登录1000000000000000000000次的效果,我不可能真的点这么多次,也不想去数据库跑脚本差这么多没用的数据,那么我就直接改这个接口的返回值就好了; 请求断点:对请求的数据进行修改,在请求还没到服务器的时候,我们可以在fiddler中把参数改了,然后再把请求发过去 15, 怎么用Fiddler修改响应返回的内容 (1)打开Fiddler-> Rules-> Automatic Breakpoints,【After Responses】。 也就是服务器响应之后,但是在Fiddler将响应中转给浏览器之前,这时可以修改响应的结果。 (2)在左侧列表中选择请求(拦截的请求会出现向下箭头标志),在右侧Inspector下方的TextView栏修改返回数据,然后【Run to Completion】,则进行消息发送 16, Fiddler怎么抓app的包? 1、查看 Fiddler 的 ip 地址 2、设置 Fiddler 允许远程连接 3、进行手机端 App 的抓包 3.1.准备工作 3.2.手机设置 3.3.安装根证书 17, Fiddler怎么抓HTTPS的请求? 【相关问题】 18, 访问网页速度慢,可能有哪些原因? 1、电脑的配置太低会导致打开网页速度过慢 2、第二种网页打开慢的原因就是因为网速太慢了。(代理弱网) 3、还有一种导致网页打开慢的原因,就是浏览器的问题。(浏览器缓存过多) 19, 怎么排查是前端问题还是后端问题或者数据问题? 界面相关,排版错乱,文案错误等问题都属于前端bug出现样式问题的都是css的bug出现文本问题的都是html的bug出现交互有问题的都是js的bug功能相关,抓包分析,从接口 请求url 参数 接口响应来分析未发送请求,属于前端bug接口请求url错误,传参错误,属于前端bug接口返回数据错误,属于后端bug性能相关页面加载慢或者提交表单慢,抓包查看请求耗时,如果耗时长,就属于后端bug 20, app测试和web测试的区别 1.功能方面: 在流程和功能测试上是没有区别的,系统测试和一些细节可能会不一样。那么我们就要先来了解,web和app的区别: web项目,一般都是b/s架构,基于浏览器的,而app则是c/s的,必须要有客户端。在系统测试的时候就会产生区别了。 首先从系统架构来看的话,web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是app端是不能够保证完全一致的,除非用户更新客户端。如果是app下修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。 2.性能方面: web页面可能只会响应时间,而app则还需要关心流量、电量、CPU、GPU、Memory这些了。 3.兼容性方面: web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容,不过一般还是以浏览器的为主。而浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)。app的测试则必须依赖phone或者是pad,不仅要看分辨率,屏幕尺寸,还要看设备系统。系统总的来说也就分为Android和iOS,不过国内的Android的定制系统太多,也是比较容易出现问题的。 4.相比较web测试,app更是多了一些专项测试: 一些异常场景的考虑以及弱网络测试。这里的异常场景就是中断,来电,短信,关机,重启等。 而弱网测试是app测试中必须执行的一项测试。包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。需要测试丢包,延时的处理机制。避免用户的流失。这些在前面的弱网测试那篇已经讲过,这里不再讲了。 5.安装、卸载、更新: web测试是基于浏览器的所以不必考虑这些。而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件,更新的强制更新与非强制更新、增量包更新、断点续传、弱网,卸载后删除app相关的文件等等。这里讲起来的话太多了,如果有疑问的同学可以评论或者给我留言。 6.界面操作: app产品的用户都是使用的触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控,事件触发区域等测试。 【接口】 21, 介绍一下用到的接口自动化框架, python+ Request框架: python+ Request 是使用代码来实现接口的请求,封装业务流程,对于公司的业务支持比较高,可以根据业务的灵活度来定制化开发接口框架,再加上Jenkins 就可以持续化集成。上手有点难度,需要有Python 编码的基础,才可以使用。 22, python用requests库的时候,get和post 请求分别用什么参数传递请求体 1.get方法使用params传递参数。 2.post方法使用json或者data传递参数。文件上传使用files传递参数。 3.post方法中json和data之间的区别 data: 数据报文:dict字典类型,默认情况下请求头:application/x-www-form-urlencoded,表示以form表单的方式传参,格式a=1&b=1&c=1 数据报文:str类型,默认情况下请求头:text/plain(如果是字典格式需要转化为str格式传参) json: 数据报文:不管是dict类型还是str类型,默认都是application/json,格式:{‘a’:1,’b’:2} json.dumps(data) 序列化 把字典格式的数据转换成str格式 json.loads(data) 反序列化 把str格式的数据转换成字典格式 总结: data只能传递简单的只有键值对的dict或者str格式。json一般只能传递dict格式(简单和嵌套的都可以) 简单的字典格式例如:{‘username’:’zhang’, ‘password’:’123′} 复杂的字典格式例如:{‘test’:{‘username’:’zhang’, ‘password’:’123′}} 23, 接口自动化里面用的pytest 参数化,是怎么实现的?简单写一下并讲解 24, pytest有哪些断言方式? pytest断言方法 Pytest断言方法是一种测试框架,用于检查程序的 期望行为是否与实际行为相匹配。可以用来测试函数,关杰 或其他对象的正确性。使用pytest断言方法,可以将代码 写在测试函数中,并使用pytest框架来运行测试函数,以 确保输出结果与预期结果相符。 Pytest断言方法有很多,包括assertEqual、 assertNotEqual、assertTrue、assertFalse、 assertIsNone、assertIsNotNone、assertIn、 assertNotIn、assertisInstance、assertAlmostEqual、 assertNotAlmostEqual等等。这些方法都能用来帮助开发 人员验证代码是否正确工作,并确保程序在未来的更新中 仍然可以正常运行。 25, pytest 的 fixture,3 种调用方式分别是什么? 1.函数或者类里面方法直接传fixture的函数参数名称 2 .使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例 3。fixture自动使用autouse=True 当用例很多的时候,每次都会传这个参数,会很麻烦,fixture里面的参数autouse,默认值是false,当设置为true时,就不需要每个用例都传参了,当autouse为true时,自动调用fixture功能 26, 如果要调用多个fixture, 应该怎么做? 如果用例需要用到多个fixture的返回数据,fixture也可以return一个组,list或字典,然后从里面取出对应的数据。 当然也可以分开定义成多个fixture,然后test_用例传多个fixture参数。 fixture与fixture直接也能相互调用。 27, pytest实现fixture的原理是怎么样的 ? 定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要以test开头,跟用例区分开。fixture是有返回值得,没有返回值默认为None。用例调用fixture的返回值,直接就是把fixture的函数名称当做变量名称。 28, 多接口有依赖的情况,比如B接口需要用到A接口的返回值,自动化测试过程中,怎么设计? 创建类,定义一个类属性,定义为空,提取接口的返回值,通过setattar()方法存储到类属性里,下一个接口调用时,通过getattar()方法类属性的值。 29, 接口自动化的数据清理工作是怎么做的? 30, mock技术什么情况下使用? 1.单测试中使用 比如我们要mock某个方法,如果其他方法调它是我们直接返回一个mock的。 2、客户端测试过程中 比如服务端没开发完成,我们就可以mock这样的接口出来。还有就是功能测试过程中有一些异常场景我们也可以mock来实现造数据 【UI自动化】 31, 搭建 web UI自动化的环境,你是做了哪些工作? 1、安装Python 2、安装selenium pip install selenium 3、安装浏览器驱动 WebDriver支持Firefox(FirefoxDriver),IE(INternetExplorerDriver),Opera(OperaDriver)和Chrome(ChromeDriver)等浏览器,除此之外还支持Android和iPhone的移动应用测试 各浏览器驱动的下载地址: http://www.seleniumhq.org/download/ 在下载驱动的时候一定要注意跟电脑上安装的浏览器的版本相对应,如谷歌的下载版本地址:https://npm.taobao.org/mirrors/chromedriver/,找到对应的版本下载后进行解压,解压完后复制chromedriver.exe文件的路径并加入到电脑的系统环境变量中。 完成后在cmd下输入:chromedriver 验证是否安装成功 4、打开IDE进行验证是否环境配置完成: 32, 浏览器上有2个页面,第一个页面是基于登录状态才能打开的,第一个页面中的一个按钮,跳转到第二个,在第二个页面中完成新建动作。根据这个流程,你会怎么做UI 自动化实现? 33,selenium 的素定位方式有哪些? (1)id 说明:通过素的id属性来定位素,具有唯一性,定位后基本不会重复 前提:素有id属性 id定位方法:find_element(by=By.ID, value=’ ‘)或 find_element (“id”, value=’ ‘) 示例:打开百度搜索页面,通过id定位,输入搜索关键字 (2)name 说明:通过name属性来指定素名称,相对少见,但容易重名 前提:素有name属性 name定位方法:find_element(by=By.NAME, value=’ ‘)或 同上 示例:打开百度搜索页面,通过name定位,输入搜索关键字 (3)class_name 说明:指定素的类名,通过class属性来定位;不推荐,重复的概率非常高 前提:素有class属性 class_name定位方法:find_element (by=By.CLASS_NAME, value=’ ‘) 或 同上 示例:打开百度搜索页面,通过class_name定位,输入搜索关键字 (4)tag_name 说明:HTML本质就是由不同的tag(标签)组成,而每个tag都是指同一类,所以一定会返回多个结果,一般不建议使用,可用于查找多个重复的内容的时候使用。 tag_name定位方法:find_element(by=By.TAG_NAME, value=’ ‘) 以下两种是根据超链接的文本定位 (5)link_text 说明:link_text定位与前面4个定位有所不同,它专门用来定位超链接文本(文本值) 前提:定位的素是链接标签(a标签) link_text定位方法:find_element(by=By.LINK_TEXT, value=’ ‘) 示例:打开首页,通过link_text定位到登录按钮,并进行操作 (6)partial_link_text 说明:partial_link_text定位是对link_text定位的补充,partial_link_text为模糊匹配;link_text为精确匹配。 前提:定位的素是链接标签(a标签);通过传入a标签局部文本或全部文本来定位素,要求输入的文本能够唯一找到这个素 partial_link_text定位方法:find_element(by=By.PARTIAL_LINK_TEXT, value=’ ‘) 示例:打开百度首页,通过partial_link_text定位到新闻,并进行操作 素路径定位(如果同一页面中有多个结构相同的素,可以用xpath定位) (7)xpath 说明:有自己的独特语法,基于文件系统树状结构形态定位的 相对路径:类似于一种查询的调用 //*[@id=”kw”] (8)css_selector说明:定位界相对万金油的定位方法,有自己的独特语法,定位语法很麻烦 34,不可见的素,怎么定位? 方法1:用try…except… 方法2:用elements定义一组素方法 方法3:结合WebDriverWait和excepted_conditions判断 35,selenium 的用例,怎么提升运行效率? 不要右键复制xpath,自己写相对路径,多用id为节点查找定位没问题,第二个影响因素就是等待时间了。sleep等待尽量少用(影响执行时间)。driver.implicity_wait(10)隐式等待也不要用,不要以为是全局的就是好事。有些JS加载失败时候会一直等,并且页面跳转时也无法识别。定位素方法重新封装,结合WebDriverWait和excepted_conditions判断素方法,自己封装一套定位素方法 【Python】 36,有没有用python 做一些工具或者脚本实现? 有使用过python做一些PDF文档的加解密具体代码实现如下: # PDF加密 import pikepdf pdf = pikepdf.open(“test.pdf”) pdf.save(‘encrypt.pdf’, encryption=pikepdf.Encryption(owner=”my_password”, user=”my_password”, R=4)) pdf.close() # PDF解密 import pikepdf pdf = pikepdf.open(“encrypt.pdf”, password=’你要设置的密码’) pdf.save(“decrypt.pdf”) pdf.close() 37,组和列表的区别 1.组是不可变的数据类型,而列表是可变的数据类型。 2.组与列表的声明不同。 3.组一般表示不同类型的数据,列表一般表示相同类型数据的集合。例如表示一个点的位置用组,表示一系列点则用列表。 4.组和列表之间可以相互转换。 tuples=(‘A’,’B’,’C’)#组的声明 lists = [‘A’,’B’,’C ’]#列表的声明 Tuple = tuple(lists) #列表转换为组 List=list(tuples)#组转换为列表 point=(1,1)#表示一个点,x,y为不同数据类型(横纵坐标) points=[(1,1),(2,2),(33)] #表示一系列点数据类型是相同的 38,字典怎么遍历 key, value,如果同时要遍历key 和value 呢? 1、item()方法 把字典中每对key和value组成一个组,并把这些组放在列表中返回。 在字典中进行遍历的时候可以采用item()方法将字典中的键值对同时遍历出来 2、语法1dict.items() 3、返回值 返回可遍历的(键, 值) 组数组。 4、使用实例 字典遍历同时获得键和值 for key in dictA.keys() for value in dictA.values() for key, value in dictA.items() enumerate(dictA)打印的是索引值、key值 for index,key in enumerate(dictA): … print (index, key) 39, python的匿名函数 匿名函数是指没有名字的函数,它主要应用在需要一个函数、但是又不想费神去命名这个函数的场合。通常情况下,这样的函数只使用一次。 在Python中,使用lambda表达式创建匿名函数,其语法格式如下: 40, 两个列表,list1 = [1,2,3], list2= [4,5,6], 怎么扩展让list1=[1,2,3,4,5,6,] list1.extend(list2) 40, json跟字典的区别 字典是一种数据结构,而json是一种数据格式, 格式就会有一些形式上的限制,比如json的格式要求必须且只能使用双引号作为key或者值的边界符号(值如果是数字可以不用加双引号),不能使用单引号,用单引号或者不用引号会导致读取数据错误,而且“key”必须使用边界符(双引号),但字典就无所谓了,可以使用单引号,也可以使用双引号。 41, 字典跟列表的区别 相同点:都属于序列。序列的共同点:检查长度,检查包含素以及循环都属于可变对象。每次更改都是更改他们本身都可以进行增删改查都支持推导式 注:所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。不同点:定义:列表定义 ” [] 或 list “;字典定义 ” { } 或 dict “排序:列表是有序的,字典是无序的增加素:列表是 ” list.append(x) “;字典是 ” dict[‘key’] = value “查询素:列表是通过索引访问 ” list[n] “;字典是通过 key 访问 ” dict.get(‘key’) “修改素:列表是 ” list[n] = m “;字典是 ” dict[‘key’] = new_value “删除素:列表是 ” list.pop(n) “;字典是 ” dict.pop(key)循环:列表是 ” for x in [] list 、for list[x] in range(len(list))、for index,x in enumerate(list) ” ;字典是 ” for k in dict.keys()、for v in dict.values()、for k,v in dict.items() “相互转化: 列表是 ” list({‘name’:’test’,’age’:’20’}) “,字典是 ” dict([‘name’:’test’],[‘age’:’20’])。列表转字典是必须一对数据放在一起用括号括起来,字典转列表默认转化的是键。 42, python怎么一个对象的所有属性? dir() dir(listA) 调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。 43, python的迭代器和生成器的区别 1.迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有素拓印出一份副本,只为我们此次迭代使用。而生成器则是自己生成素的。也就是前者是从有到有的复制,而后者则是从无到有的生成。 2.在用法上生成器只需要简单函数写法,配合yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。 44, 讲一下python的深拷贝和浅拷贝 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的素是原对象中各个子对象的引用。 深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。 45, python的装饰器,有什么作用? python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能 作用:装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情况下增加功能)然后会返回一个新函数,新函数就叫做装饰器 46, python 的 GIL 锁 GIL锁又叫全局解释器锁,每个线程在执行的过程中都需要先GIL,保证同一时刻只有一个线程在运行,目的是解决多线程同时竞争程序中的全局变量而出现的线程安全问题。 【Linux】 47, 详细讲几个常用的Linux命令 创建目录 -p创建目录,若无父目录,则创建p(parent) 切换目录 查看目录 列出文件详细信息 或者直接 列出当前目录下所有文件及目录,包括隐藏的a(all) 打印文件到命令行(查看文件) 改变文件所属用户 改变文件所属组 下载文件 在文本文件中查找某个字符串 统计文本中行数、字数、字符数 部分显示 查找文件 创建空文件 复制文件 移动或重命名 删除文件 -r 递归删除,可删除子目录及文件-f 强制删除 删除空目录 树形结构显示目录,需要安装tree包 显示当前目录 创建链接文件 48, 怎么查看实时更新的日志文件,tail -f tail +20 file 从第20行至文件末尾 tail -c 10 file 显示文件最后10个字符 tail -f 10 file 一直变化的文件总是显示后10行(使用最多) 49, Linux怎么替换文件中的某个值。sed ‘/s/old/new/g’ a.txt 使用命令“sed -i ‘s#world#World#’ testRep.txt”。 50, Linux下怎么查看有哪些tcp请求 LISTEN: 侦听来自远方的TCP端口的连接请求SYN-SENT: 再发送连接请求后等待匹配的连接请求 51, Linux的top命令可以查看到哪些信息 Linux系统可以通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。通过top命令可以有效的发现系统的缺陷出在哪里。是内存不够、CPU处理能力不够、IO读写过高。 52, 怎样查看Linux中某个进程的信息 ps aux | grep+进程名 53, 讲解一下 Linux的 sed 和 awk 命令 1.sed作用 sed一般用于对文本内容做替换(不一定非用/分割,任意字符都可以): 如sed ‘/usr1/s/usr1/u1/’ /etc/passwd 1.awk作用 awk一般用于文本内容进行统计、按需要的格式进行输出,例如: 完整格式:’BEGIN{…}{}END{…}’ 示例: cut写法:cut -d : -f 1 /etc/passwd awk写法:awk -F: ‘/wd$/{print $1}’ /etc/passwd 54, Linux的find 和 grep 命令的使用 find 查找指定目录下的指定文件 用法:find 路径 -name 文件目录名 grep 查找指定文件中的指定内容(将查找到的内容进行标识) 用法:grep 查找的内容 所要查找的文件(不知道文件名可用 ”*“代替) gerp -n查找指定文件中的指定内容(将查找到的内容进行标识)带行号显示 用法:grep 查找的内容 所要查找的文件 -n 55, 找出Linux一个日志文件的最后五行,并且包含error的信息 使用语法:tail-n 5 |grep- i error 【数据库】 56,数据库题目,有成绩表,列出所有课程1分数大于课程2分数的学生Id SELECT a.SId FROM Sc a, Sc b WHERE a.SId = b.SId AND a.CId = ‘001’ AND b.CId = ‘002’ AND a.Score > b.Score 57,数据表的字段有字段 student, course, score, 找出每科成绩大于80的学生学号,请写下SQL语句 select sid from student group by sid having min(score) > 80 58,数据库子查询(表结构:学生名字、成绩、科目,查询比计算机科目平均分高的人数),原题没有记清楚^_^ 59,数据库表,有学生id,姓名,性别, 科目,成绩,怎么找出平均分大于85的男生 SELECT st.s_id,st.s_name,AVG(sc.s_score) FROM student st LEFT JOIN score sc ON sc.s_id=st.s_id GROUP BY st.s_id HAVING AVG(sc.s_score)>=85 60,数据库查询怎么展示第200条到第300条的数据? select *from 表 limit 200,300 61,左连接和内连接的区别 左连接:左边表数据行全部保留,右边表保留符合连接条件的行 内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件 【代码】 62,手写冒泡排序,讲解冒泡排序原理,排序次数 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单基础的排序算法。其基本思路是,对于一组要排序的素列,依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面,如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成。 这个算法的名字由来是因为越大的素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序” #include<stdio.h> //冒泡排序由大到小 int sort(int *a,int n) { int end = n; while (end>0) { int m = 0; int i = 0; while (i < end-1) { //将a[i]与a[i+1]交换 if (a[i] < a[i + 1]) { //使用异或操作符 a[i] = a[i] ^ a[i + 1]; a[i + 1] = a[i] ^ a[i + 1]; a[i] = a[i] ^ a[i + 1]; m = 1; } ++i; } //如果一个循环以后没有交换则说明已经有序,退出最外层循环 if (m == 0) { break; } //一个循环以后最小的已经被排到最后,所以再次进入循环则少比较一次 –end; } return 0; } //打印一个数组 int print(int *a,int n) { int i; for (i = 0; i < n; ++i) { printf(“%d “, a[i]); } printf(“\n”); return 0; } int main() { int a[] = { 3, 4, 2, 6, 6, 7, 8, 4, 5, 6, 7, 9, }; int n = sizeof(a) / sizeof(int);//整型为四个字节 print(a, n);//排序前 sort(a, n); print(a, n);//排序后 return 0; } 63,讲解一下选择排序和快速排序 选择排序的基本思想是每次循环将最大的素和最小的素选出来放在两端,走过整个数组后就可以完成排序。 快速排序的基本思想是任取待排序素序列中的某素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有素均小于基准值,右子序列中所有素均大于基准值,然后最左右子序列重复该过程,直到所有素都排列在相应位置上为止。 64,打印斐波那契序列的前n个数字 斐波那契数列:指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…… 。这个数列从第3项开始,每一项都等于前两项之和。 公式: fib[i] = fib[i-1]+fib[i-2]; i>=2 65,两个字符串,怎么找出字符串a在字符串b出现的所有位置和次数,代码实现 int get(String a,String b){ int count=0; char[] aa=a.toCharArray(); char[] bb=b.toCharArray(); if(aa.length>bb.length)return 0; for(int i=0;i<bb.length;i++){ int sign=i; boolean success=true; for(int j=0;j<aa.length;j++){ if(sign>=bb.length){ success=false; break; } if(aa[j]==bb[sign]) { sign++; }else{ success=false; break; } } if(success)count++; } return count; } 66,python定义一个长度为1的列表和数组 1. 定义一个初始值为None长度为1的列表a : a=[None]*1 备注:这里的初始值也可换成其它的,格式如 list1=[m]*n 其中n为列表的长度,表示 定义了一个长度为n的列表,列表的值都为m 【测试用例设计】(自己设计) 67, 扫二维码可以领红包,红包可以提现到银行卡。根据这两个功能设计用例 1、二维码是否支持多APP去扫码和提现 2、扫码领取红包的最大金额是多少?单日提现的最大金额是多少? 3、扫码领取红包的最小金额是多少?单日提现的最小金额是多少? 4、扫码领取红包是否可以直接用于消费 5、扫码领取红包的金额对比提现的金额是否一致,是否收取手续费 6、弱网状态下扫码领取红包是否成功 7、弱网状态下提现到银行卡是否成功 8、无网状态下扫码领取红包是否成功 9、无网状态下提现到银行卡是否成功 10、无网状态下扫码不成功是否有对应提示 11、无网状态下提现不成功是否有对应提示 68,有一个输入框可以输入字符串,后端解析,会返回包含a 的个数 。对这个输入框设计用例 69, 下单到支付的流程,你哪些测试点?请设计一下测试用例 一、在支付金额上: 1、金额的最小值:如0.01 2、无实际支付意义的金额:如0订单; 3、支付金额错误:格式错误、数字错误(支付金额为负数); 4、超大金额:设置的最高额上限(如红包单个最大值为200等); 5、余额小于实际需要支付的金额; $8,698.66 6、银行卡或其他设置当日消费金额或者是单笔消费金额超限 二、支付操作上: 1、指纹支付; 2、免密支付; 3、账号+密码支付; 4、动态支付验证码支付; 5、银行卡号+密码绑定支付; 6、信用卡支付码支付; 三、产品的容错性(异常处理) 1、如何处理退款; 2、支付时出现断网; 3、支付失败之后如何补单和退单; 4、支付金额不足的情况下支付,然后再充值后是否可以继续支付: 5、持续是否会出现多次扣款; 6、发生多次扣款后如何退款到支付账号 四、产品后台处理上,成功订单的账务处理、失败订单的账务处理、退款订单的账务处理、 差错熬处理等 五、支付页面显示、支付成功后页面跳转正常、支付失败后提示信息显示及页面跳转 70, 根据抽奖功能,设计测试用例。 70,比如,需要符合条件的才能参与抽奖,但是现在报错,怎么分析定位问题。 71, wechat消息列表(就是大家聊天经常会用到的那个页面),设计测试用例 72, 设计测试用例(有一个秒杀活动,在活动期间,价格比平时低,每个id限量购买),你会从考虑哪些方面? 【docker】 73,你对docker的应用是怎么样的? Docker 是一个用来装程序及其环境的容器,属于Linux容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案。 Docker 的用途 提供统一的环境 提供快速拓展、弹性伸缩的云服务(下载、启动 即可拓展服务) 防止其他用户的进程把服务器资源占用过多(死循环 内存泄漏会占满CPU 内存 磁盘等) Docker 的特点 标准化: 运输方式(把程序和环境从一个机器运到另一个机器的)(不用sigusoft传 U盘拷 网盘分享) 存储方式(程序和环境的存储) API 接口(不需要 Tomcat 等应用的命令了,都标准化了) 灵活:即使是最复杂的应用也可以集装箱化 轻量级:容器利用并共享主机内核 便携式:可以在本地构建,部署到云(镜像仓库),并在任何地方运行 74,讲一下,docker的数据卷,具名挂载和匿名挂载。 具名挂载 挂载到指定名称的目录; 1 #/xxx是目录,xxx是卷名,没有斜杆的就是卷名 2 docker run -d -v卷名:容器目录tomcat 3 #查找卷名所在的目录 4 docker volume inspect卷名 匿名挂载 匿名挂载就是只有容器目录,没有宿主机的目录,所以生成出来的目录是一个长长的加密字符 串,一般情况下不建议使用匿名挂载;加密字符串会导致不易查找; docker run -d -v\容器目录tomcat 来,测试一下,先创建容器并且挂载好目录 docker run -d –name my_tomcat_2-v/my_folder_2 tomcat 使用inspect命令查看容器信息 docker inspect my_tomcat_2 在打印信息中找到Mounts项,其中Source的目录就是宿主机的目录;Destination的目录是挂 载的容器目录 75,docker 和虚拟机的区别 docker与虚拟机的区别: 1、docker启动快速属于秒级别,而虚拟机通常需要几分钟去启动; 2、性能损耗不同,docker需要的资源更少; 3、隔离性不同,docker属于进程之间的隔离,隔离性较弱,而虚拟机可以实现系统级别的隔离。 【逻辑题】 76,有5L 和6L杯子各一个,水是不限量的,怎么倒出3L水来? 1、先用5L的容器装满5L的水,倒入6L的容器中,再重复一次;此时,5L容器中剩余4L. 2、将6L的容器清空,将上面5L的容器中剩余的4L水倒入6L的容器中. 3、最后,只要将5L的容器装满,再倒入已有4L水的6L的容器中,此时,在5L的容器中就剩下了3L的水 77,25匹马,5个赛道,找出最快的三匹马,需要比赛几次? 需要7次,25匹马,分为5组,每个赛道一组,比赛5次,选出每组的前3名,在进行每组前3名的第6次比赛,选出每组第一名,然后在进行决赛选出最后的前三名 78,小区有200条狗,有不确定数量的疯狗,自己看不到自己的是疯狗,但是可以看到其余的199条狗的状态是正常还是疯狗,一旦发现就会开枪打死,不考虑怜悯心。第一天没有枪声,第二天没有枪声,第三天有好几声枪声,请问有几条疯狗? ①疯狗有一只->若第一天自己没有看到疯狗->自己家的狗是疯狗->枪声响在第一天。②疯狗有两只->自己第一天看到一只疯狗->第一天枪声没响->按照逻辑①,如果只有一只疯狗,有人没看到疯狗,枪声一定会响->别人看到了疯狗,疯狗不止一只->自家的狗是疯狗->枪声响在第二天。③疯狗有三只->自己第一天看到两只疯狗->按照逻辑②,枪声会响在第二天->第二天晚上没有枪响->疯狗数量>2->自家的狗是疯狗->枪声响在第三天。根据上述逻辑推理,有N只疯狗,则枪声会响在第N天 79,26杯水,其中有一杯是糖水,用多少次能找到那一杯糖水? 有一杯甜的,那甜的肯定会沉一点。找个天平,把26杯水分成3份,分成9,9,8。 先把两份9杯的放在天平两侧称一下,会有2种可能,一边重或者一样重。如果一边重那么甜的在重 的一边,把9杯水再分成3份,分成3,3,3。再把其中2份放在天平上,还是2种可能,一边重或者 一样重。不管怎么样都能知道甜的在3份中的那一份里。那么再称最后一回,把有甜的那3杯水里, 取2杯在天平两边,还是2种可能,一边重或者一样重。。。这样3回就能分出来了吧。但是在第一 次称的时候,如果是一样重,那么甜的就在8杯里面。一样的把8杯分成3份,分成3,3,2。把两份 3杯的放在天平两边,两种可能,一边重或者一样重,要是一边重,同刚才,在把沉得那3杯按第一 种可能的最后一步称一遍,也是3次试出来。要是两边一样重,那更容易了,甜的就在那两杯里,一 边放一个,也就出来了,还是3次。 明白了吧~ 80,24小时,时钟和分钟指针会相遇多少次? 1:05之后有一次 2:10之后有一次 3:15之后有一次 4:20之后有一次 5:25之后有一次 6:30之后有一次 7:35之后有一次 8:40之后有一次 9:45之后有一次 10:50之后有一次 12:00整有一次 11*2=22。 81, 烧一根不均匀的绳子, 从头烧到尾是要1个小时。现在有若干条材质相同的绳子。 问如何用烧绳的方法来计时一个小时15分钟. 先取两根绳子,第一根从一头点燃,第二根两头同时点燃; 当第二根燃尽时(半小时),将正在燃烧的第一根的另一头也同时点燃; 第一根燃尽总共需耗时45分钟; 再取第三根,两端同时点燃,燃尽需半小时; 这样,总共花了1小时15分钟 【第二部分:业务问题】 82, 现在项目中的测试流程是怎么样的? 阅读相关技术文档参加需求评审会议根据最终确定的需求文档编写测试计划编写测试用例用例评审开发提交代码执行测试用例,记录发现的问题验证bug与回归测试产品验收编写测试报告产品上线 83, 测试流程有没有什么可以改进的地方?这些问题,你有反馈并且拿到结果吗? 原先项目的需求文档很不健全,而且更新也不及时。拿起需求看的时候,可能软件本身已经调整了n次,可是需求本身一次都没有更新。这就致使需求与实现完全脱节,测试人员无法根据需求来编写相应的测试文档。而为了应对迎头压来的工作任务,只有放弃文档,摸着石头过河。一切都凭借测试人员的经验及对业务知识的领悟来进行测试。这样做虽然解了燃眉之急,但是,当测试人员流动的时候,新加入的成员又需要很长一段时间来熟悉、摸索软件的业务功能点。无论对于公司,还是项目本身进度来说这都是不可接受的。要解决文档的问题,首先就得从源头抓起。为此,项目经理从需求开始抓起:要求提供完善的需求,并在需求完成之后进行评审。目的就是希望可以把设计缺陷消灭在需求阶段,省去很多不必要的麻烦评审会主要由项目经理主持,测试部全体成员负责评审,系统分析员负责解答相关问题。评审结束后,与会者提交相关的需求评审记录。根据需求评审记录,系统分析员进行相应的更新。 84, 需求评审和用例评审,分别有哪些人参与?主要做些什么? 产品需求,需要业务人员、产品经理、设计人员、技术负责人、开发人员、测试人员等参加,主要产品经理负责。 需求评审:产品经理,PMO,技术总监,前后端研发和测试。 85, 需求不明确,通过哪些方式解决? 需求来源方,做确认 需求评审、用例评审、通过流程,和定下来的产品文档、测试用例等来明确 跟产品、研发沟通,讨论不明确的需求 记录需求变更,更新测试用例,做好记录 86, 介绍一个在项目中发现问题,分析问题,解决问题,总结经验的案例 在项目中发现了一个充值问题,本来充值到一定额度会有返利,结果充到指定金额发现没有返利,抓包排查发现是后端的币种问题(台币和美),币种没有进行换算导致,然后提交给后端开发修复,记录到文档中,总结:涉及金钱的case还是需要谨慎对待,不管是不是金额问题还是币种问题。 87, 测试过程中有哪些让你感觉到不舒服的地方? 1、需求的频繁变更 2、测试人员不固定 3、需求评估时间不准确 88, 测试过程中碰到了哪些困难? 1、对测试范围只是有个初步的了解,测试到底有多少工作量无法全面衡量 2、无类似的项目参考 3、计划经验不足 4、根据工作量做了计划后,总会有其它优先级更高介入导致又没有按预估的计划开展(俗话说的计划敢不上变化) 89, 测试任务多,时间不够,怎么办? 1、测试组长每天跟进整个测试的进度,及时与项目相关成员沟通测试进度,提前把控有可能出现的风险。 2、安排加班 3、要求开发自测质量要高 4、向上沟通,反馈时间不够,反馈真实情况【预估风险,加班都完不成,或者说压缩测试时间后质量离上线标准差距会很大,(说结果,从质量方面) 90, 项目上线发布后,你还会做哪些工作? 1、白名单测试(灰度测试)通过业务加白的方式给加白的名单开放入口进行测试 2、监控线上数据,测试人员需要在项目上线之后的几个小时内,重点监控线上数据的流向,一旦数据有异常,立即采取措施,回滚代码又或者重新打开开关等,尽量将线上bug引起的损失降到最低,接下来就开始修改bug和修复数据。 在这个时候,测试人员对数据的敏感性特别就要发挥出来,有时似错非错的数据正是BUG的前兆,千万不要掉意轻心。 91, 线上出问题了,其他组的运营来找你,你会怎么做? 1、明确问题 对于用户或运营反馈的线上问题,首先得搞清楚问题到底是什么。有时用户对问题的描述含糊不清,模棱两可,不同的人会产生不通的理解。 2、判断反馈是否是bug 根据用户对问题的描述,判断问题是已知问题、非问题、还是可能的bug。有些问题是已经发现还未修改的,有些问题是由于客户误操作、环境配置错误或者对功能的理解有误造成的。对于正在排期修改的已知问题,告知用户问题修复后会通知用户或者大致的修复时间(如果有的话)。对于个别不会修复的已知问题,告诉用户要注意的事项,以避免该问题。对于非问题,告知用户哪些地方导致的该问题,也要告诉用户要注意的事项,以避免该问题再次出现。 3、复现问题、定位问题 对于可能是问题的问题,需要尝试复现,在与用户相同(或相似)的环境上,按照用户描述的步骤进行操作,查看是否会出现问题。或者征求用户同意后,登录用户账号查看问题。(有时运营会反馈两个用户出现同一个问题,聚焦其中一个用户的信息进行复现)对于可复现的问题,找到必现路径,通过抓包查看接口数据、查看相关数据库表数据、查看埋点、查看代码逻辑等方式,定位问题出现的原因。对于偶现的比较难以复现的问题,尽量找到复现的步骤,可考虑弱网、无网络、并发操作、特殊操作、特殊设备、其他功能的影响等情况。最终无法复现的问题,可以找开发查看相关日志(提供问题描述,问题产生的时间),看看能不能找到一些报错信息,推测问题出现的原因和步骤,再进行复现。 4、跟进问题 对于已经定位到原因的问题,反馈给开发,继续跟踪开发修改进度。 对于最后都没有找到原因的问题,告知用户再遇到时记录具体操作及时间,及时通报,或者增加相关的日志,以便找到问题出现原因。 5、思考与总结 对于线上问题,思考在日后的测试分析、测试执行、或产品设计中,有哪些地方可以完善,以最大限度避免问题产生。 92, 项目的系统架构和技术语言是什么样的? 技术结构采用线上线下流行的前后端隔离结构开发,由用户层、UI层、微服务层、数据层等部分组成,服务于PC、App、H5等客户端用户。 下图是系统的技术体系结构图。 前端使用HTML,Css,Javascript等语言进行页面布局、样式、动效的编写,服务端使用Java、C#、PHP、Ruby语言编写代码 1、HTML 和带样式的 HTML HTML 就是一组标签和文本的组合,是一个最基本的网页。它已经包含了网页常见的素,实际上在 Web 早期的很长一段时期内,网页都是这个样子。后来随着使用网络的人群越来越广泛,在 HTML3.0 中引入了对网页样式的定义,某种程度上可以说,也是从这个时候开始产生了网页设计师的角色。 2、CSS 带样式的 HTML 也拥有一个缺点,它需要为每个标题和文字都设定样式,工作量非常庞大。 CSS 就是在这样的情况下诞生了。CSS ,又称叠层样式表,简言之是一种用来表现 HTML 文件样式的样式设计语言。CSS 能够对网页中的对象的位置排版进行像素级的精确控制,实现基础的静态的交互设计;而CSS 目前的最新版本 CSS3 能够真正做到网页表现与内容分离。 3、Javascript 差不多在 CSS 诞生的同一时间,大家开始觉得这样静态的网页似乎略显无聊,能不能给网页加入一些可以动起来的素?比如一个按钮之后变个颜色。当时网景公司的工程师Brendan Eich 就给他们自家的浏览器引入了这种实现动态效果的脚本语言,这就是 Javascript(简称 JS)的诞生。所以通俗来说,Javascript 就是用来给 HTML 网页增加动态功能,实现更炫酷的交互。 1、java 庞大,复杂。但 Java 的优点就是适合处理特别大的数据量,如果你的项目会很快实现大爆发,需要处理海量的请求,那么 Java 是一个不错的选择。 2、PHP 可以快速上手,相比其他语言,可以更快的为应用添加各种新功能。当然,可维护性就另当别论了。 3、Ruby 非常接近自然语言,基本上即使不懂编程,也能看明白 70% 或 80%。04 年出现了一个用 Ruby 编写的 Web 开发框架 Ruby on Rails,当时的效果是非常震撼的,以前需要一个团队才能搞定的事情,使用 Ruby on Rails 后 1 个人就可以胜任了,所以 Ruby on Rails 在极短的时间内就成为了 Ruby 的代名词,也成为了新手学习 Web 开发的不二选择,但是 Ruby 语言也并非十全十美,快的同时,他的最大短板就是性能。Twitter 最早就是使用 Ruby on Rails 开发的,但是随着用户数的逐步增长,Twitter 的宕机开始变得非常频繁,后来他们迫不得已将整个系统从 Ruby 迁移到到了一个从 Java 派生出来的语言 Scala。 93, 怎么看待系统测试,自动化测试和测试开发 1、系统测试 在真实系统工作环境下通过与系统的需求定义作比较,检验完整的软件配置项能否和系统正确连接,发现软件与系统/子系统设计文档和软件开发合同规定不符合或与之矛盾的地方;可以以最少的人力和时间发现潜在的各种错误和缺陷。 2、自动化测试 自动化测试是把人为驱动的测试行为转化为机器执行的过程,其重点在于把人为的驱动转化为机器,也就是写好测试脚本自动测试程序。要做自动化测试需要会使用自动化测试工具,会写自动化测试的脚本。相对来说并不难。 3、测试开发 测试开发的核心还是测试工程师,但他并不是我们所了解的普通测试工程师,他是融合了测试的工作,以及开 发的结合,可以用开发的技术去辅助测试的工作,研发测试的平台,测试的工具,测试的框架等。 实质上,可以说自动化测试是测试开发中的一种类型。 所以如果要说这两种测试哪个更难的话,测试开发会相对难些,因为他对于开发能力的要求就更高了。 【第三部分:HR面的问题】(自己回答) 94,现在是在职还是离职,为什么要离职呢? 95,公司招聘这个岗位,你觉得你的优势是什么? 96, 既然岗位要求的白盒和性能你没有接触过,为什么还来投递了这个职位呢? 97, 按照STAR法则,介绍参与或者负责的一个项目,发生背景,需要完成的目标/解决的事情,怎么去推动,最后有什么样的成果? 98,就个人经历来说,之前待的几家公司,分别有什么成长? 99, 两段工作经验,体会到最大的困难分别是什么? 100, 怎么克服上述的难点,具体举例 101,工作上跟技术有关的难点呢,也举例看看 102, 为什么会对这个技术问题印象深刻? 103, 在团队中做了哪些成绩? 104, 有哪些长期坚持在做的事情? 105, 假如你退休后,回顾人生,你会希望自己有哪些成绩值得你这辈子骄傲和自豪? 106, 有哪些事情是你觉得有价值,会去做的? 107, 为什么觉得这些是有价值的事情? 108, 平常的一个学习途径是怎么样的? 109, 有没有带新人做项目的经历,分享一下 110, 职业规划是怎么样的?预计多久达成这样的目标? 111, 下一份工作,你主要考虑哪些方面来选择工作机会,团队和公司呢? 112, 你身上的三个优点 113, 业余时间做些什么?
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/59169.html