面试 Java 基础八股文十问十答 第一期

面试 Java 基础八股文十问十答 第一期

作者:程序员小白条

从今天开始,将会更新我自己收集和总结的八股文。有需要面试的小伙伴可以收藏一下这个系列,一定会有所帮助!

⭐点赞⭐收藏⭐不迷路!⭐

内容概览:

1.JDK和JRE有什么区别?

答:

  • 首先要了解中文名称
  • JDK(Java Development Kit) Java开发工具包
  • JRE (Java Runtime Environment) Java运行环境
  • JVM (Java virtual machine) Java虚拟机

JDK = JRE +Java开发工具(比如你用的Javac.exe 编译源码 转化成字节码)

JRE = JVM + Java的核心类库(比如awt javaFx(界面) )

2.Java的重要特点说几个

答:

  • 面向对象(OOP)
  • 健壮、强类型机制(Java静态语言,像JS,PHP,Python动态语言,不用指明类型,声明的时候简单,但优点也是缺点,所以JS->TS,用泛型会更加安全,在多态的向上传型和向下转型的过程中也会减少类型转化次数)、异常处理机制(try catch finally(可以省略),注意trc catch 块中有return 阻挡不了fianlly执行)、垃圾自动收集(system,gc(),弱引用,软引用,强引用,虚引用之类的问题)
  • 跨平台性(指的是编译后的字节码文件是跨平台性的,比如windows->Linux OR mac) 因为操作系统(OS)是在硬件上的第一层软件
  • 解释性语言,编译性语言比如:c/c++,解释性语言JS,PHP,Java,解释性语言编译后不能直接被机器执行,需要一个环境(解释器JVM),Java既可以说是解释性又可以说是编译性,解释性主要是跨平台性,编译性主要是Java代码需要编译才能运行,主流说法还是解释性语言。

3.Java的基本数据类型有哪些?

  • byte、short、char、int、long、float、double、boolean

补充:类,接口类,数组,枚举.注解,字符串都属于引用类型

  • 存储位置的区别:
  • 如果在方法中定义的基本数据类型,是在栈中存放,因为都听说过方法栈,在方法中定义的引用类型,它的内存地址值放在栈中,而该变量所指向的对象放在堆中,感觉和string为什么是不可变的差不多,底层维护的private final char value[] 单个字符内容可变,但是数组的引用地址不可变。
  • 如果是全局变量,那么不管是引用类型还是基本数据类型都放在堆中

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

  • == 可以判断基本数据类型和引用类型
  • == 判断基本数据类型,比较的是值是否相等
  • == 判断引用类型,比较的地址是否相等
  • equals是Object类中的方法,Object类还有clone()克隆,创建对象的一种方式,toString()全类名+@+哈希值的十六进制,notify()随机唤醒线程配置synchornized使用,wait()线程等待,释放当前锁,hashCode(),getClass()等等。equals只能用于比较引用类型
  • 当你想比较两个对象中的内容是否相等,记得重写equals,不然判断的是两个的地址,肯定不同,判断的是对象的内容

5.final在Java中有什么引用?

  • 修饰基本数据类型,表示常量,比如CACHE_SIZE = 10
  • 修饰引用数据类型,比如对象,数组,则该对象,数组本身内容可以修改,但地址的引用不能改变
  • 修饰全局变量时必须在定义时,赋初值,当然赋初值有很多位置,比如:定义时候、构造器(构造函数)、代码块,当然final+static 一起的话,构造器就不能进行赋初值了,静态的类加载相关的,构造器是对象实例哦,跟this,super差不多
  • 修饰方法,表示不被重写,当然重写肯定是父类和子类,也不必多说,重载是一个类中
  • 修饰类,表示不可继承类,比如String
  • 别把fianl修饰类,和实例化挂钩,final只是不能继承,不是抽象类的概念哦
  • 已经是final类,就没有必要用fianl修饰方法,因为方法重写是在继承的基础只上的
  • final+static 效率更高,可以从接口那块看出来,默认常量,public static fianl 编译器底层做了优化

6.Math.round、Math.ceil、Math.floor用法

  • round可以用+0.5,然后向下取整(小于等于)
  • 比如Math.round(-11.3) = -11,Math.round(-11.8)= -12
  • floor:向下取整 Math.floor(11.3) = 11;Math.floor(-11.3) = -12;
  • ceil: 向上取整 Math.ceil(11.3) = 12; Math.ceil(-11.3) = 11;
  • ceil是天花板的意思,floor是地板,应该很容易记忆

7.String两种创建对象的区别

  • 方法一: 直接赋值: String s = “xiaobaitiao”
  • 方法二:调用构造器: String s2 = new String (“xiaobaitiao”)
  • 方法一过程; 先从常量池查看是否有"xiaobaitiao",如果有,直接指向,如果没有,重新创建,然后指向,S最终指向的是常量池的空间地址 创建0或1个对象
  • 方法二过程: 先在堆中创建空间,里面维护了一个value属性,指向常量池的xiaobaitiao空间,如果常量池没有"xiaobaitiao",重新创建,如果有,通过value指向,S2最终指向的是堆中的空间地址 创建1或2个对象
  • 补充: intern()方法,会查看常量池是否包含此字符串用equals方法确定,返回的是常量池的地址对象

8.抽象类和普通类的区别在哪里?

  • 抽象类不能被实例化
  • 抽象类可以(可以没有)有抽象方法,没有方法体
  • 有抽象方法,一定是抽象类
  • abstract只能修饰类和方法
  • 抽象类的子类必须实现抽象类中的所有抽象方法,除非子类也是抽象类
  • 抽象方法不能使用private,final和静态来修饰,因为与重写相违背

9.接口和抽象类有什么区别和联系?

  • 联系
  • 接口和抽象类都不能被实例化
  • 接口和抽象类都阔以包含抽象方法
  • 区别
  • 接口是可以被一个类实现多个,而抽象类因为Java是单继承机制,只能直接继承一个
  • 抽象类可以定义普通成员变量和静态常量,接口中只能定义静态常量,不能定义普通成员变量
  • 抽象类,说到底还是一个类,可以与构造器完成初始化操作,接口不能包含构造器
  • JDK1.8接口中可以有方法体,因为添加了静态方法和默认方法,JDK1.9添加私有方法

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

  • BIO是同步阻塞的 (JDK1.4之前)
  • NIO同步非阻塞 (JDK1.4)
  • AIO异步非阻塞 (JDK1.7)
  • 异步和同步的区别:在于调用者,如果是同步,调用者调用接口,需要等到接口返回数据,才做其他工作,如果是异步,调用者调用接口后,直接做其他工作,不用等待接口返回数据。
  • 阻塞和非阻塞区别:在于被调用者,如果是阻塞:被调用者做完调用者给的任务后给出反馈,这是阻塞,如果是非阻塞,被调用者直接给出反馈,然后再干活,这是非阻塞。
Java基础八股文面试题 1. Java的特点是什么? Java语言具有面向对象、跨平台、安全性、可靠性、可移植性、多线程等特点。 2. Java的基本数据类型有哪些? Java的基本数据类型包括整型、浮点型、字符型、布尔型。 3. Java中的变量命名规则是什么? Java中的变量命名规则是遵循驼峰命名法,即第一个单词小写,后面的每个单词首字母大写。 4. Java中的四种访问权限分别是什么? Java中的四种访问权限分别是public、private、protected、default。 5. Java中的final关键字有什么作用? Java中的final关键字用来修饰一个变量、一个方法或一个类,分别表示不可变、不可重写和不可继承。 6. Java中的抽象类和接口有什么区别? Java中的抽象类和接口都是用来实现多态性的机制,但是抽象类可以包含非抽象方法和属性,而接口只能包含抽象方法和常量。另外,一个类只能继承一个抽象类,但是可以实现多个接口。 7. Java中的异常处理机制是什么? Java中的异常处理机制是通过try-catch-finally代码块实现的,当程序发生异常时,会抛出一个异常对象,可以通过try-catch语句捕获并处理异常。 8. Java中的线程有哪些状态? Java中的线程有五种状态,分别是新建状态、就绪状态、运行状态、阻塞状态和死亡状态。 以上是Java基础八股文面试题的答案,希望能够帮助到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小白条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值