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

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

目录
相关文章
|
19天前
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)
|
19天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
174 37
|
19天前
|
设计模式 安全 算法
【Java面试题汇总】设计模式篇(2023版)
谈谈你对设计模式的理解、七大原则、单例模式、工厂模式、代理模式、模板模式、观察者模式、JDK中用到的设计模式、Spring中用到的设计模式
【Java面试题汇总】设计模式篇(2023版)
|
19天前
|
存储 关系型数据库 MySQL
【Java面试题汇总】MySQL数据库篇(2023版)
聚簇索引和非聚簇索引、索引的底层数据结构、B树和B+树、MySQL为什么不用红黑树而用B+树、数据库引擎有哪些、InnoDB的MVCC、乐观锁和悲观锁、ACID、事务隔离级别、MySQL主从同步、MySQL调优
【Java面试题汇总】MySQL数据库篇(2023版)
|
19天前
|
存储 缓存 NoSQL
【Java面试题汇总】Redis篇(2023版)
Redis的数据类型、zset底层实现、持久化策略、分布式锁、缓存穿透、击穿、雪崩的区别、双写一致性、主从同步机制、单线程架构、高可用、缓存淘汰策略、Redis事务是否满足ACID、如何排查Redis中的慢查询
【Java面试题汇总】Redis篇(2023版)
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
19天前
|
缓存 Java 数据库
【Java面试题汇总】Spring篇(2023版)
IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、
【Java面试题汇总】Spring篇(2023版)
|
19天前
|
存储 缓存 监控
【Java面试题汇总】JVM篇(2023版)
JVM内存模型、双亲委派模型、类加载机制、内存溢出、垃圾回收机制、内存泄漏、垃圾回收流程、垃圾回收器、G1、CMS、JVM调优
【Java面试题汇总】JVM篇(2023版)
|
19天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
19天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
下一篇
无影云桌面