zoukankan      html  css  js  c++  java
  • 记一次java电话面试

    答案补充中。。。

    一、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等

  • 相关阅读:
    UML建模图
    Ubuntu选择软件源
    用于主题检测的临时日志(c5ac07a5-5dab-45d9-8dc2-a3b27be6e507
    【Android】不弹root请求框检测手机是否root
    android开机动画(bootanimation)
    UniversalImageLoader(异步加载大量图片)
    PHP字符串
    Android获取本机号码及运营商
    静态代码块、构造代码块、构造方法
    Android来电拦截及来电转移
  • 原文地址:https://www.cnblogs.com/zhengxl5566/p/10381360.html
Copyright © 2011-2022 走看看