ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【工作感悟】史上最全的Java面试题集锦在这里

2021-07-01 08:01:30  阅读:133  来源: 互联网

标签:面试题 Java 对象 通知 代理 切面 集锦 AOP ###


### AOP简介 > AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想。AOP 是 OOP(面向对象编程 Object Oriented Programming)的思想延续 > AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(例如性能监视、事务管理、安全检查、缓存、日志记录等) ### AOP核心思想 > 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强 > 切面:需要代理一些方法和增强代码 ### AOP的应用场景 场景一:记录日志 场景二:监控方法运行时间 (监控性能) 场景三: 权限控制 场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 ) 场景五: 事务管理 (调用方法前开启事务, 调用方法后提交或者回滚、关闭事务 ) ### Spring AOP编程两种方式 方式一:Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类植入增强代码(编程复杂,不推荐) 方式二:Spring 2.0 之后支持第三方 AOP框架(AspectJ ),实现另一种 AOP编程 (推荐) ### AOP编程相关术语 1.Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于切面的全部内容---它的功能、在何时和何地完成其功能 2.joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. 3.Pointcut(切入点):所谓切入点是指我们要对哪些joinpoint进行拦截的定义.通知定义了切面的”什么”和”何时”,切入点就定义了”何地”. 4.Advice(通知、增强):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能) 5.Target(目标对象):代理的目标对象 6.Weaving(织入):是指把切面应用到目标对象来创建新的代理对象的过程.切面在指定的连接点织入到目标对象 7.Introduction(引入)(不要求掌握):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field. ### AOP编程底层实现机制 AOP 就是要对目标进行代理对象的创建, Spring AOP是基于动态代理的,分别基于两种动态代理机制: JDK动态代理和CGLIB动态代理 ### 方式一:JDK动态代理 JDK动态代理,针对目标对象的接口进行代理 ,动态生成接口的实现类 (必须有接口) #### 过程要点 1.必须对接口生成代理 2.采用Proxy对象,通过newProxyInstance方法为目标创建代理对象。 该方法接收三个参数 : ? (1)目标对象类加载器 ? (2)目标对象实现的接口 ? (3)代理后的处理程序InvocationHandler 3.实现InvocationHandler 接口中 invoke方法,在目标对象每个方法调用时,都会执行invoke ## 最后 **码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到** 又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考,**需要的可以[戳这里免费领取](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**,以下是部分内容截图 ![架构面试专题及架构学习笔记导图.png](http://www.icode9.com/i/li/?n=2&i=images/20210701/1625097592202149.jpg)

标签:面试题,Java,对象,通知,代理,切面,集锦,AOP,###
来源: https://blog.51cto.com/u_15288752/2962034

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有