【测试开发】面试题总结(3)

祝一切顺利~~


1. “String s = “1””与“String s = new String(“1”)”中的s一样吗?

在Java中,“String s = “1””和“String s = new String(“1”)”这两条语句创建的字符串对象是不同的。

第一条语句使用了字符串字面值的方式创建一个字符串对象,并将其引用赋值给变量s。当编译器遇到字符串字面值时,会自动在常量池中查找是否存在该字面值所表示的字符串对象,如果存在,则直接引用该对象;否则,创建一个新的字符串对象并添加到常量池中。

而第二条语句使用了new运算符显式地创建了一个新的字符串对象,并将其引用赋值给变量s。

虽然这两种方式都可以创建一个字符串对象并赋值给s,但它们所创建的对象并不相同。第一种方式创建的字符串对象是一个常量,存储在常量池中,而第二种方式创建的字符串对象则是普通的堆内存对象。

需要注意的是,在代码中频繁地使用字符串字面值创建字符串对象可能会导致性能问题,因为每次使用字符串字面值都会在常量池中查找或创建字符串对象,而使用new运算符则可以避免这个问题。

2. StringBuilder和StringBuffer的区别

StringBuilder和StringBuffer都是用来操作字符串的类,它们的主要区别在于线程安全和性能上。

StringBuffer是一个线程安全的类,也就是说,在多线程环境下使用它不会出现问题。这是因为StringBuffer中的方法都是加了synchronized关键字的,保证了同一时间只有一个线程可以访问它。

而StringBuilder则没有考虑线程安全,它的方法没有加synchronized关键字,因此在多线程环境下使用可能会出现问题。

另外,由于StringBuffer需要进行同步处理,所以它的性能比StringBuilder略低。

因此,在单线程环境下,建议使用StringBuilder来操作字符串,可以获得更好的性能;而在多线程环境下,建议使用StringBuffer来避免线程安全问题。

3. 针对一支笔进行性能测试

针对一支笔进行性能测试的话,可以考虑以下指标:

写字流畅度:测试在不同纸张和温湿度条件下,笔的书写流畅度和顺滑程度。这个可以通过在不同纸张上书写同样的文字,并且使用相同的力道和速度来比较。

笔墨浓淡程度:测试在相同纸张下,笔的墨水浓淡程度和是否会出现晕染、漏墨等情况。可以通过在同一纸张上使用相同力道和速度进行横线和竖线绘制,并且观察墨水的浓淡程度以及是否出现晕染等现象。

笔的耐久性:测试笔的耐用程度,即使用多长时间后笔的书写效果开始下降,墨水开始干涸或者出现漏墨现象。可以通过连续地书写同样的文字,并且记录下每次书写的长度和墨水消耗量来评估笔的耐久性。

笔的舒适度:测试在长期使用过程中,手握笔的舒适度以及是否容易疲劳。可以邀请多位用户持续使用同一支笔进行书写测试,并且记录下他们的使用感受和舒适程度来评估笔的舒适性。

笔的价格:测试笔的价格是否合理,是否符合市场价值。可以通过与同类产品进行比较来评估笔的价格合理性。

4. 介绍排序算法,哪个时间复杂度最快,选一个排序算法进行具体介绍

在常见的排序算法中,时间复杂度最快的是快速排序。快速排序的平均时间复杂度为O(nlogn),比其他常用的排序算法如冒泡排序、插入排序、选择排序等更快。不过,快速排序的最坏时间复杂度为O(n ^ 2),因此在实际应用时需要注意优化,优化的方法是挖坑法。另外,还有一些特殊情况下能够达到线性时间复杂度(O(n))的排序算法,如计数排序和基数排序,但它们的使用场景较为特定。

5. HashMap与HashTable的区别

HashMap和Hashtable都是Java中用于实现Map接口的数据结构,它们之间最主要的区别如下:

线程安全性:Hashtable是线程安全的,而HashMap则不是。这是因为Hashtable的所有方法都经过了同步处理,而HashMap则没有。

null键与值:Hashtable不允许键或值为空(null),否则会抛出NullPointerException异常,而HashMap则可以允许一个键为null,同时也可以有多个值为null的映射对。

性能:由于Hashtable需要进行同步处理,因此在并发环境下性能可能会受到影响。而HashMap则无需进行同步处理,因此在单线程环境下性能更好

迭代器:Hashtable的迭代器是通过Enumeration实现的,而HashMap的迭代器是通过Iterator实现的。在编写代码时,Iterator更容易使用,而且支持快速失败机制。

总的来说,如果应用程序需要线程安全的Map实现,则可以选择使用Hashtable;如果应用程序不需要考虑线程安全性,并且需要更好的性能,则可以选择使用HashMap。

6. ArrayList与LinkedList的区别

ArrayList和LinkedList是Java中两种常用的List集合实现类,它们的主要区别在底层数据结构和性能表现方面。

底层数据结构不同
ArrayList底层基于数组实现,而LinkedList则基于双向链表实现。

随机访问与插入/删除操作的时间复杂度不同
由于ArrayList底层采用数组实现,支持随机访问,get()方法的时间复杂度为O(1),但在插入、删除元素时需要移动其他元素,时间复杂度为O(n)。同时,固定大小可能会导致扩容时需要重新分配内存,从而占用更多空间。

而LinkedList基于链表实现,支持快速的插入、删除操作,时间复杂度为O(1),但在随机访问时需要遍历整个链表,时间复杂度为O(n)。此外,由于链表本身不需要连续的内存空间,因此在频繁添加、删除元素时,LinkedList比ArrayList具有更好的性能表现。

内存空间消耗不同
由于ArrayList需要预先申请一定数量的内存空间,而且如果元素数量超出了这个内存空间,则需要重新申请更大的内存空间来存储元素,因此ArrayList会占用较多的内存空间。
而LinkedList则不需要在一开始就申请与元素数量相等的内存空间,因此在元素数量较少时,LinkedList占用的内存空间可能会比ArrayList更小。

综上所述,如果需要频繁进行随机访问操作,建议使用ArrayList,如果需要频繁执行添加、删除操作,则应该选择LinkedList。

7. Http状态码

HTTP状态码是指客户端向服务器发起请求后,服务器返回的三位数字代码,用于表示请求的处理情况。以下是一些常见的HTTP状态码及其含义:

200 OK:请求成功。
201 Created:已经创建了资源。
204 No Content:请求成功,但响应中没有实体的主体部分。通常在DELETE操作时使用。
301 Moved Permanently:所请求的资源已被永久移动到新位置。
302 Found:所请求的资源已被临时移动到新位置。
400 Bad Request:请求无效或不完整。
401 Unauthorized:未授权,需要身份验证。
403 Forbidden:禁止访问,服务器拒绝请求。
404 Not Found:请求的资源不存在。
500 Internal Server Error:服务器内部错误,无法完成请求。
还有其他许多HTTP状态码,每个状态码都有自己的含义。了解HTTP状态码对于诊断网络问题和调试网站非常有帮助。

8. 如何排查内存泄漏

内存泄漏是指在程序运行过程中,分配的内存没有被及时释放,导致系统内存的不断占用和浪费,最终可能会导致程序崩溃。

以下是一些常见的排查内存泄漏的方法:

使用内存调试工具:现有的许多编程语言都提供了一些内存调试工具,如 Valgrind、GDB 等,使用这些工具可以检测程序中的内存泄漏并进行修复。

内存快照:通过记录程序执行时内存的状态,可以找出哪些对象已经被创建但未被释放。许多编程语言都提供了内存快照功能,例如 Java 中的 HeapDump 和 Eclipse Memory Analyzer(MAT)。

代码审查:通过对程序的源代码进行审查,找出可能导致内存泄漏的代码,并进行修复。特别是需要注意的是,如果程序中存在循环引用的情况,也可能导致内存泄漏。

分析程序日志:对于一些无法重现的内存泄漏问题,可以通过分析程序日志来定位问题所在。

总之,排查内存泄漏是一项比较复杂的工作,需要综合运用以上方法,同时结合实际情况来确定适合自己的解决方案。

9. LEFT JOIN和RIGHT JOIN

在MySQL中,LEFT JOIN和RIGHT JOIN都是连接两个或多个表格的查询类型。

LEFT JOIN返回左表格的所有行以及右表格中与左表格匹配的行。如果右表格中没有匹配的行,则返回NULL值。可以使用以下语法:

SELECT * FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
其中,table1是左表格,table2是右表格,column_name是用于连接两个表格的列名。

类似地,RIGHT JOIN返回右表格的所有行以及左表格中与右表格匹配的行。如果左表格中没有匹配的行,则返回NULL值。可以使用以下语法:

SELECT * FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
所以,LEFT JOIN和RIGHT JOIN之间的区别在于它们返回的数据集中哪些行。LEFT JOIN返回左表格的所有行,而RIGHT JOIN返回右表格的所有行。如果需要返回两个表格的所有行,则可以使用FULL OUTER JOIN,但是MySQL不支持此类型的JOIN,可以使用UNION ALL将LEFT JOIN和RIGHT JOIN组合在一起。

10. 微信发消息测试用例设计

发送简单文本消息:尝试发送包含一个或多个字符的简单文本消息,检查是否成功发送并显示在聊天窗口中。

发送长文本消息:尝试发送包含大量字符的文本消息,检查是否成功发送并正确地显示在聊天窗口中。

发送表情符号:尝试使用微信内置的表情符号发送消息,检查是否成功发送并正确地显示。

发送图片/视频:尝试选择图片或视频文件并将其发送给联系人,检查文件是否成功上传并能够正确地显示和播放。

发送语音消息:尝试录制一段语音消息并将其发送给联系人,检查语音消息是否成功上传并能够正确地播放。

发送位置信息:尝试发送当前位置信息或选择其他位置信息发送给联系人,检查位置信息是否准确地显示在聊天窗口中。

发送链接:尝试将链接复制到聊天窗口中并发送给联系人,检查链接是否可以被打开并显示正确的网页内容。

发送红包:尝试发送一个可用的红包给联系人,检查红包是否成功生成并能够正确地领取。

群聊测试:尝试在群聊中发送消息,并检查所有成员是否都能够接收到消息并正常显示。

消息撤回测试:尝试发送一条消息并在规定的时间内进行撤回,检查消息是否被成功撤回,并且不再显示在聊天窗口中。

11. webdriver

WebDriver是一个用于测试web应用程序的工具,它提供了一组API来与浏览器进行交互。通过使用这些API,开发人员可以编写自动化测试脚本来模拟用户对Web应用程序的操作。WebDriver支持多种编程语言和操作系统,并且可以与许多不同类型的浏览器和设备一起使用。

WebDriver包括一组命令,可以通过编写测试脚本来调用这些命令以控制浏览器的行为。例如,WebDriver允许您在浏览器中打开网站、单击链接、填写表单、提交表单等等。此外,WebDriver还可以检查页面元素的属性、执行JavaScript代码以及处理警告和弹出窗口等。

12. 同步和异步

同步和异步是两种不同的编程模式,它们描述了程序组件之间如何交互。

在同步模式中,调用方发出请求并等待响应。在这种情况下,调用方需要一直阻塞等待请求的响应,直到得到响应才能继续执行后面的代码。这就意味着,在同步模式下,调用方必须等待操作完成才能继续执行其他任务。

而在异步模式中,调用方发出请求后不会立即等待响应,而是可以继续执行后面的代码。当操作完成时,调用方将获得通知或回调函数来处理结果。在这种情况下,调用方不需要等待操作完成,因此可以继续执行其他任务,提高了程序的并发性和性能。

总的来说,同步和异步都是用于描述程序组件之间通信和交互的方式,同步是指调用方需要一直等待响应,而异步则是指调用方不需要等待响应,可以继续执行后续任务。

13. Mysql展出最近四条数据问题

查询最新四条数据

SELECT * FROM table_name ORDER BY id DESC LIMIT 4;

14. selenium弹窗问题

在Web应用程序中,有时会出现弹出窗口(如提示框、警告框或确认框),这可能会对自动化测试造成一定的影响。下面是使用Selenium处理常见类型弹窗的方法:

提示框处理:使用driver.switch_to.alert()方法获取当前活动的alert对象,然后使用text属性获取提示框文本,使用accept()方法点击“确定”按钮,或者使用dismiss()方法点击“取消”按钮。
alert = driver.switch_to.alert()
alert_text = alert.text
alert.accept() # 或者使用dismiss()方法
确认框处理:与提示框类似,也可以使用switch_to.alert()方法获取当前的confirm对象。但是,需要根据具体情况使用accept()或dismiss()方法来模拟用户的操作。
confirm = driver.switch_to.alert()
confirm.accept() # 或者使用dismiss()方法
输入框处理:使用send_keys()方法向输入框中输入指定的值,然后使用accept()或dismiss()方法来模拟用户的操作。
prompt = driver.switch_to.alert()
prompt.send_keys(“输入的值”)
prompt.accept() # 或者使用dismiss()方法
注意:如果没有弹窗,switch_to.alert()方法将引发NoAlertPresentException异常。因此,在使用这些方法之前,最好先检查是否存在弹窗。

15. collection, map,set

在Java中,Collection是一组对象的容器,可以用来保存、操作和处理一组对象。它是一个接口,定义了一些常见的集合操作,例如添加元素、删除元素等。Collection接口的常见实现类包括List、Set和Queue等。

List是有序的、可重复的,而Set是无序的、不可重复的。
List可以通过索引访问和修改,而Set不能。
List适用于需要保持顺序的情况,而Set适用于需要去重或进行集合运算的情况。

Queue是先进先出(FIFO)的集合,通常用于实现队列。PriorityQueue是常见的Queue实现类。

除了基本的集合操作,Collection还提供了很多高级操作,例如排序、查找、过滤等。这些操作可以通过Java 8中引入的Stream API来实现,使得对集合的处理更加方便和高效。

16. 反射

反射(Reflection)是Java中一种强大的机制,它允许程序在运行时动态地获取类的信息、构造对象、调用方法和访问属性等。简单来说,反射就是在运行时检查对象和类的信息,并且可以修改对象和类的状态。

在Java中,每个类都有一个Class对象,用于描述该类的类型信息,包括类名、父类、接口、字段、方法等。通过Class类提供的各种方法,可以实现对类的探测、实例化和调用方法等操作。例如,可以通过Class.forName()方法加载指定类并创建其实例,或者使用getDeclaredMethod()方法获取方法对象并调用该方法。

反射对于编写通用框架和工具库非常有用,因为它允许程序在运行时处理未知类型的对象和方法。但是,过度使用反射可能会导致代码复杂性增加、性能降低和安全问题等隐患,因此需要谨慎使用。

17. linux查看磁盘使用情况

查看所有磁盘使用情况
df -h
查看固定磁盘
du -sh + “路径”

18. 测试文档包含哪些文档

测试文档是用于描述软件或系统的测试计划和测试过程的文档。通常,测试文档应该包括以下内容:

测试计划:描述测试的目标、范围、方法、工具、资源、时间表等信息。

测试用例:定义每个测试场景的输入、操作、预期输出和实际结果。

缺陷报告:记录测试中发现的缺陷及其详细信息,包括缺陷编号、优先级、状态、发现者、复现步骤、修复情况等。

测试日志:记录测试过程中执行的操作、测试结果、问题和建议等信息,以便跟踪测试进度和评估测试效果。

测试总结报告:汇总测试结果,提供对软件质量的评价和改进建议,以便为软件发布做出最后决策。

这些文档在软件开发和测试过程中非常重要,可以帮助团队更好地理解和管理测试工作,提高软件的质量和稳定性。

19. MD5原理

MD5是一种常用的哈希函数,通常用于生成文件或字符串的数字指纹或唯一标识。它通过将任意长度的消息作为输入,在输出固定长度128位(16字节)的哈希值。

MD5的原理可以简单概括为以下几个步骤:

填充消息:将消息填充到一个512比特的块中,使其长度为448比特,并在末尾添加一个64比特的长度表示原始消息长度的字段。

初始化缓冲区:根据算法规定,初始化一个长度为4个32位整数的缓冲区A、B、C、D。

处理消息块:对每个消息块进行处理。首先,从消息块中提取16个32位子块存放在一个数组M中。然后,执行四轮循环操作,每轮循环使用不同的非线性函数和位移量,以更新缓冲区的值。

生成哈希值:当所有的消息块都被处理完毕后,将缓冲区中的四个32位整数连接起来,按照顺序组成128位(16字节)的哈希值。

MD5算法中使用了多个非线性函数和位移量来增加哈希值的随机性和复杂度,从而防止针对哈希碰撞的攻击。此外,MD5的输出长度为固定的128位,可以在不同平台和设备之间方便地进行比较和校验。

需要注意的是,由于MD5算法存在一些安全漏洞,如碰撞攻击等,因此在某些情况下不再被认为是一个安全的哈希函数。一些更加安全的哈希函数,如SHA-256、SHA-512等已经被广泛采用。

哒哒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件测试面试题包括一些关于Selenium的限制和缺陷以及测试类型的问题。关于Selenium的限制和缺陷,除了基于Web和移动应用程序的测试,Selenium不支持桌面软件自动化测试。此外,软件测试报告和用例管理只能依赖第三方插件,例如Junit/TestNG和unittest。由于Selenium是免费的软件,没有供应商提供支持和服务,如果有问题,只能求助于Selenium社区。另外,Selenium的学习门槛可能较高,需要具备一定的编程语言基础才能充分发挥其功能。 此外,面试中还可能涉及其他测试相关的知识点,如基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等等。 当谈到Selenium自动化测试时,主要涉及的测试类型是冒烟测试和回归测试。冒烟测试和回归测试是在Selenium自动化测试中常用的测试类型。回归测试主要是写一些功能稳定、容易实现的场景,并通过自动化手段去实现,从而节约测试时间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [selenium 自动化测试面试题及答案](https://blog.csdn.net/qq_28163501/article/details/107030286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [selenium面试题总结——测试经验分享](https://blog.csdn.net/qq_42434318/article/details/108491882)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值