测试重新发布Hexo博客
测试 Hello,Hexo!
Update!
AOP
Spring AOP概念AOP,指面向切面编程(Aspect Oriented Programming),是一种编程思想,在实际应用中是对OOP的有效补充。
在OOP中,模块化的核心单元是类,在AOP中,模块化的核心单元是切面(Aspect),切面中封装了具体的代码。
AOP有什么用?应用程序中的处理逻辑可以分为两类:核心关注点 和 横切关注点。
核心关注点指某项业务的核心处理逻辑。
横切关注点指那些会被多个业务重复调用,但是和具体业务关系不大的模块,例如日志模块,性能统计模块,事务管理模块,安全验证模块等。
AOP可以将横切关注点的内容封装在Aspect内部,并注入到所需的地方,有效实现核心关注点和横切关注点的解耦,提高了程序的可扩展性和可维护性,提高了开发效率。
如何使用:Spring的IOC为AOP提供了强大的支持,利用Spring,可以非常便捷的实现AOP编程:
需要在项目中添加aspectj-tools和aspectjweaver的依赖:
aspectj
aspectj-tools
1.0.6
org.aspectj
aspectjweaver ...
Spring设计模式
代理模式代理模式的定义: 为被代理对象提供一个代理对象,并由代理对象控制被代理对象的引用。
为什么要用代理模式? 中介隔离作用: 在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对 象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。
开闭原则,增加功能:
我们可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再 修改委托类,符合代码设计的开闭原则。
三种代理模式 静态代理
jdk动态代理
cblib动态代理:
CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用 方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。
单例模式单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
单例模式的作用:一是,解决多线程并发访问的问题。二是节约系统内存,提交系统运行的效率,提高系统性 ...
字节流和字符流区别与适用场景
字节流和字符流区别与适用场景
参考答案
Java 中的字节流处理的最基本单位为 1 个字节,通常用来处理二进制数据。字节流类 InputStream 和 OutputStream 类均为抽象类,代表了基本的输入字节流和输出字节流。
Java 中的字符流处理的最基本的单元是 Unicode 代码单元(大小2字节),通常用来处理文本数据。
区别:
字节流操作的基本单元是字节;字符流操作的基本单元是字符
字节流默认不使用缓冲区;字符流使用缓冲区
字节流通常用于处理二进制数据,不支持直接读写字符;字符流通常用于处理文本数据
在读写文件需要对文本内容进行处理:按行处理、比较特定字符的时候一般会选择字符流;仅仅读写文件,不处理内容,一般选择字节流
特征:
以 stream 结尾都是字节流,reader 和 writer 结尾是字符流
InputStream 是所有字节输入流的父类,OutputStream 是所有字节输出流的父类
Reader 是字符输入流的父类,Writer 是字符输出流的父类
常见的字节流:
文件流:FileOutputStream 和 FileInputStre ...
JVM部分面试题
说一下jvm的主要组成部分,及其作用?
类加载器,执行引擎,本地库接口,运行时数据区
说一下jvm运行时数据区?
jvm内存分为方法区,堆,虚拟机栈,本地方法栈,程序计数器。
说一下堆栈的区别?
栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。
堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里存放的都是单个变量,变量被释放了,那就没有了。堆里的实体虽然不会被释放,但是会被当成垃圾,Java有垃圾回收机制不定时的收取。
队列和栈是什么?有什么区别?
队列(Queue):是限定只能在表的一端进行插入和另一端删 ...
Java基础部分面试题
JDK和JRE有什么区别?
JDK是Java开发工具包, JRE是Java运行环境。
==和equals有什么区别?
两个对象的hashcode()相同,则equals()也一定为true,对吗,为什么?
不对。
如果没有重写equals()方法,使用的就是Object类中的equals()方法,返回内存编码.
在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?
首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。
如果重写equals后,如果不重写hashcode,则hashcode就是继承自Object的,返回内存编码,这时候可能出现equals相等,而hashcode不等,你的对象使用集合时,就会等不到正确的结果
final在Java中有什么作用?
定义类:不可继承。定义方法:不可重写。定义属性:值不可改变,定义之初就要赋值。
Java中的math.round(-1.5)等于多少?
-1。round()的结果会四舍五入,-1.5四舍五入后是-1。
String属于基 ...
MySql部分面试题
数据库的三范式是什么?
如何获取当前数据库版本?
说一下ACID是什么?
char和varchar的区别是什么?
float和double的区别是什么?
mysql的内连接、左连接、右连接有什么区别?
mysql的索引怎么实现的?
怎么验证mysql的索引是否满足要求?
说一下数据库的事物隔离?
说一下mysql常用的引擎?
说一下mysql的行锁和表锁?
说一下乐观锁和悲观锁?
mysql问题排查都有哪些手段?
如何做mysql的性能优化?
Redis部分面试题
redis是什么?都有哪些使用场景?
redis为什么是单线程的?
什么是缓存穿透?怎么解决?
redis支持的数据类型有哪些?
redis支持的java客户端有哪些?
jedis和redisson有哪些区别?
怎么保证缓存和数据库数据的一致性?
redis持久化有几种方式?
redis怎么实现分布式锁?
redis分布式锁有什么缺陷?
redis如何做内存优化?
redis淘汰策略有哪些?
redis常见的性能问题有哪些?该如何解决?
mybatis部分面试题
mybatis中#{}和${}有什么区别?
mybatis有几种分页方式?
RowBounds是一次性查询全部结果吗?为什么?
mybatis逻辑分页和物理分页的区别是什么?
mybatis是否支持延迟加载?延迟加载的原理是什么?
说一下mybatis的一级缓存和二级缓存?
mybatis和hibernate的区别有哪些?
mybatis有哪些执行器(Executor)?
mybatis的分页插件的实现原理是什么?
mybatis如何编写一个自定义插件?