目录
1、你们是怎么做压测(性能测试)的
一般压测由测试人员进行测试,由后台程序员协助。
1.将线下配置与线上配置保持一致;
2.编写压测方案(包括背景、接口信息、压测场景、压测前准备、压测记录、压测结果分析);
3.编写压测脚本-设置jmeter参数【线程数、常数吞吐量计时器、header、http请求、响应断言、聚合报告】开始运行;
4.查看聚合报告,看错误率
5.不通过,则进行排查问题:
1.查看cpu、内存是否达到瓶颈
2.查看数据库连接数、cpu、内存等是否达到瓶颈
3.通过skywalking来排查耗时较高的接口,以进行优化
6.经过优化或对服务资源调整,使达到压测通过标准
错误率为0的情况下,90%或95%的接口的响应时间小于500ms(看公司要求)
错误率为0的情况下,个别接口(业务复杂,调用链较长)的响应时间可以超过1s
7.编写压测报告,进行风险分析
2、生产问题怎么排查?
1,先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题,解决问题
2,如果问题较为复杂,情况就可能会有多种,可能是代码的问题,也有可能是数据的问题
3,远程debug
特别注意,通常公司的正式环境(生产环境)是不允许远程debug的。
一般远程debug都是公司的测试环境,方便调试代码
实现步骤:
前提条件:远程的代码和本地的代码要保持一致
①:远程代码需要配置启动参数:
把项目打包放到服务器后启动项目的参数:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 project-1.0-SNAPSHOT.jar
-agentlib:jdwp 是通知JVM使用(java debug wire protocol)来运行调试环境
transport=dt_socket 调试数据的传送方式
server=y 参数是指是否支持在server模式
suspend=n 是否在调试客户端建立起来后,再执行JVM。
address=5005 调试端口设置为5005,其它端口也可以
②:idea中设置远程debug
找到idea中的 Edit Configurations...
设置远程debug参数
③idea中启动远程debug
④在本地代码中打断点即可调试远程
3、查看日志的命令
(1)tomcat查看实时日志
实时监控日志:
tail -f catalina.out
查询最后100行日志:
tail -n 100 -f catalina.out
(2)doeker容器实时查看日志
实时监控日志:
docker logs -f 容器id/容器名称
查询最后100行日志:
docker logs -n 100 -f 容器id/容器名称
(3)查看日志文件
在test.log文件中搜索”exception”:
cat -n test.log | grep “exception”
分页查看日志文件:
more test.log
使用 >xxx.txt 将查询到的日志保存到文件中,可以下载这个文件分析
cat -n test.log |grep "debug" >debug.txt
通常的使用思路:先尝试监控实时日志,看看能不能监控到想要的信息,如果不能则需要查看日志文件,从海量日志信息中找出自己想要的错误信息。
4、全链路日志怎么做的?
skywalking
5、你们开发业务的流程是什么?
1,产品经理说需求--》后端+前端+测试
2,定接口(后端主导 | 前端主导 | 前后端协调)
-
mock测试
3,后端的工作:设计(技术选型,数据库表[原型或PRD])+ 编码;前端 开发页面
基于原型或PRD(需求文档)
命名规范(参考阿里规约)
字段类型(合适类型--->根据存储的内容决定)
实体与实体之间的关系(主外键约束)
表设计没有不变的
4,部署测试环境
5,接口联调 --->前后端联调
6,测试 --> 提bug 专门的bug管理工具(禅道)
每个人都会开通一个禅道账号 个人修复bug以后,提交为 已解决———》 测试人员回归测试
7,部署正式环境
6、你们项目的bug是如何管理的?
禅道
开发团队使用说明:参加项目计划会议,分解任务 - 禅道使用手册 - 禅道项目管理软件
TAPD
7、你们项目的开发周期?
参考回答:
分布式6-8个月
传统项目4-6个月
8、如何回答自己不会的问题?
方案1:
让面试官再重复一下问题?看看能不能从中找到关联的点
话术:不好意思,我刚才没听太明白您的意思,麻烦您再说一遍!!
如果能找到提示,则可以继续聊下去
方案2:
情况一:这个问题,你知道一点点,没用过或者已经忘的差不多了。
话术:不好意思,这个技术点,我之前在项目中没用过,但是我自己私下学习过一些。我讲一下我的理解。
情况二:这个问题,完全没听过
参考回答1:坦诚一些,告诉面试官这个问题不会。
不要奢望回答出所有的问题
参考回答2:您这个问题,我一时想不到答案。不过,我好奇的是,什么地方用到这项 技术呢?(慎用)
9、Java 内存泄漏
尽管对象不再被程序所使用,但垃圾回收器却无法将其回收的情况——因为对象仍然处于被引用的状态。久而久之,不能被回收的内存越来越多,最终导致[内存溢出 OOM(OutOfMemoryError)。
-
内存泄漏发生的重灾区——堆。
因为堆区是用来存储新生的 Java 对象的地方,这里也常会有不被使用的对象未被回收。为堆设置更小的内存是解决堆区内存泄漏的常用方法。在我们启动程序的时候,便可以调整我们需要的内存空间:-Xms(初始化堆内存)–Xmx(最大堆内存)
-
静态类型的对象的引用也会导致 Java 内存泄漏。
它在全生命周期内都不会被 JVM 回收。格外注意对关键词 static 的使用,对任何集合或者是庞大的类进行 static 声明都会使其声明周期与 JVM 的生命周期同步,从而使其无法回收。
-
未关闭的流
忘记关闭流也是一种导致内存泄漏发生的常见情况。一个未能关闭的流会导致两种类型的泄漏,一种是低层资源泄漏,一种是内存泄漏。低层资源泄漏是 OS 层面的资源,例如文件描述符,打开连接等的泄漏。JVM 会跟踪记录这些重要的资源,进一步也就导致了内存泄漏。!
-
未关闭的连接
对未关闭的连接的处理(例如数据库,FTP 服务器等)。同样,错误的实现方法也可能导致内存泄漏。使用完连接后要及时关闭。