- 博客(379)
- 收藏
- 关注
原创 java8 stream中的惰性求值
https://blog.csdn.net/qq_32961235/article/details/80080980
2022-03-18 09:41:18
325
原创 java Stream
https://baijiahao.baidu.com/s?id=1670011082430225232&wfr=spider&for=pc
2022-03-18 09:06:04
302
原创 Spring AOP通知顺序
https://blog.csdn.net/qq_39940205/article/details/111045969
2022-03-17 11:48:55
301
原创 Spring 事务传播行为的理解
https://blog.csdn.net/qq_39720208/article/details/108766761
2022-03-17 11:48:45
56
原创 JDK动态代理和CGLIB动态代理的区别
(1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类(2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法最好不要声明成finalJDK动态代理只提供接口的代理,不支持类的代理。核心InvocationHandler接口和Proxy类,InvocationHandler 通过invoke()方法反射来调用目标类中的代码,动态地将横切逻辑和业务编织在一起;接着,Proxy利用 InvocationHandler动态创建一个符合某一接口的的实例,
2022-03-17 11:48:17
2797
原创 Spring AOP and AspectJ AOP 有什么区别
AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。(1)AspectJ是静态代理的增强,所谓静态代理,就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强,他会在编译阶段将AspectJ(切面)织入到Java字节码中,运行的时候就是增强之后的AOP对象。(2)Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是每次运行时在内存中临时为方法生成一个AOP对象,这个AO
2022-03-17 11:48:05
486
原创 Spring框架中bean的生命周期
ean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理bean进行个性化定制。正如你所见,在bean准备就绪之前,bean工厂执行了若干启动步骤。我们对上图进行详细描述:Spring对bean进行实例化;Spring将值和bean的引用注入到bean对应的属性中;如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBean-Name()方法;如果bean实现了BeanFactoryAware接口,Spring将调用se.
2022-03-17 11:47:46
41
原创 Spring 框架中都用到了哪些设计模式?
1、工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;2、单例模式:Bean默认为单例模式。3、代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;4、模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。5、观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–Applicat
2022-03-17 11:47:25
370
原创 数据库事务和spring事务的区别
数据库事务和spring事务 本质上其实是同一个概念,spring的事务是对数据库的事务的封装,最后本质的实现还是在数据库,假如数据库不支持事务的话,spring的事务是没有作用的.数据库的事务说简单就只有开启,回滚和关闭,spring对数据库事务的包装,原理就是拿一个数据连接,根据spring的事务配置,操作这个数据连接对数据库进行事务开启,回滚或关闭操作.但是spring除了实现这些,还配合spring的传播行为对事务进行了更广泛的管理.其实这里还有个重要的点,那就是事务中涉及的隔离级别,以及sprin
2022-03-17 11:46:08
1868
原创 Mybatis工作流程及其原理与解析
https://blog.csdn.net/u010890358/article/details/80665753
2022-03-16 08:24:58
255
原创 常见的检查时异常:
输入输出异常(IOException)、文件不存在异常(FileNotFoundException)、SQL语句异常(SQLException)ClassNotFoundException
2022-03-16 08:24:45
114
原创 常见的运行时异常:
ClassCastException(类转换异常)IndexOutOfBoundsException(数组越界)NullPointerException(空指针)ArrayStoreException(数据存储异常,操作数组时类型不一致)还有IO操作的BufferOverflowException异常IllegalArgumentException,
2022-03-16 08:24:33
121
原创 重写与重载的区别
重写 总结:1.发生在父类与子类之间2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常重载 总结:1.重载Overload是一个类中多态性的一种表现2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)3.重载的时候,返回值类型
2022-03-16 08:24:09
42
原创 产生死锁的条件
1.互斥条件:一个资源每次只能被一个进程使用。2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3.不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。...
2022-03-16 08:23:58
41
原创 什么是泛型
// 泛型:就是一种不确定的数据类型。// 比如:ArrayList E就是泛型。 这种不确定的数据类型需要在使用这个类的时候才能够确定出来。// 泛型可以省略,如果省略,默认泛型是Object类型。// 泛型的好处:// 1. 省略了强转的代码。// 2. 可以把运行时的问题提前到编译时期。3、提高了代码的复用性...
2022-03-16 08:23:44
26
原创 简述泛型的上界和下界?
有时候希望传入的类型有一个指定的范围,从而可以进行一些特定的操作,这时候就需要通配符了?在Java中常见的通配符主要有以下几种:<?>: 无限制通配符<? extends E>: extends 关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或者是此类型的子类<? super E>: super关键字声明了类型的下界,表示参数化的类型可能是指定的类型,或者是此类型的父类它们的目的都是为了使方法接口更为灵活,可以接受更为广泛的类型.< ? e
2022-03-16 08:23:32
275
原创 a=a+b与a+=b有什么区别吗?
+=操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换.如:byte a = 127;byte b = 127;b = a + b; // 报编译错误:cannot convert from int to byteb += a; ...
2022-03-16 08:23:22
24
原创 String,StringBuffer和StringBuilder区别?
String是字符串常量,final修饰;StringBuffer字符串变量(线程安全);StringBuilder 字符串变量(线程不安全).此外StringBuilder和StringBuffer实现原理一样,都是基于数组扩容来实现的.String和StringBuffer的区别?String和StringBuffer主要区别是性能:String是不可变对象,每次对String类型进行操作都等同于产生了一个新的String对象,然后指向新的String对象.所以尽量不要对String进行大量的拼接操
2022-03-15 10:51:03
181
原创 Java各类型占字节数
byte 1字节short 2字节int 4字节long 8字节float 4字节double 8字节char 2字节boolean 1字节
2022-03-15 10:50:51
72
原创 final有哪些用法?
1、被final修饰的类不可以被继承2、被final修饰的方法不可以被重写3、被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.4、被final修饰的方法,JVM会尝试将其内联,以提高运行效率5、被final修饰的常量,在编译阶段会存入常量池中....
2022-03-15 10:50:38
43
原创 final,finalize()和finally{}的不同之处
三者没有任何相关性,遇到有问着问题的面试官就拖出去砍了吧.final是一个修饰符,用于修饰变量,方法和类.如果 final 修饰变量,意味着该变量的值在初始化后不能被改变.finalize()方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会.但是该方法由Finalizer线程调用,但调用时机无法保证.finally是一个关键字,与 try和catch一起用于异常的处理,finally{}一定会被执行,在此处我们通常用于资源关闭操作....
2022-03-15 10:50:27
62
原创 java 创建对象的几种方式
new创建新对象通过反射机制采用clone机制通过序列化机制1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。Employee emp1 = new Employee();2.使用Class类的newInstance方法我们也可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。我们可以通过下面方式调用newInstance方法创建对象:Employee
2022-03-15 10:50:11
231
原创 父类的静态方法能否被子类重写?
父类的静态方法能否被子类重写?不能.重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名的静态方法,我们一般称之为隐藏.静态变量和实例变量的区别?静态变量存储在方法区,属于类所有.实例变量存储在堆当中,其引用存在当前线程栈.需要注意的是从JDK1.8开始用于实现方法区的PermSpace被MetaSpace取代了....
2022-03-15 10:50:02
89
原创 接口和抽象类的区别
抽象类的意义可以用三句话来概括:1、为其他子类提供一个公共的类型2、封装子类中重复定义的内容3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的接口和抽象类的区别1.抽象类可以有构造方法,接口中不能有构造方法。2.抽象类中可以有普通成员变量,接口中没有普通成员变量3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但
2022-03-15 10:49:41
30
原创 为什么使用Spring的@autowired注解后就不用写setter了?
https://blog.csdn.net/qq_19782019/article/details/85038081
2022-03-15 10:49:27
561
原创 Spring中 @Autowired注解与@Resource注解的区别
相同点:@Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上。不同点:(1)提供方:@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。(2)注入方式:@Autowired只按照byType 注入;@Resource默认按byN
2022-03-15 10:46:42
114
原创 多态的好处
消除类型之间的耦合关系可替换性:多态对已存在代码具有可替换性.可扩充性:增加新的子类不影响已经存在的类结构.接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的.灵活性简化性 多态存在的三个必要条件:1、继承2、重写(子类继承父类后对父类方法进行重新定义)3、父类引用指向子类对象简言之,多态其实是在继承的基础上的...
2022-03-14 10:46:03
118
原创 面向对象的三个特征
封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过
2022-03-14 10:45:50
26
原创 Request对象的主要方法有哪些?
setAttribute(String name,Object):设置名字为name的request 的参数值getAttribute(String name):返回由name指定的属性值getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例getCookies():返回客户端的所有 Cookie 对象,结果是一个Cookie 数组getCharacterEncoding() :返回请求中的字符编码方式 = getContentLength() :返
2022-03-14 10:45:26
111
原创 request.getAttribute()和 request.getParameter()有何区别?
a、request.getParameter()获取的类型是String;request.getAttribute()获取的类型是Object。b、request.getPrameter()获取的是POST/GET传递的参数值和URL中的参数;request.getAttribute()获取的是对象容器中的数据值/对象。c、request.setAttribute()和request.getAttribute()可以发送、接收对象;request.getParamter()只能接收字符串,官方不开放re
2022-03-14 10:45:15
335
原创 Servlet接口中有哪些方法?
Servlet接口定义了5个方法:1、void init(ServletConfig config) throws ServletException2、void service(ServletRequest req, ServletResponse resp) throws ServletException, java.io.IOException3、void destory()4、java.lang.String getServletInfo()5、ServletConfig getServle
2022-03-14 10:45:00
465
原创 说说数据库连接池工作原理和实现方案?
**工作原理:**JAVA EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。**实现方案:**返回的Connection是原始Connection的代理,代理Connection的close方法,当调用close方法时,不是真正关连接,而是把它代
2022-03-14 10:44:50
71
原创 JDBC中的Statement 和PreparedStatement的区别?
PreparedStatement 继承于 StatementStatement 一般用于执行固定的没有参数的SQLPreparedStatement 一般用于执行有?参数预编译的SQL语句。PreparedStatement支持?操作参数,相对于Statement更加灵活。PreparedStatement可以防止SQL注入,安全性高于Statement。...
2022-03-14 10:44:36
34
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人