个人喜欢问的面试题,基本没有遇到几个回答比较好的,自己怒答一波。
写的不对的地方,请指教。
********Q1:如果 web 上有一个保存按钮,点了没有任何反应,可能会是哪种问题,你分别会用什么方法去定位?
注:这里的保存需要将数据保存到服务器。
A1.最最基础的,目前回答次数最多的答案。
1.网络问题,除了其他页面的功能也都不正常,说明是网络问题。
2.打开抓包工具,查看是否抓到保存接口对应的请求,如果没有看到请求,说明是前端问题。
3.如果看到了请求,再看下返回接口是否正常,如果报错,说明是后端问题。
展开,
********Q2.如果同个网络环境,其他人都可以,就你的电脑不行,怎么排查呢?
A2:看下是否有设置代理(抓包工具、是否修改 host 文件、vpn 等)。
如果代理也没问题,诊断下网络。
再展开提问,
********Q3.如果是第 2 种情况,没有发起请求,怎么进一步分析?
A3.主要考察前端问题定位能力
1.前端问题,先打开 devtool,看下 console 中是否有脚本报错,如果出现报错,看下报错堆栈;
2.如果没有任何报错,看下前端的代码,可以使用 devtool 打断点调试找下问题代码(具体怎么用,还可以再考察下,比如代码混淆情况下怎么去找)
继续展开
********Q4.如果抓包工具抓到了请求,接口返回报错了,一定是后端问题吗?
A4:主要 http 请求是否熟悉,包括状态码、请求包、返回包,包头、包体
1.不一定,如果 http 状态码是 200,response body 返回了业务的错误码或者说返回了业务数据但是数据内容不对,此时需要先看下请求参数是否有问题。如果有问题,需要前端修改;如果参数没有问题,基本上可判断是后端问题。
2.如果返回码非 200,需要进一步分析。
比如 404,可能是前端请求 url 不对,也可能是服务端忘记部署相应的服务。(可以考察下 host、path、请求参数的不同点)
403,通常是鉴权失败,比如可能是前端在请求参数没有带登录票据信息。这里不同的业务实现不一样,有的业务是放在请求参数的某个字段里,比如 accessToken,有的业务可能是放在请求包 header 中的 cookie 字段里。需要根据具体的业务,去检查这两个地方。当然,也可能是 token 过期失效了,这个就更复杂一点,需要根据业务具体的 token 刷新机制来分析。
500/503,通常是后端服务不可用,比如服务没找到,进程挂了,比如接口调用超时.
302,请求被重定向到其他接口了。这种情况下,302 之后会紧跟重定向的请求,需要 check 下重定向行为以及重定向之后的 url 是否正确。如果无误,进一步分析下重定向之后的请求是什么情况。方法同上。
还有少数情况,比如 413,是请求包长度超过了 http 协议的限制。
继续考察服务端
********Q5.如果是服务端问题,怎么进一步分析?
A5:主要考察是否熟悉服务端相关的一些知识
1.如果返回了业务错误码,或者是返回了不正确的业务数据,说明服务肯定是在的,代码逻辑有问题。
首先,可以先看下服务器的 log,通过调用链、业务错误码、请求或返回中的某个唯一的字段或出现频率较少的字段,来缩小日志范围,再结合出现问题的时间点,找到出现问题的那部分日志。(cat、tail、grep 等等)
如果日志当中看不出具体的问题,可以通过白盒分析的方式查看代码,找到对应的问题;也可以通过调试的方法,找到问题。(arthas 等)
2.如果数据不对,可以直接查下对应的数据存储是否有问题。(mysql select,redis redis-cli 等)
3.如果是 500/503 这类错误,需要检查下服务的进程是否在,服务接口是否在,服务注册是否成功等(ps/telnet 等),以及接口耗时是否过长导致超时等。
4.定位过程中,可以还需要调接口查下下游应用的返回。根据具体的服务不一样,调用方法也不一样,比如 dubbo,至少要会 invoke 调用。
5.如果返回的错误码一看就不是业务应用返回的,有可能是中间在某个代理层/接入层就挂掉了,还没走到业务的后端代码中。此时可以确认下是否有请求走到后端,如果没有,基本上就是从这个方向去排查。
6.有些问题比较复杂,如果从代码等方面没有思路。可以从代码提交的角度缩小范围。比如部署上一次 commit 的代码,重放请求,如果上一次 commit 没问题,基本可以确认是最新 commit 引入问题,排查范围就缩小很多。
当然,还可以继续加大深度,比如
Q6.如果是服务进程不在,重启后正常,运行一段时间后进程又挂了,怎么分析?如果是接口耗时过长,怎么分析
A6:需要从内存泄露、线程池链接、任务排队等等角度再进一步分析。每个拎出来又是一个专项,不展示讨论。
最后,打个招聘广告。有兴趣来有赞的,请联系我,招有想法的测试开发。
邮箱:459979154@qq.com