1、重载和重写的区别(必会)

  1. 重载:
发生在 同一个类中 ,方法名 相同 ,参数列表 不一致 ,构成重载,与返回值类型 无关 。 参数列表 :
public int add(int a ,int b){ return a+b} 方法的参数列表就是(int,int) 


  2. 重写:
发生在父子类中 , 方法名、参数列表必须相同 ,返回值范围小于等于父类,抛出的异常范围小于等于父类, 
访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。

2、 Java中==和equals的区别(必会)

  1. == 
基本类型: 比较的就是 是否相同 
;引用类型: 比较的就是 地址值 是否相同 


  2. equals 
1.重写前比较的是地址值。

3、 接口和抽象类的区别是什么?(必会)

  1. 抽象类要被子类继承,接口要被类实现。

  2. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

  3. 接口可继承接口,并可多继承接口,但类只能单继承。

4、静态变量与实例变量区别?

  • 静态变量: 静态变量由于不属于任何实例对象,属于类的,所以在内存中只有一份,在类的 加载过程中,JVM 只为静态变量分配一次内存空间。 


  • 实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量 
是属于实例对象 的,在内存中,创建几次对象,就有几份成员变量。 


5、题目 8: String str = “i” 和 String str = new String(“1”)一样 吗? 


不一样,因为内存的分配方式不一样。String str = “i”的方式 JVM 会将其分配到常量池中,此时仅产生一个字符串对象。 String str = new String(“i”),JVM 会先在堆内存 分配一个 String 对象,然后该对象指向常量池的字符串常量对象,如果字符串之前 不存在,相当于创建了 2 个对象。 


6、String s=new String(“xyz”);创建了几个字符串对 象?

两个对象,一个是静态存储区的“xyz”,一个是用 new 创建在堆上的对象。

7、基本数据类型,int 初始值,integer 初始值 ?

基本数据类型【四类八种byte、short、int、longfloat、double,boolean, char)】,int 初始值为 0,integer 初始值为 null


8、float f=3.4; 是否正确?

不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型 (downcasting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f =(float)3.4; 或者写 成 float f =3.4F;。

9、a=a+b 与 a+=b 的区别?


+= 隐式的将加操作的结果类型强制转换为持有结果的类型。如果两这个整型相加, 如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。 byte a = 127;
byte b = 127;
b = a + b; //错误: cannot convert from int to byte b += a; // 正确 (因为 a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编 译出错)

10、short s1 = 1; s1 = s1 + 1; 有错吗? short s1 = 1; s1 += 1;有错吗?

对于 shorts1=1;s1=s1+1; 由于 1 是 int 类型,因此 s1+1 运算结果也是 int 型, 需要强制转换类型才能赋值给 short 型。 而 short s1 = 1; s1+= 1;可以正确编译,因 为 s1+= 1;相当于 s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

11、&操作符和&&操作符有什么区别?

当一个&表达式在求值的时候,两个操作数都会被求值,&&更像是一个操作符的快捷方式。 当一个&&表达式求值的时候,先计算第一个操作数,如果它返回 true 才会计算第二个操作数。如果第一个操作数取值为 false,第二个操作数就不会被求值。

12、数组 (Array) 和列表 (ArrayList) 区别?

Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型。 Array 大小是固定的,ArrayList 的大小是动态变化的。 
ArrayList 处理固定大小的基本数据类型的时候,这种方式相对比较慢。

Final有什么用?

被final修饰的类不可以被继承

被final修饰的方法不可以被重写

被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的

什么是重载(Overload)和重写(Override)?

重载︰ 发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分 重写: 发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则)﹔如果父类方法访问修饰符为private则子类中就不能重写。

Java中==和equals的区别(必会)

==: 基本类型: 比较的就是值是否相同;

引用类型: 比较的就是地址值是否相同。

equals: 重写前比较的是地址值;

重写后比较的是内容是否相同。

接口和抽象类的区别是什么?(必会)

  1. 抽象类要被子类继承,接口要被类实现。

  2. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

  3. 接口可继承接口,并可多继承接口,但类只能单继承。

静态变量与实例变量区别?

静态变量:静态变量由于不属于任何实例对象,属于类的,所以在内存中只会 有一份,在类的加载过程中,JVM只为静态变量分配一次内存空间。 实例变量:每次创建对象,都会为每个对象分配成员变量内存空间,实例变量 是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。

List、Set、Queue、Map 的区别?

-List(对付顺序的好帮手): 存储的元素是有序的、可重复的。

-Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。

-Queue(实现排队功能的“叫号机”): 按特定的排队规则来确定先后顺序, 存储的元素是有序的、可重复的

-Map(用 key 来搜索的专家): 使用键值对(key-value)存储,类似于数学上 的函数 y=f(x),“x” 代表 key,"y”代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值。

HashSet 如何检查重复?

当你把对象加入HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象 加入的位置,同时也会与其他加入的对象的 hashcode 值作比较,如果没有相符的 hashcode,HashSet会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用 equals()方法来检査 hashcode 相等的对象是 否真的相同。如果两者相同,HashSet 就不会让加入操作成功。

线程池重要参数有哪些?

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

  1. corePoolSize => 线程池核心线程数量

  2. maximumPoolSize => 线程池最大数量(包含核心线程数量)

  3. keepAliveTime => 当前线程池数量超过 corePoolSize 时,多余的空闲线程的存活时间,即多少时间内会被销毁。

  4. unit => keepAliveTime 的单位

  5. workQueue => 线程池所使用的缓冲队列,被提交但尚未被执行的任务

  6. threadFactory => 线程工厂,用于创建线程,一般用默认的即可

  7. handler => 拒绝策略,当任务太多来不及处理,如何拒绝任务

创建线程有几种方式?

• 继承 Thread 类并重写 run 方法创建线程,实现简单但不可以继承其他类; • 实现 Runnable 接口并重写 run 方法。避免了单继承局限性,编程更加灵活,实现解耦; • 实现 Callable 接口并重写 call 方法,创建线程。可以获取线程执行结果的返回值,并且可以抛出异常; • 使用线程池创建(使用 java.util.concurrent.Executor 接口)。

Java 反射有了解吗? 


在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为 Java 语言的反射机制。通过反射机制 使我们所写的代码更具有「通用性」和「灵活性」,比如 Spring/Spring Boot、MyBatis 等框架大量用到了反射机制。 


Java 注解可以加在什么地方?Java 自带注解有哪些?哪里有用到注解?

  • 注解用于对代码进行说明,可以对包、类、接口、字段、方法、参数、局部变量等进行注解 ;

  • Java 自带的标准注解,包括@Override、@Deprecated 和@SuppressWarnings, 分别用于标明重写某个方法、标明某个类或方法过时、标明要忽略的警告,用这些注解标明后编译器就会进行检查;

  • 注解应用场景:Spring、SpringMVC 中大量注解、单元测试注解。

超级管理员