【社招】测开滴滴一面凉经
📍面试公司:滴滴
🕐面试时间:7.12
💻面试岗位:测开
❓面试问题:
1.自我介绍
略
2.压测有发现什么问题?
略
3.客户端自动化可以分几层?
(一开始我还不懂什么叫几层,就问了一下)
现在会想了一下,可以分:①基础的支持定位页面元素的功能、②公共的操作,例如滑动、点击、登录等、③链接远端云真机的功能、④连接appium服务的功能、⑤启动层,加载所有需要的资源、⑥应用层,具体业务代码
4.客户端UI自动化里,安卓的代码可以直接复用到ios上吗?
不能,安卓是基于UIAutoMator2的,但是ios是基于XCUITest的(但是感觉她不满意,应该还有其他关键的回答没有说)
闲聊:我看过很多公司用的appium,而且都是先做安卓,能够把安卓复用到ios上的公司很少,而且复用成本也很高(言下之意是你还有很多关于复用成本的没说呢)
5.为什么不用xxx框架而是appium呢,明明xxx框架有图片检测能力?你有用过坐标定位嘛?
有的,实际上我的方案就是坐标定位
追问:那如果分辨率变化,多机型呢?
目前可用机型受限,暂时没有多机型的情况,如果将来有的话,可以利用AI检测图片元素的方式定位
闲聊:其实我们不是用appium,而是xxx框架(言下之意就是她觉得xxx框架比appium好得多)
6.你们公司的安卓和ios端公用的能力是什么?基于rn还是基于flatter?
没有听过rn或者flatter(疑惑挠头)
追问:我记得你们公司之前是大多为h5页面,现在还是吗?
(反应过来)我们公司的共用技术栈叫做xxx,您可能没听过,我看过相关技术文档,其实也是基于您刚刚说的rn或者flatter
像是h5页面已经很少了,都是native、xxx、和h5,大多都是xxx,其次是native,极个别是h5
追问:xxx也是能动态发版的对嘛
是的,支持动态发版,不需要app更换版本
7.你觉得各个端之间的区别在哪
不太清楚,您指的是哪些端?
追问:比如安卓,ios,小程序,……
(反应过来)哦哦哦,那我们有xx APP, yy APP,xx小程序 yy小程序,端涉及安卓、ios和纯血鸿蒙
区别的话,
端之间:ios和安卓可能一些native实现上的区别,比如唤起键盘,键盘上ios有xxx配置,但是安卓没有、纯血鸿蒙的话目前很多功能不支持,只有安卓和ios能支持部分功能,而鸿蒙可能需要兜底、跳转其他页面或者干脆功能降级
APP之间:xx APP和yy APP可能存在调用和依赖关系,APP和小程序之间可能存在小程序承接APP的部分功能,但是有一些功能不像APP能支持的那么多
(感觉她不是很满意,我对此确实知道的不多)
8.如果有一个涉及多端,比如后台、客户端、各种服务依赖的复杂需求,你要怎么保障它的质量?
(我主要针对多端的问题先回答了一遍,但是她看起来不是很满意,然后她亲自说了一遍)
(以下为她的说法)
先做冒烟,冒烟100%通过才可以介入测试
然后是在测试环境,下载所需要的测试包(对应版本)后,绑定好测试环境
在每一个端上单独测试,然后再测试端的联调,最后走一遍全链路---(这个是我说的)
要注意端和端的依赖顺序,比如先测后台,再测C端,上线也是先后台再C端
服务之间的依赖亦有顺序,A->B的服务依赖的话,从测试到预发环境后端服务上线的时候,要先测A再测B
最后检测APP的版本控制---(我说的)
上线后线上回归,复杂需要可以利用灰度,保持观察
(最后我跟她说可能最开始没想到要说这么全,只是针对一个问题回答)
9.如果要做一个团购买券的(支付)功能,你要怎么做接口测试?
(因为我其实接口测试做得少,我想了很久,回答了一堆,比如重要参数是否加密,金额是否对得上等等)
被一眼看穿了,她说:看来没有做过系统的接口测试(QAQ)
(以下是她说的内容,感觉很有层次感,我说的就是乱讲一气)
类型:接口测试先要看接口类型,是Get还是Post或者别的
请求:然后看有没有正常发起请求,有没有重复的请求,有没有错误的请求、额外的请求
参数:然后看请求的参数是不是空,有没有正常返回
10.评论功能的测试需要注意什么?
我举了一个自己实际负责过得业务来说,此处略
(感觉她反应还不错)她补充了一个点:还存在删除评论的场景,可能会把这一层楼的评论都删掉
11.你先反问我把,然后做一下代码题
反问略
12.代码题
一、2个字符串,s = "aa" p = "a*" ,要求实现一个能够做类似正则匹配的函数,只要实现 "."是匹配任何字符,"*"是匹配任意长度的任意字符即可
二、nums = [1,-1,3,3,5,-1,8,9,13],k=3,在k长度的滑动窗口把nums从头滑到尾,求每个时刻窗口内的最大值
先说结论,我都做出来了
第一题就是模拟题,包含*的情况,就检测头或者尾部是否有匹配的字符即可,如果没有*,就先判断长度是否一致,再逐个字符判断是否相等,碰到"."直接continue
//模拟题 public static boolean match(String a, String b){ if(b.contains("*")){ if(b.length()==1) return true; return a.substring(0,1).equals(b.substring(0,1)) || b.substring(b.length()-1,b.length()).equals(a.substring(a.length()-1,a.length())) || b.substring(0,1).equals(".") || b.substring(b.length()-1,b.length()).equals(".") || b.substring(0,1).equals(".") ; }else { if(a.length() != b.length()) return false; for(int i=0;i<a.length();i++){ if(b.charAt(i) == '.') continue; if(a.charAt(i) != b.charAt(i)) return false; } return true; } } public static void main(String[] args) { String s = "abcdeaa"; String p = "a.*"; System.out.println(match(s, p)); }
第二题的话我首先想到的就是用堆,也就是优先队列,用了一个大根堆实现了(其实我知道有更好的贪心算法,但是我忘了),第二题直接被追问了有没有更好的方法,我感觉被看穿了,但是也没有时间去思考更好的办法了,面试节奏摆在这里嘛
//单调队列解法 int k = 3; int[] nums = new int[]{1,3,-1,2,-5,-3,-6,-7}; Deque<Integer> pq = new ArrayDeque<>(); ArrayList<Integer> res = new ArrayList<>(); for(int i=0;i<nums.length;i++){ while(!pq.isEmpty() && nums[pq.getFirst()]<=nums[i]) pq.removeFirst(); pq.addFirst(i); if(i-k>=pq.getLast()) pq.removeLast(); if(i>=k) res.add(nums[pq.getLast()]); } System.out.println(res);
🙌面试感想:
整个面试1小时42分钟
面试官展现了极强的专业度,教会了我很多风险控制的细节。虽然感觉面的压力也很大,但是能学到很多细节
#面试问题记录#