| 问题 | 关键词/关键概念 |
| ----------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| 什么是深拷贝和浅拷贝?| 浅拷贝复制引用、深拷贝复制对象、递归复制 |
| Java中异常分哪两类?| [Throwable@](
[email protected]),Checked Exception(编译时异常)、Unchecked Exception(运行时异常RuntimeException)|
| Arrays.sort是使用什么排序算法实现的?| DualPivotQuicksort(双轴快排)、基本类型用快排、对象类型用TimSort(归并排序变种)|
| BigDecimal(double)和BigDecimal(String)有什么区别?| [基本数据类型](基本数据类型.md),double构造器存在精度损失、String构造器精确、推荐使用String或valueOf |
| | |
| BigDecimal和Long表示金额哪个更合适?| BigDecimal适合需要小数精度场景、Long适合分为单位整数场景、考虑精度需求和性能 |
| String、StringBuilder和StringBuffer的区别?| [[String]]不可变、StringBuilder可变非线程安全、StringBuffer可变线程安全 |
| String为什么设计成不可变的?| 安全性、缓存hashCode、字符串常量池、线程安全 |
| | |
| | |
| ClassNotFoundException和NoClassDefFoundError的区别?| 前者是Exception运行时动态加载失败、后者是Error编译时存在但运行时找不到 |
| JDK 9中对字符串的拼接做了什么优化?| invokedynamic指令、StringConcatFactory、减少StringBuilder创建 |
| JDK新版本中都有哪些新特性?| JDK21 LTS版本、虚拟线程、模式匹配、记录类型、密封类、文本块 |
| Java中Timer实现定时调度的原理?| TaskQueue优先队列、TimerThread线程、wait/notify机制、单线程执行 |
| Java中创建对象有哪些种方式?| new关键字、反射、clone()、反序列化、Unsafe.allocateInstance |
| Java中有了基本类型为什么还需要包装类?| 泛型需要、集合框架、null值表示、对象方法、自动装箱拆箱 |
| Java中的static都能用来修饰什么?| 变量、方法、代码块、内部类、导入(import static)|
| Java中的枚举有什么特点和好处?| 类型安全、单例、可添加方法、switch支持、线程安全 |
| Java和C++主要区别?| 内存管理(GC vs 手动)、指针、多继承、平台依赖性、编译方式 |
| Java序列化的原理?| ObjectOutputStream/InputStream、Serializable接口、序列化ID、对象图遍历 |
| Java是值传递还是引用传递?| 值传递、基本类型传值、引用类型传引用的值(地址值)|
| Java注解的作用?| 元数据、编译检查、运行时处理、代码生成、框架配置 |
| Java的动态代理如何实现?| JDK代理(接口+InvocationHandler)、CGLIB(继承+MethodInterceptor)|
| Lambda表达式是如何实现的?| invokedynamic指令、函数式接口、LambdaMetafactory、匿名内部类优化 |
| RPC接口返回中,使用基本类型还是包装类?| 包装类、可表示null、避免NPE、明确语义 |
| SimpleDateFormat是线程安全的吗?| 非线程安全、使用ThreadLocal、DateTimeFormatter(Java 8线程安全)|
| Stream的并行流一定比串行流更快吗?| 不一定、取决于数据量、操作复杂度、线程开销、CPU核心数 |
| String a="ab"; String b="a"+"b"; a==b吗?| true、编译期常量优化、字符串常量池 |
| String str=new String("hollis")创建了几个对象?| 1个或2个、堆中new对象、常量池中"hollis"(如果不存在)|
| String中intern的原理?| 字符串常量池、返回池中引用、JDK7后池在堆中 |
| String是如何实现不可变的?| final类、private final char[]数组、无setter方法、返回新对象 |
| String有长度限制吗?| 编译期65535字符、运行期Integer.MAX_VALUE、常量池CONSTANT_Utf8限制 |
| char能存储中文吗?| 可以、UTF-16编码、2字节、BMP范围内中文 |
| finally中代码一定会执行吗?| 不一定、System.exit()、线程死亡、JVM崩溃时不执行 |
| final、finally、finalize区别?| final修饰符、finally异常处理、finalize垃圾回收前调用 |
| serialVersionUID作用?| 版本控制、反序列化兼容性检查、建议显式声明 |
| try return A, catch return B, finally return C?| 返回C、finally中return会覆盖、不建议finally中return |
| while(true)和for(;;)哪个性能好?| 性能相同、编译后字节码一致、语义差异 |
| 为什么JDK9把String的char[]改成byte[]?| 节省内存、Latin-1编码优化、Compact Strings、coder标记 |
| 为什么Java不支持多继承?| 菱形继承问题、复杂性、接口多继承替代 |
| 为什么main方法必须是public static void?| JVM规范、无需实例化、访问权限、固定入口 |
| 为什么不建议使用异常控制业务流程?| 性能开销、语义不清、栈轨迹开销、代码可读性 |
| 为什么不能用BigDecimal的equals做等值比较?| equals比较值和精度、compareTo只比较值、1.0≠1.00用equals |
| 为什么不能用浮点数表示金额?| 精度丢失、IEEE 754标准、二进制表示限制 |
| 为什么负数取绝对值结果不一定是正数?| Integer.MIN_VALUE、补码表示、-2^31没有对应正数 |
| 为什么建议多用组合少用继承?| 灵活性、低耦合、避免继承链、符合开闭原则 |
| 为什么建议自定义无参构造函数?| 反射需要、框架要求、子类调用、序列化 |
| 什么是AIO、BIO和NIO?| BIO同步阻塞、NIO同步非阻塞、AIO异步非阻塞 |
| 什么是SPI和API区别?| SPI服务发现机制、API应用编程接口、调用方向相反 |
| 什么是UUID?| 通用唯一标识符、128位、版本4随机、理论唯一实际极小概率重复 |
| 什么是反射机制?为什么慢?| 运行时动态获取类信息、安全检查、JIT优化失效、方法调用开销 |
| 什么是序列化与反序列化?| 对象转字节流、持久化、网络传输、深拷贝 |
| 什么是泛型?好处?| 参数化类型、类型安全、消除强转、代码复用 |
| 什么是类型擦除?| 编译期泛型信息擦除、运行时Object、桥接方法 |
| fastjson反序列化漏洞?| autoType功能、任意类实例化、RCE风险、版本升级 |
| 反射与封装矛盾?| 矛盾存在、SecurityManager、模块系统、访问控制 |
| 如何理解多态?| 编译时多态(重载)、运行时多态(重写)、向上转型 |
| 面向对象vs面向过程?| OOP封装继承多态、过程顺序执行、抽象vs具体、复用vs效率 |
| 字符串常量何时进入常量池?| 类加载时、编译期常量、运行时intern() |
| 常见字符编码?| ASCII、UTF-8变长、UTF-16定长、GBK中文、Unicode字符集 |
| 如何修改private String?| 反射Field.setAccessible(true)、JDK9+需要--add-opens |
| 接口vs抽象类?| 接口多实现、抽象类单继承、JDK8接口default方法、is-a vs can-do |
| 为什么需要hashCode?| HashMap/HashSet需要、equals相等hashCode必须相等、提高查找效率 |
| 泛型中K T V E?| K-Key、T-Type、V-Value、E-Element、?通配符、Object根类 |
| extends和super区别?| extends上界通配符(生产者)、super下界通配符(消费者)、PECS原则 |
| 现在JDK最新版本?| JDK 23(2024年9月)、JDK 21 LTS长期支持版 |
| 常见语法糖?| 自动装箱拆箱、增强for循环、try-with-resources、泛型、变长参数、枚举、内部类 |
| | |
| | |
| | |
| | |
- Arrays.sort是使用什么排序算法实现的?
- BigDecimal(double)和BigDecimal(String)有什么区别?
- BigDecimal和Long表示金额哪个更合适,怎么选择?
- ClassNotFoundException和NoClassDefFoundError的区别是什么?
- JDK 9中对字符串的拼接做了什么优化?
- JDK新版本中都有哪些新特性?
- Java中Timer实现定时调度的原理是什么?
- Java中创建对象有哪些种方式
- Java中异常分哪两类,有什么区别?
- Java中有了基本类型为什么还需要包装类?
- Java中的static都能用来修饰什么?
- Java中的枚举有什么特点和好处
- Java和C++主要区别有哪些?各有哪些优缺点?
- Java序列化的原理是啥
- Java是值传递还是引用传递?
- Java注解的作用是啥
- Java的动态代理如何实现?
- Lambda表达式是如何实现的?
- RPC接口返回中,使用基本类型还是包装类?
- SimpleDateFormat是线程安全的吗?使用时应该注意什么?
- Stream的并行流一定比串行流更快吗?
- String a = "ab"; String b = "a" + "b"; a == b 吗?
- String str=new String("hollis")创建了几个对象?
- String、StringBuilder和StringBuffer的区别?
- String中intern的原理是什么?
- String为什么设计成不可变的?
- String是如何实现不可变的?
- String有长度限制吗?是多少?
- char能存储中文吗?
- finally中代码一定会执行吗?
- final、finally、finalize有什么区别
- serialVersionUID 有何用途? 如果没定义会有什么问题?
- try中return A,catch中return B,finally中return C,最终返回值是什么?
- while(true)和for(;;)哪个性能好?
- 为什么JDK 9中把String的$char[]$改成了$byte[]$?
- 为什么Java不支持多继承?
- 为什么Java中的main方法必须是public static void的?
- 为什么不建议使用异常控制业务流程
- 为什么不能用BigDecimal的equals方法做等值比较?
- 为什么不能用浮点数表示金额?
- 为什么对Java中的负数取绝对值结果不一定是正数?
- 为什么建议多用组合少用继承?
- 为什么建议自定义一个无参构造函数
- 为什么这段代码在JDK不同版本中结果不同
- 什么是AIO、BIO和NIO?
- 什么是SPI,和API有啥区别
- 什么是UUID,能保证唯一吗?
- 什么是反射机制?为什么反射慢?
- 什么是序列化与反序列化
- 什么是泛型?有什么好处?
- 什么是深拷贝和浅拷贝?
- 什么是类型擦除?
- 以下关于异常处理的代码有哪些问题
- 你知道fastjson的反序列化漏洞吗
- 反射与封装是否矛盾?如何解决反射破坏封装不安全的问题?
- 如何理解Java中的多态?
- 如何理解面向对象和面向过程?
- 字符串常量是什么时候进入到字符串常量池的?
- 常见的字符编码有哪些?有什么区别?
- 怎么修改一个类中的private修饰的String参数的值
- 接口和抽象类的区别,如何选择?
- 有了equals为啥需要hashCode方法?
- 泛型中K T V E?Object等分别代表什么含义。
- 泛型中上下界限定符extends 和 super有什么区别?
- 现在JDK的最新版本是什么?
- 说几个常见的语法糖?