加载中

Java

文章分类

浏览该分类下的所有文章

237 篇文章 20

Redis 知识总结

Redis 支持丰富数据结构并原生集群,采用单线程 + IO 复用实现高效内存操作,使用定期+惰性删除和多种内存淘汰策略保证键过期。主从复制配合哨兵提供读写分离、高可用与故障转移,持久化方案包括 RDB 快照和 AOF 日志,各有优势,可组合使用。RedisCluster 通过一致性哈希分片、gossip 协议和自动主备切换,实现横向扩展和容错。

消息队列基本原理和选型对比

消息队列用于解耦、异步处理和削峰填谷,常见模式有点对点和发布/订阅。选型时关注顺序、伸缩、留存、容错、可靠性、时序、吞吐和路由等指标。Kafka 采用分区+副本,吞吐高、持久可靠,但仅分区内有序且不支持延时消息;适合日志收集、流式处理。RabbitMQ 基于 AMQP,支持多种 Exchange(direct、fanout、topic),功能完整、易用,适合业务流量中等且需定时、查询等高级特性。Pulsar 将计算与存储分离,支持无缝扩容、跨地域复制和延时消息,兼容流和队列模型,适合云原生大规模实时传输。RocketMQ 具备高可靠、顺序队列和多协议支持,适用于金融等对可靠性要求极高的场景。通过对比可根据业务需求选择最合适的中间件。

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

本文对比了分布式的 Git 与集中式的 SVN,阐述了 Git 的离线工作、廉价分支和暂存区等优势,并详细列出 Git 与 Git‑SVN 常用命令,包括仓库初始化、配置、增删文件、分支管理、提交、拉取、撤销和查询等操作,提供了别名配置和 git‑svn 的克隆、fetch、rebase、dcommit 等流程,最后提醒迁移、分支模型等需进一步学习,并给出参考资料。

Explain详解与索引最佳实践

本文系统阐述了 MySQL 的 EXPLAIN 用法及其变体(EXPLAIN EXTENDED、EXPLAIN PARTITIONS),详细解释了执行计划各列含义(id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra)及其对查询性能的指示。通过示例展示了不同访问类型(const、eq_ref、ref、range、index、ALL)的含义和优化方向,并说明了如何利用覆盖索引、临时表、filesort 等信息定位瓶颈。随后给出索引设计最佳实践,包括全值匹配、最左前缀原则、避免在索引列上做函数或类型转换、合理使用范围查询等,以帮助在实际业务中构建高效的查询结构。

面试篇【三】

文章梳理了面试常见的 Java 知识点,包括 GC 根与不可达对象的回收规则、字符编码演进及 UTF‑8 中文字节数、静态/动态代理的区别与实现、异常体系结构、解析与分派的概念、equals 与 hashCode 在 HashMap 中的作用、多态实现条件、对象序列化方法、反射与注解的使用及元注解作用、泛型擦除原理、String 不可变性的原因与内部实现、Redis 五大数据结构及适用场景、缓存穿透/击穿/雪崩的防护措施,以及 Kafka、RabbitMQ、RocketMQ 在性能、可靠性和可用性上的对比。

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

MySQL索引通过有序的数据结构提升查询效率。文章先阐述有索引与无索引的对比,说明索引可将全表扫描降为极少的磁盘IO。随后讲解常用索引实现:二叉树、红黑树、哈希和B‑Tree,其中B+Tree因叶节点只存数据、内部节点仅存键且指针多、支持顺序遍历而被InnoDB采用。对比InnoDB聚集索引(数据即主键B+Tree)与MyISAM非聚集索引的文件组织,强调必须建整型自增主键以保持结构稳定。再说明二级索引、联合索引的工作原理及“左前缀”规则,指出冗余索引的产生。最后概述B树与B+树的区别,解释MySQL为何选用B+树以降低树高、减少IO。

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

本文系统阐述了 MySQL 并发事务导致的脏读、不可重复读、幻读等一致性问题,介绍了事务的 ACID 特性及四种隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE)及其实现原理。随后深入分析了 MyISAM 表锁与 InnoDB 行锁的区别,说明了共享锁、排它锁、意向锁、间隙锁和临键锁的作用与适用场景,并通过实例演示了不同隔离级别下的读写行为、幻读防护以及死锁产生与检测。最后给出锁监控指标和优化建议,强调索引设计、锁粒度控制和避免无索引行锁升级为表锁,以提升并发性能。

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

本文演示了使用 Java 实现对指定文件夹下所有 .txt 文件两两配对并逐行比较差异的完整过程。首先在 D:/txt 目录准备若干 txt 与其他类型文件,代码通过 `getFileName` 方法遍历目录仅收集 .txt 文件路径。随后在 `main` 中按顺序每次取相邻两个文件读取为 UTF‑8 字符串,若内容相同直接输出“完全相同”。若不同,则分别按行拆分,比较每行内容并打印出旧文件和新文件的差异行号及文本。程序还处理文件夹不存在或为空的情况。整体思路简单直观,适合作为 Java 基础文件 I/O 与字符串比较的练手案例。

微服务接口设计原则

微服务通过拆分业务实现组件化、独立部署,接口设计是保证系统高可用、高性能、易维护的关键。文章提出多项原则:降级兜底和过载保护提升可靠性;流量控制、快速失败、设置超时防止雪崩;尽量保持无状态、最少依赖、简洁可靠的 API;分散与隔离风险;幂等设计防止重复操作;故障自愈机制保证恢复;遵循 CAP 与 BASE 在一致性与可用性之间权衡;采用无锁数据结构提升并发性能。遵循这些原则可构建弹性、可扩展的微服务系统。

MySQL常见面试题总结

MySQL面试题涵盖索引、事务、锁、表结构、存储引擎等。索引方面说明Hash与B+树优劣、聚簇与非聚簇、复合索引顺序及EXPLAIN判断;事务阐述ACID及四种隔离级别、行/表锁机制;表设计强调主键使用自增ID、NOT NULL、char存储定长字段;存储引擎推荐InnoDB并对比MyISAM;补充binlog三种模式、超大分页优化、慢查询分析与分表实践、存储过程利弊以及三范式要求。

面试篇【二】

本文以面试问答形式,系统梳理了网络协议(TCP/UDP及四次挥手)、操作系统启动、Linux 设备文件、Java 多线程同步方式、可重入锁、线程创建与返回值、线程池构造及拒绝策略、Java 8 新特性(lambda、流等)、何时使用多线程及并发问题、MyBatis SQL 绑定、虚拟内存原理、JVM 栈/方法区溢出与类加载、ThreadLocal 实现原理与场景、微服务架构特征以及 MySQL 事务 ACID 等核心概念。

面试篇【一】

文章系统梳理了Spring AOP的动态代理实现、JDK7/8中HashMap和ConcurrentHashMap的内部结构与扩容机制、CPU 与IO密集型任务的线程池配置、G1 GC特性及OOM排查、MySQL事务隔离级别与默认REPEATABLE_READ、SQL慢查询优化、缓存穿透、击穿、雪崩的原理与防御、LRU实现、JVM堆参数调优、栈/队列应用场景、InnoDB为何为默认引擎、B+树索引结构、MVCC及undo日志回滚、索引失效情况等要点。