测试开发面试题

1、java的基础类型有哪些?

答:基础数据类型有int、long、 short、double、float、byte、character、boolean

2、if和switch的区别,swich支持哪些类型?

答:if和switch都是条件判断语句

switch语句和if语句的区别有:

if语句,常用于区间判断,表达式的结果是boolean类型

switch:常用于等值判断选择语句的选择。表达式类型不能是boolean类型,可byte,int,char,String,枚举。

总结:能用switch语句实现的就一定可以使用if实现,但是反之不一定。如果是区间范围就采用if,如果是等值判断使用switch。

3、string、stringbuffer、stringbuilder的异同,底层实现。

答:String:不可变的字符序列;底层使用char[]存储

StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储

StringBuilder:可变的字符序列;(jdk5.0新增)线程不安全,效率高;底层使用char[]存储

4、描述数组、链表、队列、堆栈的区别?

答:数组和链表是数据存储方式的概念,数组在连续的空间中存储数据,而链表可以在非连续的空间中存储数据;

队列和堆栈是描述数据存取方式的概念,队列是先进先出,而堆栈是后进先出;队列和堆栈可以用数组来实现,也可以用链表实现。

5、java面对对象的理解

需求: 使用java描述一个自行车与修车店两个事物

 答:

车:

具备的公共属性:轮子数、 名字、 颜色 ,还具备跑的功能行为。跑之前要检测轮子是否少于了2个,如果少于了2个,那么要送到修车店修理,

修车店修理之后,车的轮子数要补回来2个。 然后车就继续的跑起来。

修车店:

具备公共属性: 名字、 地址。

行为: 修车。

6、抽象类和接口的区别

答:

相同点:

(1) 接口与抽象类都不能被实例化,需要被其他进行实现或继承
(2) 接口与抽象类里面都能包含抽象方法,实现接口或继承抽象类的子类都必须实现这些抽象方法

不同点:

(1) 接口的概念更像是说我有这个功能(has-a)、抽象类的概念更像我的方法是什么(is-a)

(2) 从继承实现关系的角度
接口要实现、抽象类要继承,一个类可以实现多个接口,一个类只能继承一个抽象类;

接口中的方法只有定义,没有具体的实现,实现由接口的实现类来完成;抽象类中即可以定义也可以由具体方法实现;

(3) 从成员变量和成员方法角度
接口中可以定义成员变量,但必须是静态变量public、final、static,且要赋初始值,方法必须只能是public、abstract;

抽象类可以定义自己的成员变量,也可以有成员方法。抽象方法需要abstract修饰,不能用private、static、synchronize、native修饰(因为是是公共的、这些词不太公共)
 

 7、重载和重写的区别

方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同

方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型 

      注: 

        (1)子类中不能重写父类中的final方法 

        (2)子类中必须重写父类中的abstract方法 

8、try-catch-finally相关问题

      如下代码,最后x会返回什么

    static int test() {
        int x = 1;
        try {
            x++;
            return x;
        } finally {
            x++;
        }
    }

答:2

原因: 在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。 在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,因此,即使finally中对变量x进行了改变,但是不会影响返回结果。

 9、hashmap基本原理

答:HashMap基于Hash算法实现的,我们通过put(key,value)存储, get(key)来获取。当传入key时, HashMap会根据key. hashCode()计算出hash值,根据hash值将value保存bucket里。当计算出的hash值相同时,我们称之为hash冲突, HashMap的做法是用链表和红黑树存储相同hash值的value.当hash冲突的个数比较少时,使用链表否则使用红黑树。

10、Array和ArrayList的区别

答:

(1) ArrayList是泛型容器,新建需要实例化泛型参数
(2) 长度不同。Array是数组,声明好之后,其长度就已经固定;ArrayList底层是用数组实现的,但是ArrayList的长度是可变的,在每次添加时,如果发现空间不足的话,会创建一个长度大概是原来1.5倍的新数组(java8源码),然后把原来的数组元素复制过去。
(3)  存放数据的区别。Array可以除了可以存放对象类型的数据之外,还可以存放基本数据类型的数据。

而ArrayList只能存放对象数据类型的数据,因为它的类在定义时已经是针对Object的子类做了泛型的约束。

ArrayList如果确实要存放基本数据类型的数据,那只能存放基本数据类型对应的包装类的数据。在数据的存取时可能会涉及到java基本数据类型的自动装箱、自动拆箱。
(4) 使用方法的区别

Array数组只能通过数组下标来对指定位置的元素进行变更。

而ArrayList在Array的基础上增加了很多的方法。比如add,addAll,remove,removeAll,contains,以及iterator等等多种丰富的功能方法。
(5) 效率上的区别

因为ArrayList是在Array的基础上做了各种丰富多样的功能增强,所以ArrayList效率上自然是不如Array效率高了。

11、loat f=3.4;是否正确?

答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型,会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。

你可能感兴趣的:(Java基础,java,开发语言,面试)