1、java中金额的数据类型用 BigDecimal
2、HashMap和HashTable的区别
HashMap没有synchronized修饰,线程不安全,HashTable线程安全
HashMap允许Key和Value为null,而HashTable不允许。
3、Jdk8开始链表高度到8,数组长度超过64,链表转为红黑树,元素内部类Node节点存在。
4、String 、 StringBuffer 、 StringBuilder区别
String是final修饰的,不可变,每次操作都会产生新的String对象,增加线程。
Buffer:缓冲 Builder:建筑
StringBuffer线程安全,StringBuilder线程不安全。
性能:StringBuilder > StringBuffer >String
5、如何实现一个IOC容器 (配置、获取、确定、注入)
1、配置文件配置包的扫描路径
2、递归包扫描获取.class文件
3、反射、确定需要交给IOC容器管理的类。
4、对需要注入的类进行依赖注入。
6、java类加载器
1、BootStrapClassLoader 顶层加载器 加载lib下的jar和class文件
2、ExtClassLoader 扩展加载器 加载ext下的jar包和class文件
3、AppClassLoader(程序员最相关) 自定义类加载器 加载classPath下的类文件。
7、双亲委派
向上委派,向下查找。
8、GC如何判断对象可以被回收
1、引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时回收。
2、可达性分析:从GC Roots开始向下搜索,搜索走过的路径为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,那么可以回收。
9、线程的生命周期
线程的五种状态:创建,就绪,运行,阻塞和死亡状态。
10、sleep()、wait()、join()、yeld()
11、并发、并行、串行的区别
串行在时间上不可能发生重叠,前一个任务没搞定,下一个任务就只能等着
并行在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行。
并发允许两个任务彼此干扰。统—时间点、只有一个任务运行,交替执行
12、并发的三大特性
1、原子性 要么做要么不做 i++线程不安全 在运行时得不到想要的结果
2、有序性 虚拟机可能不会按照代码顺序来执行,导致线程不安全。
3、可见性 一个线程修改,其他线程都能看到。
13、JDK 中常用的包有哪些
14、java 中 IO 流分为几种?
16、static含义
1、创建独立于具体对象的域变量或者方法,以致于即使没有创建对象也能使用属性和调用方法。
2、用来形成静态代码块以优化程序性能。
3、被static修饰的对象,只在类第一次使用时加载并进行初始化。
17、== 和 equals 的区别是什么
简化:==比较的是地址,基本数据类型比较值,引用数据类型比较对象地址。
equals没有重写和==一样,重写比较的是内容是否相等。
18、hashCode()与equals()区别
简记:equals相等hashCode一定相等,反之亦然。
19、什么是反射机制? (对于类和对象)
21、谈谈你对AOP的理解
AOP叫做面向切面编程,主要的任务是用来解耦合的。相当于增强剂。
任何一个系统都是由不同的组件来组成的,系统中会存在很多组件跟业务无关的,例如日志、事务、权限等核心服务组件,如果将这些组件融入到我们的业务逻辑中,一个业务逻辑都添加这样的代码,就会让代码冗余太多,因此我们将这些公共的代码逻辑抽象出来变成一个切面,然后注入到具体的业务中去。这样AOP就可以不修改原有的业务逻辑代码,只需要在原来的业务逻辑上面做一些增强就可以了。
22、谈谈你对IOC的理解
IOC主要理解:容器概念、控制反转和依赖注入。
容器概念:实际上就是一个map(key value)
控制反转:没有引入IOC时,都是需要什么对象自己就去创建什么对象。
引入IOC之后,由IOC容器创建,然后再注入到对象中,对象由主动创建变成被动接受。
依赖注入:依赖注入是实现IOC的方法,就是由IOC容器在运行期间动态的将某种依赖关系注入到对象中去。