摘要: Java实现动态代理的两种方式 Java领域中,常用的动态代理实现方式有两种,一种是利用JDK反射机制生成代理,另外一种是使用CGLIB代理。 JDK代理必须要提供接口,而CGLIB则不需要,可以直接代理类。下面分别举例说明。 1.JDK动态代理: public interface People { 阅读全文
posted @ 2020-03-07 11:19 会飞的鱼喵喵 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 为了进一步提升计算机各方面能力,在硬件层面做了很多优化,如处理器优化和指令重排等,但是这些技术的引入就会导致有序性问题。 先告诉面试官你知道什么是有序性问题,也知道是什么原因导致的有序性问题 我们也知道,最好的解决有序性问题的办法,就是禁止处理器优化和指令重排,就像volatile中使用内存屏障一样 阅读全文
posted @ 2020-03-03 09:59 会飞的鱼喵喵 阅读(4620) 评论(0) 推荐(0) 编辑
摘要: 1 for (int i = 0; i < 150; i++) { 2 Integer a = i; 3 Integer b = i; 4 System.out.println(i + " " + (a == b)); 5 }部分结果 结果为: .....124 true 125 true 126 阅读全文
posted @ 2020-03-02 08:56 会飞的鱼喵喵 阅读(598) 评论(0) 推荐(0) 编辑
摘要: 两者的区别总结: 1. 从地址栏显示来说: 1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。 2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请 阅读全文
posted @ 2020-03-01 09:51 会飞的鱼喵喵 阅读(811) 评论(0) 推荐(0) 编辑
摘要: 1、两者的区别 这两个方法来自不同的类分别是Thread和Object 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。 wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地 阅读全文
posted @ 2020-02-29 13:40 会飞的鱼喵喵 阅读(489) 评论(0) 推荐(0) 编辑
摘要: 我们经常听说List是有序且重复的,Set是无序不重复的。这里有个误区,这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序a-z排列。Set并不是无序的,传统说的Set无序是指HashSet,它不能保证元素的添加顺序,更不能保证自然顺序,而Set的其他实现类是可以实现这两种顺序的。 保证元 阅读全文
posted @ 2019-09-05 21:14 会飞的鱼喵喵 阅读(9443) 评论(1) 推荐(0) 编辑
摘要: Java里面volatile关键字主要有两个作用: (1)可见性 (2)禁止指令重排序 第一条可见性比较容易理解,就是使用volatile修饰的共享变量,如果有一个线程修改了值,其他的线程里面是立即可见的。原理是对volatile变量的读写,都会强制线程操作从主内存。 第二条禁止指令重排序,能够保证 阅读全文
posted @ 2019-09-04 10:24 会飞的鱼喵喵 阅读(1251) 评论(0) 推荐(1) 编辑
摘要: 1、 运行时注解运行时注解是通过反射在程序运行时获取注解信息,然后利用信息进行其他处理。下面是运行时注解的一个简单Damo,包含Company、EmployeeName、EmployeeSex注解定义以及EmployeeInfoUtil注解处理器,客户端包含EmployeeInfo类(成员变量使用注 阅读全文
posted @ 2019-02-21 17:27 会飞的鱼喵喵 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 1.什么是拦截器 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略。它通过动态拦截Action调用的对象,允许开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提 阅读全文
posted @ 2019-02-21 14:56 会飞的鱼喵喵 阅读(662) 评论(0) 推荐(0) 编辑