2025年大厂高频软件测试面试真题(附答案)_第1页
2025年大厂高频软件测试面试真题(附答案)_第2页
2025年大厂高频软件测试面试真题(附答案)_第3页
2025年大厂高频软件测试面试真题(附答案)_第4页
2025年大厂高频软件测试面试真题(附答案)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年大厂高频软件测试面试真题(附答案)1.单选题(每题2分,共20分)1.1某电商App在灰度环境发现“提交订单”按钮偶发无响应,日志显示“clickeventdropped,queuefull”。以下哪项措施最能直接定位根因?A.抓包对比请求与响应时间B.在UI线程插桩统计消息队列长度与耗时C.压测后端接口TPSD.检查客户端内存泄漏答案:B解析:UI线程消息队列满导致点击事件被丢弃,直接插桩队列长度与耗时即可量化瓶颈。1.2使用Appium做Android自动化时,以下哪种等待策略能同时兼顾“元素可见”与“可点击”且性能开销最小?A.隐式等待driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS)B.显式等待newWebDriverWait().until(ExpectedConditions.elementToBeClickable())C.Thread.sleep(3000)D.FluentWait每500ms轮询一次答案:B解析:elementToBeClickable内部封装了可见与可用双重条件,且只在需要时轮询,开销最小。1.3某微服务接口升级后,下游调用方出现“404Noprovideravailable”。最合理的契约测试策略是:A.让消费方写单元测试mock提供者B.使用SpringCloudContract在提供者端生成stub,消费方引入stub运行C.双方各自写接口测试互不验证D.直接在生产引流对比答案:B解析:SpringCloudContract可自动生成可执行的stub,保证提供者与消费者契约一致。1.4在iOS真机调试时,Xcode控制台频繁打印“[Assert]UIGraphicsBeginImageContext()failedtoallocateCGBitampContext”。以下哪项最可能触发该错误?A.手机存储空间已满B.启动图未配置LaunchScreenC.代码在后台线程调用UIGraphicsBeginImageContextD.未打开后台模式开关答案:C解析:UIKit类API必须在主线程调用,后台线程创建位图上下文会失败。1.5某金融App采用RSA+AES混合加密,测试人员想验证“AES密钥每次随机生成”这一需求,最高效的方法是:A.抓包看密文是否变化B.在加密方法出口插桩打印AES密钥Base64,运行两次对比C.反编译APK看密钥是否硬编码D.用FridahookAES生成函数,打印密钥答案:D解析:Frida可动态hook原生或Java层函数,两次调用即可对比密钥随机性。1.6测试环境K8s集群中,同一套微服务镜像在不同命名空间表现不一致,最优先排查:A.ConfigMap与Secret差异B.节点内核版本C.Ingress控制器版本D.kube-proxy模式答案:A解析:ConfigMap/Secret直接注入环境变量或配置文件,最容易导致行为差异。1.7使用Postman批量运行集合时,发现断言pm.expect(jsonData.code).to.eql(0)在部分请求失败,但手动重试又通过。最佳改进是:A.增加pm.sendRequest重试B.在Pre-requestScript里加延时C.使用pm.expect(...).to.eql(0).retry(3)D.将集合导出到Jenkins用Node.js重写答案:B解析:异步接口未完全就绪导致瞬态失败,Pre-request延时是最轻量方案。1.8某H5页面在iOSSafari无法调起微信支付,控制台无报错,最可能遗漏的排查点是:A.用户代理判断把Safari排除B.WKWebView与Safari内核差异C.微信JSAPI列表未注入chooseWXPayD.页面未HTTPS答案:C解析:JSAPI列表未声明chooseWXPay,即使签名正确也无法调起。1.9在Pythonpytest中,以下哪个fixture作用域能让数据库连接在整个会话复用且线程安全?A.scope="function"B.scope="module"C.scope="session"D.scope="package"答案:C解析:session级fixture在pytest整个生命周期只实例化一次,结合线程锁即可安全复用。1.10某算法接口返回推荐列表,需求要求“Top5命中率≥60%”。以下指标最能直接衡量是否达标?A.DCG@5B.Precision@5C.Recall@5D.F1@5答案:B解析:Precision@5直接计算Top5推荐中命中占比,与需求描述一致。2.多选题(每题3分,共30分)2.1关于客户端弱网测试,下列哪些手段可以模拟“带宽受限+高抖动+随机丢包”同时生效?A.iOS开发者设置NetworkLinkConditionerB.AndroidADB命令tcqdiscadddevwlan0netemloss5%delay100ms20msrate1mbitC.CharlesThrottle设置带宽256kbpsD.ChromeDevToolsLow-endmobileE.FacebookATC(AugmentedTrafficControl)答案:ABE解析:Charles与DevTools只能限制带宽,无法引入丢包与抖动;ATC与tc/netem可组合多种网络损伤。2.2以下哪些日志等级在SLF4J中可能被输出到线上文件并被采集?A.TRACEB.DEBUGC.INFOD.WARNE.ERROR答案:CDE解析:线上通常关闭TRACE/DEBUG,INFO及以上才会落盘采集。2.3关于JMeter分布式压测,下列说法正确的是:A.主控机脚本目录与依赖jar需同步到所有从节点B.从节点java.rmi.server.hostname必须配成本机可访问IPC.主控机结果收集受限于自身内存,建议采样率不超过10%D.可以在从节点自定义JavaSampler扩展E.主控机与从节点JMeter版本可不一致,只要协议兼容答案:ABD解析:版本必须一致;结果收集可关闭子节点输出,主控机内存压力小;采样率与内存无直接关联。2.4以下哪些属于“可重入性”问题的典型表现?A.并发调用时计数器值异常B.递归调用导致栈溢出C.同一线程重复获取已持有的锁成功D.数据库死锁E.缓存穿透答案:AC解析:可重入指同一线程可重复获取同一把锁;递归栈溢出与可重入无关;死锁是竞争条件。2.5关于Allure报告,以下哪些注解能在测试方法级别动态添加附件?A.@AttachmentB.@StepC.@EpicD.Allure.addAttachment()E.Allure.label()答案:AD解析:@Attachment返回字节即附件;addAttachment运行时动态添加;@Step只改变步骤层级。2.6针对“支付回调接口幂等性”测试,有效手段包括:A.使用相同out_trade_no并发重放B.修改金额再次通知C.使用Order服务事务日志对比D.利用数据库唯一索引约束E.在Redis设置过期幂等token答案:ACDE解析:修改金额属于不同业务场景,无法验证幂等。2.7以下哪些命令可以查看AndroidApp启动耗时(冷启动)?A.adbshellamstart-Wpackagename/activityB.adbshellpmdumppackagename|grep-A10TOPC.logcat|grepDisplayedD.perfettosystraceapp_launchE.atrace-capp答案:ACD解析:pmdump无法直接给出启动耗时;atrace需root且参数复杂。2.8关于MySQL索引,下列哪些场景会发生“索引下推(ICP)”优化?A.联合索引(a,b,c)wherea=1andblike'x%'B.单例索引(a)wherea=1andc=2C.覆盖索引查询,回表次数为0D.使用ICP后Extra列显示UsingindexconditionE.聚簇索引范围查询答案:AD解析:ICP需要联合索引且where条件部分可下推存储引擎过滤;Extra显示Usingindexcondition。2.9以下哪些做法可以降低Flutter集成测试的flaky率?A.使用tester.pumpAndSettle()等待动画结束B.在setUpAll里清理SharedPreferences缓存C.对网络请求使用mockito录播D.使用find.byKey(ValueKey('id'))而非文本查找E.开启--dart-define=FLAVOR=test关闭广告答案:ABCDE解析:所有选项均可减少时序、数据、UI差异带来的不稳定。2.10关于Linuxftrace,以下哪些tracer可用于跟踪用户态函数调用?A.functionB.function_graphC.uprobeD.tracefsE.perf答案:BC解析:function_graph可跟踪内核函数图;uprobe可在用户态任意地址插桩;perf为采样工具。3.判断题(每题1分,共10分)3.1在HTTP/2协议下,同一域名多路复用会导致Chrome并发限制提升至256。答案:√3.2使用SeleniumWebDriver点击被fixed定位的“遮罩层”按钮,只需确保元素在DOM可见即可点击成功。答案:×解析:被遮罩层遮挡会触发elementclickintercepted异常。3.3在K8s中,Pod的preStop钩子执行时间超过terminationGracePeriodSeconds会被强制kill-9。答案:√3.4PythonGIL的存在导致多线程无法提升CPU密集型任务性能,但IO密集型不受影响。答案:√3.5使用Fiddler抓HTTPS时,只要系统信任根证书,客户端证书双向校验也能被解密。答案:×解析:客户端证书私钥未泄露无法解密。3.6在Vue3组合式API中,watchEffect会立即执行一次,且自动收集依赖。答案:√3.7使用GitLabCI规则if:'$CI_PIPELINE_SOURCE=="merge_request_event"'可让job只在MR时触发。答案:√3.8在MySQLrepeatableread隔离级别下,普通select使用MVCC快照读,不会加锁,因此不会出现幻读。答案:×解析:快照读可避免,但当前读(update、select...forupdate)仍会出现幻读。3.9使用Nginx反向代理WebSocket,只需在location段增加proxy_set_headerUpgrade$http_upgrade即可,无需配置Connection头。答案:×解析:还需proxy_set_headerConnection"upgrade"。3.10在Android12及以上,使用AlarmManager设置精确闹钟必须声明SCHEDULE_EXACT_ALARM权限。答案:√4.填空题(每空2分,共20分)4.1在Linux中,使用______命令可以查看进程打开的所有socket连接,并显示对应的inode号。答案:lsof-i-a-p$PID4.2在PostgreSQL中,开启______参数可以记录所有慢查询,默认单位毫秒。答案:log_min_duration_statement4.3使用Docker运行MySQL镜像时,通过______环境变量可以指定root密码。答案:MYSQL_ROOT_PASSWORD4.4在Appium中,若想获取Toast文本,需将______capability设置为true。答案:automationName=uiautomator24.5在Python中,使用______库可以生成符合Swagger3.0的YAML文件。答案:apispec4.6在K8s中,______资源对象用于定义水平Pod自动扩缩容策略。答案:HorizontalPodAutoscaler4.7在ReactNative中,使用______命令可以生成release版本的iOSipa。答案:xcodebuild-workspacexxx.xcworkspace-schemexxx-configurationReleasearchive4.8在JMeter中,______元件可以提取JSON响应并存储到变量,供后续请求使用。答案:JSONExtractor4.9在Git中,______命令可以查看某次commit修改了哪些文件。答案:gitshow--name-only<commit-id>4.10在CSS中,______属性可以开启硬件加速,减少动画抖动。答案:transform:translateZ(0)5.简答题(每题10分,共30分)5.1描述一次完整的“订单支付”链路压测方案,包括流量模型、核心指标、瓶颈定位工具、最终调优手段。答案:流量模型:采用10万并发用户,按漏斗比例浏览:下单:支付=100:10:1,使用JMeter阶梯线程组在5分钟内逐步加压,持续峰值10分钟,再阶梯下降。核心指标:接口TP99≤500ms,成功率≥99.9%,支付核心服务CPU≤70%,POD重启次数=0,消息队列堆积≤1万条,DB活跃连接≤80%,无死锁。瓶颈定位:1)使用Arthaswatch命令监控支付服务内部方法耗时,发现加密占用30%CPU;2)Grafana+Prometheus查看Redis连接数飙升,短连接未复用;3)SkyWalkingtrace显示数据库存在行锁等待,热点账户更新串行化;4)使用perftop发现JSON序列化开销高,占18%CPU。调优手段:1)将RSA加密改为AES对称加密,密钥通过RSA预协商,降低CPU25%;2)引入Lettuce连接池复用Redis,连接数从3万降至300;3)账户余额更新改为乐观锁+分段锁,冲突概率由5%降至0.2%;4)使用Protobuf替换JSON,序列化耗时降低40%;5)调整HikariCP最大连接数至200,并开启prepareStatement缓存;6)支付消息表按用户尾号分16库64表,消除写入热点。最终TP99从1200ms降至380ms,成功率99.95%,达到目标。5.2请设计一套“零侵入”的线上链路灰度对比方案,要求:不影响真实流量、可实时回滚、可观测。答案:整体思路:基于EnvoySidecar镜像流量,将生产实时流量复制到灰度集群,对比两者响应。组件:1)Istio1.19,开启VirtualService的mirror流量至灰度subset100%;2)灰度Deployment添加env=gray标签,使用同一套ConfigMap但数据库指向影子库;3)影子库采用MySQLOnlineDDL工具实时同步表结构,数据脱敏;4)使用KafkaConnect将灰度写操作镜像到影子表,避免写扩散;5)通过OpenTelemetryJavaAgent注入,统一上报trace、metrics、log至VictoriaMetrics与Grafana;6)使用PromQL对比生产与灰度“相同trace_id”的延迟差值,若差值>50ms或错误率>0.1%则自动告警;7)配置FlaggerCanary,若对比异常自动将灰度流量权重降至0,实现秒级回滚;8)前端在ResponseHeader注入x-gray-flag:true,方便Selenium对比UI截图;9)使用Allure生成每日对比报告,包含P99延迟、错误数、内存差异、SQL执行计划diff。优势:零代码改动、真实流量、实时可回滚、全维度可观测。5.3说明如何在Flutter集成测试中实现“跨页面图片对比”,并解决不同设备分辨率带来的误差。答案:步骤:1)使用integration_test框架,在tester.pumpAndSettle()后执行:finalbytes=awaitbinding.takeScreenshot('current');2)将bytes写入File('current.png');3)使用image库解码为Uint32List,再resize到统一分辨率,例如1080×1920,采用Bicubic插值;4)对基准图与当前图执行SSIM算法,阈值设为0.95,若低于阈值则视为差异;5)生成差异热图:将像素差值大于5%的区域染红,并保存为diff.png;6)在CI中上传diff.png至Allure报告,若SSIM<0.95则失败;7)为消除字体渲染差异,在测试机提前安装相同ttf,并关闭系统动画、深色模式;8)针对状态栏高度差异,裁剪掉顶部24px,底部导航栏差异裁剪底部48px;9)使用GoldenFile模式,在macOSLinuxDocker中运行相同Skia后端,确保渲染一致;10)最终脚本运行在FirebaseTestLab的Nexus5X与iPhone11,SSIM均值>0.97,误报率<1%。6.编程题(每题15分,共30分)6.1用Python写一个“多线程安全”的日志队列,要求:支持异步写磁盘,不阻塞业务线程;支持按日志大小滚动,单个文件不超过10MB;支持优雅退出,保证缓冲区数据落盘;支持with语法。答案:```pythonimportos,threading,time,queue,loggingfromlogging.handlersimportRotatingFileHandlerclassAsyncLogQueue:def__init__(self,filename,maxBytes=1010241024,backupCount=5):self.logger=logging.getLogger('async')self.logger.setLevel(logging.INFO)handler=RotatingFileHandler(filename,maxBytes=maxBytes,backupCount=backupCount)handler.setFormatter(logging.Formatter('%(asctime)s%(levelname)s%(message)s'))self.logger.addHandler(handler)self.queue=queue.Queue()self.worker=threading.Thread(target=self._write,daemon=True)self._stop=threading.Event()self.worker.start()def_write(self):whilenotself._stop.is_set()ornotself.queue.empty():try:record=self.queue.get(timeout=0.1)(record)exceptqueue.Empty:continuedeflog(self,msg):self.queue.put(msg)defclose(self):self._stop.set()self.worker.join()def__enter__(self):returnselfdef__exit__(self,exc_type,exc_val,exc_tb):self.close()使用示例if__name__=='__main__':withAsyncLogQueue('app.log')aslogq:foriinrange(1000):logq.log(f'msg{i}')```6.2用Java实现一个“最小堆”数据结构,并提供泛型接口,支持动态扩容与线程安全的并发插入、弹出。答案:```javaimportjava.util.Arrays;importjava.util.concurrent.locks.ReentrantLock;publicclassConcurrentMinHeap<TextendsComparable<T>>{privateObject[]queue;privateintsize;privatefinalReentrantLocklock=newReentrantLock();publicConcurrentMinHeap(intinitCapacity){queue=newObject[initCapacity];}publicvoidinsert(Te){lock.lock();try{if(size==queue.length)grow();siftUp(size++,e);}finally{lock.unlock();}}publicTpop(){lock.lock();try{if(size==0)returnnull;Tresult=(T)queue[0];Tx=(T)queue[--size];queue[size]=null;if(size>0)siftDown(0,x);returnresult;}finally{lock.unlock();}}privatevoidgrow(){intold=queue.length;queue=Arrays.copyOf(queue,old<64?(old+2):(old>>1)+old);}privatevoidsiftUp(intk,Tx){while(k>0){intparent=(k1)>>>1;if(pareTo((T)queue[parent])>=0)break;queue[k]=queue[parent];k=parent;}queue[k]=x;}privatevoidsiftDown(intk,Tx){inthalf=size>>>1;while(k<half){intchild=(k<<1)+1;intright=child+1;if(right<size&&((T)queue[child]).compareTo((T)queue[right])>0)child=right;if(pareTo((T)queue[child])<=0)break;queue[k]=queue[child];k=child;}queue[k]=x;}publicintsize(){returnsize;}publicstaticvoidmain(String[]args){ConcurrentMinHeap<Integer>heap=newConcurrentMinHeap<>(4);heap.insert(5);heap.insert(3);heap.insert(8);while(heap.size()>0)System.out.println(heap.pop());}}```7.综合实战题(20分)背景:某短视频App上线“合拍”功能,用户A与用户B的视频在服务端做实时合成,接口平均耗时1.2s,上线一周后,用户反馈“合拍失败率5%”,日志显示“合成超时30s被kill”。已知:1)合成服务使用FFmpeg命令行,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论