![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
猴子奔跑
这个作者很懒,什么都没留下…
展开
-
Java单例模式
单例模式的设计是保证了一个类在整个系统中同一时刻只有一个实例存在,主要是被用于一个全局类的对象在多个地方被使用并且对象的状态是全局变化的场景下。单例模式为系统资源的优化提供了一个很好的思路,频繁创建和销毁对象都会增加系统的资源消耗,单例模式很好的节约了资源。1️⃣不安全类public class UnsafeLazyInitialization { private static UnsafeLazyInitialization instance; //加上Synchronized来保证原创 2021-06-16 22:45:05 · 2036 阅读 · 1 评论 -
HashMap源码分析hash函数(扰动函数)
JDK1.7的hash()方法(扰动函数):final int hash(Object k) { int h = hashSeed; if (0 != h && k instanceof String) { return sun.misc.Hashing.stringHash32((String) k); } h ^= k.hashCode(); // This function e原创 2021-05-25 21:42:49 · 2034 阅读 · 1 评论 -
String、StringBuffer、StringBuilder的区别?
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {} public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence{}public final class StringBuil.原创 2021-05-23 21:56:30 · 1303 阅读 · 0 评论 -
Spring MVC中的控制器是不是单例模式?如果是,如何保证线程安全?
控制器是单例模式。单例模式下会出现线程安全问题。 Spring中保证线程安全的方法:将scope设置成非singleton。但是这样会有一些问题,当并发很大的时候如果每次都生成一个bean的话就会有很多实例。最好的方式是将controller控制器设置成无状态...原创 2021-05-22 22:39:00 · 4017 阅读 · 0 评论 -
Spring如何处理事务
Spring当中支持编程式事务和声明式事务**编程式事务:**通过Transaction Template手动管理事务,硬编码 ,实际应用中很少使用。声明式事务(基于XML和注解): 推荐使用(代码侵入性最小),实际是通过AOP实现。优点:不需要在业务代码中添加事务管理的代码,只需要在配置文件中做相应的事务规则就行。缺点:声明式事务只能针对方法级别,无法控制代码级别的事务管理。Spring中事务传播级别:public enum Propagation { REQUIRED(T原创 2021-05-22 22:25:24 · 1525 阅读 · 0 评论 -
什么是Spring?谈谈你对IOC和AOP的理解
Spring是一个企业级Java应用框架,它的作用主要是简化软件的开发流程以及配置过程,简化项目部署环境。 Spring的优点: 1、Spring的低侵入式设计,对业务代码的污染非常低。 2、Spring的DI机制将对象之间的关系交由框架处理,减少组件之间的耦合。 3、Spring提供了AOP技术,支持将一些通用的功能进行集中式管理,从而提供更好的复用。 4、Spring对于主流框架提供了非常好的支持。IOC:将创建对象的控制权交给Spring来进行管理。简单的来说就是应原创 2021-05-22 20:43:15 · 1929 阅读 · 0 评论 -
Spring容器的启动流程是怎么样的?
使用AnnotationConfigApplicationContext跟踪启动流程:public AnnotationConfigApplicationContext(Class<?>... componentClasses) { this();//初始化reader()和scanner() register(componentClasses);//使用scanner组件来扫描basePackage包下的所有对象,将配置类的BeanDefinition注册到容器中 refresh原创 2021-05-22 20:41:28 · 1422 阅读 · 0 评论 -
Spring框架中Bean的创建过程是怎样的?
首先,简单来说,Spring框架的Bean经过四个阶段:实例化–>属性赋值–>初始化–>销毁 具体来说,Spring经过了以下几个步骤: 1.实例化:new xxx();两个时机:1、当客户端向容器申请一个bean时;2:当容器在初始化一个bean时发现还需要依赖另一个bean。BeanDefinition对象保存。 2.属性对象赋值(依赖注入):Spring通过BeanDefinition找到对象依赖的其他对象,并将这些对象赋予当前对象。 3.处理Aware接口:S原创 2021-05-22 20:38:59 · 1724 阅读 · 0 评论 -
Spring框架中的Bean是线程安全的吗?如果线程不安全,要如何处理?
Spring容器本身没有提供Bean的线程安全策略,因此,也可以说Spring容器中的bean不是线程安全的。 如何处理线程安全问题,分情况讨论: Spring的作用域(scope):singleton:单例,默认作用域。prototype:原型,每次创建一个新对象。request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。session:会话,同一个会话共享一个实例,不同会话使用不用的实例。global-sessi原创 2021-05-22 20:37:26 · 8529 阅读 · 5 评论 -
Spring如何处理循环依赖问题?
Spring使用了三级缓存来解决循环依赖的问题。三级缓存:Spring在启动的过程中,使用到了三个map,称作三级缓存。public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry { /** Maximum number of suppressed exceptions to preserve. */ private static final int原创 2021-05-22 18:54:30 · 1246 阅读 · 0 评论 -
Java面试文章整理
1、可见性(Visibility)可见性是指,当一个线程修改了某一个全局共享变量的数值,其他线程是否能够知道这个修改。显然,在串行程序来说可见性的问题是不存在的。因为你在任何一个地方操作修改了某个变量,那么在后续的程序里面,读取这个变量的数值,一定是修改后的数值。但是,这个问题在并行程序里面就不见得了。在并行程序里面,如果一个线程修改了某一个全局变量,那么其他线程未必可以马上知道这个变动。下面的图1展示了可见性问题的一种。如果在CPU1和CPU2上...原创 2021-03-13 14:13:47 · 1269 阅读 · 0 评论 -
剑指Offer编程题JZ1:二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { for(int i=0;i<array.length;i++){ for(int j=0...原创 2020-10-07 17:18:44 · 272 阅读 · 0 评论