cglib

金三银四面试季节之Java 核心面试技术点

爷,独闯天下 提交于 2020-10-25 07:37:36
描述一下 JVM 的内存区域 程序计数器(PC,Program Counter Register)。在 JVM 规范中,每个线程都有它自己的程序计数器,并且任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行本地方法,则是未指定值(undefined)。 Java 虚拟机栈(Java Virtual Machine Stack),早期也叫 Java 栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的 Java 方法调用。前面谈程序计数器时,提到了当前方法;同理,在一个时间点,对应的只会有一个活动的栈帧,通常叫作当前帧,方法所在的类叫作当前类。如果在该方法中调用了其他方法,对应的新的栈帧会被创建出来,成为新的当前帧,一直到它返回结果或者执行结束。JVM 直接对 Java 栈的操作只有两个,就是对栈帧的压栈和出栈。栈帧中存储着局部变量表、操作数(operand)栈、动态链接、方法正常退出或者异常退出的定义等。 堆(Heap),它是 Java 内存管理的核心区域,用来放置 Java 对象实例,几乎所有创建的Java 对象实例都是被直接分配在堆上。堆被所有的线程共享,在虚拟机启动时,我们指定的“Xmx”之类参数就是用来指定最大堆空间等指标

代理模式

青春壹個敷衍的年華 提交于 2020-10-24 07:56:43
1. 介绍 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 2. 应用场景 日志记录,在一个方法处理前后增加自己的功能 3. 代码实现 3.1 静态代理 3.1.1 代理接口 public interface Moveable { void go(); } 3.1.2 接口实现类 public class Bike implements Moveable { @Override public void go() { System.out.println(" bike 蹬蹬蹬"); } } public class Car implements Moveable { @Override public void go() { System.out.println("car 咻咻咻......"); } } 3.1.3 代理类 public class LogProxy implements Moveable { private Moveable m; public LogProxy(Moveable m) { this.m = m; } @Override public void go() { System.out.println("开始记录日志"); m.go(); System.out.println(

Spring的@Configuration配置类?Full模式和Lite模式

我的未来我决定 提交于 2020-10-16 02:12:51
前言 为什么没有@Configuration注解的类中的@Bean方法也能被扫描到? 官方管这两种模式分别叫: Full @Configuration 和 lite @Bean mode ,习惯把称为Spring配置的Full模式和Lite模式更易沟通。 基本概念 @Configuration @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @ interface Configuration { @AliasFor( annotation = Component. class ) String value() default "" ; } @Bean @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @ interface Bean { @AliasFor( "name" ) String[] value() default {}; @AliasFor( "value" ) String[] name() default {}; Autowire autowire()

《Spring实战》读书笔记-第3章 高级装配

与世无争的帅哥 提交于 2020-10-14 12:55:08
本章内容: Spring profile 条件化的bean声明 自动装配与歧义性 bean的作用域 Spring表达式语言 在上一章中,我们看到了一些最为核心的bean装配技术。你可能会发现上一章学到的知识有很大的用处。但是,bean装配所涉及的领域并不仅仅局限于上一章  所学习到的内容。Spring提供了多种技巧,借助它们可以实现更为高级的bean装配功能。 在本章中,我们将会深入介绍一些这样的高级技术。本章中所介绍的技术也许你不会天天都用到,但这并不意味着它们的价值会因此而降低。 3.1 环境与profile 在开发软件的时候,有一个很大的挑战就是将应用程序从一个环境迁移到另外一个环境。开发阶段中,某些环境相关做法可能并不适合迁移到生产环境中,甚至即便迁移过去也无法正常工作。数据库配置、加密算法以及与外部系统的集成是跨环境部署时会发生变化的几个典型例子。 比如,考虑一下数据库配置。在开发环境中,我们可能会使用嵌入式数据库,并预先加载测试数据。 数据源的有三种连接配置,分别是 // 通过EmbeddedDatabaseBuilder会搭建一个嵌入式的Hypersonic的数据库 @Bean(destroyMethod = "shutdown") @Profile("dev") public DataSource embeddedDataSource() { return new

java permgen内存泄漏问题处理

回眸只為那壹抹淺笑 提交于 2020-10-09 04:17:25
来自:http://longtask.com/review/2014/06/07/java-permgen-outofmemory/ 工作以来,第三次出现内存溢出,第一次是ThreadLocal没有remove造成的问题;第二次是ExecutorService没有正确的shutdown造成的问题;这一次的问题在我出手排查之前,已经知道了是permgen在不断的增长,在permgen中主要有Class和Meta信息,常量。 在开始阶段:排除了ThreadLocal可能导致的问题;排除了Thread可能导致的问题;后面就需要从新的突破点找问题了。 1:基本设置的排查 查找日志中访问量较大的请求的URL: awk '{print $6}' service-digest.* |awk -F"," '{print $1 ",""1"}'|awk -F"," '{a[$1]+=$2;b[$1]++}END{for(n in a)print a[n] " " n }'|sort -n 查找日志中的调用很多的内容;依然没有发现问题;采用webbench一个个的调用请求来模拟操作,前十名的URL没有发现问题,后面的就没有查看了。 通过线下操作,发现也不是开始怀疑的RMI远程调用的问题; 针对CMS-GC,网上建议开通 -XX:+CMSClassUnloadingEnabled -XX:

面试官:连Spring AOP都说不明白,自己走还是我送你?

浪尽此生 提交于 2020-10-08 08:33:36
前言 因为假期原因,有一段时间没给大家更新了!和大家说个事吧,放假的时候一位粉丝和我说了下自己的被虐经历,在假期前他去某互联网公司面试,结果直接被人家面试官Spring AOP三连问给问的一脸懵逼!其实我觉着吧,这玩意不是挺简单的吗? 大家在学习 AOP 之前,如果清楚代理模式的话,则学习起来非常轻松,接下来就由我为大家介绍 AOP 这个重要的知识点! 代理模式 代理模式在 Java 开发中是一种比较常见的设计模式。设计目的旨在为服务类与客户类之间插入其他功能,插入的功能对于调用者是透明的,起到伪装控制的作用。如租房的例子:房客、中介、房东。对应于代理模式中即:客户类、代理类 、委托类(被代理类)。 为某一个对象(委托类)提供一个代理(代理类),用来控制对这个对象的访问。委托类和代理类有一个共同的父类或父接口。代理类会对请求做预处理、过滤,将请求分配给指定对象。 生活中常见的代理情况: 租房中介、婚庆公司等 代理模式的两个设计原则: 代理类与委托类具有相似的行为(共同) 代理类增强委托类的行为 常用的代理模式: 静态代理 动态代理 静态代理 某个对象提供一个代理,代理角色固定,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。

这一次搞懂Spring代理创建及AOP链式调用过程

可紊 提交于 2020-10-05 14:26:35
@ 目录 前言 正文 基本概念 代理对象的创建 小结 AOP链式调用 AOP扩展知识 一、自定义全局拦截器Interceptor 二、循环依赖三级缓存存在的必要性 三、如何在Bean创建之前提前创建代理对象 总结 前言 AOP,也就是面向切面编程,它可以将公共的代码抽离出来,动态的织入到目标类、目标方法中,大大提高我们编程的效率,也使程序变得更加优雅。如事务、操作日志等都可以使用AOP实现。这种织入可以是 在运行期动态生成代理对象 实现,也可以在 编译期 、 类加载时期 静态织入到代码中。而Spring正是通过第一种方法实现,且在代理类的生成上也有两种方式:JDK Proxy和CGLIB,默认当类实现了接口时使用前者,否则使用后者;另外Spring AOP只能实现对方法的增强。 正文 基本概念 AOP的术语很多,虽然不清楚术语我们也能很熟练地使用AOP,但是要理解分析源码,术语就需要深刻体会其含义。 增强(Advice):就是我们想要额外增加的功能 目标对象(Target):就是我们想要增强的目标类,如果没有AOP,我们需要在每个目标对象中实现日志、事务管理等非业务逻辑 连接点(JoinPoint):程序执行时的特定时机,如方法执行前、后以及抛出异常后等等。 切点(Pointcut):连接点的导航,我们如何找到目标对象呢?切点的作用就在于此,在Spring中就是匹配表达式。 引介

这一次搞懂Spring代理创建及AOP链式调用过程

痴心易碎 提交于 2020-10-05 00:38:52
@ 目录 前言 正文 基本概念 代理对象的创建 小结 AOP链式调用 AOP扩展知识 一、自定义全局拦截器Interceptor 二、循环依赖三级缓存存在的必要性 三、如何在Bean创建之前提前创建代理对象 总结 前言 AOP,也就是面向切面编程,它可以将公共的代码抽离出来,动态的织入到目标类、目标方法中,大大提高我们编程的效率,也使程序变得更加优雅。如事务、操作日志等都可以使用AOP实现。这种织入可以是 在运行期动态生成代理对象 实现,也可以在 编译期 、 类加载时期 静态织入到代码中。而Spring正是通过第一种方法实现,且在代理类的生成上也有两种方式:JDK Proxy和CGLIB,默认当类实现了接口时使用前者,否则使用后者;另外Spring AOP只能实现对方法的增强。 正文 基本概念 AOP的术语很多,虽然不清楚术语我们也能很熟练地使用AOP,但是要理解分析源码,术语就需要深刻体会其含义。 增强(Advice):就是我们想要额外增加的功能 目标对象(Target):就是我们想要增强的目标类,如果没有AOP,我们需要在每个目标对象中实现日志、事务管理等非业务逻辑 连接点(JoinPoint):程序执行时的特定时机,如方法执行前、后以及抛出异常后等等。 切点(Pointcut):连接点的导航,我们如何找到目标对象呢?切点的作用就在于此,在Spring中就是匹配表达式。 引介

Spring AOP学习笔记04:AOP核心实现之创建代理

丶灬走出姿态 提交于 2020-10-03 21:38:19
   上文 中,我们分析了对所有增强器的获取以及获取匹配的增强器,在本文中我们就来分析一下Spring AOP中另一部分核心逻辑--代理的创建。这部分逻辑的入口是在wrapIfNecessary()方法中紧接着增强器的获取之后的createProxy(): protected Object createProxy( Class <?> beanClass, String beanName, Object[] specificInterceptors, TargetSource targetSource) { ProxyFactory proxyFactory = new ProxyFactory(); // 获取当前类中相关属性 proxyFactory.copyFrom( this ); // 决定对于给定的bean是否应该使用targetClass而不是它的接口进行代理 if (! shouldProxyTargetClass(beanClass, beanName)) { // Must allow for introductions; can't just set interfaces to // the target's interfaces only. Class<?>[] targetInterfaces = ClassUtils

蘑菇街Java大牛纯手写肛出的(Spring AOP/IOC思维导图源码笔记)

浪子不回头ぞ 提交于 2020-10-01 12:38:46
Spring AOP/IOC思维脑图 AOP原理 AOP术语 Spring对AOP的支持 知识点 IOC和DI的概念 使用IOC的好处 IOC容器 IOC容器装配Bean Spring AOP/IOC源码笔记 这个【Spring AOP/IOC源码笔记】是全程手打肛出来的,共142页,希望各位老铁可以转发关注支持一下! Spring AOP和IOC介绍 1. Spring介绍 2. 引出Spring 3.Spring模块 4. Core模块快速入门 5. bean对象创建细节 对象依赖 1. 回顾以前对象依赖 2. Spring依赖注入 AOP入门 1. cglib代理 2. 手动实现AOP编程2.1案例分析: 3. AOP的概述 4. 使用Spring AOP开发步骤 5. 切入点表达式 JDBCTemplate和Spring事务 1. 回顾对模版代码优化过程 2. 使用Spring的JDBC 3. 事务控制概述 4.事务属性 Spring事务原理 1、阅读本文需要的基础知识 2、两个不靠谱直觉的例子 3、Spring事务传播机制 4、多线程问题 5、啥是BPP? 6、认识Spring事务几个重要的接口 Spring事务的几个线程安全问题 1、我的思考 2、图解出现的原因 3、解决问题 最后 IOC再回顾与面试题 Spring IOC全面认知 Spring IOC相关面试题