Java面试题(基础篇)

        最近本人又将面临找工作,打算写三篇关于面试的文章(Java面试题:基础篇,框架篇,加薪篇),后续有需要再更新.这几年来面试的次数也不少,以下知识点80%是本人亲身经历被问到过的问题.特此写下分享出来.想和博主交流的请加QQ群:244284555

一, String 和 StringBuffer 和StringBuilder 有什么区别? 

            他们三个都是用来存储字符串的,但是String 是字符串常量,是不可以变的.而且有固定长度

         StringBuffer 和StringBuilder是字符串变量,是可以改变的对象.去修改变量的时候,实际上是对同一个对象操作.如果用String的话,就是对不同的对象操作

         StringBuffer 是线程安全的   StringBuilder是线程不安全的   所以在多线程的情况下,使用StringBuffer   但是在数据量大的情况下,StringBuilder的效率比较高

PS:这个问题可以按照这样的思路来回答:1,String单独说 2,安全性 3,效率4,比较总结

注意: 经常性会换一种方式问:比如,什么时候用String,什么时候用StringBuffer?

         定义普通的属性时候用String,明确是一个字符串的,并且它被赋值后不会被经常改变的时候用String

         如果这个字符串不固定长度,而且经常会用来拼接操作的时候用StringBuffer

二, HashMap 和HashTable有什么区别?

HashMap他是Map接口的一个子接口,HashMap的键值对的值是可以重复的,而且允许空值的key的Value, 不是线程安全的

   HashTable是线程安全的一个Colletion,不允许空值的存在,这个接口已经被淘汰了.如果要用线程安全,就使用ConcurrentHashMap

         HashTable中hash数组默认大小是11,增加的方式是old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数

         遍历方式: HashMap使用的是Iterator来遍历  HashTable使用的是Enumeration遍历的

PS:这个问题可以从1,可重复性 2.安全性 3,是否空值来回答

三, Array和ArrayList有什么区别?

    可以将 ArrayList想象成一种“会自动扩增容量的Array”

Array:效率是非常高的,但是其容量固定且无法动态改变,可以包含基本类型和对象类型, 存放的时候一定同一种类型的元素.ArrayList就不一定了,因为可以存储Object的.

ArrayList只能包含对象类型,如果存储空间不够了,jdk1.7扩容量为原来的1.5倍,不是线程安全的,只能用在单线程环境下.它还实现了Serializable接口

四, HashMap和LinkedHashMap有什么区别?

        HashMap,LinkedHashMap,TreeMap都属于Map的子接口.Map用于存储键值对.键不可以重复,但是值可以重复

         HashMap好是根据hashCode值存储数据.可以为空

         LinkedHashMap也是一个HashMap.但是内部维持了一个双向链表,可以保持顺序,先进先出

性能:遍历的时候比hashMap慢.  因为保持插入的顺序要额外的开销.  当HashMap的容量很大的时候,实际数据很少,遍历起来就可能比LinkedHashMap慢.因为LinkedHashMap遍历速度只和实际数据有关,和容量无关.而HashMap和他的容量有关.

         TreeMap实现的是SortMap接口.能够使保存的记录根据键排序,默认是升序的.使用Iterator遍历得到的结果也是排过序的

         一般情况下,我们用的最多的是HashMap  在Map中插入\删除,定位元素.hashMap是最好的选择.

         但是呢,如果要按顺序遍历键.(自然或者自定义),TreeMap是最好的选择

         如果需要输出的顺序和输入的相同,那就使用LinkedHashMap来实现.它还可以按读取顺序来排序.

PS: 有一次我把所属关系说错了, LinkedHashMap是HashMap下面的类,HashMap是Map下面的类,当时可能说成LinkedHashMap和HashMap是同级关系

注意:ArrayList 和LinkedList是同级关系,可能是这里说错了,LinkedList说成是ArrayList下面的.  其他他们都是List接口和Collection接口下面的实现类

五, 其他知识点

这些知识点大多都没有被问到过,或许是太简单,就不做详细的描述述,知识点如下:

         1,&和&&的区别

         2,break和continue的区别

         3,什么是重载,什么是重写,以及他们有什么区别

         4,==和equals的区别(这个问过)

         5,this和super的区别

         6,final关键字的作用(final有什么特点)

         7,接口和类有什么区别(这个问过,笔试的时候遇到过),什么是类?什么是接口?这里作一下阐述:

         接口: 是用关键字interface定义的。接口都用于设计上,设计上的特点1,接口是对外提供的规则2,对于功能的扩展3,降低了耦合性

  1:抽象类只能被继承,而且只能单继承。

接口需要被实现,而且可以多实现。

2:抽象类中可以定义非抽象方法,子类可以直接继承使用。

接口中都有抽象方法,需要子类去实现。

3:抽象类使用的是  is a 关系。

接口使用的 like a 关系。

4:抽象类的成员修饰符可以自定义。

接口中的成员修饰符是固定的。全都是public的。

         8,static关键字的特点

         9,异常,(五个常见的异常),啥鬼东西?

         10,IO流,好像都没问过,正则也不会问,反射没问过,网络编程没问过.

         反射:

1、获得Class对象,就是获取到指定的名称的字节码文件对象。

2、实例化对象,获得类的属性、方法或构造函数。

3、访问属性、调用方法、调用构造函数创建对象。

异常:

处理异常两种方式:1,捕捉 2,抛出

 throw 和throws关键字的区别:

throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。

throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。

多线程不在这里描述,因为它太重要,需要另起一行

基础篇的话暂时想到这么多,如果大家有什么好的总结,欢迎留言.


猜你喜欢

转载自blog.csdn.net/qq_28524127/article/details/80151902
今日推荐