JavaSE面试

final和static对比

static知识点 介绍
static代码块 当JVM加载类时,static代码块会且只会被执行一次。
可用于优化程序性能。
实例代码块在每次创建对象时,都会自动执行。
static方法 static方法中不能使用this和super关键字。
静态内部类 静态内部类的创建不需要依赖外部类的创建,
不能使用外部类的非static成员变量和方法。
静态变量 被所有对象共享。
访问方式 直接使用类名。
final知识点 介绍
final量 不可变常量,一旦创建,则不可修改。
如果是引用类型的变量,则不能再指向另一个对象。
final方法 不能被子类重写(类中的所有private方法,都隐式的被final修饰)。
final类 不能被继承,其中所有方法也默认被final修饰
不能修饰构造方法
使用场景 把方法锁定,避免任何继承类修改该方法的含义。
提高效率,早期会将final方法转为内嵌调用(已过时)。

接口和抽象类对比

接口知识点
关键字 interface、implements
类实现接口 一个类可以实现多个接口。
接口可以多继承 一个接口可以继承多个接口。
抽象类知识点
关键字 abstract
抽象方法 只有声明,没有方法体。
注意,抽象类可以没有抽象方法
但有抽象方法,则一定是抽象类。
抽象类 用abstract关键字修饰。
不能用来创建对象。
子类继承抽象类时,必须实现其中所有抽象方法。

方法重写

重写知识点
参数一致 方法名、参数列表、返回值类型必须全部一致。
访问权限 子类方法的访问权限不能小于父类的对应方法。
@Override注解 可以不用添加,但不建议。
不能重写的方法 静态方法和构造方法不能重写。

final、finally、finalize

final 可以用于修饰类、方法、变量。
final方法 不能被重写。
final量 不能被修改,常量。
final类 不能被继承,(String类就是final修饰)。
finally 常用于try-catch-finally中
用来关闭某些资源如JDBC连接、文件对象等。
如果执行System.exit(1);,finally中的代码也可能不会被执行。
finalize java.lang.Object中的一个方法,(已经不推荐使用)
用于保证对象在被垃圾回收之前,完成特定资源的回收。

String类和StringBuffer类

String类
StringBuffer类

HashSet

HashSet添加元素时,如何判断元素是否重复?

hashCode() 调用hashCode(),计算元素的哈希值,
哈希值不同的元素一定不同,
哈希值相同的元素,可能相同。
当哈希值相同时,才会调用equals方法进一步判断。

HashMap的底层存储结构

哈希数组+红黑树 底层使用长度默认为16的哈希数组,
链表长度等于8且哈希数组的长度大于64时,链表会自动转为红黑树。
补充 哈希表的负载因子为0.75,当使用率达到0.75时,会自动扩容。

HashMap和CurrentHashMap

HashMap和CurrentHashMap的区别有哪些?

线程安全 HashMap不是线程安全的。
ConcurrentHashMap是线程安全的。
分段锁技术 ConcurrentHashMap采用分段锁技术,
分段锁技术将整个Hash桶进行了分段segment,每个segment上都有对应的锁。
增加了锁的粒度,提高了并发性能。

线程安全的集合有哪些?

Vector 使用synchronized关键字。
Hashtable 使用synchronized关键字。
ConcurrentHashMap 分段锁(Segment)
Stack 继承于Vector, 栈是后进先出的。
ArrayBlockingQueue 阻塞队列,底层使用数组结构。

HashMap的底层原理是什么?如何扩容?如何解决Hash碰撞的?

Exception和Error

Exception 继承了Throwable类 只有Throwable类的实例才可以被抛出(throw)或捕获(catch)。
可以预料的意外情况。
分为可检查和不可检查两种 checked:必须在代码中显式的捕获处理,不处理,则无法编译。
unchecked:运行时异常,非空异常、数组越界异常等。
常见Exception
Error 也继承了Throwable类
正常情况下不太可能出现的情况,会导致程序处于非正常的,不可恢复的状态。
常见Error

强引用、软引用、弱引用、幻象引用

不同的引用类型 主要体现对象不同的可达性状态和对垃圾收集的影响。
强引用 StrongReference 只要还有强引用指向一个对象,那么该对象就不会被垃圾收集器回收。
软引用 SoftReference 只有当JVM认为内存不足时,才会试图回收软引用的对象。
确保在抛出OutOfMemoryError之前,清理软引用的对象。
弱引用 WeakReference 仅提供一种访问在弱引用状态下对象的途径。
幻象引用 仅提供了一种确保对象被finalize之后,做某些事情的机制。
Java的不同可达性级别 reachability level
强可达 Strongly Reachable 一个对象可以有一个或多个线程可以不通过各种引用访问到的情况。
软可达 Softly Reachable
弱可达 Weakly Reachable
幻象可达 Phantom Reachable
不可达 unreachable
相关推荐
东阳马生架构1 分钟前
G1原理—7.G1的GC日志分析解读
jvm
小刘|1 分钟前
数据结构的插入与删除
java·数据结构·算法
Clockwiseee16 分钟前
JAVA多线程学习
java·开发语言·学习
言之。1 小时前
【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解
面试
Cosmoshhhyyy1 小时前
LeetCode:2270. 分割数组的方案数(遍历 Java)
java·算法·leetcode
绝无仅有1 小时前
电商智能客服系统体验设计——以商家客服工作台为例
面试·程序员·架构
zhulangfly1 小时前
【Java设计模式-4】策略模式,消灭if/else迷宫的利器
java·设计模式·策略模式
夕阳之后的黑夜2 小时前
SpringBoot + 九天大模型(文生图接口)
java·spring boot·后端·ai作画
芝士就是力量啊 ೄ೨2 小时前
Kotlin 循环语句详解
android·java·开发语言·kotlin
QQ27437851092 小时前
django基于Python对西安市旅游景点的分析与研究
java·后端·python·django