自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

面试题库

收集整理常见面试题

  • 博客(132)
  • 收藏
  • 关注

转载 20.Spring AOP 实现原理?

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。Spring AOP 的实现原理其实很简单:AOP 框架负责动态地生成 AOP 代理类,这个代理类的方法则由 Advice和回调目标对象的方法所组成, 并将该对象可作为目标对象使用。AOP 代理包含了目标对象的全部方法,但AOP代理中的方法与目标对象的方法存在差异,AOP方

2021-08-15 12:18:34 197

转载 19.解释自动装配的各种模式?有哪些不同类型的IOC(依赖注入)?

1.解释自动装配的各种模式?自动装配提供五种不同的模式供Spring容器用来自动装配beans之间的依赖注入: no:默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean。 byName:通过参数名自动装配,Spring容器查找beans的属性,这些beans在XML配置文件中被设置为byName。之后容器试图匹配、装配和该bean的属性具有相同名字的bean。 公众号:程序员百科全书byType:通过参数的数据类型自动自动装配,Spring容器查找beans的属性,这些beans在

2021-08-15 12:18:15 487

转载 18.Resource 是如何被查找、加载的?

Resource 接口是 Spring 资源访问策略的抽象,它本身并不提供任何资源访问实现,具体的资源访问由该接口的实现类完成——每个实现类代表一种资源访问策略。 Spring 为 Resource接口提供了如下实现类:UrlResource:访问网络资源的实现类。ClassPathResource:访问类加载路径里资源的实现类。FileSystemResource:访问文件系统里资源的实现类。ServletContextResource:访问相对于 ServletContext 路径里的资源的实

2021-08-15 12:18:05 326

转载 17.beanfactory和factorybean的区别?

《BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)》:https://www.cnblogs.com/aspirant/p/9082858.html

2021-08-15 12:17:45 100

转载 16.BeanFactory和ApplicationContext有什么区别?

ApplicationContext提供了一种解决文档信息的方法,一种加载文件资源的方式(如图片),他们可以向监听他们的beans发送消息。另外,容器或者容器中beans的操作,这些必须以bean工厂的编程方式处理的操作可以在应用上下文中以声明的方式处理。应用上下文实现了MessageSource,该接口用于获取本地消息,实际的实现是可选的。相同点:两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比,提供了更多的扩展功能。不同点:BeanFa

2021-08-15 12:17:28 83

转载 15.将一个类声明为Spring的bean的注解有哪些?

我们一般使用@Autowired注解去自动装配bean。而想要把一个类标识为可以用@Autowired注解自动装配的bean,可以采用以下的注解实现:1.@Component注解。通用的注解,可标注任意类为Spring组件。如果一个Bean不知道属于哪一个层,可以使用@Component注解标注。2.@Repository注解。对应持久层,即Dao层,主要用于数据库相关操作。3.@Service注解。对应服务层,即Service层,主要涉及一些复杂的逻辑,需要用到Dao层(注入)。4.@Con

2021-08-15 12:17:17 2296

转载 14.@Component和@Bean的区别是什么?

1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到S

2021-08-15 12:17:07 214

转载 11.Spring AOP和AspectJ AOP有什么区别?

Spring AOP是属于运行时增强,而AspectJ是编译时增强。Spring AOP基于代理(Proxying),而AspectJ基于字节码操作(Bytecode Manipulation)。Spring AOP已经集成了AspectJ,AspectJ应该算得上是Java生态系统中最完整的AOP框架了。AspectJ相比于Spring AOP功能更加强大,但是Spring AOP相对来说更简单。如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择AspectJ,它比Spr

2021-08-15 12:16:40 158

转载 13.Spring框架中用到了哪些设计模式?

1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。2.代理设计模式:Spring AOP功能的实现。3.单例设计模式:Spring中的bean默认都是单例的。4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库

2021-08-15 12:16:02 179

转载 12.谈谈自己对于Spring AOP的理解?

AOP(Aspect-Oriented Programming,面向切面编程)能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可扩展性和可维护性。Spring AOP是基于动态代理的,如果要代理的对象实现了某个接口,那么Spring AOP就会使用JDK动态代理去创建代理对象;而对于没有实现接口的对象,就无法使用JDK动态代理,转而使用CGlib动态代理生成一个被代理对象的子类来作为代

2021-08-15 12:15:04 137

转载 10.谈谈自己对于Spring IOC的理解?

《谈谈对Spring IOC的理解》:https://www.cnblogs.com/xdp-gacl/p/4249939.html《怎么回答面试官:你对Spring的理解?》:https://www.zhihu.com/question/48427693?sort=created

2021-08-14 18:31:59 106

转载 9.Spring是怎么解决循环依赖的?

整个IOC容器解决循环依赖,用到的几个重要成员:singletonObjects:一级缓存,存放完全初始化好的Bean的集合,从这个集合中取出来的Bean可以立马返回earlySingletonObjects:二级缓存,存放创建好但没有初始化属性的Bean的集合,它用来解决循环依赖singletonFactories:三级缓存,存放单实例Bean工厂的集合singletonsCurrentlyInCreation:存放正在被创建的Bean的集合IOC容器解决循环依赖的思路:初始化Bean之

2021-08-14 18:27:21 90

转载 8.spring mvc 有哪些组件?

《springMVC的主要组件有哪些?springMVC的工作流程?》:https://blog.csdn.net/baidu_38760069/article/details/96479412《spring mvc有哪些组件?》:https://www.cnblogs.com/ConstXiong/p/12129675.html

2021-08-14 18:21:55 62

转载 7.说一下 spring mvc 运行流程?

《面试官:来给我说一下Spring MVC的执行过程?》:https://blog.csdn.net/u011277123/article/details/88758263《简单讲一下 SpringMVC的执行流程?》:https://blog.csdn.net/qq_32575047/article/details/80416015《简单讲一下 SpringMVC的执行流程?》:https://www.cnblogs.com/tiancai/p/9353948.html...

2021-08-14 18:16:57 99

转载 6.@Autowired和@Resource之间的区别?

《Spring注解@Resource和@Autowired区别对比详解》:https://www.jb51.net/article/169300.htm《@autowired和@resource注解的区别是什么?》:https://www.yzlfxy.com/jiaocheng/java/374820.html

2021-08-14 18:12:54 144

转载 5.说一下Spring的事务传播行为?

1.Spring事务管理的方式有几种?1.编程式事务:在代码中硬编码(不推荐使用)。2.声明式事务:在配置文件中配置(推荐使用),分为基于XML的声明式事务和基于注解的声明式事务。2.Spring事务中的隔离级别有哪几种?在TransactionDefinition接口中定义了五个表示隔离级别的常量:ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。公众号:

2021-08-14 18:07:07 182

转载 4.解释spring框架中bean的生命周期?

1.Spring中的bean生命周期了解过吗?1.Bean容器找到配置文件中Spring Bean的定义。2.Bean容器利用Java Reflection API创建一个Bean的实例。3.如果涉及到一些属性值,利用set()方法设置一些属性值。4.如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoade

2021-08-14 18:02:15 221

转载 3.spring 中的 bean 是线程安全的吗?Spring如何处理线程并发问题?

1.Spring中的bean的作用域有哪些?1.singleton:唯一bean实例,Spring中的bean默认都是单例的。2.prototype:每次请求都会创建一个新的bean实例。3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。5.global-session:全局session作用域,仅仅在基于Portle

2021-08-14 17:46:54 419

转载 2.spring 常用的注入方式有哪些?

Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter 注入,基于注解的注入。《Spring常用的三种注入方式》:https://www.cnblogs.com/moxiaotao/p/9304810.html《spring IOC的常见几种以来注入的方式》:https://www.cnblogs.com/mr-wuxiansheng/p/7636613.html...

2021-08-14 15:19:08 269

转载 1.spring 有哪些主要模块?

1.什么是spring?Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。2.使用Spring框架的好处是什么?轻量:Spring 是轻量的,基本的版本大约2MB。控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程(AOP):Spring支

2021-08-14 15:12:25 278

转载 42.Java命令行工具:javac、java、javap 的如何使用

《Java命令行工具:javac、java、javap 的使用详解》:http://www.mybatis.cn/archives/1035.html

2021-07-17 12:14:54 98

转载 8.HashMap 和 Hashtable ,ConcurrentHashMap三者的区别?

《HashMap 和 Hashtable ,ConcurrentHashMap三者的区别》:https://blog.csdn.net/u011258318/article/details/45116877《HashTable,HashMap和ConcurrentHashMap的区别?》:https://blog.csdn.net/weixin_43718267/article/details/89419899

2021-07-17 12:14:34 86

转载 7.HashMap与HashTable的区别?

HashMap没有考虑同步,是线程不安全的;Hashtable使用了synchronized关键字,是线程安全的;HashMap允许K/V都为null;后者K/V都不允许为null;《Hashtable和HashMap的区别和联系》:https://blog.csdn.net/weixin_43892898/article/details/88979688...

2021-07-17 12:14:26 59

转载 6.常见的集合有哪些?常见的集合底层实现?

1.常见的集合有哪些?Collection接口的子接口包括:Set接口和List接口Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等2.常见的集合底层实现 ArrayList底层是数组。LinkedList底层是双向链表。

2021-07-17 12:14:17 452

转载 40.为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?

new 一个 Thread,线程进入初始状态;调用 start()方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。 而直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。总结: 调用 start 方法可启动线程并使线程进入就绪状态,而 run 方法只是 thread 的一个普通

2021-07-13 14:15:05 373

转载 39.并发与并行的区别?

《并发与并行的区别》:https://blog.csdn.net/java_zero2one/article/details/51477791

2021-07-13 14:14:41 73

转载 38.程序计数器为什么是私有的?虚拟机栈和本地方法栈为什么是私有的?

1 程序计数器为什么是私有的?程序计数器主要有下面两个作用:字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。(需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。)所以,程序计数器私有主要是为了线程切换后能恢复

2021-07-13 14:14:29 429

转载 37.什么是多线程的上下文切换?

即使是单核CPU也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程时同时执行的,时间片一般是几十毫秒(ms)上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运行CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再次加载这个任

2021-07-13 14:14:21 132

转载 36.什么是自旋锁?

《什么是自旋锁?》:https://blog.csdn.net/pgs1004151212/article/details/90903075

2021-07-13 14:14:14 50

转载 35.什么是AQS?

《什么是AQS?》:https://www.cnblogs.com/fanBlog/p/9336126.html

2021-07-13 14:14:07 47

转载 34.什么是CAS?

《什么是CAS机制?》:https://blog.csdn.net/qq_32998153/article/details/79529704

2021-07-13 14:13:59 47

转载 33.说一下你对volatile的理解?

《java中voliate的讲解》:https://blog.csdn.net/yinbucheng/article/details/71305951/

2021-07-13 14:13:40 65

转载 32.怎么停止一个运行中的线程?

《Java终止线程的三种方式》:https://www.cnblogs.com/liyutian/p/10196044.html《Java中如何正确而优雅的终止运行中的线程》:https://blog.csdn.net/zhangliangzi/article/details/52484302

2021-07-13 14:13:30 47

转载 31.什么是悲观锁?什么是乐观锁?

《什么是乐观锁与悲观锁?》:https://www.sohu.com/a/306900091_250298《Java锁、悲观乐观锁、分布式锁?细说那年我们用过的锁》:https://zhuanlan.zhihu.com/p/89195796

2021-07-13 14:13:16 41

转载 30.伪共享?

1了解过什么是“伪共享”吗?CPU缓存从内存读数据时,是按缓存行读取的,即使只用到一个变量,也要将整行数据进行读取,这行数据量可能包含其他变量。当多个线程同时修改同一个缓存行里的不同变量时,由于同时只能有一个线程在操作,所以相比将每个变量放到不同缓存行里,性能会有所下降。多个线程同时修改了同一个缓存行上的不同变量,由于不能并发修改,所以称为“伪共享”。2.“伪共享”出现的原因是什么?因为CPU缓存和内存交换数据的单位是缓存行,而同一个缓存行里的多个变量不能同时被多个线程修改。3.如何避免“伪

2021-07-12 20:39:58 67

转载 29.InheritableThreadLocal原理知道吗?

《InheritableThreadLocal详解》:https://www.jianshu.com/p/94ba4a918ff5

2021-07-12 20:39:51 89

转载 28.AtomicInteger原理?

《AtomicInteger原理》:https://www.cnblogs.com/scuwangjun/p/9098057.html

2021-07-12 20:39:39 87

转载 27.Java线程池实现原理?

《Java并发编程:线程池的使用》:https://www.cnblogs.com/dolphin0520/p/3932921.html

2021-07-12 20:39:13 49

转载 18.ThreadLocal 是什么?有哪些使用场景?

《ThreadLocal 是什么?有哪些使用场景?》:https://blog.csdn.net/meism5/article/details/90413860

2021-07-12 20:38:54 103

转载 26.ReentrantLock实现原理?

《ReentrantLock公平锁的实现原理》:https://blog.csdn.net/yanbin0830/article/details/107542529

2021-07-12 20:38:35 60

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除