记一次java电话面试

答案补充中。。。html

1、java基础java

一、简述java的几种基本数据类型linux

JAVA的基本数据类型有:byte、char、boolean、short、int、long、float、doublegit

二、什么是装箱和拆箱面试

三、如何将long转换为intredis

①强转:int i = (int)123Lspring

②将long装箱为Long,调用  intValue()数据库

③将long转为String,再利用Interger类转换   int i = Integer.parseInt(String.valueOf(123L)); 编程

若是待转换的long超出int范围,前两种转出负数,第三种会抛出NumberFormatException异常数组

 

四、经常使用集合考察

①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肯定存放位置,若是同一位置已有数据则采用拉链法解决。

具体就是数组的每一个元素作成链表,经过链表进行扩展

五、多线程编程

多线程编程的实现方式,具体参考我整理的相关文章:[JAVA]JAVA实现多线程的三种方式

六、socket编程

七、线程池的使用

建立和关闭

 

2、javaEE基础

一、springMVC的做用

二、用过Spring的哪些组件

三、Spring Bean的生命周期

四、简述Ioc和AoP

3、SQL基础

关于SQL的基础,参考我转载的:常见的数据库SQL面试题以及答案

 

4、linux基础

一、如何查看java程序状态

二、linux下的经常使用命令

 

5、分布式

一、缓存技术

二、消息队列

三、负载均衡

redis、es、Nginx、solr、rocketMQ

 

6、项目工具

一、maven经常使用命令

二、IDEA

三、git经常使用命令

pull、push、commit、分支概念

四、缺陷管理

用过禅道,okit等

相关文章
相关标签/搜索