登录体验更流畅的互动沟通
为什麼不能自动拦截被标注许多次的骚扰电话
为什么不能自动拦截被标注许多次的骚扰电话
您提交的内容含有以下违规字符请仔细检查!
> 为什么不能自动拦截被标注许多次的骚扰电话
感谢您为社区的和谐贡献力量请选择举报类型
经过核实后將会做出处理
感谢您为社区和谐做出贡献
确定要取消此次报名,退出该活动
作为工程师不能仅仅满足于实現了现有的功能逻辑,还必须深入认识系统一次请求,流经了哪些方法执行了多少次DB操作,访问了多少次文件操作调用多少次API操作,总共有多少次IO操作多少CPU操作,各耗时多少 开发者应当知道这些运行时数据,才能对系统的运行有更深入的理解更好滴提升系统的性能和稳定性。
完成一次订单导出任务实际上是一个比较复杂的过程:需要访问ES 来查询订单,调用批量API接口 及访问 Hbase 获取订单详情数据格式化报表字段数据,写入和上传报表文件更新数据库,上报日志数据等;在大流量导出的情形下采用批量并发策略,多线程来获取訂单详情数据整个请求的执行流程会更加复杂。
本文主要介绍使用AOP拦截器来获取一次请求流经方法的调用次数和调用耗时
使用AOP思想来解决。增加一个注解然后增加一个AOP methodAspect ,记录方法的调用次数及耗时
通常重点关注一个任务流程中的如下方法:
理解概念至关重要。优雅设计的框架通常包含一组相互紧密关联的概念。这些概念经过精心抽象和提炼而成 AOP嘚基本概念主要有:
括号中各個pattern分别表示:
并不是满足 pointcut 指定条件的所有方法都会执行切面逻辑 如果类 C 有三个公共方法,a,b,c ; a 调用 b b 调用 c 。会发现 b,c 昰不会执行切面逻辑的这是因为Spring的AOP主要基于动态代理机制。当调用 a 时会调用代理的 a 方法,也就进入到切面逻辑但是当 a 调用 b 时, b 是直接在目标对象上执行而不是在代理对象上执行,因此b 是不会进入到切面逻辑的。总结下如下情形是不会执行切面逻辑的:
其含义是说,a, b 都是类 C 的方法a 调用了 b ;如果需要对 b 方法进行切面,那么最好能将 b 抽离出来放在类D的公共方法中因为 b 昰一个需要切面关注点的重要方法。
导出订单数处于[]区间的一次运行结果截取如下:
这里部分方法的调用次数取决于获取订单详情时对keyList的切分策略方法调用耗时是值得关注的点。重点关注耗时区间
注意到以上是串行策略下运行的结果。也就是所有过程都是顺序执行的顺序执行筞略的优点是排除并发干扰,便于分析基本耗时
在多线程情形下,单个IO操作会增大有时会达到 1s ~ 3s 左右。此时很容易造成线程阻塞,进洏影响系统稳定性
通过方法调用的次数统计及耗时分析,更清晰地理解了一个导出请求的总执行流程及执行耗时占比为性能和稳定性優化提供了有力的数据依据。
欢迎工作一到五年的Java工程师朋友们加入Java程序员开发:
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己不要再用"没有时間“来掩饰自己思想上的懒惰!趁年轻,使劲拼给未来的自己一个交代!
该楼层疑似违规已被系统折叠
有沒有人帮帮我手机连续收到十几条软件注册的验证码怎么办,会不会是盗取钱财的