Java 基础面试题 汇总

1. java 中 wait()与sleep() 区别
答:两者都是暂停当前运行的线程。sleep()是Thread类的方法;wait()是Object类的方法 。调用sleep(),线程不会释放对象锁,其他线程依然无法访问这个对象;调用wait(),线程会释放对象锁,其他线程能访问这个对象。

2. java中代表价格的数据类型用哪个BigDecimal还是double?
答:如果需要精确计算的结果,使用BigDecimal类,但是比较消耗内存和性能;否则可以直接使用float或double。

3. a = a + b 与 a += b 的区别?
答:内存上分析:如果加法操作的结果比 a 的最大值要大,则 a+b 会出现编译错误;但是 a += b 没问题,+= 隐式的将加操作的结果类型强制转换为持有结果的类型。

4. 我们能在 Switch 中使用 String 吗?
答:从 Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法糖。内部实现在 switch 中使用字符串的 hash code。从Java 5开始,Java中引入了枚举类型enum。

5. Java 中 WeakReference(弱引用) 与 SoftReference(软引用)的区别?
答: WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率。 WeakReference ,一旦失去最后一个强引用,就会被 GC 回收;软引用可以延迟到 JVM 内存不足的时候被 GC 回收。

6. Java 中堆和栈有什么区别?
答:JVM中堆和栈是不同的内存区域。栈用于保存方法的一些基本类型的变量和对象的引用变量,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间;堆内存用于存放由new创建的对象,由JVM的GC来管理。

7. “a==b”和”a.equals(b)”有什么区别?
答:如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true,而 a.equals(b)是比较逻辑一致,两个对象必须具有相同的 hashCode才返回true,所以通常需要重写equals()方法来提供逻辑一致性的比较。

8. ArrayList 与 LinkedList 的区别?
答:都实现了List接口。
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

9. String和StringBuilder、StringBuffer的区别?
答:String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。
而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的。

10. 抽象类(abstract class)和接口(interface)有什么异同?
答:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。

11. 用Java写一个单例类。
答:
- 饿汉式单例

public class Singleton {
    private Singleton(){}
    private static Singleton instance = new Singleton();
    public static Singleton getInstance(){
        return instance;
    }
}

-懒汉式单例

public class Singleton {
    private static Singleton instance = null;
    private Singleton() {}
    public static synchronized Singleton getInstance(){
        if (instance == null) instance = new Singleton();
        return instance;
    }
}

原文地址:https://www.cnblogs.com/bugzone/p/java_interview.html

时间: 2024-10-12 02:46:57

Java 基础面试题 汇总的相关文章

Java基础机试题

package day8;import java.util.Scanner;/** * Java基础机试题 * @author:lyrand * */public class convert {        static void exitContinue(){                while (true){            System.out.print("你想继续吗?(y/n)");            Scanner sc = new Scanner(Sys

Java基础面试题集(一)

Java基础面试题 一.面向对象编程(OOP) 7 二.常见的Java问题 7 2.1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 7 2.2.JDK和JRE的区别是什么? 8 2.4.是否可以在static环境中访问非static变量? 8 2.5.Java支持的数据类型有哪些?什么是自动拆装箱? 8 2.6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? 8 2.7.Java中,什么是构造函数?什么是构造函数重载?什么是

经典的Java基础面试题集锦

经典的Java基础面试题集锦,欢迎收藏和分享 一.面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象.下面的章节我们会逐个分析这些特性. 封装 封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在Java当中,有3种修饰符:publ

java基础面试题(转)

JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派

Java基础面试题,JavaWeb面试题

java基础面试题 1.Java的基本类型(8个)每个基本类型所占位数与字节数byte 1字节 8位short 2字节 16位int 4字节 32位long 8字节 64位char 2字节 16位float 4字节 32位double 8字节 64位boolean 1字节 8位 2.Int与Integer区别Integer是int的包装类,int则是java的一种基本数据类型Integer变量必须实例化后才能使用,而int变量不需要Integer实际是对象的引用,当new一个Integer时,实

28道java基础面试题-下

28道java基础面试题-下15.Java语言如何进行异常处理,关键字:throws.throw.try.catch.finally分别如何使用?答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在Java中,每个异常都是一个对象,它是Throwable类或其子类的实例.当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理.Java的异常处理是通过5个关键词来实现的:try.catch.th

28道java基础面试题-上

[软帝学院]28道java基础面试题1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么.继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类).继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的<Java与

最新Java开发面试题汇总

原文地址:www.jianshu.com/p/faaa4c2a4-前言为了方便之后的面试复习,我把各类面试题给汇总了一下,每道题都是经过自己筛选后觉得需要掌握的,此次整理包括 Java.数据结构与算法.计算机网络.操作系统.数据库等.文末我会把这些完整的答案放送给大家.Java 篇(1). Java基础知识java中==和equals和hashCode的区别int与integer的区别抽象类的意义接口和抽象类的区别能否创建一个包含可变对象的不可变对象?谈谈对java多态的理解String.Str

Java基础面试题集(二)

Java程序员面试题集(1-50) 一.Java基础部分 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么. 2)继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类). 3)封装:通常认为封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面.面向