【面经3】( 测试和开发区别 CPU占用高排查问题 缓存穿透、缓存击穿和缓存雪崩解决方法 编写测试用例 理解 JVM 虚拟机 软实力 慢查询的原因 Java 的注解 线上问题,该如何处理)


1.怎么看待测试和开发?

测试和开发是软件工程中两个重要且互补的环节。它们共同的目标是确保软件产品的质量和满足用户需求,但它们的工作重点和方法有所不同。

  1. 工作内容:
  • 开发:通过不同的编程语言,最终做出软件。
  • 测试:写测试用例,执行,发送测试报告,编写自动化测试用例,开发相关的测试工具。
  1. 技能区别:
  • 测试:技能广度的掌握(测试人员要对产品进行全面的测试,外观是否好看,WEB的UI自动化测试,APP的UI自动化,后端的接口进行测试,性能,安全等)
  • 开发:技能深度的掌握(开发要写出高效的代码)
  1. 发展前景:
  • 测试:初级测试工程师 > 中级测试工程师 > 高级测试工程师 > 架构师 > 项目经理
  • 开发:初级开发工程师 > 中级开发工程师 > 高级开发工程师 > 架构师 > CTO

2.如果一个应用程序内存使用量和CPU占用非常高,应该从哪几方面去排查性能问题?

应用进程还活着,但页面出不来、不响应,这种是高CPU,高内存是应用响应慢或者内存溢出、直接死掉。

应用程序高内存占用,可能因为大文件读取、频繁IO,内存消耗频繁,导致频繁GC,进一步占用内存和CPU;

应用程序高CPU占用,可能在执行大任务计算,或者死循环、卡死,或者不断超时、重试(活锁是容易占CPU的,死锁和饥饿是容易占内存的,因为资源不释放)。

在这里插入图片描述

3.什么是缓存穿透、缓存击穿和缓存雪崩?出现时如何解决?

缓存击穿、缓存穿透和缓存雪崩是与缓存相关的一些常见问题,具体定义如下:

  1. 缓存击穿:指当一个缓存键(key)对应的数据在缓存中不存在,同时又有大量并发请求访问该缓存键时,这些请求会直接绕过缓存,查询数据库或其他存储系统,导致数据库压力增大。缓存击穿通常在缓存过期后发生。
  2. 缓存穿透:指当一个查询请求访问一个不存在于缓存中且也不存在于数据库中的数据时,这个请求会无效地继续访问数据库,而不会被缓存。如果黑客故意发送大量非法请求,则缓存层无法起到过滤作用,可能导致数据库负载过大。
  3. 缓存雪崩:指当缓存集中在某个时间点失效或由于某个原因发生故障,导致大量的请求直接打到后端数据库,造成数据库瞬时压力过大,甚至引起数据库崩溃。在缓存雪崩期间,系统性能急剧下降,无法正常提供服务。

为了应对以上问题,可以采取以下措施:

  • 对热点数据采用永不过期策略,避免缓存击穿。
  • 在缓存层进行空值缓存,即将查询结果为空的数据也缓存一段时间,避免缓存穿透。
  • 设置合理的缓存过期时间,并使用分布式缓存的多节点部署,避免缓存雪崩。
  • 引入限流、熔断等机制,控制并发访问量,保护后端系统。
  • 对重要数据做冷备份,确保即使缓存失效或故障,仍能从其他系统中恢复数据。

4.编写测试用例

现有一需求文档,存在以下场景:一个包含头像,用户名和密码表单,登录按钮,注册

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马尔科686

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

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

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

打赏作者

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

抵扣说明:

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

余额充值