腾讯云智测试开发面经
1、投递时间线
2.20投递简历,3.11第一轮面试,3.30第二轮面试,4.4第三轮面试,4.10第四轮面试,4.11offer意向书
2、第一轮面试
第一轮面试技术面,面试官是导师,面试时长40多分钟
1)自我介绍
2)数组和列表的区别
3)了解哪些数据库
4)进程和线程的区别
5)了解哪些Linux命令,有没有接触过Linux操作系统
6)深挖项目,用到的数据集是多大,怎么采集以及怎么处理,最后的模型结果怎么样
7)为什么要投递测试开发这个岗位?你觉得你的优势是什么
8)目前你对测试开发这个岗位的了解是什么,你掌握了哪些测试知识
9)黑盒测试和白盒测试的区别
10)了解SQL语句吗?当时给了一个场景, 写出select查询语句
11)手撕代码。给一个数组和目标值,找出该数组中和为目标值的两个数
12)反问
2) 数组和列表的区别
- 数组:在Python中,数组(array)是
array
模块提供的,它只能存储相同类型的元素,并且对数值型数据更有效率。数组的大小固定。 - 列表:Python中的列表(list)是一个动态数组,可以存储不同类型的元素,并且可以根据需要自动扩展大小。
3) 了解哪些数据库
- 可以提及关系型数据库如MySQL、PostgreSQL,以及非关系型数据库如MongoDB、Redis等。强调你最熟悉的数据库及其应用场景。
4) 进程和线程的区别
- 进程:是操作系统分配资源的基本单位,每个进程有自己的内存空间。
- 线程:是进程内的执行单元,共享进程的资源。线程之间的切换比进程快,但线程间通信更容易出现同步问题。
5) 了解哪些Linux命令,有没有接触过Linux操作系统
- 提及一些常用的Linux命令如
ls
,cd
,cp
,mv
,grep
,awk
,sed
,find
,chmod
,chown
等。说明你在Linux环境下进行开发的经验,比如部署应用、管理服务等。
6) 深挖项目
- 准备好详细介绍你参与过的项目,包括使用的数据集规模、采集方法、处理流程、模型训练过程和最终结果。使用具体数字来支持你的描述,例如数据集大小、准确率提升等。
7) 为什么要投递测试开发这个岗位?你觉得你的优势是什么
- 强调你对该领域的兴趣、个人技能与岗位要求的匹配度以及你能为团队带来的价值。举例说明你如何解决问题的能力、学习新技术的速度等。
8) 目前你对测试开发这个岗位的了解是什么,你掌握了哪些测试知识
- 简述测试开发的重要性,如自动化测试框架的设计与实现、持续集成/持续交付(CI/CD)流程的理解等。提及掌握的测试工具和技术,如Selenium、JUnit、TestNG等。
9) 黑盒测试和白盒测试的区别
- 黑盒测试:关注软件功能,不考虑内部结构或工作原理,旨在验证软件是否满足需求。
- 白盒测试:基于代码逻辑和路径覆盖,用于检查程序内部结构是否正确,常用于单元测试。
10) 了解SQL语句吗?
- 根据给定场景编写
SELECT
查询语句。确保理解表结构、字段含义,并能写出有效的查询条件。
SELECT column1, column2 FROM table_name WHERE condition;
11) 手撕代码。给一个数组和目标值,找出该数组中和为目标值的两个数
- 使用哈希表解决这个问题,时间复杂度O(n):
def two_sum(nums, target):
num_map = {}
for i, num in enumerate(nums):
complement = target - num
if complement in num_map:
return [num_map[complement], i]
num_map[num] = i
return []
12) 反问
- 关于公司文化、团队构成、未来的技术发展方向等问题,展示出你对加入公司的热情和对未来发展的思考。例如:“贵公司对于新入职员工有哪些培训计划?”或者“您能分享一下团队目前面临的最大挑战是什么吗?”
通过这些准备,你可以更好地应对面试中的各种问题,展现出自己的专业能力和求职诚意。
3、第二轮面试
第二轮面试是技术面,面试官是leader,面试时长30多分钟
1)自我介绍
2)问了专业,以及为什么会投递测试开发岗位
3)问了项目,介绍一下项目背景、项目难点以及项目结果,你在里面担任什么角色,遇到问题时怎么解决的(这里聊了好久)
4)针对于测试开发岗位,你学习了哪些内容或者你了解测试开发需掌握哪些技能
5)问了测试的一些基础知识,测试用例怎么写,有哪些方法
6)平时用的哪种编程语言
7) 面试官介绍了业务,问大数据平台了解哪些
8)了解云智吗
9)手撕代码。题目是无重复字符的最长字串,写完之后问了思路
10)反问
第二轮面试没过多问到八股文,可能由于我本科计算机,硕士是生物与医药,对专业比较好奇
1)自我介绍
回答建议:
- 简短介绍你的教育背景、专业方向以及与测试开发岗位相关的技能和经验。
- 强调你在项目中的角色和贡献,尤其是与测试开发相关的部分。
- 展现你对测试开发的兴趣和热情。
示例:
"您好,我是XXX,毕业于XXX大学计算机科学专业。我的研究方向是软件工程和自动化测试,在校期间参与了多个项目的开发和测试工作。我熟悉Python和Java编程语言,并且对自动化测试框架如Selenium、Pytest有深入的理解。我对测试开发岗位非常感兴趣,因为它结合了开发和测试的优势,能够提升软件质量和效率。"
2)问了专业,以及为什么会投递测试开发岗位
回答建议:
- 结合你的专业背景和个人兴趣来说明为什么选择测试开发。
- 强调你对测试开发的理解,例如如何通过自动化手段提高测试效率,减少人工成本。
示例:
"我的专业是计算机科学,主要学习了软件开发、算法设计等课程。在学习过程中,我发现测试是软件开发生命周期中非常重要的一环,但传统手动测试效率较低,而测试开发可以通过编写自动化脚本大幅提高效率。我对这种结合开发与测试的工作方式非常感兴趣,因此选择了投递测试开发岗位。"
3)问了项目,介绍一下项目背景、项目难点以及项目结果,你在里面担任什么角色,遇到问题时怎么解决的
回答建议:
- 项目背景:简要描述项目的背景、目标和意义。
- 项目难点:重点突出技术上的挑战或团队合作中的困难。
- 项目结果:用具体数据说明项目的成果(如性能提升、错误率降低等)。
- 你的角色:明确说明你在项目中的职责,以及你如何解决问题。
示例:
"我参与了一个电商平台的自动化测试项目,目标是优化测试流程并减少人工测试成本。项目的主要难点是如何处理复杂的业务逻辑和频繁变更的需求。我负责设计和实现自动化测试框架,并编写了核心功能的测试用例。在遇到需求变更时,我通过模块化设计快速调整测试脚本,最终将测试时间从原来的8小时缩短到2小时,覆盖率达到95%以上。"
4)针对于测试开发岗位,你学习了哪些内容或者你了解测试开发需掌握哪些技能
回答建议:
- 提及你学习过的内容,如编程语言、测试工具、自动化框架等。
- 强调你需要掌握的核心技能,如编程能力、测试理论、持续集成等。
示例:
"为了胜任测试开发岗位,我学习了以下内容:
- 编程语言:熟练掌握Python和Java,熟悉常用的库如unittest、pytest等。
- 自动化测试工具:如Selenium、Appium,用于Web和移动端的自动化测试。
- 测试理论:了解黑盒测试、白盒测试、回归测试等方法。
- 持续集成:熟悉Jenkins的使用,能够将自动化测试集成到CI/CD流程中。
我认为测试开发需要具备扎实的编程能力和测试理论基础,同时还需要熟悉敏捷开发和DevOps理念。"
5)问了测试的一些基础知识,测试用例怎么写,有哪些方法
回答建议:
- 测试用例的结构:包括测试标题、前置条件、输入、预期输出等。
- 常用方法:
- 等价类划分:将输入划分为有效和无效等价类。
- 边界值分析:测试输入的边界值。
- 因果图法:分析输入和输出之间的因果关系。
- 场景法:基于用户操作场景设计用例。
示例:
"测试用例的设计通常遵循以下步骤:
- 明确测试目标:确定需要验证的功能点。
- 划分等价类和边界值:覆盖所有可能的输入情况。
- 编写用例:包括前置条件、输入数据、执行步骤和预期结果。
比如,测试登录功能时,可以设计以下用例:
- 输入正确的用户名和密码,验证是否成功登录。
- 输入错误的用户名或密码,验证是否有提示信息。
- 不输入任何内容直接点击登录按钮,验证是否有校验提示。"
6)平时用的哪种编程语言
回答建议:
- 提及你最熟悉的编程语言,并说明你在测试开发中的应用。
示例:
"我平时主要使用Python进行开发和测试,因为它语法简洁,适合快速开发自动化脚本。此外,我也熟悉Java,尤其是在处理企业级应用时会用到Spring等框架。"
7)面试官介绍了业务,问大数据平台了解哪些
回答建议:
- 如果你了解大数据平台,可以提及Hadoop、Spark、Flink等技术栈。
- 如果不了解,可以坦诚说明,但表达出学习的兴趣。
示例:
"我对大数据平台有一定的了解,比如Hadoop用于分布式存储和计算,Spark则提供了高效的内存计算能力。虽然我没有直接参与过大平台的开发,但我对这些技术很感兴趣,并希望有机会深入学习和实践。"
8)了解云智吗
回答建议:
- 如果了解,可以简单介绍云智的产品和服务(如云计算、人工智能解决方案等)。
- 如果不了解,可以表示愿意进一步了解。
示例:
"我对云智有一些了解,它是一家专注于云计算和人工智能技术的公司,提供从基础设施到智能应用的一站式服务。我对贵公司在AI领域的创新非常感兴趣,希望能加入团队共同成长。"
9)手撕代码。题目是无重复字符的最长子串,写完之后问了思路
代码实现:
def length_of_longest_substring(s):
char_index = {}
max_length = 0
start = 0
for i, char in enumerate(s):
if char in char_index and char_index[char] >= start:
start = char_index[char] + 1
char_index[char] = i
max_length = max(max_length, i - start + 1)
return max_length
思路解释:
"这道题的核心是利用滑动窗口的思想,记录每个字符最近一次出现的位置。当遇到重复字符时,将窗口的起点移动到重复字符的下一个位置,从而保证窗口内的字符都是唯一的。通过不断更新最大长度,最终得到无重复字符的最长子串长度。"
10)反问
建议问题:
- 团队目前的技术栈是什么?未来是否有计划引入新的技术?
- 贵公司在测试开发方面的自动化覆盖率如何?是否有专门的测试开发团队?
- 您认为测试开发工程师在未来一年内需要重点关注哪些方面?
目的:
- 展现你对未来工作的思考和规划。
- 获取更多关于职位和团队的信息,帮助你做出更好的决策。
4、第三轮面试
第三轮面试也是技术面,面试官是总监,面试时长30多分钟
1)自我介绍
2)get和post的区别
3)了解python,说一下迭代器和生成器的区别以及用法
4)深拷贝和浅拷贝的区别
5)读取一个内存很大的文件,应该怎么读取,这里问得非常详细,具体到怎么操作以及命令写法
6)手撕代码
7)反问
1)自我介绍
回答建议:
- 简明扼要地介绍自己的教育背景、专业技能和相关项目经验。
- 强调与应聘职位相关的技术能力和成就。
- 可以提及自己对技术的热情以及学习能力。
示例:
"您好,我是XXX,毕业于XXX大学计算机科学专业。在校期间,我主要研究Web开发和后端技术,熟悉Python、JavaScript等编程语言。在实习期间,我参与了一个基于Django框架的电商平台开发项目,负责API设计和性能优化。我对新技术充满兴趣,喜欢通过不断学习提升自己。希望能加入贵公司,贡献我的技术能力并继续成长。"
2)GET 和 POST 的区别
回答建议: 从请求方式、用途、数据传递方式和安全性等方面进行对比。
示例:
GET 和 POST 是 HTTP 协议中最常用的两种请求方法,它们的主要区别如下:
- 用途:GET 用于获取资源,POST 用于提交数据。
- 数据传递方式:GET 将数据附加在 URL 中(查询字符串),而 POST 将数据放在请求体中。
- 安全性:GET 因为数据暴露在 URL 中,不适合传输敏感信息;POST 更安全。
- 数据大小限制:GET 通常受浏览器 URL 长度限制,而 POST 没有明确限制。
- 幂等性:GET 是幂等的(多次请求结果相同),POST 不是幂等的(可能会改变服务器状态)。
3)迭代器和生成器的区别以及用法
回答建议:
- 迭代器:是一个实现了迭代协议的对象,具有
__iter__()
和__next__()
方法,用于遍历集合中的元素。 - 生成器:是一种特殊的迭代器,使用
yield
关键字实现,可以暂停和恢复执行,适合处理大数据流或延迟计算。
示例代码:
# 迭代器
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
value = self.data[self.index]
self.index += 1
return value
# 生成器
def my_generator(data):
for item in data:
yield item
# 使用
iterator = MyIterator([1, 2, 3])
for i in iterator:
print(i)
generator = my_generator([1, 2, 3])
for i in generator:
print(i)
解释:
- 迭代器需要显式实现
__iter__()
和__next__()
方法。 - 生成器更简洁,使用
yield
关键字即可实现类似功能。
4)深拷贝和浅拷贝的区别
回答建议:
- 浅拷贝:只复制对象的第一层结构,内部引用类型的数据仍然共享。
- 深拷贝:递归复制对象的所有层级,完全独立于原对象。
示例代码:
python
import copy
original = [1, [2, 3], 4]
# 浅拷贝
shallow_copy = copy.copy(original)
shallow_copy[1][0] = 99
print(original) # 输出: [1, [99, 3], 4]
# 深拷贝
deep_copy = copy.deepcopy(original)
deep_copy[1][0] = 88
print(original) # 输出: [1, [99, 3], 4]
解释:
- 浅拷贝修改嵌套列表会影响原对象。
- 深拷贝则不会影响原对象。
5)读取一个内存很大的文件,应该怎么读取
回答建议: 当文件过大无法一次性加载到内存时,应该采用逐行读取或分块读取的方式。
具体操作:
- 逐行读取:
with open("large_file.txt", "r") as file: for line in file: process_line(line) # 对每一行进行处理
- 分块读取:
chunk_size = 1024 * 1024 # 每次读取1MB with open("large_file.txt", "r") as file: while chunk := file.read(chunk_size): process_chunk(chunk) # 对每一块进行处理
Linux命令: 如果是在Linux环境下,也可以使用命令行工具处理大文件:
- 查看文件前几行:
head large_file.txt
- 查看文件后几行:
tail large_file.txt
- 分块处理:
split -l 1000 large_file.txt small_file_
(按行分割)
解释:
- 逐行读取适合处理文本文件,避免占用过多内存。
- 分块读取适合二进制文件或其他需要批量处理的情况。
6)手撕代码
常见题目:
- 实现一个函数,判断字符串是否为回文。
- 合并两个有序链表。
- 找出数组中出现次数最多的元素。
示例:
题目:判断字符串是否为回文。
def is_palindrome(s):
s = ''.join(filter(str.isalnum, s)).lower() # 去除非字母数字字符并转小写
return s == s[::-1]
# 测试
print(is_palindrome("A man, a plan, a canal: Panama")) # True
print(is_palindrome("race a car")) # False
技巧:
- 仔细阅读题目要求,确保理解清楚。
- 先写出伪代码或逻辑框架,再逐步完善细节。
- 注意边界条件和异常处理。
7)反问
建议问题:
- 您认为这个职位在未来一年内的核心挑战是什么?
- 团队目前的技术栈是什么?未来是否有计划引入新的技术?
- 贵公司在员工职业发展方面有哪些支持措施?
目的:
- 展现你的思考深度和对公司的兴趣。
- 获取更多关于职位和团队的信息,帮助你做出更好的决策。
5、第四轮面试
第四轮面试是非技术面试,面试官是HR,面试时长20多分钟
1)自我介绍
2)目前手上有几个offer,分别是什么,意向怎么样
3)你的优点是什么
4)你的意向工作地点是哪里
5)你的父母是做什么的
6)你的职业规划是什么
7)谈谈你对云智的了解
8)如果给你发意向,你会接受吗
9)什么时候毕业,最快什么时候可以入职
10)反问
-
自我介绍
- 简短介绍自己的教育背景、专业技能以及与应聘职位相关的实习或工作经验。
- 强调个人特点,如团队合作精神、学习能力强等。
-
目前手上有几个offer,分别是什么,意向怎么样
- 诚实地说明当前的状况,如果有其他offer也要如实告知,但强调对本次面试公司的兴趣更大。
- 解释为什么对这些offer感兴趣或不感兴趣,突出你对该职位的匹配度和热情。
-
你的优点是什么
- 结合具体实例说明自己的优点,比如解决问题的能力、适应力强或是优秀的沟通技巧。
- 尽量选择与职位描述中提到的要求相吻合的优点。
-
你的意向工作地点是哪里
- 根据实际情况回答,如果公司有多个办公地点,可以表示愿意接受安排或者表达对公司特定办公地点的兴趣。
-
你的父母是做什么的
- 这个问题可能是在了解你的家庭环境对你职业选择的影响。简要介绍即可,重点在于展示家庭背景如何影响了你的职业规划和个人价值观。
-
你的职业规划是什么
- 展现清晰的职业目标和发展路径,同时表明这份工作在你职业生涯中的位置和作用。
- 可以提及希望在未来几年内达到的具体成就或职位。
-
谈谈你对云智的了解
- 在面试前做好功课,研究公司的历史、产品和服务、市场地位及企业文化。
- 分享你对公司使命、愿景的理解,并解释为何这些吸引了你。
-
如果给你发意向,你会接受吗
- 表达积极的态度,但也可以适当保留一些空间,例如说你需要时间考虑细节(如薪酬待遇、职位职责等)。
-
什么时候毕业,最快什么时候可以入职
- 准确提供毕业时间和预计可入职的时间点,表现出准备充分且对加入公司的期待。
-
反问
- 提出关于公司文化、团队结构、未来发展方向等方面的问题,显示你对公司有兴趣深入了解,并且关心自己能否融入新环境。