Java 面试题

来源:互联网 发布:skyline 影像数据下载 编辑:程序博客网 时间:2024/05/11 20:27

出去面试被说 你Java 很薄弱啊 故 收集一下面试题,同时也记录自己被问到的题目,免得下次再度被人当面这么说 ┑( ̄Д  ̄)┍。
PS:我才不会告诉你其他面试的写卷子都是手机百度的~ 本大大 抱着中华五千年的优秀传统 诚实的高尚情操 才不会做个面试题都舞弊哎 (╯‵□′)╯︵┻━┻

1.StringBuffer 和 StringBuider 的区别?

StringBuffer 线程安全,StringBuider 线程不安全 。StringBuider的速度快一些。

2.Long 和 long 的区别

long 是基本类型,Long是对象类。
基本类型:long,int,byte,float,double,char
对象类型(类): Long,Integer,Byte,Float,Double,Char,String,其它一切java提供的,或者你自己创建的类。
其中Long又叫 long的包装类。而Byte和Float也类似,一般包装类的名字首写是数值名的大写开头。

3.值类型和引用类型的区别

Java中数据类型分为两大类,基本类型和对象类型。
相应的,变量也有两种类型:基本类型和引用类型。
基本类型的变量保存原始值,即它代表的值就是数值本身;
而引用类型的变量保存引用值,”引用值”指向内存空间的地址,代表了某个对象的引用,而不是对象本身,
对象本身存放在这个引用值所表示的地址的位置。

值类型:四类八种四类:   1,整型 2,浮点型 3,字符型4,逻辑型八种:   
         1,整型3byteshortintlong         2,浮点型2floatdouble         3,字符型1char         4,逻辑型1boolean

引用类型 : 除了值类型都是引用类型

4.值传递和引用传递

(首先要说明的是java中是没有指针的,java中只存在值传递,只存在值传递!!! 然而我们经常看到对于对象(数组,类,接口)的传递似乎有点像引用传递,可以改变对象中某个属性的值。但是不要被这个假象所蒙蔽,实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是按值传递。)

  1. 值传递:
    形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。

  2. 引用传递:
    也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
    在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。
    对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上

    http://www.cnblogs.com/binyue/p/3862276.html

5.字符串的倒序输出 (基本数据类型的转换咯,不是经常用所以知道逻辑不会写 也是心塞塞唉)

/* * 字符串abcdefg,要求按逆序输出为gfedcba */public class ReverseSort {    public static String reverseSort(String str) {        String str2 = "";        for (int i = str.length() - 1; i > -1; i--) {            str2 += String.valueOf(str.charAt(i));        }        return str2;    }    public static void main(String[] args) {        String str = "abcdefg";        String sortedStr = reverseSort(str);        System.out.println(sortedStr);    }}结果:gfedcba

6.== 和 equal 的区别
==是运算符, equal是方法 其实就这些区别
对于Objiect 对象而言 二者都是比较地址
但是对于 String 还有一些类而言 会重写这个方法 对于String 而言 equal 就是对比值是否相等。
通常面试问 肤浅一些 也就是回答一下 ==会比较地址 equal 比较值
对于 Integer 而言 == 也是比值

7.Java集合类框架的基本接口有哪些?

Collection:代表一组对象,每一个对象都是它的子元素。
Set:不包含重复元素的Collection。
List:有顺序的collection,并且可以包含重复元素。
Map:可以把键(key)映射到值(value)的对象,键不能重复。

8..数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。
Array大小是固定的,ArrayList的大小是动态变化的。
ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

9.ArrayList和LinkedList有什么区别?

ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

10.Java集合类框架的最佳实践有哪些?

根据应用的需要正确选择要使用的集合的类型对性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我们就应该用Array而不是ArrayList。
有些集合类允许指定初始容量。因此,如果我们能估计出存储的元素的数目,我们可以设置初始容量来避免重新计算hash值或者是扩容。
为了类型安全,可读性和健壮性的原因总是要使用泛型。同时,使用泛型还可以避免运行时的ClassCastException。
使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。
编程的时候接口优于实现。
底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。

11.异常处理完成以后,Exception对象会发生什么变化?

Exception对象会在下一个垃圾回收过程中被回收掉。

0 0
原创粉丝点击