JAVA面试题整理大全(二、JAVA基础)

Java 基础

1. JDK 和 JRE 有什么区别?

    JRE: Java Runtime Environment
    JDK:Java Development Kit
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。
JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本

2. == 和 equals 的区别是什么? 

  • 基本数据类型(也称原始数据类型) :byte,short,char,int,long,float,double,boolean。他们之间的比较,应用双等号(==),比较的是他们的值。
  • 引用数据类型:当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)

 == 的作用:
  基本类型:比较的就是值是否相同
  引用类型:比较的就是地址值是否相同
equals 的作用:
  引用类型:默认情况下,比较的是地址值。
注:不过,我们可以根据情况自己重写该方法。一般重写都是自动生成,比较对象的成员变量值是否相同 

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

hashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”(存在不同地址返回同一整数?)。

equals 默认情况下,比较的是地址值。即

    1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。

    2、如果两个对象不equals,他们的hashcode有可能相等。

    3、如果两个对象hashcode相等,他们不一定equals。

    4、如果两个对象hashcode不相等,他们一定不equals。

4. final 在 Java 中有什么作用?

final关键字可以用于三个地方。用于修饰类、类属性和类方法。

1.被final关键字修饰的类不能被继承。

2.被final关键字修饰的类属性必须给定初始值,且不能被修改;

3.类方法不能被重写(重写:不论返回值,参数类型、数量不同,只要方法名相同都属于重写);

5. Java 中的 Math.round(-1.5) 等于多少?

Math.round 的四舍五入的原理是在参数上加0.5然后进行下取整。

即 Math.round(-1.5) = -1;

6. String 属于基础的数据类型吗?

不属于,是final修饰的java类。

数据类型:

1 字符类型:byte,char

2 基本整型:short,int,long

3 浮点型:float,double

4 布尔类型:boolean

7. Java 中操作字符串都有哪些类?它们之间有什么区别?

String : 不可变字符串

StringBuffer :线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。

StringBuilder : 不能安全使用多线程,可变的字符序列。 如果需要同步,建议使用StringBuffer

8. String str1="i"与 String str2=new String(“i”)一样吗?

通过测试   str1 == str2 返回 false  ; str1.equels(str2) 返回 true

String A = "ABC";内存会去查找常量池,如果没有的话,在常量池中中开辟一块儿内存空间,把地址付给栈指针,如果已经有了"ABC"的内存,直接把地址赋给栈指针;

因此

String str1="aa";

Srting str2="aa";

String Str3="aa";

....

这样下去,str1==Str2==str3;会一直相等下去,(a) ==的判断, (b) equals()的判断;都相等,因为他们的地址都相等,因此只在常量池中有一份内存空间,地址全部相同; 

  而String str = new String("a");是根据"a"这个String对象再次构造一个String对象;在堆中从新new一块儿内存,把指针赋给栈,

将新构造出来的String对象的引用赋给str。 因此 只要是new String(),则,栈中的地址都是指向最新的new出来的堆中的地址,

(a)“”==“” 是判断地址的,当然不相同;

(b)至于equals,String类型重写了 equals()方法,判断值是否相等,明显相等,因此 equals 是相等的;

这是String 重写的equals:

9. 如何将字符串反转?

 1.使用StringBuffer的reverse()方法  (最优推荐)

 2.自己实现String反转  递归法

    将首字符放到末尾。

public static String reverse(String str){
        if ((str == null) || str.length() <2) return str;//为Null,长度少于2直接跳过
        return  reverse(str.subString(1))+str.charAt(0);
}

10. String 类的常用方法都有那些?

int length()  : 返回字符串的长度

char charAt(int index) : 根据位置返回字符 ,范围为 0~(length-1)

byte[] getBytes() : 转换为字节数组

boolean equals(Object o) :  比较字符串值是否一致

int indexof(String str)   : 查找需要字符串在目标字符串中出现的第一次的索引  , 未出现返回 -1

String replaceAll(String old,String new) : 替换全部制定匹配字段 old --> new

String substring(int start,int end) : 截取字符串

String[] split(String regex) : 根据指定regex分割字符串为数组

boolean startsWith(String start) / endsWith(String end) : 以指定字符串开头或结尾

int compareTo(String another) : 比较大小

String trim() : 去空格

String toUpperCase() / toLowerCase()  : 全部转换大小写

11. 抽象类必须要有抽象方法吗?

  不必须。

  1. 抽象类必须有关键字abstract来修饰。
  2. 抽象类可以不含有抽象方法
  3. 如果一个类包含抽象方法,则该类必须是抽象类

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

  1. 抽象类不能被实例化。
  2. 抽象类可以有构造函数,抽象方法不能被声明为静态。
  3. 抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
  4. 含有抽象方法的类必须申明为抽象类
  5. 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。

13. 抽象类能使用 final 修饰吗?

    不能,抽象类是被用于继承的,final修饰代表不可修改、不可继承的。

14. 接口和抽象类有什么区别?

区别
分类接口 interface抽象类 abstract
构造方法NY
普通成员变量NY
方法全抽象可包含非抽象
访问权限全 publicpublic、protected 和 default
静态方法N已实现的静态方法(JDK1.8前不能有静态方法)
静态成员YY

PS:一个类 可实现多个接口,仅能继承一个类。一个接口不可实现接口,可以继承一个接口
 

15. Java 中 IO 流分为几种?

I:input/read 输入、O: output/write 输出

(1)按照数据的流向:
输入流、输出流
(2)按照流数据的格式:
字符流、字节流
(3)按照流数据的包装过程:
节点流(低级流)、处理流(高级流)

16. BIO、NIO、AIO 有什么区别?

同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO

BIO是一个连接一个线程。BIO往往会引入多线程,每个连接一个单独的线程

NIO是一个请求一个线程。NIO是使用单线程或者只使用少量的多线程,每个连接共用一个线程

AIO是一个有效请求一个线程。由OS先完成了再通知服务器应用去启动线程进行处理

17. Files的常用方法都有哪些?

  • Files.exists() 检测文件路径是否存在
  • Files.createFile()创建文件
  • Files.createDirectory()创建文件夹
  • Files.delete() 删除文件或者目录
  • Files.copy() 复制文件
  • Files.move() 移动文件
  • Files.size()查看文件个数
  • Files.read() 读取文件
  • Files.write()写入文件

下一篇 JAVA 容器

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 面试题整理是为了帮助准备面试的候选人更好地了解面试的内容和要求。对于Java2021的面试题整理,可以从各个方面进行组织和分,以便更好地帮助面试者准备。下面是我对Java2021面试题整理的一些建议。 1.基础知识:面试题可以包括Java语言的基本语法、关键字、数据类型、流程控制语句、异常处理等方面的问题。这些问题可以帮助面试者检验自己对Java语言基础知识的掌握程度。 2.面向对象:面试题可以涉及Java面向对象的概念、封装、继承、多态以及接口、抽象等方面的问题。这些问题可以帮助面试者了解Java面向对象编程的特点和应用。 3.集合框架:面试题可以包括关于Java集合框架的知识,如ArrayList、LinkedList、HashSet、HashMap等的特性、用法和区别。这些问题可以帮助面试者检验自己对Java集合框架的理解和应用能力。 4.多线程:面试题可以涉及Java多线程编程的基本概念、线程的创建与启动、线程同步与互斥、线程池等方面的问题。这些问题可以帮助面试者了解多线程编程的原理和实践。 5.IO流面试题可以包括关于Java IO流的知识,如输入输出流的分、字符流和字节流的区别、文件读写操作等方面的问题。这些问题可以帮助面试者检验自己对IO流的理解和应用。 6.异常处理:面试题可以涉及Java异常处理的机制、try-catch语句的使用、自定义异常等方面的问题。这些问题可以帮助面试者了解异常处理的原理和常见应用。 7.Java虚拟机:面试题可以包括Java虚拟机(JVM)的基本概念、内存模型、垃圾回收算法等方面的问题。这些问题可以帮助面试者了解JVM的工作原理和性能优化。 8.框架和工具:面试题可以涉及Java常用的开发框架和工具,如Spring、Hibernate、MyBatis、Maven等方面的问题。这些问题可以帮助面试者了解开发框架的应用和工具的使用。 通过对这些方面的面试题整理,可以帮助面试者全面了解Java2021面试的内容和要求,并有针对性地准备和复习相关知识。面试者应该注重理论的学习,同时结合实践经验进行练习,以便在面试时能够更好地展示自己的能力和潜力。同时,面试者还应注意自己的沟通能力、问题分析能力和解决问题的能力,这些都是面试过程中重要的评估指标。 ### 回答2: Java2021面试题整理主要集中在以下几个方面: 1. 基础知识:Java中的基本数据类型、变量和常量、运算符、控制语句等内容是面试中常见的考点。面试官会通过这些问题判断候选人对Java基础知识的熟悉程度和掌握能力。 2. 面向对象编程:Java是一门面向对象的编程语言,所以面试中对面向对象的理解和应用也是重要的考点。常见的问题包括和对象、继承和多态、封装和抽象等。 3. 异常处理:Java中的异常处理是编程中的重要内容,面试中会涉及到异常的概念、异常的分、如何捕获和处理异常、自定义异常等。 4. 集合框架:Java集合框架是Java开发中常用的工具,常见的面试题会涉及到ArrayList、LinkedList、HashMap等集合的特点和应用场景,以及集合的遍历和使用方法。 5. 多线程:Java是一门支持多线程的语言,所以多线程的知识也是面试中的热点考点。常见的问题包括线程的生命周期、线程同步与互斥、线程间的通信、线程池等。 6. JVM相关知识:Java虚拟机(JVM)是Java运行的基础,所以对JVM的了解也是面试中的重要考点。常见问题包括JVM的结构、内存模型、垃圾回收机制等。 此外,面试中还可能涉及到数据库、网络编程、设计模式等其他相关知识。因此,面试前需要对Java的相关知识有全面的掌握,并且要能够灵活运用这些知识进行问题的解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值