加载中

Java

文章分类

浏览该分类下的所有文章

237 篇文章 20

es 在数据量很大的情况下(数十亿级别)如何提高查询效率?

ES在海量数据(数十亿级)下提升查询效率的核心是让索引文件尽可能驻留在 OS 文件系统缓存中。做法包括:为机器配置足够内存,使所有 segment 能被缓存;仅写入搜索必需的少量字段,其他数据存入 MySQL/HBase 等外部存储;对热点数据进行预热或采用冷热分离,将热索引单独部署在少数节点上;合理设计 document 模型,避免 join、nested、parent‑child 等复杂查询,在写入时完成关联;分页时禁用深度分页,改用 scroll 或 search_after。上述措施可显著降低磁盘 I/O,提升查询响应速度。

如何对Integer和Double类型判断相等?

Integer 与 Double 不能直接用 ==、字符串或 compareTo 比较,因为它们是不同的包装类型且 compareTo 只能在同类之间使用。两者均继承自 Number,提供将数值转换为基本类型的方法。可以先将 Integer 和 Double 转换为相同的基本类型(如 double),再使用 == 判断相等。例如:`Integer i = 100; Double d = 100.00; System.out.println(i.doubleValue() == d.doubleValue());` 输出 true。

反射的基本概念

反射是Java在运行时动态获取和修改类的属性、方法(包括private)的机制。核心类为Class、Constructor、Method、Field。它可突破访问限制、实现自定义注解、动态加载第三方jar、按需加载类等。原理是ClassLoader加载.class文件生成Class对象,利用上述四类在内存中操作。优点是灵活自由,缺点是性能较差、破坏封装导致安全风险、版本兼容问题。适度、按需使用可降低影响,使用Android API时需注意兼容性。

如何让 a == 1 && a == 2 && a == 3同时成立?

文章介绍利用 Java IntegerCache 的实现细节,使表达式 `a==1 && a==2 && a==3` 成立。通过反射获取 `Integer` 的内部类 `IntegerCache`,将缓存数组中索引对应 1、2、3 的对象指向同一个 `Integer` 实例(值为 1),随后 `a`(自动装箱为缓存中的对象)在比较时得到同一引用,条件为 true。文中解释了 `Integer.valueOf` 会从缓存返回同一对象,而 `new Integer` 每次都会创建新实例,导致比较结果为 false。最后指出此技巧展示了对 JDK 源码特性的掌握及其在性能预热中的潜在价值。

for(;;)和while(true)的区别

文章对比了 Java 中两种死循环写法 for(;;) 和 while(true),通过查看 JDK 源码、编译后字节码以及历史编译器差异,说明两者在现代编译器下生成的字节码完全相同,功能和性能没有区别。之所以源码中常见 for(;;) ,是受早期 C 语言和旧版 Java 编译器生成更简洁代码的影响,后续优化使两者等价,写法仅是习惯问题。

docker实时查看容器日志(实用)

本文介绍了在 Docker 中实时查看和筛选容器日志的常用命令。使用 `docker logs -f --tail 10 <容器>` 可实时刷新最新 10 行;`docker logs --tail 10 <容器>` 或 `docker logs <容器> | tail -n 10` 仅打印最新 10 行;`docker logs <容器> | head -n 10` 查看最早的 10 行。若需关键字搜索,可结合 `grep`,如 `docker logs <容器> | grep 'ERROR'`,并可再通过 `tail -n 2` 只取最新的两条错误日志。整体提供了快速获取、定位和过滤 Docker 日志的实用技巧。

groovy安装教程

本文简要介绍了在 Windows 环境下安装 Groovy 语言的步骤。首先提供官方和网盘两种下载链接获取 groovy‑sdk(4.0.4),随后将压缩包解压至指定目录并配置系统环境变量。完成后通过命令行验证安装是否成功。随后在 IntelliJ IDEA 中新建 Groovy 项目,选择已安装的 Groovy library(或手动指向解压目录),在 src 目录新建 .groovy 文件即可编写代码,示例展示了字符串、GString 的基本用法。全流程覆盖下载、解压、环境配置、IDE 集成及入门示例。

this与super关键字详解

本文系统阐述了 Java 中的 this 与 super 关键字。this 代表当前对象实例,可用于访问本类属性、方法、区分形参与成员变量,并在构造函数首行调用本类其他构造器;super 代表最近的父类对象,可访问父类非私有成员、区分同名属性/方法,并在子类构造函数首行显式调用父类构造器。通过代码示例说明隐式 super() 引发的编译错误及两种解决方案(添加无参构造或显式 super(...)),并对二者的作用范围、功能差异进行对比总结。

还在频繁定义常量?不如试试用枚举代替

文章指出,常量字符串频繁出现时应改用枚举。枚举提供类型安全、可在内部定义属性和方法、支持 values() 遍历等优势,如 HttpStatus 示例展示了丰富的业务信息和辅助逻辑。使用枚举可让代码更简洁、可靠,虽不是所有常量都必须转为枚举,但在成员在编译期已确定的场景下推荐使用。

Git代码提交规范

Git提交规范采用 “type(scope): message” 形式。type 表示改动类别,如 feat(新功能)、fix(修复)、docs(文档)等;scope 用于说明受影响的模块或范围;message 为简短的提交说明,避免冗长。通过统一的类型和范围标识,团队可快速了解每次提交的目的和影响,提高代码审查和协作效率。示例:fix(系统菜单图标):添加缺少的图标。

Java实现给PDF文件加水印、图片、签名(含测试类)

本文示例使用 iText 5 在 Java 中实现 PDF 加水印、文字、图片及签名。首先在 pom 中引入 `itextpdf` 与 `itext-asian` 依赖;随后提供 `PdfUtil` 工具类,核心方法包括: * `addWaterMark`:遍历所有页,使用透明度、字体、倾斜角度在页面上循环绘制文字水印。 * `addText`:根据坐标列表在指定页插入文本,支持中文字体。 * `addTextByKeyword`:解析 PDF 内容,定位关键字所在坐标后插入文本。 * `addImage`、`addSignature`:在给定坐标或关键字位置绘制图片/签章,并可设置缩放、旋转。 文末附有测试类演示如何调用上述方法生成带水印、签名的 PDF。全文代码完整、可直接运行,提供了异常处理与日志输出的实现细节。

给PDF添加水印并保存(Java实现)

本文展示了使用 Java 的 iText(5.5.10)库为 PDF 添加文字水印并保存的完整实现。首先在 pom 中引入 itextpdf 与 itext‑asian 依赖;随后编写 PDFUtils 工具类,利用 PdfReader、PdfStamper、BaseFont、PdfGState 等 API,读取原文件、设置透明度、计算文字尺寸、在每页按指定间隔和倾斜角度绘制水印;最后提供测试入口 AddWaterMarkTest 演示调用。代码涵盖异常处理和资源关闭,可直接复制运行,实现快速的 PDF 水印功能。