Java面试中最常问的面试题!!!(2019---Java基础部分)

文章目录

  • Java最常见的面试题(2019---Java基础部分)
        • 适宜人群
    • JAVA基础
          • 1. JDK、JRE、JVM的关系
          • 2. ==和equals的区别
          • 3. final 在 Java 中有什么作用?
          • 4. Java 中的 Math. round(-1. 5) 等于多少?
          • 5. Java中操作字符串都有哪些类?它们的区别是什么?
          • 6. String str = " a " 和 String str = new String(" a ")一样吗?
          • 7. 抽象类中可以没有抽象方法吗?
          • 8.普通类和抽象类有哪些区别?
          • 9.Java中都有哪些容器
          • 10.HashMap和HashTable的区别
          • 11. Sleep和wait的区别
          • 12.ThreadLocal是什么?有哪些使用场景?
          • 13. 什么是反射?

Java最常见的面试题(2019—Java基础部分)

适宜人群

需要面试的初/中/高级程序员

JAVA基础

1. JDK、JRE、JVM的关系
  • JDK:Java Development Kit 即Java开发工具包,提供了Java开发环境和Java运行环境。
  • JRE:Java Runtime Environment 即Java运行环境,为Java程序的运行提供环境。
  • JVM:Java Virtual Michine即Java虚拟机,Java程序运行的最小条件。
    JVM是Java程序实现跨平台(系统)的核心部分,在不同平台上有不同版本的JVM,例如Linux系统上有Linux版本的JVM,Windows系统上有Windows版本的JVM,正因为有各种版本的JVM支持,Java程序才得以在各种平台上实现。
    三者之间的关系为 JDK包含JRE和一些Java系统类库,JRE包含JVM和一些其它的支持Java程序员性的组件。即JDK>JRE>JVM。
2. ==和equals的区别
  • ==
    ==在比较基本类型和引用类型时分别有不同的功能。
    在比较基本类型的时候比较是否相等。
    在比较引用类型的时候比较引用是否相等(引用也就是我们平常说的堆指向栈的地址值)。
  • equals
    其实equals本质上就是“==”,只不过是Java中的一些类如:String、Integer等类重写了equals方法。所在在比较String,Integer类型时比较的是是否相等。但是比较没有重写equals方法的引用类型时(如我们自己定义的实体类)默认比较的是引用(地址值)是否相等。
3. final 在 Java 中有什么作用?
  • final修饰的叫最终类,该类不能被继承。
  • final修饰的方法不能被重写。
  • final修饰的变量的值不能被修改。
4. Java 中的 Math. round(-1. 5) 等于多少?
  • Math.round(-1.5)等于-1,Math,rotund(2.5)等于3。若方法的参数为正数则是四舍五入,若为负数则是五舍六入。例:Math.round(-2.6)=-3,Math.round(-2.5)=-2。
5. Java中操作字符串都有哪些类?它们的区别是什么?

分别是String、StringBuffer、StringBuilder

  • String类声明的是不可变的对象,每次操作时都会生成新的String对象,然后再将指针指向新的引用。
  • StringBuffer和StringBuilder
    相同点:都可以在原有的对象上进行修改
    不同点:StringBuffer线程安全,效率低
        StringBuilder线程不安全,效率高
    所以在单线程的情况下使用StringBuilder,在多线程的情况下使用StringBuffer。
6. String str = " a " 和 String str = new String(" a ")一样吗?

不一样。内存分配方式不一样。String str = " a " 的方式,JVM会将其分配到常量池中。而String str = new String(" a ")会被分配到堆内存中。

7. 抽象类中可以没有抽象方法吗?

抽象类中可以不存在抽象方法。

8.普通类和抽象类有哪些区别?

抽象类中可以有抽象方法,普通类不能有抽象方法
普通类可以直接实例化,抽象类不可以直接实例化(需要通过抽象类的引用指向它的子类的实例,也就是父类引用指向子类的实例,父类是抽象类,这样在实例化子类之前会先实例化它的父类)。

9.Java中都有哪些容器

Java中容器主要分为两大类CollectionMap,它们下面还有很多子类

  • Collection
    • List
      • ArrayList
      • LinkedList
      • vector
      • stack
    • set
      • HashSet
      • LinkedHashSet
      • TreeSet
  • Map
    • HashMap
      • LinkedHashMap
    • HashTable
    • ConcurrentHashMap
    • TreeMap
10.HashMap和HashTable的区别

存储性: HashMap允许Key和Value存储null,HashTable不可以
安全性: HashTable线程安全,HashMap线程不安全。但是HashTable是Java的保留类(过时不推荐使用的类),若需要多线程开发推荐使用线程安全的ConcurrentHashMap类。

11. Sleep和wait的区别

sleep是Thread类的方法,wait是Object类的方法
sleep不释放锁 , wait释放锁
sleep到时间自动恢复,wait需要notify或notifyall方法唤醒

12.ThreadLocal是什么?有哪些使用场景?

ThreadLocal是为每个使用该变量的线程提供一个独立的副本,让其保存只属于自己线程的信息,多个线程之间互相不影响。例如:用户登录时使用ThreadLocal保存用户的用户,密码信息。每一个用户对应一个线程,多个用户之间的信息不会相互影响。

13. 什么是反射?

反射是指在运行过程中,可以知道任意一个类的属性和方法,可以调用任意一个对象的属性和方法。这种动态获取信息和动态调用的功能是Java的反射机制。

你可能感兴趣的:(Java面试题)