记录面试中被问到的一些问题,非全部记录,问得算比较广:接口、性能、功能、管理上都问了不少。有些问题比较有意思就记录下来。
【一面】
-
每一秒都会上传一条记录,用时间戳记录的,如何判断一断时间内上传记录是否有缺失?如果有缺失,怎么定位缺失的是哪一条?
一开始有点蒙,因为前面一直聊项目、技术的,突然来这么个题。
先冷静想了想,还好马上想到了答案。
将最后一条记录的时间戳减去第一条的时间戳,然后转换成秒,记录数应=秒+1,再用count算下记录数,看两者是否相等。
如果有缺失,用以上方法进行二分查找。 -
有没有遇到过同一个时间戳转换成了不同的日期的问题?你觉得是什么原因导致的?
没遇到过,是不是跟时区有关系,面试关说对的,是时区。 -
数值小于70或大于180属于异常,超过10%(包括10%)的异常就要提醒,如何设计测试用例?
这个我先沟通了一会儿,刚开始讲了开发的设计思路,面试官打断说这是开发的设计思想(其实这个过程也是在帮助自己理清需求)。
这是个很典型的可以用等价类、边界值进行设计用例的场景。
最后我给的回答是小于70和大于180的百分比加起来之和是否超过10%,超过(包括等于)则发出提醒,没有超过就不用发出提醒。 -
敏捷与传统开发模式有什么区别?你们的接口是如何做持续集成的
敏捷与传统的开发模式在我看来本质上是没有区别的,都是需求分析、设计分析、测试用例设计、执行测试,这些步骤都不可少,不一样的是,敏捷讲究的是快,快速响应变化,快速部署、持续集成,比如一天可以提交几次代码,快速发现错误,防止分支大幅偏离主干。
我们接口测试持续集成是通过git来管理代码,通过jenkins持续部署。 -
如何判断一个问题是前端问题还是后端问题?
抓包,先看前端传的参数是否正确,如果不对,是前端问题;
参数传的没问题再看后端返回的数据是否有问题,如果返回数据不对,是后端问题;
返回数据没问题,那还是前端问题。
引申问题: 如果是后端返回的数据有问题(不涉及到逻辑处理的,只是返回)那你会怎么处理?
我会去看一下是否是因为缓存数据跟数据库存储的数据不一致。
后面又问了如果让你测试缓存,你会怎么测试
从缓存有效、失效、失效后重新加载到缓存、未加载到缓存、命中缓存这几种场景来验证。 -
遇到一个接口入参不合法的接口问题,但前端控制好了输入校验,这时后端开发说这个问题不会发生的,前端都控制了,如何说服开发解决这个问题?
不一定非要解决,得看情况。如果涉及到数据安全、敏感信息,那把这个告知给开发存在的风险;如果是内部系统模块间的接口调用,不涉及到安全而且还有权限校验,那可以考虑暂时不修复;如果接口还要提供给外部调用,外部的前端或者说调用方不一定会按照我们的输入要求来,分析出存在风险,比如我们之前出过一个问题,前端控制好了输入的年月日不能超过一定的范围,但接口层没有限制,导致有次有人调用接口传了个9999年,一下子把系统搞崩了,那这种肯定要改的,风险太大。
最好是前端+后端双层防护,这样系统会更稳健。 -
项目组谁说了算?产品、测试还是开发?
我们是devopts模式,大家一起决策的,权力平等,这样所有人的参与感都很强。 -
谁来决定是否可以发布上线?是测试说了算吗?
测试、产品、项目经理和开发共同决定,在测试完成后测试会出具一份测试报告,里面记录了本次测试了哪些功能和接口,还剩哪些问题没有解析,给出测试的分析(可能存在的风险、影响的功能等),让项目组成员一起看,一般会在测试报告发出前跟产品、项目经理沟通,然后在报告中直接给出沟通的结果——是否可以上线。 -
会修改请求和返回值吗?
会,用fiddler,可以直接修改请求的参数和定制接口的响应内容,就是mock请求,我一般把想要的响应内容写在txt文件里,然后将此指定为所要验证的接口的返回值,一般用来模拟一些手工上比较难以模拟的场景。 -
性能测试过程中万一发生token失效了怎么处理?
token失效了的话,接口会有返回信息提示,捕捉到后重新登录,将新的token用提取器提取出来,塞到header里。 -
如果要做1万个并发,可以一下子加压到1万个用户吗?
不能,因为这与实际情况会不一样。实际情况下,系统会有一个预热过程,比如把用户信息加载到缓存里,这样系统响应会更快一些,如果直接加压到1万,那就缺乏了这个预热过程,与实际情况差异很大,测出来的结果很有可能无意义。
另外,线程数与并发数不是对等的,有个换算过程,比如平均响应时间是10ms,那要1万的并发量,其实线程数=1000/(1000ms/10ms)=10个线程就够了。
当中面试官还问到如果客户端机器承载不了1w的并发怎么办?
我说那就用分布式,jmeter支持分布式压测。 -
你在提交bug的时候会记录哪些信息帮助开发定位问题?
除了常的那些(操作步骤、系统信息)外,会提供后端返回的结果、日志、数据库对应的记录或缓存截图,如果操作步骤比较复杂,会录个屏。
有时会加上自己的分析。
【二面】
二面还是技术面,聊了好多,这里只记录两个现场出、现场笔试的题。
- 如何实现y=x2,x是int型,不能用乘号
这是二轮技术面的时候问的,前面聊得好好的,面试官突然拿出了笔,那一刻有点蒙(紧张导致的,毕竟很长时间没有写字和写代码了,先被自己吓到了。)
面试官刷刷刷写完、说完要求后,我确认了一遍,不能用乘号是吗?
对方说是的,然后硬着头皮上,接过纸和笔,先在纸上分析了下,然后马上理清了思路,不就是X个X相加嘛,于是迅速写下(问题其实不难,就是自己紧张得):
int y=0;
for(int i=1;i<=x;i++){
y+=x;
}
- 有两张表:product(id,name,price,category_id),category(id,name),如何查询出“电子”类产品的总价格?如何将两张表关联显示?如何将这两个问题合在一起显示出来?
select sum(a.price) from product a,category b where a.category_id=b.id and b.name=“电子”;
select a.* , b.name from product a left join category b on a.category_id = b.id and b.name=“电子”;
基本的SQL联表查询,第二个问题用了left join,于是引发出了第三个问题,第三个问题用inner join。
面试官问了下left join和inner join的区别,left join会将左表未匹配上右表的数据也显示出来,inner join只显示一一匹配的数据。
版权声明:本文为博主作者:懒懒的小菜鸟原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/weixin_42258032/article/details/129850270