Java经典面试题整理及答案详解(七)

了解更多:
Java经典面试题整理及答案详解(一)
Java经典面试题整理及答案详解(二)
Java经典面试题整理及答案详解(三)
Java经典面试题整理及答案详解(四)
Java经典面试题整理及答案详解(五)
Java经典面试题整理及答案详解(六)

Java经典面试题第七弹来啦!本节小编整理了一些理论基础相关的面试题,当面试官提问时,这些可一定得回答上~

1.缓存流与内存流的区别

内存流的本质就是将所有的数据在内存之中进行完整的处理操作。核心的概念在于内存流可以进行整体的数据处理。
从实现的角度来讲,两者是可以部分互通的,从实用角度来讲,缓存流更多的是一个暂时的操作,缓存操作流更多的情况下是有一个间隔的,这个间隔往往不会保存过多的内容。
在缓存流的操作概念里面重点只有一个核心因素:处理中文(BufferedReader),这种操作本身只适合于字符串的操作,本身没有验证处理,所以会使用Scanner完成。

2.基本类型与包装类型选择

基本类型与包装类型最大的区别有亮点:
(1)包装类是以对象的形式运行,而且JDK1.5之后对于包装类又提供自动的装箱与拆箱处理机制;
(2)包装类可以进行null的描述。(这个描述的操作要追溯到Hibernate盛行的时期,因为对于一些设置的字段,如果使用了基本类型,不设置内容就是对应数据类型默认值,如果说现在年龄使用了int,则不设置年龄表示0,而如果使用了包装类年龄表示的就是null。)
对于现在的开发,基本都是在数据层上的保存对象内容类(VO类)使用包装类,这样对null的控制比较方便。

3.基本数据类型与引用传递

在Java里面数据类型一共分为两种:基本、引用,对于引用可以发生引用传递,而基本类型只是一个值拷贝,引用类型传入到某一个方法之中,修改之后会影响原始对象中的内容,而基本数据类型不会。
不过从后续的开发开始,为了方便用户的使用专门提供有一个包装类的概念,利用包装类可以方便的实现基本数据类型与引用数据类型的操作,最为重要的是包装类里面提供有一个null的概念,这对于一些开发框架,例如:MyBatis、Hibernate等都有非常重要的意义。

4.集合信息取得

如果说现在有一个List集合,想要取得里面某一个索引的数据,这种情况下一定要考虑使用get()方法(要清楚ArrayList、LinkedList区别所在),可以轻松地进行元素的定位,get()方法是其主要扩充的方法,也是List和Set最大区别所在。例如:FileUpload、MyBatis里面获得的数据都是通过List中的get()方法取得。
而对于集合的输出操作有两种做法:
(1)使用for循环,在集合里面存在有size()方法,而且List有get()方法,很明显可以使用循环。如果你使用的是LinkedList子类,那么会出现时间复杂度攀升的问题;如果使用的是ArrayList,由于其时间复杂度为1,所以可以快速查找;
(2)对于集合而言,为了避免这些时间复杂度过高问题,有了迭代的输出接口,使用Iterator。

5.接口标准

所谓的标准指的是所有类都要奉行的法则,因为普通类的继承关系里面是不存在有这样的硬性的子类定义法则(强制性覆写),所以才会衍生出抽象类与接口的概念,对于接口本身而言,它只是一个方法视图。
就好比你使用一款空调遥控器,都一定可以找到开关键,如果不开空调无法制冷,而如果太冷一定要关,这些就是标准,如下图,遥控器的标准在设计里面就像是接口,没有关联的层要想捆绑在一起,就要使用接口。

Java经典面试题整理及答案详解(七)

6.链表为什么要用内部类?

内部类的特点:
(1)内部类可以方便的与外部类之间进行私有属性的访问;
(2)一个内部类如果使用了private声明,那么外部将无法直接使用它。
为什么不将链表的实现变为如下形式:

Java经典面试题整理及答案详解(七)

之所以没有将Link与Node分开,而直接使用了一个内部类的形式完成,目的是:
(1) Node类如果没有Link类负责整体的协调操作,那么Node类上的方法根本没有任何用处;
(2) 方便引用传递。
如果你想知道为什么要合并为一个类,那就将内部类拿到外部类来,会发现在进行数据删除的时候,需要进行外部类与内部类之间非常繁琐的引用传递。

更多专业知识,面试技巧就在面试一点通,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

上一篇:Java经典面试题整理及答案详解(五)


下一篇:Java经典面试题整理及答案详解(六)