


资源介绍
ava 专家(第 2 版)(双语电子书)
本书通过 123 个编程问题及解决方案,涵盖 Java 编程的多个关键领域,包括字符串处理、对象操作、日期时间处理、记录(Records)、数组与数据结构、I/O 操作、外部函数与内存 API、密封类与隐藏类、函数式编程扩展以及并发编程等,帮助读者掌握现代 Java 编程的核心技能和高级特性。
主要章节内容
1. 文本块、本地化、数字与数学(Text blocks, Locales, Numbers & Math)
文本块(Text Blocks):介绍了 Java 13 + 引入的文本块特性,包括创建多行 SQL、JSON 和 HTML 字符串,处理分隔符、缩进、空格,以及文本块与普通字符串的混合使用等 33 个问题。
文本块以"""作为起始和结束分隔符,支持多行字符串,自动处理 incidental 空格。
可通过\抑制换行,\s保留空格,以及使用translateEscapes()处理转义序列。
本地化(Locales):涵盖创建 Locale、自定义本地化日期时间格式等。
数字与数学:包括处理整数溢出、计算绝对值、商、平方根(巴比伦方法)、素因数分解等,以及 Java 17 新增的伪随机数生成器 API。
2. 对象、不可变性、switch 表达式与模式匹配(Objects, Immutability, Switch Expressions, and Pattern Matching)
对象相关:解释 UTF-8/UTF-16/UTF-32 编码,检查子范围,获取对象标识字符串,在文档中添加代码片段等 29 个问题。
不可变性:实现不可变栈,揭示 String 使用中的常见错误。
switch 表达式:介绍yield关键字,处理null情况,以及模式匹配在instanceof和switch中的应用。
模式匹配允许在instanceof检查时直接绑定变量,如if (o instanceof String s) { ... }。
switch可使用类型模式、守卫模式,需确保覆盖所有可能的情况(完整性)。
3. 日期时间处理(Working with Date and Time)
包含定义一天中的时间段、在Date与YearMonth间转换、检查闰年、计算季度、获取某年 / 周的首尾天等 20 个问题。
涉及Calendar API 和 Java 8 + 的java.time API,如LocalDateTime、ZonedDateTime、TemporalAdjusters等。
4. 记录(Record)与记录模式(record pattern)
记录(Records):介绍记录的声明、规范构造函数与紧凑构造函数,记录中可添加的元素(方法、静态成员)和不可添加的元素(实例字段、继承等)等 18 个问题。
记录是不可变的数据载体,编译器自动生成equals()、hashCode()、toString()和访问方法。
记录模式:在instanceof和switch中使用记录模式,处理嵌套记录、泛型记录和null值。
5. 数组、集合与数据结构(Arrays, collections and data structures)
向量 API(Vector API):用于数据并行处理,如数组求和、矩阵乘法、图像负滤镜等 23 个问题。
集合工厂方法:创建不可变集合,从流中获取列表,处理 Map 容量。
数据结构:介绍 Rope、跳表(Skip List)、K-D 树、拉链(Zipper)、二项堆、斐波那契堆、配对堆、霍夫曼编码、伸展树(Splay Tree)等。
连接算法:实现嵌套循环连接、哈希连接和排序合并连接。
6. Java I/O:上下文特定反序列化过滤器(Java I/O: Context-Specific Deserialization Filters)
涵盖对象序列化到字节数组 / 字符串 / XML,Java 9 + 的反序列化过滤器,自定义过滤器,避免反序列化时的栈溢出和 DoS 攻击等 13 个问题。
Java 17 简化了过滤器创建,可通过ObjectInputFilter实现上下文特定过滤。
7. 外部函数与内存 API(Foreign (Function) Memory API)
介绍 JNI、JNA、JNR,以及 Project Panama 的架构,包括Arena、MemorySegment、内存分配、布局(struct/union),调用外部函数(如sumTwoInt()、strcat())等 18 个问题。
8. 密封类与隐藏类(Sealed and Hidden Classes)
密封类:创建密封类层次结构,使用permits子句限制继承,结合密封类与记录、模式匹配等 7 个问题。
隐藏类:简介隐藏类的创建和用途,隐藏类不能被反射访问,适用于动态生成的代码。
9. 函数式编程 - API 扩展(Functional style programming - extending API)
包括使用mapMulti(),扩展Stream添加containsAll/removeAll,构建动态谓词,创建自定义收集器等 24 个问题。
涉及函数组合、处理 checked 异常,以及部分应用函数。
10. 并发 - 虚拟线程与结构化并发(Concurrency - Virtual Threads, Structured Concurrency)
解释并发与并行的区别,介绍 Java 19 + 的虚拟线程(VirtualThread)和结构化并发(StructuredTaskScope)等 12 个问题。
虚拟线程轻量高效,适合 I/O 密集型任务,可通过Executors.newVirtualThreadPerTaskExecutor()创建。
结构化并发通过ShutdownOnSuccess、ShutdownOnFailure等简化多任务管理,确保任务生命周期与作用域绑定。
目标读者
有一定 Java 基础,希望提升对现代 Java 特性(如记录、模式匹配、虚拟线程)掌握的开发者。
准备应对 Java 编程面试或需要解决实际项目中复杂问题的程序员。
书籍特点
结合理论与实践,每个问题提供详细解决方案和代码示例。
覆盖 Java 8 至 Java 20 + 的新特性,如文本块、密封类、虚拟线程等。
包含性能基准测试(JMH),帮助读者了解不同实现的效率差异。
提供在线资源(GitHub 代码库)供读者实践。
Java Coding Problems