用自己的话描述,写好md后,直接粘贴到语雀上
语雀操作,可以b站搜索一下。
1.说说你对IOC的理解
IOC作为一种用于管理对象的容器,内部是用map集合来存储对象的,通过反射配合xml配置或者注解来实现对象的创建和对对象的属性的赋值,一般来说IOC用来管理单列对象比较合适
2.说说spring的bean是否是线程安全的?为什么?
答案是否定的,绝对不可能是线程安全的,spring bean默认来说,singleton,都是线程不安全的,java web系统,一般来说很少在spring bean里放一些实例变量,一般来说他们都是多个组件互相调用,最终去访问数据库的,但是如果其中变量是线程安全的,一堆方法的调用也是线程安全的,就看这个变量是不是被全局共享使用,如果非要定义变量需要自己解决线程安全问题,或者使用Prototype。
3.@PropertySource、@Value、@Bean、@Configuration、@ComponentScan、@Import、@Service、@Autowired、@Qualifier。说说这些注解的作用?
@PropertySource用于加载properties配置文件
@Value用于给简单属性赋值
@Bean用于一个bean的配置
@Configuration用于指定配置的一个类
@ComponentScan用于指定要扫描的包
@Service用于标记一个类是否需要存入到IOC容器中,主要用于service层
@Autowired用于给引用类型赋值
@Import用于导入一些其他的配置类
@Qualifier用于给指定名称的类型赋值
4.数组和链表,存储结构的区别?
数组的存储结构 线性存储结构 ,对存储的数据通常只做查找和修改操作,因此数组结构的实现使用的是 顺序存储结构
链表的存储结构一般称作链式结构 链表分为 单向和双向链表
区别
数组 查询快 增删慢
链表 查询慢 增删快
5.hashCode和equals方法的作用?
hashcode方法返回该对象的哈希码值。支持该方法是为哈希表提供一些优点,例如,java.util.Hashtable 提供的哈希表。
hashCode 的常规协定是:
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。
以下情况不 是必需的:如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果。但是,程序员应该知道,为不相等的对象生成不同整数结果可以提高哈希表的性能。
实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
集合的了解,主要是单列集合ArrayList和LinkedList的区别?
equals 主要用于作逻辑比较 被比较的对象没写重写hashcode方法时比较的地址值 重写了hashcode方法时比较的对象本身的值
7.说说你对双列集合HashMap的了解?
HashMap
1.hashmap本身存储的数据是无序的
2.数据的存储格式是键值对
3.hashmap “链表散列”的数据结构,即数组和链表的结合体
4.hashmap 存储的数据查询快 增删快
依赖hashCode方法和equals方法保证键的唯一
如果键要存储的是自定义对象,需要重写hashCode和equals方法
5.key唯一