铁子,你还记得这些吗----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

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

目录
相关文章
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
5月前
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
278 2
|
5月前
|
存储 安全 Java
常见 JAVA 集合面试题整理 自用版持续更新
这是一份详尽的Java集合面试题总结,涵盖ArrayList与LinkedList、HashMap与HashTable、HashSet与TreeSet的区别,以及ConcurrentHashMap的实现原理。内容从底层数据结构、性能特点到应用场景逐一剖析,并提供代码示例便于理解。此外,还介绍了如何遍历HashMap和HashTable。无论是初学者还是进阶开发者,都能从中受益。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
278 3
|
16天前
|
设计模式 缓存 安全
提供一些准备Java八股文面试的建议
准备Java八股文面试需系统梳理核心知识点,涵盖Java基础、集合、多线程、JVM、设计模式及主流框架。重在理解原理而非死记硬背,结合源码与实际场景深化认知。通过思维导图构建知识体系,分模块刷题并模拟面试表达,关联项目经验,体现应用能力。关注Java新特性与技术演进,避免知识过时。最终实现从“背答案”到“懂原理、能实战”的转变,提升综合竞争力。(238字)
132 7
|
4月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
378 0
|
4月前
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
184 3
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
2月前
|
算法 Java
50道java基础面试题
50道java基础面试题
|
5月前
|
存储 安全 Java
2025 最新史上最全 Java 面试题独家整理带详细答案及解析
本文从Java基础、面向对象、多线程与并发等方面详细解析常见面试题及答案,并结合实际应用帮助理解。内容涵盖基本数据类型、自动装箱拆箱、String类区别,面向对象三大特性(封装、继承、多态),线程创建与安全问题解决方法,以及集合框架如ArrayList与LinkedList的对比和HashMap工作原理。适合准备面试或深入学习Java的开发者参考。附代码获取链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
2480 48
|
5月前
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
139 5
|
5月前
|
Java API 微服务
2025 年 Java 校招面试全攻略:从面试心得看 Java 岗位求职技巧
《2025年Java校招最新技术要点与实操指南》 本文梳理了2025年Java校招的核心技术栈,并提供了可直接运行的代码实例。重点技术包括: Java 17+新特性(Record类、Sealed类等) Spring Boot 3+WebFlux响应式编程 微服务架构与Spring Cloud组件 Docker容器化部署 Redis缓存集成 OpenAI API调用 通过实际代码演示了如何应用这些技术,如Java 17的Record类简化POJO、WebFlux构建响应式API、Docker容器化部署。
210 5