软件测试JAVA⾯试题,⾯试官必问
1.什么是 Java 虚拟机(JVM)?Java的跨平台原理⼜是什么?
Java虚拟机就是负责将字节码⽂件(.class⽂件)翻译成特定平台下的机器码然后运⾏。
也就是说,只要在不同平台上安装对应的JVM,就可以运⾏字节码⽂件,运⾏我们编写的Java程序。
⾄于跨平台原理,只要记住⼀句话:“⼀次编译,多地运⾏”。也就是说,编译出⼀个java源⽂件后,只要在不同平台上,也就是不同操作系统上装有对应的Java虚拟机,就能够将该源⽂件翻译成该系统可以识别的机器码⽂件从⽽运⾏出来。
2. JDK、JRE、JVM 分别是什么关系?
JDK 即为 Java 开发⼯具包,包含编写 Java 程序的开发⼯具以及 JRE。
JRE 即为 Java 运⾏环境,提供了运⾏ Java 应⽤程序所必须的软件环境,包含有 Java 虚拟机(JVM)。
JVM 即为 Java 虚拟机,提供了字节码⽂件(.class)的运⾏环境⽀持。
简单说,就是 JDK 包含 JRE 包含 JVM。
3. Java ⽀持的数据类型有哪些?
Java ⽀持的数据类型包括基本数据类型和引⽤类型。基本数据类型如下。
整数值型:byte,short,int,long
字符型:char
浮点类型:float,double
布尔型:boolean
注意:String 是引⽤类型不是基本类型。
4. 什么是⾯向对象编程(OOP)?
⾯向对象编程主要是把事物给对象化,让每个对象都拥有其属性和⾏为,然后将对象抽象成类,再封装起来⽅便使⽤。
⾯向对象编程语⾔,具有以下优点:
代码开发模块化,更易维护和修改;
代码复⽤性强;
增强代码的可靠性和灵活性;
增加代码的可读性。
5. ⾯向对象的四⼤基本特性? (封装、继承、多态和抽象)
封装:只暴露给类外部或者⼦类必须的属性和操作。类封装的实现依赖类的修饰符(public、protected 和 private 等)。封装可以使类具有独⽴性和隔离性,保证类的⾼内聚
继承:对现有类的⼀种复⽤机制。⼀个类如果继承现有的类,则这个类将拥有被继承类的所有⾮私有特性(属性和操作)。这⾥指的继承包含:类的继承和接⼝的实现。
多态:多态是在继承的基础上实现的。多态的三个要素:继承、重写和⽗类引⽤指向⼦类对象。⽗类引⽤指向不同的⼦类对象时,调⽤相同的⽅法,呈现出不同的⾏为,就是类多态特性。多态可以分成编译时多态和运⾏时多态。
抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。抽象模型中⼀般包含:属性(数据)和操作(⾏为)。这个抽象模型我们称之为类,对类进⾏实例化得到对象。
抽象、封装、继承和多态是⾯向对象的基础。 其中封装、继承和多态是Java的三⼤特性
6. Java ⽀持多继承么?
Java 中类不⽀持多继承,只⽀持单继承(即⼀个类只有⼀个⽗类)。 但是 Java 中的接⼝⽀持多继承,即⼀个⼦接⼝可以有多个⽗接⼝。(接⼝的作⽤是⽤来扩展对象的功能,⼀个⼦接⼝继承多个⽗接⼝,说明⼦接⼝扩展了多个功能,当类实现接⼝时,类就扩展了相应的功能)。
7. 接⼝和抽象类的区别是什么?
共同点:
1.接⼝不可以被实例化,抽象类也不可以被实例化
不同点:
1.接⼝中所有的⽅法必须是抽象⽅法,⽽抽象类则既可以有抽象⽅法也可以有⾮抽象⽅法。
2.普通类可以实现很多个接⼝,但是只能继承⼀个抽象类。
3.接⼝中的成员变量默认都是 final 的。⽽抽象类中可以包含⾮ final 的成员变量。接⼝中的成员⽅法数默认是 public 的。抽象类的成员⽅法可以是 private,protected 或者是 public。
4.,但是,如果它包含 main ⽅法的话是可以被调⽤的。也可以参考 JDK8 中抽象类和接⼝的区别。
8. Java 中,什么是构造⽅法
当新对象被创建的时候,构造⽅法会被调⽤。每⼀个类都有构造⽅法。在程序员没有给类提供构造⽅法的情况下,Java 编译器会为这个类创建⼀个默认的构造⽅法。
9. Java 中的⽅法覆盖和⽅法重载?
⽅法覆盖是说⼦类重新定义了⽗类的⽅法。⽅法覆盖必须有相同的⽅法名,参数列表和返回类型。
⽅法重载发⽣在同⼀个类⾥⾯存在有两个或者是多个⽅法的⽅法名相同、返回类型相同但是参数不同列的情况。
举例: 类的⽆参构造⽅法 和 有参构造⽅法。两个⽅法都在⼀个类⾥⾯,参数名相同,返回类型相同,但是参数列表不同。 也叫构造⽅法重载。
10. String和StringBuilder、StringBuffer的区别?
Java 平台提供了两种类型的字符串:String 和 StringBuffer/StringBuilder,它们可以储存和操作字符串。
其中 String 是只读字符串,也就意味着 String 引⽤的字符串内容是不能被修改的。
⽽ StringBuffer/StringBuilder 类表⽰的字符串对象可以直接进⾏修改。StringBuilder 和 StringBuffer 的⽅法完全相同,区别在于StringBuffer 效率低但是线程更安全,StringBuilder效率更⾼但是线程不安全。
11. Java 集合框架有哪些?说出⼀些集合框架的优点?
常见的集合有:List、ArrayList、LinkedList、Set、Hashset、TreeSet、Map、HashMap、TreeMap…
集合框架的部分优点如下:
(1)使⽤核⼼集合类降低开发成本,⽽⾮实现我们⾃⼰的集合类。
(2)随着使⽤经过严格测试的集合框架类,代码质量会得到提⾼。
(3)通过使⽤ JDK 附带的集合类,可以降低代码维护成本。
(4)复⽤性和可操作性。
12. Java 集合框架的基础接⼝有哪些?
Collection 为集合层级的根接⼝。⼀个集合代表⼀组对象,这些对象即为它的元素。Java 平台不提供这个接⼝任何直接的实现。
1.Set 是⼀个不能包含重复元素的集合。这个接⼝对数学集合抽象进⾏建模,被⽤来代表集合,就如⼀副牌。
2.List 是⼀个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List 更像长度动态变换的数组。
3.Map 是⼀个将 key 映射到 value 的对象。⼀个 Map 不能包含重复的 key,每个 key 最多只能映射⼀个 value。
13. ArrayList 和 Vector 有何异同点?
ArrayList 和 Vector 在很多时候都很类似。
(1)两者都是基于索引的,内部由⼀个数组⽀持。
(2)两者维护插⼊的顺序,我们可以根据插⼊顺序来获取元素。
(3)ArrayList 和 Vector 的迭代器实现都是 fail-fast 的。
(4)ArrayList 和 Vector 两者允许 null 值,也可以使⽤索引值对元素进⾏随机访问。
以下是ArrayList和Vector的不同点。java接口有没有构造方法
(1)Vector 是同步的,⽽ ArrayList 不是。然⽽,如果你寻求在迭代的时候对列表进⾏改变,你应该使⽤ CopyOnWriteArrayList。(2)ArrayList ⽐ Vector 快,它因为有同步,不会过载。
(3)ArrayList 更加通⽤,因为我们可以使⽤ Collections ⼯具类轻易地获取同步列表和只读列表。
14. HashMap 和 HashTable 有什么区别?
1. HashMap 是⾮线程安全的,HashTable 是线程安全的。
2. HashMap 的键和值都允许有 null 值存在,⽽ HashTable 则不⾏。
3. 因为线程安全的问题,HashMap 效率⽐ HashTable 的要⾼。
4. HashTable 是同步的,⽽ HashMap 不是。因此,HashMap 更适合于单线程环境,⽽ HashTable 适合于多线程环境。
⼀般现在不建议⽤ HashTable,⼀是 HashTable 是遗留类,内部实现很多没优化和冗余。⼆是即使在多线程环境下,现在也有同步的ConcurrentHashMap 替代,没有必要因为是多线程⽽⽤ HashTable。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论