答案补充中。。。
一、java基础
1、简述java的几种基本数据类型
JAVA的基本数据类型有:byte、char、boolean、short、int、long、float、double
2、什么是装箱和拆箱
3、如何将long转换为int
①强转:int i = (int)123L
②将long装箱为Long,调用 intValue()
③将long转为String,再利用Interger类转换 int i = Integer.parseInt(String.valueOf(123L));
如果待转换的long超出int范围,前两种转出负数,第三种会抛出NumberFormatException异常
4、常用集合考察
①ArrayList初始的大小,以及扩容机制
这里考察源码的阅读,通过阅读源码(JDK1.8)就能找到答案:
ArrayList如果不指定大小,默认构造函数是这么实现的:
public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }
其中的elementData 就是实际存储数据的数组,如果是默认初始化,在添加第一个元素的时候会默认将大小初始化为 DEFAULT_CAPACITY,相关源码如下:
/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer. Any
* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
* will be expanded to DEFAULT_CAPACITY when the first element is added.
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
至此,可以回答第一个问题,ArrayList默认初始大小就是10,
关于扩容,相关源码如下:
/** * Increases the capacity to ensure that it can hold at least the * number of elements specified by the minimum capacity argument. * * @param minCapacity the desired minimum capacity */ private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }
其中的
int newCapacity = oldCapacity + (oldCapacity >> 1);
表明,扩容时时按照原大小加上原大小的一半进行扩容,这里学到了一个逼格较高的操作,那就是右移一位,等价于除以2,但是效率要更高
②List里面重复数据如何去重
本质都是遍历然后借助相关容器进行去重,比如set,hashmap
③hashmap的实现
底层实现还是数组,通过hashcode确定存放位置,如果同一位置已有数据则采用拉链法解决。
具体就是数组的每个元素做成链表,通过链表进行扩展
5、多线程编程
多线程编程的实现方式,具体参考我整理的相关文章:[JAVA]JAVA实现多线程的三种方式
6、socket编程
7、线程池的使用
创建和关闭
二、javaEE基础
1、springMVC的作用
2、用过Spring的哪些组件
3、Spring Bean的生命周期
4、简述Ioc和AoP
三、SQL基础
关于SQL的基础,参考我转载的:常见的数据库SQL面试题以及答案
四、linux基础
1、如何查看java程序状态
2、linux下的常用命令
五、分布式
1、缓存技术
2、消息队列
3、负载均衡
redis、es、Nginx、solr、rocketMQ
六、项目工具
1、maven常用命令
2、IDEA
3、git常用命令
pull、push、commit、分支概念
4、缺陷管理
用过禅道,okit等