没有合适的资源?快使用搜索试试~ 我知道了~
首页java(BAT)面试题汇总
java(BAT)面试题汇总
需积分: 16 215 浏览量
更新于2023-05-26
评论 1
收藏 21.06MB PDF 举报
自己总结得java(BAT)面试题汇总pdf版,总共834页,116道面试题的详细解答过程,有助于面试求职,积分不多,是自己辛辛苦苦整理的,麻烦广大求职友好评
资源详情
资源评论
资源推荐

Java(BAT 面试题汇总)
Author:李佰波
Date:2017.5.7

1.面向对象和面向过程的区别
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗
资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是
最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特
性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
2.Java 的四个基本特性(抽象、封装、继承,
多态)
抽象:就是把现实生活中的某一类东西提取出来,用程序代码表示,我们通常
叫做类或者接口。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数
据抽象也就是对象的属性。过程抽象是对象的行为特征。
封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信
的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的
封装。
继承:是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类
事物的父类。父类的意义在于抽取多类事物的共性。
多态:允许不同类的对象对同一消息做出响应。方法的重载、类的覆盖正体现
了多态。
3.重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序
不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,
抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰
符为 private 则子类中就不是重写。
4.构造器 Constructor 是否可被 override
构造器不能被重写,不能用 static 修饰构造器,只能用 public
private protected 这三个权限修饰符,且不能有返回语句。

5.访问控制符 public,protected,private,以及默
认的区别
private 只有在本类中才能访问;
public 在任何地方都能访问;
protected 在同包内的类及包外的子类能访问;
默认不写在同包内能访问。
6 是否可以继承 String 类#
String 类是 final 类故不可以继承,一切由 final 修饰过的都不能继承。
7.String 和 StringBuffer、StringBuilder 的区
别
可变性
String 类中使用字符数组保存字符串,private
final char value[],所以 string 对象是不可变的。StringBuilder 与 StringBuffer
都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符
数组保存字符串,char[]
value,这两种对象都是可变的。
线程安全性
String 中的对象是不可变的,也就可以理解为常量,线程安全。
AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一
些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共
方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线
程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
性能
每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将
指针指向新的 String 对象。StringBuffer 每次都会对
StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同
情况下使用
StirngBuilder 相比使用
StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的
风险。
8.hashCode 和 equals 方法的关系
equals 相等,hashcode 必相等;hashcode 相等,equals 可能不相等。
9.抽象类和接口的区别

语法层次
抽象类和接口分别给出了不同的语法定义。
设计层次
抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个
类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽
象。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。
跨域不同
抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间
必须存在"is-a"
关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要
求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的
契约而已,"like-a"的关系。
10.自动装箱与拆箱
装箱:将基本类型用它们对应的引用类型包装起来;
拆箱:将包装类型转换为基本数据类型;
Java 使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开
销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行
装箱和拆箱动作。
11.什么是泛型、为什么要使用以及泛型擦除
泛型,即“参数化类型”。
创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免
使用强制类型转换。
Java 编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是
被擦除,这个过程即类型擦除。泛型擦除可以简单的理解为将泛型 java 代码转
换为普通 java 代码,只不过编译器更直接点,将泛型 java 代码直接转换成普
通 java 字节码。
类型擦除的主要过程如下:
1).将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。
2).移除所有的类型参数。
12.Java 中的集合类及关系图
List 和 Set 继承自 Collection 接口。
Set 无序不允许元素重复。HashSet 和 TreeSet 是两个主要的实现类。
List 有序且允许元素重复。ArrayList、LinkedList 和 Vector 是三个主要的实现
类。
Map 也属于集合系统,但和 Collection 接口没关系。Map 是 key 对 value 的映

射集合,其中 key 列就是一个集合。key 不能重复,但是 value 可以重复。
HashMap、TreeMap 和 Hashtable 是三个主要的实现类。
SortedSet 和 SortedMap 接口对元素按指定规则排序,SortedMap 是对 key 列
进行排序。
13.HashMap 实现原理
1. HashMap 概述:
HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,
并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
2. HashMap 的数据结构:
在 java 编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引
用),所有的数据结构都可以用这两个基本结构来构造的,HashMap 也不例外。
HashMap 实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
从上图中可以看出,HashMap 底层就是一个数组结构,数组中的每一项又是一个链表。当
新建一个 HashMap 的时候,就会初始化一个数组。
源码如下:
Java 代码
1. /**
2. * The table, resized as necessary. Length MUST Always be a power of two.
3. */
4. transient Entry[] table;
5.
6. static class Entry<K,V> implements Map.Entry<K,V> {
7. final K key;
8. V value;
9. Entry<K,V> next;
10. final int hash;
11. ……
12. }
可以看出,Entry 就是数组中的元素,每个 Map.Entry 其实就是一个 key-value 对,它持
有一个指向下一个元素的引用,这就构成了链表。
3. HashMap 的存取实现:
剩余833页未读,继续阅读














安全验证
文档复制为VIP权益,开通VIP直接复制

评论0