Java面试题整理
1.redis为什么是单线程?
1 | redis是单线程的原因在于redis用单个CPU绑定一块内存的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个CPU上完成的。redis核心就是,如果我的数据全都在内存里,我单线程的去操作就是效率最高的。所以,redis是单线程。 |
2.深拷贝和浅拷贝的区别?以及深拷贝最简单的实现方式?
1 | 浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用 |
3.beanFactory和ApplicationContext的区别?
1 | BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。 |
4.并发编程。乐观锁和悲观锁。
1 | 乐观锁:指的是在操作数据的时候非常乐观,乐观地认为别人不会同时修改数据,因此乐观锁默认是不会上锁的,只有在执行更新的时候才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。 |
5.线程池创建方式有几种?
1 | 线程池的创建方式总共包含以下 7 种(其中 6 种是通过 Executors 创建的,1 种是通过 ThreadPoolExecutor 创建的): |
6.类的加载过程
1 | 读取加载class文件--->链接过程[验证、准备、解析]--->初始化 |
7.包装类和普通类的区别?
1 | 普通类有默认值,包装类没有默认值,初始值是null. |
8.事务的传播机制类型
1 | 通过transactionDefinition类中定义了事务传播的七种类型 |
1 | public interface TransactionDefinition { |
9.AOP有几种通知类型?执行顺序是什么样的?
1 | aop:1.定义切点 2.定义切面逻辑 3.织入 |
1 |
|
1 | 2.后置通知(@After):设置当前通知方法与切入点之前的绑定关系,当前通知方法在原始切入点方法后运行 |
1 |
|
1 | 3.抛出异常后的通知(@AfterThrowing):设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法运行抛出异常后执行 |
1 |
|
1 | 4.返回后的通知(@AfterReturning):设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法正常执行完毕后运行 |
1 |
|
1 | 5.环绕通知(@Around):设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前后运行 |
1 |
|
1 | 执行顺序: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gorgeousのblog!