1、Java、C 和 C艹 的区别
面向过程:C语言面向过程。主要关注的是数据的流转
面向对象:Java 和 C艹 面向对象。主要关注的是不同对象之间如何交互。
Java把C艹的复杂语法、手动释放内存以及容易造成编程错误的指针等弊端都屏蔽了。
2、基本数据类型及其包装类
- 整型:byte(1)、short(2)、int(4)、long(8)、char(4) — ()内为字节数
- 浮点型:flout(4)、double(8)
- 特殊型:boolean - -> 虚拟机规范中表述如下:boolean值在编译后使用int数据类型来代替,因此boolean值为4个字节,boolean类型数组共用byte类型的baload和bastore指令,因此boolean类型数组中boolean为1个字节。
- 包装类:Boolean,Character,Byte,Short,Integer,Long,Float,Double
3、int和Integer的比较
对于第四条、我们还可以根据以下valueOf方法的字节码指令来理解
可以看一下以上代码的字节码,具体如何理解可以参照R大的一篇文章,以及字节码指令手册
4、什么是哈希表
hash函数能够根据key,计算出key的存储地址,哈希表就是用来记录key以及key的地址的一个map映射表
5、集合类以及Map类层次结构
6、hashset与treeset的区别
- hashset:基于hashmap实现。由于hashmap存储的是一个键值对,并且当put元素的key相同时,只会覆盖value,key本身并不会改变,并且也不会在hashmap中新增一个相同的key。因此hashset基于这一点保证了元素的无重复性。
- treeset:基于treemap实现。有序无重复元素的集合。通过实现comparable接口实现排序,也可自然排序。
7、ArrayList、LinkedList、Vector比较
- ArrayList:动态数组,底层基于数组实现。按索引查询,查询时间复杂度:O(1)。默认初始容量为10,线程不安全,不可设置扩容大小,扩容默认为原来的0.5倍。
使用场景:对于集合的查询操作多 - Vector:与ArrayList相似。区别在于:线程安全开销大、可以设置扩容大小、默认扩容为原来的1倍
使用场景:对于集合的查询操作多且要求线程安全 - LinkedList:底层基于链表实现。查询时间复杂度:O(n)。由于只需要操作指针,增删元素性能高。
使用场景:对于集合的增删操作多
ArrayList实现排序:
- Collections.sort()
- 重写Comparable接口的compareTo方法:实现基于一个字段排序,不能根据需要选择字段
- 重写Comparator接口的compareTo方法:实现基于两个字段排序,需传递两个对象参数
8、hashmap、hashtable、concurrenthashmap区别
内容过多,不做赘述,转至其他链接
hashmap底层原理
hashtable底层原理
concurrenthashmap底层原理
9、IO流