「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到

写这篇文章的时候我在想可能大部分程序员包括你我,常常都在忙于业务开发或奔波在日常维护与修复BUG的路上,当不能从中吸取技术营养与改变现状后,就像一台恒定运行的机器,逃不出限定宇宙速度的一个圈里。可能你也会有自己的难处,平时加班太晚没有时间学习、周末家里琐事太多没有精力投入,放假计划太满没有空闲安排。总之,学习就会被搁置。而当一年年的过去后,当自己的年龄与能力不成匹配后又会后悔没有给多投入一些时间学习成长。
尤其是一线编码的技术人,除了我们所能看到的在技术框架里(SSM)开发的业务代码,你是否有遇到过学习瓶颈,而这种瓶颈又是你自己不知道自己不会什么,就像下面这些技术列表里,你有了解多少;

  1. javaagent
  2. asm
  3. jvmti
  4. javaassit
  5. netty
  6. 算法,搜索引擎
  7. cglib
  8. 混沌工程
  9. 中间件开发
  10. 高级测试;压力测试、链路测试、流量回放、流量染色
  11. 故障系列;突袭、重现、演练
  12. 分布式的数据一致性
  13. 文件操作;es、hive
  14. 注册中心;zookeeper、Eureka
  15. 互联网工程开发技术栈;spring、mybaits、网关、rpc(thrift, grpc, dubbo)、mq、缓存redis、分库分表、定时任务、分布式事物、限流、熔断、降级
  16. 数据库binlog解析
  17. 架构设计;DDD领域驱动设计、微服务、服务治理
  18. 容器;k8s, docker
  19. 分布式存储;ceph
  20. 服务istio
  21. 压测 jmter
  22. Jenkins-部署java代码项目 + ansible
  23. 全链路监控,分布式追踪
  24. 语音识别、语音合成
  25. lvs nginx haproxy iptables
  26. hadoop mapreduce hive sqoop hbase flink kylin druid
好,现在开始就搞一下其中的一个技术点 ASM,看看它的真面目。那么学习之前先看下他有什么用途;
1.类的代理,如cglib
2.混沌工程
3.反向工程
4.结合 javaagent 做到非入侵式监控,方法耗时、日志、机器性能等等
5.破解
 「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到
文章图片

为了更方便的学习ASM,我将《ASM4使用手册》以及一些技术点整理成在线文档,可以随时方便查阅(asm.itstack.org);
 「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到
文章图片

二、环境配置
【 「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到】1.jdk 1.8
2.idea 2019.3.1
3.asm-commons 6.2.1
三、工程信息
 「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到
文章图片

  • itstack-demo-asm-01:字节码编程,HelloWorld
  • itstack-demo-asm-02:字节码编程,两数之和
  • itstack-demo-asm-03:字节码增强,输出入参
  • itstack-demo-asm-04:字节码增强,调用外部方法
四、HelloWorld还可以这样写
你所熟悉的HelloWorld是不这样;
 「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到
文章图片

那你有尝试反解析下他的类查看下汇编指令吗,javap -c HelloWorld
 「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到
文章图片

 「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到
文章图片

如果你还感兴趣其他指令,可以参考这个字节码指令表:Go!
好! 以上呢,是我很熟悉的一段代码了,那么现在我们把这段代码用ASM方式写出来;
import org.objectweb.asm.ClassWriter;import org.objectweb.asm.MethodVisitor;import org.objectweb.asm.Opcodes;


推荐阅读