「调用外部」【开发者成长】如果你只写CRUD,那这种技术栈你永远碰不到
写这篇文章的时候我在想可能大部分程序员包括你我,常常都在忙于业务开发或奔波在日常维护与修复BUG的路上,当不能从中吸取技术营养与改变现状后,就像一台恒定运行的机器,逃不出限定宇宙速度的一个圈里。可能你也会有自己的难处,平时加班太晚没有时间学习、周末家里琐事太多没有精力投入,放假计划太满没有空闲安排。总之,学习就会被搁置。而当一年年的过去后,当自己的年龄与能力不成匹配后又会后悔没有给多投入一些时间学习成长。
尤其是一线编码的技术人,除了我们所能看到的在技术框架里(SSM)开发的业务代码,你是否有遇到过学习瓶颈,而这种瓶颈又是你自己不知道自己不会什么,就像下面这些技术列表里,你有了解多少;
- javaagent
- asm
- jvmti
- javaassit
- netty
- 算法,搜索引擎
- cglib
- 混沌工程
- 中间件开发
- 高级测试;压力测试、链路测试、流量回放、流量染色
- 故障系列;突袭、重现、演练
- 分布式的数据一致性
- 文件操作;es、hive
- 注册中心;zookeeper、Eureka
- 互联网工程开发技术栈;spring、mybaits、网关、rpc(thrift, grpc, dubbo)、mq、缓存redis、分库分表、定时任务、分布式事物、限流、熔断、降级
- 数据库binlog解析
- 架构设计;DDD领域驱动设计、微服务、服务治理
- 容器;k8s, docker
- 分布式存储;ceph
- 服务istio
- 压测 jmter
- Jenkins-部署java代码项目 + ansible
- 全链路监控,分布式追踪
- 语音识别、语音合成
- lvs nginx haproxy iptables
- hadoop mapreduce hive sqoop hbase flink kylin druid
1.类的代理,如cglib
2.混沌工程
3.反向工程
4.结合 javaagent 做到非入侵式监控,方法耗时、日志、机器性能等等
5.破解

文章图片
为了更方便的学习ASM,我将《ASM4使用手册》以及一些技术点整理成在线文档,可以随时方便查阅(asm.itstack.org);

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

文章图片
- itstack-demo-asm-01:字节码编程,HelloWorld
- itstack-demo-asm-02:字节码编程,两数之和
- itstack-demo-asm-03:字节码增强,输出入参
- itstack-demo-asm-04:字节码增强,调用外部方法
你所熟悉的HelloWorld是不这样;

文章图片
那你有尝试反解析下他的类查看下汇编指令吗,javap -c HelloWorld

文章图片

文章图片
如果你还感兴趣其他指令,可以参考这个字节码指令表:Go!
好! 以上呢,是我很熟悉的一段代码了,那么现在我们把这段代码用ASM方式写出来;
import org.objectweb.asm.ClassWriter;import org.objectweb.asm.MethodVisitor;import org.objectweb.asm.Opcodes;
推荐阅读
- 特斯拉|特斯拉或将允许车主远程调用Autopilot摄像头
- 内置于APP程序内的广告,SDK广告的市场前景怎样,如有媒介的话,APP程序开发者.媒介.广告商咋分成的
- 如果你是AppStore的工作人员,你想咋帮助中国区的开发者列举你最想做的2件事情
- 参见Esri开发者大会是一种咋样的体验
- 国内Android个人开发者的应用怎样收费
- webpack打包后的页面,在集成时,怎样提供js接口给父页面调用呢
- javascript 中this的四种调用模式
- C语言多维数组声明调用和c为啥差别这么大
- 阿贵看车|专访|宋军:后千万时代,吉利汽车更强调用户体验
- macOS 用PHP调用curl抓取不到https的数据
