小林coding面试题笔记(五)

AI-摘要
DeepSeek GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
小林coding面试题笔记(五)
Jie异常
1. Java异常的介绍
Java异常体系主要基于两大类:Throwable
类及其子类。Throwable
有两个重要的子类:Error
和Exception
,它们分别代表了不同类型的异常情况。
1.1 Error(错误)
- 表示运行时环境的错误,通常是程序无法处理的严重问题。
- 示例:
OutOfMemoryError
StackOverflowError
1.2 Exception(异常)
- 表示程序本身可以处理的异常条件。
- 分类:
- 非运行时异常:在编译时期必须被捕获或声明抛出,例如:
FileNotFoundException
ClassNotFoundException
- 运行时异常:由程序错误导致,例如:
NullPointerException
ArrayIndexOutOfBoundsException
- 非运行时异常:在编译时期必须被捕获或声明抛出,例如:
2. Java异常处理方式
2.1 try-catch语句块
用于捕获并处理可能抛出的异常。
1 | try { |
2.2 throw语句
用于手动抛出异常。
1 | throw new ExceptionType("Exception message"); |
2.3 throws关键字
用于在方法声明中声明可能抛出的异常类型。
1 | public void methodName() throws ExceptionType { |
2.4 finally块
无论是否发生异常,都会执行的代码块,通常用于释放资源。
1 | try { |
3. 常见问题
3.1 为什么有时不需要throws?
- 未检查异常:如
RuntimeException
,编译器不强制要求处理。 - 内部捕获和处理:如果方法内部已经捕获并处理了异常,则无需使用
throws
。
3.2 try-catch中的语句运行情况
try
块中的代码按顺序执行。- 如果抛出异常,进入匹配的
catch
块处理。 - 如果没有匹配的
catch
块,异常会向上传递。
3.3 try{return “a”} finally{return “b”}返回什么?
- 返回
"b"
,因为finally
块中的return
会覆盖try
块中的return
。
Java基础
1. == 与 equals 的区别
1.1 对于字符串
==
:比较内存地址。equals
:比较字符串内容。
1.2 对于非字符串
- 如果未重写
equals
方法,==
和equals
作用相同,比较内存地址。
2. hashCode 和 equals 的关系
- 一致性:如果
obj1.equals(obj2)
为true
,则obj1.hashCode()
必须等于obj2.hashCode()
。 - 非一致性:如果
obj1.hashCode()
等于obj2.hashCode()
,obj1.equals(obj2)
不一定为true
。
3. String、StringBuffer、StringBuilder 的区别
特性 | String | StringBuilder | StringBuffer |
---|---|---|---|
不可变性 | 不可变 | 可变 | 可变 |
线程安全性 | 是(因不可变) | 否 | 是(同步方法) |
性能 | 低 | 高(单线程) | 中(多线程) |
使用场景 | 静态字符串 | 单线程动态字符串 | 多线程动态字符串 |
示例代码
1 | // String的不可变性 |
Java新特性
1. Java 8 新特性
特性名称 | 描述 | 示例或说明 |
---|---|---|
Lambda 表达式 | 简化匿名内部类,支持函数式编程 | (a, b) -> a + b |
函数式接口 | 仅含一个抽象方法的接口 | @FunctionalInterface |
Stream API | 提供链式操作处理集合数据,支持并行处理 | list.stream().filter(x -> x > 0) |
Optional 类 | 封装可能为 null 的对象,减少空指针异常 | Optional.ofNullable(value).orElse("default") |
方法引用 | 简化 Lambda 表达式,直接引用现有方法 | System.out::println |
接口的默认方法 | 接口可定义默认实现和静态方法 | interface A { default void print(); } |
2. Java 21 新特性
2.1 新语言特性
- Switch语句的模式匹配:支持更灵活的类型检查。
- 字符串模板:简化字符串拼接。
2.2 并发特性
- 虚拟线程:轻量级线程,提升并发性能。
- Scoped Values:在线程间共享不可变数据的新方式。
设计模式
1. 单例模式(双重检查锁定)
1 | public class SingleTon { |
I/O
1. BIO、NIO、AIO 的区别
特性 | BIO(阻塞IO) | NIO(非阻塞IO) | AIO(异步IO) |
---|---|---|---|
模型 | 阻塞 | 非阻塞 | 异步 |
线程模型 | 每连接一线程 | 单线程处理多连接 | 回调机制 |
性能 | 低 | 高 | 更高 |
其他
1. 按分数和学号排序
1 | public class Student implements Comparable<Student> { |
1 | List<Student> students = new ArrayList<>(); |