一、继承与抽象类
- 什么叫做类与类的继承,作用是什么?
- 就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。
- 作用是子类复用父类内容。
- 继承后,父类与子类之间,各成员有什么样的影响?
- 成员变量:
- 不重名,没有影响。
- 重名,就近使用,使用super区分父类变量。
- 构造方法:
- 无影响,但是子类构造方法默认调用父类构造方法
- 成员方法:
- 不重名,没有影响。
- 重名,子类重写父类方法。
- 成员变量:
- 子类中,如何调用父类的成员?如何使用本类的成员?
- 父类成员方法:super.方法名
- 父类非私有成员变量:super.变量名
- 子类成员方法:this.方法名
- 子类成员变量:this.变量名
- 抽象方法与普通成员方法有什么区别?
- 抽象方法使用abstract关键字修饰,没有方法体。
- 成员方法有方法体。
- 抽象类与普通类有什么区别?
- 方法:
- 抽象类可以包含抽象方法和成员方法。
- 普通类不可以包含抽象方法,只有成员方法。
- 对象:
- 抽象类不可以创建对象。
- 普通类可以创建对象。
- 方法:
二、接口与多态
- 什么是接口,如何定义接口?
- 接口,是Java语言中一种引用类型,是方法的集合。
- 使用interface关键定义接口,其中可以定义抽象方法,默认方法,私有方法,静态方法等方法。
- 什么叫做多态,条件是什么?
- 一类事物的行为,具有多种表现形式。
- 条件:
- 继承或者实现【二选一】
- 方法的重写。
- 父类引用指向子类对象。
- 使用多态特性,带来了什么样的好处?
- 增强方法的扩展性和复用性。
- 使用多态特性,注意什么样的弊端?
- 由于类型的提升,导致调用子类对象特有的方法,必须向下转型。
三、list集合和set集合
1.请简述List接口的特点。
- 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
- 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
- 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
2.请简述HashSet去除重复元素的原理。
- 调用被添加元素的hashCode(),和HashSet中已有元素的hashCode比较是否相同
- 如果不相同,直接存储
- 如果相同,调用equals方法比较是否相同
- 不相同,直接存储元素
- 相同,认为是同一元素.不存储
3.简述常见的数据结构中元素的存取特点。
- 栈:stack,又称堆栈,对元素的存取特点是:先进后出。即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素。
- 队列:queue,简称队,对元素的存取特点是:先进先出。即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素。
- 数组:Array,是有序的元素序列,对元素的存取特点是:
1)、查找元素快:通过索引,可以快速访问指定位置的元素
2)、增删元素慢
(1)指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索 引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。
(2)指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复 制到新数组对应索引的位置,原数组中指定索引位置元素不复制到新数组中。
- 链表:linked list,对元素的存取有如下的特点:
1)、多个结点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的 右手拉住下个人的左手,依次类推,这样多个人就连在一起了。
2)、查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素。
3)、增删元素快:
增加元素:只需要修改连接下个元素的地址即可。
删除元素:只需要修改连接下个元素的地址即可。
4.简述Comparable和Comparator两个接口的区别。
- Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
- Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
四、Map接口的特点
(1)请简述Map 的特点。
1.Map每个元素由键与值两部分组成
2.Map键不能重复,每个键对应一个值
3.键和值可以为null
(2)说出Entry键值对对象遍历Map集合的原理。
Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map中是一一对应关系,这一对对象又称做Map 中的一个Entry(项)。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
五、线程池及lambda表达式
(1)线程池概念
问题:
请描述什么是线程池。
答:
线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
(2)线程池优点
问题:
请描述合理利用线程池能够带来的三个好处。
答:
- 降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
- 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
- 提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。
(3)Lambda表达式
问题:
请列举Lambda语法的省略规则
答:
在Lambda标准格式的基础上,使用省略写法的规则为:
1.小括号内参数的类型可以省略;
2.如果小括号内有且仅有一个参,则小括号可以省略;
3.如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
(4)Lambda表达式
问题:
请列举Lambda表达式的3个组成部分,并解释说明。
答:
Lambda标准格式 Lambda省去面向对象的条条框框,格式由3个部分组成:一些参数,一个箭头,一段代码。
Lambda表达式的标准格式为:格式说明:
1.小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
2.->是新引入的语法格式,代表指向动作。
3.大括号内的语法与传统方法体要求基本一致。
(5)Lambda表达式
问题:
请描述Lambda的使用前提
答:
Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意:
- 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。无论是JDK内置的 Runnable 、 Comparator 接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
- 使用Lambda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。