基础篇
1、jdk jre jvm 之间的关系
jdk:java开发者工具包
jre:java运行环境
jvm:java虚拟机额
jdk>>jre>>jvm
2、面向对象(AOP)
面向对象是面向过程的封装,封装了类的属性和方法
3、对象的创建过程
对象创建之前,首先类被加载(从最大父类开始加载然后是子类),执行静态代码块,然后执行构造器,也是从父类开始,然后子类,创建对象实例静态犯法和类有关,直接使用类名.方法名来调用。
4、Java的反射机制
当类加载器将类加载金jvm虚拟机中后,jvm虚拟机额会创建每一个类的元数据对象Class,Java语言允许通过元数据对象动态的创建对象实例,这种机制就被成为Java的反射机制,基本上所有的框架底层都使用了反射机制,spring,spring MVC,mybatis.
5、抽象类和接口有什么区别
抽象类中可以有普通方法,可以有成员变量,不可被实例化/。
接口中只能有抽象方法梦不能有抽象方法,可以有静态常量,不可被实例化,接口可以看成一种特殊的抽象类
6、重载和重写
重写是子类继承父类,在方法名,参数列表,返回值相同的情况下重写父类的方法
重载是在一个类中,可以有多个重名的方法,方法名相同,但是形参列表不同
7、Java中的多态
多态是指可以创建父类对象的引用指向子类的对象,非静态方法的调用同名的话调用子类的,静态的调用父类的。
8、框架如何创建对象
框架的配置有xml形式的、注解形式的,xml可以被解析,解析的技术有dom4j,sax解析,三大框架都是使用的dom4j。
9、集合类
9.1、常用的数据结构
数组和链表
9.2、数组和链表的区别
数组需要在内存中开辟一段连续的存储空间,需要指定长度
数组中的每一个元素都有索引,查询的话通过索引可以直接定位到某一个元素,效率很高,但是进行删除的话,数组会进行移动所以效率很低。
链表不需要连续的存储单元,链表的上一个元素通过指针指向下一个元素,所以链表结构进行查询的话,头部尾部比较快,中间慢,但是删除的话,只需要删除前后指针,从新建立指针就可以了,所以删除的性能很高。
9.3Java当中的集合类或集合框架
collection节后是集合类的顶层接口,collections是工具类
collection有两个子接口,一个list接口,一个set接口
list接口有序可重复,set接口无序不可重复
list接口常用的实现类有
ArrayList基于数组实现的
LinkedList基于链表实现的
vector 基于数组实现的,但是线程是安全的
copyOnwriteArrayList 复制数组副本来实现的
set接口常用实现类
HashSet 基于hashMap来实现的,实现不课重复是通过hashCode方法和equals方法进
行两次比较,先比较hashCode,在通过equals
TreeSet基于二叉树来实现的,可以对元素进行排序,默认自然排序,可以自定义比较 ······器,实现自定义排序
Map接口(key value结构的)
map接口的实现类
Hash Map key不可重复,无序,可以为空
基于数组和链表实现的:当存入一对键值对的时候,先对key进行hash,然后映射到一 个初始长度为16的数组上,当不同的key产生hash碰撞的时候,value会通过链表结构来进行存储,
jsk1.8之后对hash进行了改进,当链表长度达到临界值8,会通过红黑树来存储value,hashMap有两个参数。一个是初始化长度为16,另一个是负载因子0.75,当满足扩容阈值的时候-数组的12
个元素北村满,并且有了hash碰撞,动态扩容,以2被的增长方式进行扩容。
HashTable:是线程安全的hashMap,key不纯为空
Tree Map基于二叉树来实现的,可以对key进行自然排序,自定义比较器写比较规则
concurrentHashMap是线程安全的,对整个hash桶采用分段策略,参分成若干的段 segment,对每一段上锁,极大的提高了并发修改的效率。
java基础
最新推荐文章于 2024-10-08 21:30:52 发布