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流

--------------------- 待更新 ---------------------

相关文章: