文章目录
1.怎么看待测试和开发?
测试和开发是软件工程中两个重要且互补的环节。它们共同的目标是确保软件产品的质量和满足用户需求,但它们的工作重点和方法有所不同。
- 工作内容:
- 开发:通过不同的编程语言,最终做出软件。
- 测试:写测试用例,执行,发送测试报告,编写自动化测试用例,开发相关的测试工具。
- 技能区别:
- 测试:技能广度的掌握(测试人员要对产品进行全面的测试,外观是否好看,WEB的UI自动化测试,APP的UI自动化,后端的接口进行测试,性能,安全等)
- 开发:技能深度的掌握(开发要写出高效的代码)
- 发展前景:
- 测试:初级测试工程师 > 中级测试工程师 > 高级测试工程师 > 架构师 > 项目经理
- 开发:初级开发工程师 > 中级开发工程师 > 高级开发工程师 > 架构师 > CTO
2.如果一个应用程序内存使用量和CPU占用非常高,应该从哪几方面去排查性能问题?
应用进程还活着,但页面出不来、不响应,这种是高CPU,高内存是应用响应慢或者内存溢出、直接死掉。
应用程序高内存占用,可能因为大文件读取、频繁IO,内存消耗频繁,导致频繁GC,进一步占用内存和CPU;
应用程序高CPU占用,可能在执行大任务计算,或者死循环、卡死,或者不断超时、重试(活锁是容易占CPU的,死锁和饥饿是容易占内存的,因为资源不释放)。
3.什么是缓存穿透、缓存击穿和缓存雪崩?出现时如何解决?
缓存击穿、缓存穿透和缓存雪崩是与缓存相关的一些常见问题,具体定义如下:
- 缓存击穿:指当一个缓存键(key)对应的数据在缓存中不存在,同时又有大量并发请求访问该缓存键时,这些请求会直接绕过缓存,查询数据库或其他存储系统,导致数据库压力增大。缓存击穿通常在缓存过期后发生。
- 缓存穿透:指当一个查询请求访问一个不存在于缓存中且也不存在于数据库中的数据时,这个请求会无效地继续访问数据库,而不会被缓存。如果黑客故意发送大量非法请求,则缓存层无法起到过滤作用,可能导致数据库负载过大。
- 缓存雪崩:指当缓存集中在某个时间点失效或由于某个原因发生故障,导致大量的请求直接打到后端数据库,造成数据库瞬时压力过大,甚至引起数据库崩溃。在缓存雪崩期间,系统性能急剧下降,无法正常提供服务。
为了应对以上问题,可以采取以下措施:
- 对热点数据采用永不过期策略,避免缓存击穿。
- 在缓存层进行空值缓存,即将查询结果为空的数据也缓存一段时间,避免缓存穿透。
- 设置合理的缓存过期时间,并使用分布式缓存的多节点部署,避免缓存雪崩。
- 引入限流、熔断等机制,控制并发访问量,保护后端系统。
- 对重要数据做冷备份,确保即使缓存失效或故障,仍能从其他系统中恢复数据。
4.编写测试用例
现有一需求文档,存在以下场景:一个包含头像,用户名和密码表单,登录按钮,注册