Java

浏览该分类下的所有文章

从 SVN 到 Git 开发实用命令总结

本文对比了分布式的 Git 与集中式的 SVN,指出 Git 支持离线操作、分支廉价、功能丰富,而 SVN 简单易上手。阐述了 Git 的工作区、暂存区、仓库三大概念及常用工作流,重点介绍了在 SVN 环境下使用 Git‑SVN 的关键命令(clone、fetch、rebase、dcommit 等)以及从 SVN 迁移到 Git 的基本步骤。随后系统整理了 Git 的初始化、配置、增删文件、分支管理、提交、拉取、撤销和查询等日常操作命令,并提供了进一步学习的参考资料,帮助开发者快速掌握 Git 基础并在团队中推广使用。

Explain详解与索引最佳实践

Explain是MySQL用于模拟优化器执行SQL、查看执行计划的工具,支持普通、EXPLAIN EXTENDED(提供优化后语句与filtered)和EXPLAIN PARTITIONS(显示访问分区)等变种。Explain输出的列包括id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra等,分别说明查询层次、查询类型、访问的表、访问方式(system、const、eq_ref、ref、range、index、ALL)、可用索引、实际使用的索引、索引字节长度、匹配列或常量、估计行数以及额外信息(Using index、Using where、Using temporary、Using filesort 等)。索引最佳实践包括:使用全值匹配、遵循最左前缀原则、避免在索引列上做函数或类型转换、将日期函数转为范围查询以利用索引、创建覆盖索引以消除回表、尽量避免全表扫描、临时表和文件排序。通过EXPLAIN检查并优化查询,可显著提升MySQL性能。

面试篇【三】

本文系统梳理了面试常见的 Java 与中间件知识点。包括 GC 可达性分析及 GCRoot 定义、对象不可达是否必回收;字符编码演进(ASCII、ISO‑8859‑1、GBK、UTF‑8/16)及 UTF‑8 中文占字节数;静态代理与动态代理的实现与使用场景;异常体系(Error、Checked、Unchecked)和解析/分派机制;equals、hashCode 在 HashMap 中的作用;多态实现条件;对象序列化示例;反射获取类、构造器、方法并调用;注解的定义、元注解及运行时获取;泛型擦除原理;String 不可变性及常量池;Redis 五大数据结构及适用场景;缓存穿透、击穿、雪崩的防御措施;Kafka、RabbitMQ、RocketMQ 在性能、可靠性、可用性上的区别。

深入理解Mysql索引底层数据结构与算法

索引是 MySQL 用来加速查询的有序数据结构,通过 B+Tree(或哈希)可把全表扫描降为几次磁盘 I/O。文章概述了二叉树、红黑树、哈希、B‑Tree 与 B+Tree 的特性,重点说明 B+Tree 只在叶节点存数据、非叶节点仅存键并采用双向链指针,从而提升区间访问效率。随后比较 InnoDB(聚集索引,表数据本身即 B+Tree)和 MyISAM(非聚集索引分离)的文件布局,阐述主键应为整型自增以保持索引稳定。进一步解释二级索引、联合索引的回表过程及左前缀原则,指出冗余索引的产生。最后说明 B 树与 B+Tree 的区别,并论证 MySQL 选用 B+Tree 能降低树高、减少 I/O,从而实现高效查询。

深入理解Mysql锁与事务隔离级别

本文系统阐释了 MySQL 并发控制的核心机制,包括事务的 ACID 特性、脏读/脏写、不可重复读、幻读等并发问题,以及对应的四种事务隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE)与 MVCC、间隙锁、Next‑Key 锁的实现原理。进一步比较了 MyISAM 的表锁与 InnoDB 的行锁、意向锁、共享/排他锁的行为差异,演示了不同隔离级别下的读写冲突和死锁情形,并提供了通过索引、锁粒度、系统状态变量等手段进行锁优化和死锁诊断的实用建议。

Java实现对某一文件夹下的所有txt文件进行两两对比并展示差异

本文展示了如何使用 Java 对指定文件夹下的所有 txt 文件两两配对并输出差异。首先在 D:/txt 目录收集 .txt 文件列表(忽略非 txt 与子目录),随后按顺序每次取相邻的两个文件读取为 UTF‑8 字符串,比较整体相等性并在相同情况下提示。若不同,则按行拆分,分别遍历旧文件和新文件的每一行,对比对应行内容并打印不一致的行号及文本;当新文件行数超过旧文件时亦会输出多余行。代码使用了 Hutool 的集合工具进行空判断,并通过 FileInputStream 读取文件字节。运行后可直观看到每对文件的相同/不同信息以及具体差异行。

微服务接口设计原则

微服务通过原子、独立、去中心化的方式实现业务拆分,接口设计需兼顾高可用、高性能和易维护。关键原则包括:降级兜底、过载保护与流量限流、快速失败与超时、无状态与最少依赖、简洁可靠、分散与隔离、幂等和故障自愈;在分布式环境下根据 CAP 定理在一致性和可用性之间权衡,采用 BASE 理论实现基本可用、软状态和最终一致性。性能上尽量使用无锁数据结构和单线程模型,避免锁竞争。遵循这些原则可构建可靠、弹性、可扩展的微服务接口。

MySQL常见面试题总结

文章系统梳理了MySQL面试常见知识点:索引原理及Hash、B+树区别,聚簇与非聚簇、联合索引顺序与使用场景;事务的ACID特性、四种隔离级别及锁机制;表结构设计要点,如主键选自增、NOT NULL、char/varchar 区别;InnoDB 与 MyISAM 的特性比较;binlog 三种格式、超大分页优化、慢查询分析与分表策略;存储过程优缺点及数据库三范式。

面试篇【二】

本文系统梳理了面试常见的网络、操作系统、Java 并发、JVM、微服务等知识点。包括 TCP 与 UDP 的区别、四次挥手原理、计算机加电流程、Linux 设备文件、同步方式(synchronized、volatile、Lock 等)及可重入锁概念;线程创建、返回值获取、线程池的四种实现、核心参数与拒绝策略;Java8 新特性(Lambda、Stream、Optional 等)及其优缺点;多线程使用场景、并发问题、MyBatis SQL 绑定、虚拟内存工作原理、栈/方法区溢出、类加载五阶段;ThreadLocal 实现原理与典型应用;微服务的定义与特征;以及 MySQL 事务的 ACID 特性。全文突出概念解释与实际应用场景。

面试篇【一】

文章系统梳理了面试常考的技术要点:Spring AOP 动态代理实现原理、JDK8 前后 HashMap 与 ConcurrentHashMap 的结构与扩容机制、线程池大小的 CPU/IO 区分、G1 垃圾回收特性与 OOM 排查、MySQL 事务隔离级别及默认 REPEATABLE_READ、SQL 慢查询优化、缓存穿透/击穿/雪崩的原因与防御、LRU 实现、JVM 堆参数设置、栈队列应用、InnoDB 与 B+ 树索引、MVCC 与 undo log 原理以及索引失效情形。

IDEA 2022.2版本新特性

IDEA 2022.2 引入远程开发模式,后端部署在服务器,前端 thin client 本地使用,通过 SSH 分担重任务提升流畅度;全面支持 Spring 6 与 Spring Boot 3,包括 @AutoConfiguration、@ConfigurationProperties 等新特性;新增 ⌃⇧. /⌃⇧, 快捷键全局调节编辑器字体大小;JSON、YAML、properties 中的 http/https 链接可直接点击打开或生成 HTTP 请求;实验性 GraalVM 原生调试器支持调试本地镜像;Bean Validation 注解的消息属性支持引用与折叠;其他改进包括 Groovy 集成查询、升级内置 Kubernetes/Docker、运行当前文件无需配置、导入受信任 SSL 证书、HTTP 客户端优化、JBR11→JBR17、代码检查与补全增强等。

解决SpringBoot打成jar包无法加载resources下文件的问题

文章介绍了SpringBoot 打成 jar 包后在 Linux 环境中无法直接读取 resources 目录下文件(如 application.yml、ip2region.db)的常见问题,并提供了解决方案。核心思路是使用 Spring 提供的 PathMatchingResourcePatternResolver 获取资源对象,再通过 Apache Commons IO 的 FileUtils.copyInputStreamToFile 将资源流写入本地文件,从而实现对 jar 包内部资源的读取。文中给出完整代码示例,并列出所需的核心依赖(spring‑core 与 commons‑io),帮助开发者在部署时顺利加载 resources 中的文件。