全球顶级java面试宝典

Java

  1. int可以用于泛型吗?
  2. Integer类型的List里可以有String类型的值吗?
  3. 使用一个静态内部类的静态属性,该外类是否会加载?
  4. 抽象类和接口是否有构造方法,能否被实例化,普通方法是否可以调用抽象方法?

Mysql

  1. 重启mysql后ID会从何开始自增问题

Jvm

  1. 数组内存是否超出问题

Spring系列

Mybatis系列

Redis

RabbitMQ

SpringCloud系列

Java

1. int可以作为泛型吗?

int是基本数据类型,泛型需要为对象,可以使用其包装类Integer。另外int[]数组是对象,可用于泛型。

2. Integer类型的List里可以有String类型的值吗?

全球顶级java面试宝典_第1张图片
可以看到,引用重新指向就可以插入其他类型的值。泛型只在编译阶段做检查,后面就会进行擦除。
可以使用Collections.checkedList(new ArrayList(), Integer.class)生成运行阶段也可检查泛型的集合,若类型不一致会报Cast异常。

3. 使用一个静态内部类的静态属性,该外类是否会加载?

不会进行加载,静态内部类编译后算是一个单独的类。另外的:

  • 通过子类来使用其父类的静态字段只会触发父类的初始化(执行静态代码块等,不会实例化)。如B继承A,A中有静态属性a,通过B.a使用该属性不会触发B的初始化。
  • 常量在编译阶段会通过编译传播优化存入调用类的常量池中,使得使用时不会造成被调用类加载。如C调用D的static final String的属性,就不会进行D的初始化。
  • 通过数组定义来引用类,不会造成该类的初始化,而是会触发虚拟机自动生成的一个类的初始化,该类代表了一个元素类型为原类的数组。如E类,new E[10]; 时不会使E初始化。

4. 抽象类和接口是否有构造方法,能否被实例化,普通方法是否可以调用抽象方法?

抽象类可以有构造方法,接口无法有构造方法。
抽象类虽有构造方法,但和接口一样不能进行实例化,而是提供给子类实现调用的。
普通方法可以调用抽象方法,因为抽象方法最终会实现,且抽象类和接口不能实例化调用方法。

Mysql

1. 一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是多少?

innodb会把最大id记录在内存中,myisam把最大id记录在数据文件中。重启导致内存丢失,则innodb会从15开始,而myisam数据文件的最大id未丢失,从18开始。

Jvm

1. 已知内存中没有连续的20M内存,但是不连续的内存有很多。有一个长度为20的数组,每个下标对应对象大小为1M,问内存能否放得下这个数组?

数组下标存储对象的引用,即下标对应对象引用分配在连续的空间,而引用对应的对象可以在其他不连续的空间,所以大概率放得下。

Spring系列

Mybatis系列

Redis

RabbitMQ

SpringCloud系列

你可能感兴趣的:(Java面试,java,面试,基础,框架,中间件)