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 有哪些东西。
- 配置文件配置包扫描路径
- 递归包扫描获取.class 文件
- 反射、确定需要交给IOC 管理的类。
- 对需要注入的类惊醒依赖注入。
13、
alattlyboy: 为啥我的还是不行我的是关联查询老显示字段重复
weixin_45766829: where 条件不起作用
喝个罐装: 博主,我有一些问题想跟您交流一下,能否私聊加个VX
润东东东东: 没有生成的样子
Frank---7: 一起努力呀,欢迎互访互关