真实面试题Java

记录自己曾经面试被问到的题目

Java基础系列

基本数据类型

Integer a = 128;Integer b = 128; a == b 吗?

Integer a = 127;
Integer b = 127; 
System.out.println(a == b);//true
Integer c = 128;
Integer d = 128; 
System.out.println(a == b);//false

查看Integer 源码发现

Integer 类内部 通过静态内部类提供了一个缓存池,范围在-128~127之间,如果超过这个范围 Integer 值都是new出来的对象。new对象 “==” 比较的话就只比较内存地址。

float f = 3.4是否正确

不正确。3.4 是双精度数,(Java中不带小数点默认是int,带小数点的默认是double)将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4,或者写成 float f = 3.4F。

Math.round(11.5) 等于多少?Math.round(-11.5)等于多少

Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。
round 四舍五入的原理是在参数上加 0.5 然后进行下取整。

集合

Array和ArrayList的区别

  • 一句话:可以理解为ArrayList是一个会自动扩增容量的Array
  • 空间大小:Array空间大小是固定的,ArrayList是可动态增长的
  • 储存对象:Array可以包含基本类型和对象类型,但只能是一种;
    ArrayList只能存放对象,但是可以存放不同类型的对象。
  • 方法:ArrayList是Array的增强版,所以增加了很多方法例addAll()、removeAll()等。

异常系列

常见的异常有哪些,分别在什么场景下出现

  • java.lang.NullPointerException: 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。

  • java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。

  • java.lang.ClassNotFoundException: 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

  • java.lang.InstantiationError: 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.

  • **java.lang.OutOfMemoryError:**内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。

  • java.lang.StackOverflowError: 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出或者陷入死循环时抛出该错误。

  • java.lang.ClassCastException: 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。

  • java.lang.ArithmeticException: 算术条件异常。譬如:整数除零等。

  • java.lang.ArrayIndexOutOfBoundsException: 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

  • java.lang.IndexOutOfBoundsException: 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。

  • java.lang.InstantiationException: 实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。

  • java.lang.NoSuchFieldException: 属性不存在异常。当访问某个类的不存在的属性时抛出该异常。

  • java.lang.NoSuchMethodException: 方法不存在异常。当访问某个类的不存在的方法时抛出该异常。

  • java.lang.NumberFormatException: 数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。

  • java.lang.StringIndexOutOfBoundsException: 字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。

Redis系列

Redis 的数据结构

类型类型类型
String字符串是redis中最基本的数据类型,一个key对应一个value
Hash哈希是一个Mapmap,指值本身又是一种键值对结构,如 value={{field1,value1},…fieldN,valueN}}
LIst链表是List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。
Set集合集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中 1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。
zset有序集合有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。(有序集合中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。

NoSQL有哪些,都有什么优缺点

HBase、Redis、MongoDB、Couchbase、LevelDB
此处详细说明优缺点:https://blog.csdn.net/sunzhiwei_/article/details/81566984

微服务系列

注册中心的原理

涉及三个角色:服务提供者、服务消费者、注册中心。
它们之间的关系大致如下:

  1. 各个微服务在启动时,将自己的网络地址等信息注册到注册中心,注册中心存储这些数据。
  2. 服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口。
  3. 各个微服务与注册中心使用一定机制(例如心跳)通信。如果注册中心与某微服务长时间无法通信,就会注销该实例。
  4. 微服务网络地址发送变化(例如实例增加或IP变动等)时,会重新注册到注册中心。这样,服务消费者就无需人工修改提供者的网络地址了。
    注册中心的架构图如下:
    注册中心的架构图

Nacos注册中心实现

简单明了实例:https://blog.csdn.net/weixin_43948783/article/details/110432200
稍详细些:http://www.45fan.com/article.php?aid=19070598754425839662242280

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值