java基础面试题题库四(传智专修学院2017级Java4班)

-------------------------------------------------------------

本面试题由传智专修学院2017级java4班所有同学合作完成

-------------------------------------------------------------

1.抽象类和接口的区别

 1.接口描述了方法的特征,不给出实现,一方面解决java的单继承问题,实现了强大的可接插性

 2.抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的代码移植到抽象类中

 3.面向接口编程,而不是面向具体编程

 4.开发中优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性)

2.集合

  set list map

  一、

  1.Set:,无序,元素不可重复(但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

  2.List:有序,列表存储,元素可重复

  3.Map:无序,元素可重复

   二、

  1.Set接口:有两个实现类(HashSet(底层由HashMap实现),LinkedHashSet)

  2.List接口有三个实现类(

    LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;

     ArrayList:非线程安全的,效率高;基于数组;便于索引,但不便于插入删除

     Vector:基于线程安全的,效率低;基于数组; )

  3.Map接口:有三个实现类(HashMap,HashTable,LinkedHashMap)

     HashMap:非线程安全,高效,支持null;

     HashTable:线程安全,低效,不支持null;

     LinkedHashMap:是HashMap的一个子类,保存了记录的插入顺序

  SortMap接口:TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序

    注:最常用的,冷门的除外)

3.常用的集合有哪些,谈谈对它们的理解? ?

set,list,map

1.1、特点

  1. Set:无序,元素不可重复(但是元素在 set 中的位置是有该元素的 HashCode 决定的,其位置其实是固定的)
  2. List:有序,列表存储,元素可重复
  3. map:无序,元素可重复

1.2、实现类

1.  Set  接口:有两个实现类(HashSet(底层由 HashMap 实现),LinkedHashSet)

2.  List  接口:有三个实现类(

LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;

ArrayList:非线程安全的,效率高;基于数组;便于索引,但不便于插入删除

Vector:基于线程安全的,效率低;基于数组; )

3. Map  接口:有三个实现类(HashMap,HashTable,LinkedHashMap)

HashMap:非线程安全,高效,支持 null;

HashTable:线程安全,低效,不支持 null;

LinkedHashMap:是 HashMap 的一个子类,保存了记录的插入顺序

SortMap 接口:TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序。

4.List 、Set 、Map  的区别?

Java 中的集合包括三大类:它们是 Set、List 和 Map,它们都处于Java.util 包中,Set、List 和 Map 都是接口,它们有各自的实现类。

Set的实现类主要有 HashSet 和 TreeSet,List 的实现类主要有 ArrayList,

Map 的实现类主要有 HashMap 和 TreeMap。

Set 中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对象按特定方式排序,例如 TreeSet 类,它可以按照默认排序,也可以通过实现 Java.util.Comparator<Type>接口来自定义排序方式。List 中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,如通过 list.get(i)方式来获得 List 集合中的元素。Map 中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复

5.= =和  equals()的区别?

==:用于比较基本数据类型,比较变量值是否相等,若相同,则为 true用于比较引用数据类型,比较的是指向内存中的引用对象地址是否相同,若相同,则为 true。

equals()方法: 是用来比较两个对象是否相等,即实际比较的是两个对象的内容是否相同。

注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,

则比较的是引用类型的变量所指向的对象的地址;

6.方法重写( Overloading)和方法重载( Overwrite)的区别?

方法重写:一般出现在继承(不同类)中,是子类对父类方法的重新实现;

重写规则:

1)参数列表必须完全与被重写方法的一致,返回类型必须完全与被重写方法的返回类型一致

2)构造方法不能被重写,声明为 final 的方法不能被重写,声明为 static 的方法不能被重写,但是能够被再次声明

3)访问权限不能比父类中被重写的方法的访问权限更高

4)重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以

方法重载:在同一个类中,方法名字相同,参数不同,方法体不同,是一个类中多态性的一种表现;

注意:每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表重载规则:

方法名一致,参数列表中参数的顺序,类型,个数不同重载与方法的返回值无关,存在于父类和子类,同类中

可以抛出不同的异常,可以有不同修饰符

7.throw 和 throws 的区别?

throw:是用在语句抛出异常

特点:

throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。

throw 是具体向外抛异常的动作,所以它是抛出一个异常实例,执行 throw 则一定抛出了某种异常

throws 是用在声明方法时,表示该方法可能要抛出异常

特点:

1)throws 语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理

2) throws 主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常

3) throws 表示出现异常的一种可能性,并不一定会发生这些异常

注意:抛出的异常可以使系统定义,也可以是自定义;使用 try,catch,finally 捕获异常。

8.  final,  finally, finalize 的区别? 

final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。

finally:异常处理语句结构的一部分,表示总是执行。

finalize:Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖

此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

9. String、StringBuffer、StringBuilder 的区别?

(1)可变,不可变:

String:字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象

StringBuffer:在修改时会改变对象自身,每次操作都是对 StringBuffer 对象本身进行修改,不是生成新的对象

使用场景:对字符串经常改变情况下,主要方法:append(),insert()等;

(2)线程是否安全:

String 对象定义后不可变,线程安全

StringBuffer 是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区大量数据

StringBuilder 是线程不安全的,适用于单线程下操作字符串缓冲区大量数据

共同点:StringBuilder 与 StringBuffer 有公共父类 AbstractStringBuilder(抽象类)StringBuilder、StringBuffer 的方法都会调用 AbstractStringBuilder 中的公共方法,如super.append(...)。只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用 StringBuilder 效率高于 StringBuffer。

10. IO 流

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

11. Java 中有几种类型的流?分别是什么?

Java 中的流,可以从不同的角度进行分类。

按流的方向分:输入流和输出流。

按处理数据单位分:字节流和字符流。

按实现功能分:节点流和处理流。

字节流和字符流的区别:

1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8 码表中是 3 个字节)时。先去查指定的编码表,将查到的字符返回。

2.字节流可以处理所有类型数据,如:图片,MP3,AVI 视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

12. break 和 continue 的区别?

break 和 continue 都是用来控制循环,主要是终止循环;

break 用于完全结束一个循环,跳出循环体执行循环后面的语句;

continue 用于跳过本次循环,执行下次循环;

13.如何实现对象克隆?

1). 实现 Cloneable 接口并重写 Object 类中的 clone()方法;

2). 实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现 真正的深度克隆

14.数据类型之间的转换?

1)字符串如何转基本数据类型?

调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型;

2)基本数据类型如何转字符串?

一种方法是将基本数据类型与空字符串(“”)连接(+)即可获得其所对应的字符串;另一种方法是调用 String 类中的 valueOf()方法返回相应字符串

15.线程和进程的区别?

进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位

线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的可以独立运行的基本单位

特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性

进程在运行时各自内存单元相互独立,线程之间内存共享,这使多线程编程可以拥有更好的性能和用户体验

注意:多线程编程对于其它程序是不友好的,占据大量 cpu 资源。

                                                                                                                                  2019.1.7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月阳阳月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值