Java面试题———热门篇②

目录

1、你们是怎么做压测(性能测试)的

2、生产问题怎么排查?

3、查看日志的命令

4、全链路日志怎么做的?

5、你们开发业务的流程是什么?

6、你们项目的bug是如何管理的?

7、你们项目的开发周期?

8、如何回答自己不会的问题?

9、Java 内存泄漏


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)。

  1. 内存泄漏发生的重灾区——堆。

    因为堆区是用来存储新生的 Java 对象的地方,这里也常会有不被使用的对象未被回收。为堆设置更小的内存是解决堆区内存泄漏的常用方法。在我们启动程序的时候,便可以调整我们需要的内存空间:-Xms(初始化堆内存)–Xmx(最大堆内存)

  2. 静态类型的对象的引用也会导致 Java 内存泄漏。

    它在全生命周期内都不会被 JVM 回收。格外注意对关键词 static 的使用,对任何集合或者是庞大的类进行 static 声明都会使其声明周期与 JVM 的生命周期同步,从而使其无法回收。

  3. 未关闭的流

    忘记关闭流也是一种导致内存泄漏发生的常见情况。一个未能关闭的流会导致两种类型的泄漏,一种是低层资源泄漏,一种是内存泄漏。低层资源泄漏是 OS 层面的资源,例如文件描述符,打开连接等的泄漏。JVM 会跟踪记录这些重要的资源,进一步也就导致了内存泄漏。!

  4. 未关闭的连接

    对未关闭的连接的处理(例如数据库,FTP 服务器等)。同样,错误的实现方法也可能导致内存泄漏。使用完连接后要及时关闭。

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啵啵薯条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值