AOP 的利器:ASM 3.0 介绍

ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。

与 BCEL 和 SERL 不同,ASM 提供了更为现代的编程模型。对于 ASM 来说,Java class 被描述为一棵树;使用 “Visitor” 模式遍历整个二进制结构;事件驱动的处理方式使得用户只需要关注于对其编程有意义的部分,而不必了解 Java 类文件格式的所有细节:ASM 框架提供了默认的 “response taker” 处理这一切。

继续阅读

浅谈分布式锁

随着架构系统的演进,由纯真的单机架构到容器化编排的分布式架构,可以说是一个大型互联网企业发展的必然走向。在网站初创时,应用数量和用户较少,可以把Tomcat和Mysql部署在同一台机器上。随着用户数量增多,访问量增大,并发升高,Tomcat和MySQL竞争资源,此时,单机已经扛不住了,需要把Tomcat和MySQL分离在不同的机器上,用于提升单台机器的处理能力。业务从来没有减少,产品越做越大。应用也越来越复杂,原来的大应用,拆分成多个小应用,加入各级缓存,做了反向代理负责均衡,最后坠入分库分表的深渊。

继续阅读

Mac OSX之Catalina 10.15中编译OpenJDK8

如果想深入学习JDK 内部的实现机制,最便捷的路径是自己手动编译一套JDK,通过阅读和跟踪debug JDK源码去深入了解Java技术体系的原理,结合各类书籍、文章和博客,对比理解,更容易让你了解JDK是怎么运作的,底层都做了什么。

本文基于目前最新的Mac操作系统Catalina 10.15.1 编译OpenJDK8,编译过程中遇到很多新问题,做个总结,为后来者提供方便。

继续阅读

[转]怎么回答面试官:你对Spring的理解?

Java面试中不可避免的都会问到Spring相关的问题,经常会遇到的就是IOC、AOP、Bean的实例化等,虽然有时候我们能回答上这些问题,但是如果没有从源码中领悟Spring的架构原理,也就不知道spring背后做了哪些事,我们项目中会遇到哪些问题。本文作者bravo1988从BeanDefinition和BeanPostProcessor层面阐述了spring中的设计思想以及spring核心原理。

继续阅读

那些年我们写过的Java代码

1.优化System.currentTimeMillis()高并发性能问题
2.使用推特的雪花算法Twitter_Snowflake生产唯一序列码
3.如何将数据库和中间件的密码加密,在使用时自动解密
4.通过ApplicationListener实现初始化完成后的事件操作
5.如何优雅停机
6.Redis加锁和解锁的正确姿势
7.多数据源的自动切换
8.记录dubbo调用日志
9.Dubbo接口的验证器实现及全局异常拦截
10.异常CODE的封装
11.核心数据的压缩和解压缩

继续阅读