38 归档分页
370 留言互动
4 核心专题

每日一题(2022/1/20)

代码演示了 Java 中字符串比较的细节。`s1` 通过 `new String("xiaozou")` 在堆中创建了独立对象,`s2` 直接引用常量池中的字面量,两者地址不同,`s1 == s2` 为 `false`。调用 `s1.intern()` 时,若常量池已有相同内容的字符串,则返回该池中对象的引用,否则将其加入池中。因为常量池已经存在 `"xiaozou"`,`s3` 获得的正是 `s2` 的引用,故 `s2 == s3` 为 `true`。文章通过源码解释说明了 `intern()` 的工作原理及其在字符串共享中的作用。

每日一题(2022/1/19)

本文给出一道面试题:在保持 `String s` 引用不变的前提下,使其输出从 `abc` 变为 `abcd`。常规做法如 `StringBuilder.append()` 或 `String.replace()` 均不可行。正确方案是通过反射修改 `String` 的内部 `value`(char[])字段:获取字段、设为可访问、写入新字符数组即可。但在 JDK 11 及以上运行时会抛出 `IllegalArgumentException`,因为 `value` 为 `final` 且受模块系统的非法反射访问限制。文章说明了 `setAccessible(true)` 的作用并解释异常产生的原因。

Dubbo最佳实战

Dubbo是高性能的 Java RPC 框架,官方推荐使用 Zookeeper 作为服务注册中心。文章先概述 Dubbo 的特性与服务治理,随后通过一个基于 Maven 的完整实战案例演示其使用流程:①创建 service‑api 模块定义公共接口;②在 provider 模块引入该接口并实现类,用 @Service 注解将服务注册到 Zookeeper;③在 consumer 模块同样引入接口,通过 @Reference 调用服务。文中提供了所有 Maven 依赖、properties 配置、启动代码以及运行步骤(启动本机 Zookeeper、启动提供者、启动消费者,回车键触发调用),完整源码已上传至 GitHub。

使用HashMap的注意事项

HashMap 的键必须唯一,插入相同键会覆盖旧值。键唯一性的判断先比较 hashCode,再通过 equals 判断真实相等。因此在自定义类作键时必须同时重写 hashCode 与 equals。HashMap 底层结构为数组+链表,JDK 8 之后在链表过长时会转为红黑树;它是非线程安全的,键和值均可为 null,键唯一而值可以重复。本文通过 String 与自定义 Person 类的示例,演示了未重写方法导致键重复的现象,并给出正确实现的代码示例。

数据结构之线性表详解

本文系统阐述了线性表的三种基本实现。首先介绍数组:连续内存存储,支持 O(1) 随机读写,插入/删除需搬移元素导致 O(n) 时间,需扩容且空间必须连续,广泛用于 ArrayList、Redis 等。随后讲解链表:节点通过指针链接,采用随机存储,可灵活插入、删除,时间复杂度均为 O(1)(查找为 O(n)),不受连续空间限制,适用于树、图、LRU 等。最后简述栈的概念及其数组、链表两种实现,强调后进先出特性及 push、pop 操作。文中对比了数组和链表的优缺点,指出读多写少适合数组,频繁插删适合链表。整体呈现线性表的存储原理、操作实现、复杂度分析及典型应用场景。

338. 比特位计数

本文介绍了 LeetCode 第 338 题“比特位计数”。给定整数 n,需要计算区间 [0, n] 内每个数的二进制表示中 1 的个数,并返回长度为 n+1 的数组。示例说明了输入输出对应关系。文中给出一种 O(n) 时间、O(1) 额外空间的动态规划实现:若 i 为偶数,则 ans[i] = ans[i/2](最高位为 0),否则 ans[i] = ans[i‑1] + 1(在前一个数基础上增加一个 1)。代码基于该思路完成求解。

739. 每日温度

本文介绍了 LeetCode 第 739 题 “每日温度”。题目要求对给定的气温数组,计算每一天需要等待多少天才能出现更高温度,若之后没有更高温度则返回 0。文中给出三个示例说明输入输出关系,并提供了基于单调递减栈的 Java 解法:遍历温度数组,利用栈记录尚未找到更高温度的下标,当遇到更高温度时弹出栈中下标并计算间隔天数,最终得到结果数组。

75. 颜色分类

本题要求对仅包含 0、1、2(分别代表红、白、蓝)的长度为 n 的数组就地排序,使相同颜色相邻且顺序为红、白、蓝。核心思路是经典的荷兰国旗算法:利用左指针 left、右指针 right 和遍历指针 i,将 0 移到左侧、2 移到右侧,遇到 1 时直接前进。代码实现中通过条件判断在 O(n) 时间、O(1) 额外空间内完成交换,实现了高效的原地排序。

Elasticsearch7.x实战指南

Elasticsearch 7.x 通过废弃 TransportClient、统一使用 High‑level REST client、默认类型改为 _doc、分片数降至 1 等改动,提升了连接方式和资源占用。内部升级至 Lucene 8,加入 Weak‑AND、Intervals 查询以及更智能的集群协调与熔断机制,显著优化查询相关性和内存安全。本文系统演示了 ES7 的基本操作(索引、映射、文档的增删改查),以及高级特性包括地理坐标、动态映射、动态模板和 Query DSL 的全文、过滤与聚合用法,为 Java 开发者提供了从集群连接到复杂查询的完整实战指南。