Java基础知识 | 常见面试题(上):基本数据类型

Posted 风吹衣ou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础知识 | 常见面试题(上):基本数据类型相关的知识,希望对你有一定的参考价值。

撰写成一问一答的形式,每次回答都默写,对比参考答案后,再默写出更恰当的答案。

相关内容

Java基础知识 | 常见面试题(上):基础概念和常识

Java基础知识 | 常见面试题(上):基本语法

自测篇

3.1 Java 中的几种基本数据类型了解么?
3.2 基本类型和包装类型的区别?
3.3 包装类型的缓存机制了解么?
3.4 自动装箱与拆箱了解吗?原理是什么?什么是自动拆装箱?
3.5 为什么浮点数运算的时候会有精度丢失的风险?为什么会出现这个问题?
3.6 如何解决浮点数运算的精度丢失问题?
3.7 超过 long 整型的数据应该如何表示?

答案篇

  1. Java 中的几种基本数据类型了解么?

Java有八种基本数据类型:byte、short、int、long、float、double、char、boolean。

整型数据类型(按照存储数值大小排序):byte、short、int、long

  • 常用的数据类型为int

  • byte是取正负值区间长度为2的八次方[-128,127],short与char相同是其两倍;

    • 为什么是2的八次方→一个byte表示一个字节 = 八位数

  • int则是short的两倍,long又是int的两倍,同时long类型赋值要对数值后面+l。

    • 为什么long赋值对应要加l?

    • 因为Java会默认将其作为int类型,但long是64位,将会导致32位的int无法存储,所以为了避免出现这种情况要加上l表示long类型。

字符数据类型:char

  • 基本语法 char ch = 'a';

  • 只能存储单个字符;

浮点型数据类型:float、double

  • 默认为double类型,对于float类型,要在数值后面加f;

布尔型数据类型:boolean

Java中的基本数据类型内存基本不会发生大波动地改变,这也是Java可移植性强的原因之一。

  1. 基本类型和包装类型的区别?

在学mybatis框架时,习惯性使用基本类型定义变量,在使用SQL语句动态操作时,往往会因为基本类型有默认值,而导致每次获取的id即使没有赋值,也会默认等于0,导致动态操作检索id = 0的情况,进而导致操作错误。

  • 所以希望定义的数据类型没有默认值时可使用包装变量,而基本变量都其默认值。

因为基本类型无需创建对象就能够直接使用,这是它效率高的原因之一;

  • 基本类型高效的原因还因为其存储方式固定,不会产生额外的内存;

但其缺点是不方便使用不断更新地对象新特性方法;

  • 而包装类型的出现就是可以让这些基本类型能够转换成对象使用对象新特性方法(泛型)and方便地方法操作基本数据类型,但缺点则是需要额外的内存开销创建对象。

  1. 包装类型的缓存机制了解么?

包装类型的缓存机制主要针对于常用的包装类型,目的是减少对象创建和内存占用。像整型包装类:byte、short、int和long都有缓存机制,存储值范围[-128,127],当直接赋值区间在这个范围内,则无需再创建新内存空间;使用new则是直接创建新的内存空间;

包装类属于引用类型,其实例对象变量存储堆中,因为堆存储所有实例对象,所有当基本变量在类中方法外创建时,也是存储在堆中。但包装类的地址存储栈中,而基本变量在方法内创建时属于局部变量则存储在栈中(引用类型不适用)。当基本变量属于静态变量时,则存储在方法区内。

  1. 自动装箱与拆箱了解吗?原理是什么?什么是自动拆装箱?

自动装箱指的是在java1.8之后,遇到使用对象的方法,基本类型能够自动转换成包装类型使用;

  • 装箱本质上是调用了valueOf方法,拆箱则是xxValue方法

拆箱则是针对包装类型使用,将其自动拆箱为基本类型,提高效率;但要避免不必要地频繁装箱拆箱降低效率;

  1. 为什么浮点数运算的时候会有精度丢失的风险?为什么会出现这个问题?

计算机本质上是二进制,而无限的小数or超过数据类型小数范围值只能被截断就会造成精度损失,像十进制的0.2就无法转换成二进制。

  1. 如何解决浮点数运算的精度丢失问题?

更大精度的数据类型

BigDecimal类型能够解决float浮点数丢失精度的问题,所以在实际业务中涉及钱或其他重要计算都会使用。

定义误差范围:若超出误差给予说明,若在可承受范围则能够在保持性能下实现业务;

  1. 超过 long 整型的数据应该如何表示?

问题和理解大部分来源为Guide哥的Java面试指南,有需要的可自行检索加入其星球获得。 

java 面试--常见面试题(上)

  一般java的面试要涉及到以下几个内容:java基础知识,多线程,JVM,网络,数据结构,算法,分布式系统,设计题,数据库,常用的中间件,zk,缓存redis,消息中间件等。现在我们就基于这些内容分模块的看下常见的问题总结。

 

一.Java基础

 

1. Java创建一个类的方法有几种?

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

3. 序列化的作用是什么?常见的序列化方法是什么?Java自带的序列化是怎么实现的?

4. 解释下重载和重写的区别?

5. 有了解过java的异常机制么?请结合项目描述一下你是怎么处理异常的?是否会自定义异常?

6. Object类有去了解么?该类有哪些常用的方法,分别是怎么实现的?

7. javahashcodeequals方法的作用?什么时候会用到?

8. String是一个基本类型么?那java的基本类型有哪些?StringstringBufferstringBuilder的区别是什么?

9. String str="i"String str=new String("i")一样吗?不同点主要在哪里呢?

10. 抽象类和接口的区别?抽象类一定要有抽象函数么?接口定义的变量一定是常量么?接口中可以定义函数的实现么?

11. finalstatic关键字有了解,在java中的作用。抽象类可以使用final修饰么?

12. final,finally,finalize分别是什么?

13. JavaIO流有了解过,实现一个按行读取数据的方式。

14. Java的反射原理是什么?GetclassclassforName的区别是什么?

15. 如何实现一个list类型的深拷贝?Javaclone接口的作用是什么?

16. Java的泛型的作用是什么?

17. Java的注解有了解,其底层的实现原理是什么?怎么定义一个注解?

18. Java中两个类的关系有多少种?有了解过设计模式么?

19. Javacollection有几种?Collectioncollections的区别是什么?

20. ArrayLsitLinkedListvector的区别?它们是线程安全的么?如果想要线程安全应该要怎么实现?

21. HashMap扩容机制?hashMap是线程安全的么?它和hashtable的区别是什么?hashMap keyvalue可以是null么?Hashmap的扩容一定是2^n么?1.8版本的优化点在哪里?什么时候链表转换为红黑树?什么时候红黑树转换为链表?Hashmapgetput方法是怎么实现的?

22. Queuepollremove方法的区别是什么?

23. Iterator是什么?和splitIterator的区别是什么?

24. ArrayList中怎么一边遍历一边删除?

25. Treemap linkedHashMap有什么作用?其实现的原理是什么?

26. HashSet的实现原理有了解?

27. 静态内部类和内部类的区别是什么?为什么内部类可以访问外部类?

28. 从安全性上说说java权限关键字privateprotecteddefaultpublic的区别?

29. 面向对象的概念是什么?Java的多态怎么实现?

30. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

 

二.多线程

 

1. Volatile的作用是什么?底层是怎么实现的?缓存的一致性协议是什么?有没有了解过内存屏障?

2. Synchronized 的原理有了解?和reentryLock的区别是什么?锁升级是指什么?

3. 并发和并行的概念有了解?Java实现并发的方式有几种?

4. 线程和进程的概念?守护线程是干什么的?常见的守护线程有哪些?

5. Java怎么创建一个线程,native关键字的作用是什么?Thread类中绝大部分的方法是native的,有了解过怎么实现的么?

6. Runnablecallable分别是什么?Future的作用是什么?

7. 线程的状态有哪些?是怎么转换的?Jvm怎么查看线程的运行状态?

8. Sleepwait的区别?Notifynotifyall的区别是啥?

9. AQS的源码有了解过?怎么实现一个公平锁和非公平锁?共享和非共享?

10. Condition的源码有了解么?什么是等待队列,什么是同步队列?

11. 多线程的三个基本特性是什么?Java是怎么实现原子性,有序性,一致性呢?

12. Thread 类中的startrun方法的区别是什么?

13. Threadlocal有了解过?其使用在哪些场景?ThreadlocalMapkey value是什么?怎么保证内存不会泄露

14. JavaCAS是怎么实现的?Atomic包中的atmoicinteger atmoicintegerFiledUpdater 的区别是什么?分别在什么场景下使用?

15. Java的线程池是怎么实现的?其原理是什么?线程池怎么设计核心线程数和最大线程数,拒绝策略怎么选择?怎么优雅关闭一个线程池?

16. 了解死锁么?怎么防止死锁?

17. ConcurrenthashMapput方法?其扩容过程有了解过?

18. Java安全的阻塞队列有哪些?分别提供了什么功能?

19. Java中提供了哪些线程安全的队列?

20. Fork-join框架有了解过?ParallelStream有使用过?

21. 简述一下JMMas-if-serial语义、happens-before模型?

三.JVM

Jvm是高级java程序员必备知识,了解jvm有利于了解java运行的情况,并分析出现的各种复杂问题。Jvm的面试一般会问垃圾回收器,双亲委派模型,线网问题定位,类加载过程。

 

1. JVM 的内存模型描述一下?

2. 什么情况下会发生堆溢出?什么情况下会发生栈溢出?

3. JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为EdenSurvivor

4. JVM 是怎么从新生代到老年代?一个完整的GC流程是怎样的?

5. 简述一下垃圾回收器?说下各自的优缺点?有了解过cmsG1么?能详细说明一下么?

6. 简述下垃圾回收算法?为什么新生代使用复制算法?

7. 简述一下类加载过程,重点说明一下双亲委派模型,怎么破坏双亲委派模型?Tomat是怎么破坏的呢?

8. 说说你了解的jvm参数和其作用?

9. Java的四种引用有了解么?引用队列怎么使用?作用是什么?

10. 怎么打出一个线程的堆栈信息?如果内存过高怎么分析?如果cpu过高怎么定位?


以上是关于Java基础知识 | 常见面试题(上):基本数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Java基础常见面试题总结(上)

java常见面试题——java常见笔试题

2021年php常见面试题

Java String常见面试题汇总

BTA 常问的 Java基础40道常见面试题及详细答案(山东数漫江湖))

java基础-常见面试题