java 知识点整理

1、jdk 、jre、jvm 之间的关系

看图,想一想jdk下载安装时候是什么样子,文件夹有哪些东西。

        jdk: java 开发工具包

        jre:Java 运行环境

        jvm: Java虚拟机,用来解释执行字节码文件(class 文件)。

详细:

        java面试 JDK,JRE,JVM三者的区别_小蓝的博客-CSDN博客_java jdk jre jvm

2、== 和 equals

== 对比的是栈中的值,基本数据类型对比变量值,引用类型是堆中内存对象的地址。

equels: object 中默认也是采用==比较,通常会重写。

        注意:Integer重写了  

3、简述final 的作用, 为什么局部内部类和匿名内部类只能访问局部final变量?

使用之前一点要赋值。

4、String 、StringBuffer 、 StringBuilder 区别及使用场景

看源码知道String是final修饰的。

在使用StringBuilder时候,如果在多线程情况下、作为共享变量、结果正确被更改,要保证线程安全就需要加锁。

字符串变动不大的,直接使用String。

问使用场景不应该说:考虑安全用什么,考虑性能用什么。

5、重载和重写的区别

重载:方法名相同,参数列表不同。

重写:子类重写父类的方法,方法名相同,参数列表也想通。

深入:

6、接口和抽象类的区别

7、list 和 set 的区别

这里问一下:

底层:List、set、Map的底层实现原理_xzp_12345的博客-CSDN博客_set底层实现原理

8、hashCode 与 equals

hashCode :对象存放在堆中,怎么找到在堆的哪一个位置呢?因为维护了一张哈希表,这张哈希表中的索引就是hashCode。通过索引可以很快的找到对象在堆中的存储位置。索引就是int整数。找到索引就可以快速取出这个对象。hashCode在Object.java 中,所以任何类都有hashCode这个函数。

散列表中存储的是(key、value),目的就是根据key,快速找到value,可以快速找到多需要的对象。

举个例子:

hashCode 的重要用途:

用hashset 来存东西,key就是value的hashCode值,value是值。每次往里面添加的时候,如果对比hashCode就会非常快,hashCode有散列算法。如果是对比value就会非常慢。不同的值会出现相同的hashCode,这时候就用equals去对比。

9、ArrayList 和LinkedList 区别

ArrayList :数组,效率高,因为在内存连续存储,所以查找快,可以下标访问。一般插入删除慢(有特殊,如果使用得当:设置好合适的数组大小,采用尾插法,就可能比linkedList插入效率高)。查询快。内存占用大。

ArrayList扩容机制:添加时候,如果超过数组长度是重新创建一个数组然后再拷贝再添加。

LinkedList:链表,效率低。查询慢,插入删除快。每一个节点都会创建一个对象,这个对象需要消耗内存。

一般都不建议使用LinkedList。

10、HashMap 和HashTable 的区别?底层实现是什么?

hashTable里面方法使用了同步锁,安全,效率低。现在都用concurrentHashMap。

hashMap 的最大长度:int的最大值。

11、ConcurrentHashMap原理,JDK7 和jdk8有什么区别?

hashTable 全局锁,ConcurrentHashMap 分段锁,所以性能好一些。

jdk7:一个线程锁一个Segment ,每一段锁就是一个Segment

jdk8:synchronized 性能提高了,CAS是乐观锁,

12、如何实现一个IOC容器

想一想spring ioc 有哪些东西。

  1. 配置文件配置包扫描路径
  2. 递归包扫描获取.class 文件
  3. 反射、确定需要交给IOC 管理的类。
  4. 对需要注入的类惊醒依赖注入。

13、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值