铁子,你还记得这些吗----Java基础【拓展面试常问题型】

简介: 铁子,你还记得这些吗----Java基础【拓展面试常问题型】

作为一名对技术充满热情的学习者,我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代,我远非专家,而是一位不断追求进步的旅行者。通过这篇博客,我想分享我在某个领域的学习经验,与大家共同探讨、共同成长。请大家以开放的心态阅读,相信你们也会在这段知识之旅中找到启示。



前言

我们知道,学习每门语言,最重要的就是打牢基础,相信各位Java学者和大佬们也深知基础的重要性,在目前这个阶段,如果可以养成好的编程习惯,做好前期准备,了解Java最基础的知识点,对未来的学习和工作,都有很大的帮助。今天。在介绍Java编程的同时,我也会通过常见的面试题,和大家聊聊底层逻辑。


一、Java数据类型

Java具有两种主要的数据类型:基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)

1.基本数据类型(Primitive Data Types)

1.整型(Integral types):

byte:8位,有符号,范围:-128 到 127。

short:16位,有符号,范围:-32,768 到 32,767。

int:32位,有符号,范围:-2^31 到 2^31-1。

long:64位,有符号,范围:-2^63 到 2^63-1。

2.浮点型(Floating-point types):

float:32位,单精度,范围:约 1.4 x 10^-45 到 3.4 x 10^38。

double:64位,双精度,范围:约 4.9 x 10^-324 到 1.7 x 10^308。

3.字符型(Character type):

char:16位,无符号,表示 Unicode 字符。

4.布尔型(Boolean type):

boolean:只有两个值,true 或 false。

2.引用数据类型(Reference Data Types):

1.类型(Class types):对象的类型。

2.接口类型(Interface types):接口的类型。

3.数组类型(Array types):数组的类型。

这些数据类型允许Java程序员声明不同类型的变量,这些变量可用于存储不同种类的数据。基本数据类型存储简单值,而引用数据类型存储对象引用。

二、基本数据类型的底层原理:

  • 整型(Integral types):
  • byte:8位,使用补码表示有符号整数。
  • short:16位,使用补码表示有符号整数。
  • int:32位,使用补码表示有符号整数。
  • long:64位,使用补码表示有符号整数。
    这些整型数据类型的存储方式直接使用二进制补码表示。例如,int 类型的值 5 在二进制中表示为 00000000 00000000 00000000 00000101
  • 浮点型(Floating-point types):
  • float:32位,单精度浮点数。
  • double:64位,双精度浮点数。
    浮点数的表示使用IEEE 754标准,将数字分成三个部分:符号位、指数和尾数。这样的表示方法允许存储很大或很小的浮点数。
  • 字符型(Character type):
  • char:16位,用于表示Unicode字符。
    字符型直接存储字符的Unicode编码。例如,char 类型的值 ‘A’Unicode编码是 65
  • 布尔型(Boolean type):
    boolean:存储 true 或 false。
    布尔型数据只需要一个比特位,但在实际中可能会被优化为更大的单位。

这些基本数据类型的底层存储直接的,没有引用其他对象。它们在内存中占用的空间是确定的,因此在使用时效率较高。然而,它们是值类型,不具备面向对象的特性,与引用数据类型(例如类和接口)有一些区别。在处理大量数据时,基本数据类型的使用通常更加高效。


三.关于Java基本数据类型的常见面试题:

整型范围:

  • 问题: Java中int和long的范围是什么?
  • 讲解: int是32位,范围是 -2^31 到 2^31-1;long是64位,范围是 -2^63 到 2^63-1。理解整型的表示范围是基本的考察点。

溢出和包装类:

  • 问题: 解释整型溢出,并说明如何处理溢出问题。还有关于Integer和Long包装类的一些考察。
  • 讲解: 溢出发生在尝试存储超出数据类型范围的值时。包装类提供了常见的溢出检测和处理方法,例如Integer.MAX_VALUE和Integer.MIN_VALUE。

二进制表示和位运算:

  • 问题: 解释整数在计算机中的二进制表示,以及常见的位运算操作(与、或、异或、左移、右移)。
  • 讲解: 对二进制表示和位运算的理解在处理底层数据时至关重要。

整数反转:

  • 问题: 编写一个函数,将32位有符号整数的数字反转。
  • 讲解: 这个问题涉及到对整数的处理和溢出检测,是一道常见的算法题。

位1的个数:

  • 问题: 编写一个函数,输出一个整数的二进制表示中有多少个1。
  • 讲解: 这是一个位运算问题,需要对整数进行逐位检查。

判断2的幂次方:

  • 问题: 编写一个函数,判断一个整数是否是2的幂次方。
  • 讲解: 了解2的幂次方在二进制中的特点,可以通过位运算解决。

在面试中,关于浮点型的问题通常涵盖了浮点数表示、舍入误差、特殊值以及浮点数比较等方面。以下是一些重要的浮点型面试题:

浮点数表示:

  • 问题: Java中的float和double的存储方式是什么?解释IEEE 754标准。
  • 讲解: 考察对浮点数内部表示的理解,以及IEEE 754标准的重要性。

舍入误差:

  • 问题: 解释什么是舍入误差,并举例说明。
  • 讲解: 浮点数表示的有限精度可能导致计算结果的舍入误差,了解这一点对于正确处理浮点数运算很重要。

浮点数比较:

  • 问题: 为什么不应该直接使用等号来比较两个浮点数是否相等?
  • 讲解: 由于浮点数表示的有限精度,使用等号进行比较可能导致意外的结果,应该使用某种误差范围或者使用专门的比较函数。

NaN和Infinity:

  • 问题: 什么是NaN和Infinity?在计算中如何处理它们?
  • 讲解: NaN(Not a Number)和Infinity(无穷大)是浮点数中的特殊值,了解如何处理它们对于编写健壮的代码很重要。

浮点数舍入模式:

  • 问题: Java中的浮点数舍入模式有哪些?如何改变默认的舍入模式?
  • 讲解: Java中的浮点数默认采用舍入到最近的模式,但有时可能需要使用其他舍入模式,例如Math.round()。

避免浮点数陷阱:

  • 问题: 在编写代码时,如何避免由于浮点数运算导致的陷阱?
  • 讲解: 涵盖了避免累积误差、使用适当的数据类型、理解数值范围等方面的最佳实践。

下面我将介绍一个在面试中,有关浮点数的常见面试题:

在银行系统中,浮点数比较可能涉及到金额计算、利率比较等情景,因为在金融领域精度要求较高。

问题:

在银行系统中,为什么不应该使用简单的等号(==)来比较浮点数?举例说明这种比较可能导致的问题,并提供一种更好的比较方式。

讲解:

在银行系统中,使用简单的等号进行浮点数比较可能导致问题,因为浮点数在计算机中以二进制形式存储,存在精度限制。由于浮点数的有限精度,可能会导致两个看似相等的浮点数在二进制表示上存在微小的差异。

举例来说,如果两个浮点数在小数点后几位处有微小的差异,简单的等号比较可能会认为它们不相等。例如:

double amount1 = 100.1;
double amount2 = 100.1000000000001;
if (amount1 == amount2) {
    // 这里可能不会执行,尽管两个金额在人类眼中相等
    System.out.println("金额相等");
} else {
    System.out.println("金额不相等");
}

上述代码可能输出"金额不相等",即使这两个金额在实际应用中被认为是相等的。

更好的比较方式是使用一个阈值来判断两个浮点数是否足够接近。例如,可以定义一个小的差值,如果两个浮点数之间的差异小于这个差值,就认为它们是相等的:

double epsilon = 0.000001;
if (Math.abs(amount1 - amount2) < epsilon) {
    System.out.println("金额相等");
} else {
    System.out.println("金额不相等");
}

这种方式考虑了浮点数的精度问题,使得在实际应用中更容易判断金额是否相等。

总结

在Java学习中,这些有关数据类型的知识点将会伴随我们学习生涯,希望大家可以通过网课或者博客的方式,实现面向github编程,面向csdn编程,加强对基础的巩固,在不断的积累中填补一些我们比较薄弱的知识。今天我只介绍了基本数据类型,后面的学习中,我会慢慢给大家介绍引用数据类型。后面,我会讲解更多关于基础的内容,希望刚刚入门的同学可以认真学习,面试题可以先自己解决再看讲解,对未来的面试会有很大的帮助。后面我会讲解类型转换,常量,变量,运算符,包机制JavaDoc

感谢大家花时间阅读新人博主的文章,哪里有不对的地方,希望我们一起讨论学习,希望大家在未来的学习路上一帆风顺,**加油!!!**铁子

目录
相关文章
|
6天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
11天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
9 2
|
7天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
26 4
|
8天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
41 4
|
1月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
79 1
Java面试题之Java集合面试题 50道(带答案)
|
20天前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
45 5
|
19天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
18 1
|
28天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
25 3
|
1月前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
84 0
Java面试题之cpu占用率100%,进行定位和解决