加载中

Java

文章分类

浏览该分类下的所有文章

237 篇文章 20

Redis 知识总结

Redis提供丰富数据结构(string、hash、list、set、zset)并原生支持集群,区别于只支持键值的memcached。采用单线程+IO多路复用,实现高效内存操作,使用定期+惰性删除及多种maxmemory淘汰策略。主从复制实现读写分离,Sentinel提供监控、故障转移和配置通知,需≥3节点保证多数原则。持久化有RDB快照和AOF日志两种方式,各有优缺点,常结合使用。RedisCluster通过一致性哈希分片、gossip协议实现多主多从横向扩展和自动故障恢复,适用于大并发场景。

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

消息队列通过解耦、异步、削峰填谷实现分布式系统的高性能、高可用和最终一致性,常用模式有点对点和发布/订阅。选型时需关注顺序性、伸缩性、留存、容错、可靠性、时序、吞吐量和路由等指标。Kafka 采用分区+副本的发布/订阅架构,优势是高吞吐、低延迟和可扩展,缺点是全局有序和延时消息支持不足;适用于日志收集、实时分析等大流量场景。RabbitMQ 基于 AMQP,提供丰富的 Exchange 类型和可靠的消息路由,易用且支持定时消息,但学习成本高、性能不如 Kafka;适合业务流量中等且功能需求完整的场景。Pulsar 采用计算存储分离、BookKeeper 持久化,支持灵活扩容、跨地域复制和延时消息,兼容流式和队列消费;适用于云原生、多租户的大规模实时传输。RocketMQ 具备高可靠性、顺序队列和多协议支持,支持 PUSH/PULL 与集群/广播消费,适合金融等对可靠性要求极高的业务。

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

Git 是分布式、支持离线操作且分支廉价的版本控制系统,SVN 为集中式、需联网且分支成本高。Git 的工作区、暂存区和本地仓库构成核心工作流,常用命令包括 init、clone、add、commit、push、pull、branch、merge、rebase、stash 等;Git‑SVN 让本地使用 Git 功能并同步到 SVN 服务器,常用操作有 git svn clone、fetch、rebase、dcommit 等。掌握这些基础概念和命令即可完成从 SVN 向 Git 的迁移、分支管理以及日常协作。

Explain详解与索引最佳实践

Explain是MySQL用于模拟优化器执行SQL并返回执行计划的工具,使用explain关键字可查看每张表的访问方式、使用的索引、估计行数及额外信息(type、key、key_len、ref、rows、Extra等),并支持explain extended(提供优化后SQL及filtered)和explain partitions(显示访问的分区)。文章详细解释了各列含义及不同type的含义(system/const、eq_ref、ref、range、index、ALL),以及possible_keys、key、key_len、ref、rows的作用。随后给出索引最佳实践:全值匹配优先、遵循最左前缀法则、避免在索引列上使用函数或类型转换、将日期函数改写为范围查询、合理创建普通或复合索引,以避免全表扫描、临时表或filesort。

面试篇【三】

本文系统梳理了 Java 面试常考点:GC 根与可达性、finalize 机制;字符编码演进及 UTF‑8 中文字节数;静态/动态代理实现与适用场景;异常体系结构;解析与分派区别;equals、hashCode 与 HashMap 关系;多态实现条件;对象序列化方式;反射基本用法;注解定义及元注解作用;泛型擦除原理;String 不可变性及常量池;Redis 五大数据结构及使用场景;缓存穿透、击穿、雪崩的防护方案;Kafka、RabbitMQ、RocketMQ 在性能、可靠性和可用性上的对比。

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

本文系统阐述了 MySQL 索引的作用与实现原理。首先说明索引通过有序数据结构(如红黑树、B‑Tree、B+Tree)显著降低查询次数。随后比较了二叉树、红黑树、Hash 与 B‑Tree 的特性,重点解释了 B+Tree 在叶节点存数据、双向指针以及更高扇出等优势,使其成为 InnoDB 聚集索引的底层结构。文中进一步区分了 InnoDB 与 MyISAM 的存储方式,阐明主键、二级索引和联合索引的构建、回表过程以及左前缀原则,强调使用自增整型主键的性能与空间优势。最后总结 B+Tree 相比 B‑Tree 能减少树高、降低 IO,从而提升查询效率。

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

本文系统阐述了 MySQL 并发事务产生的脏写、脏读、不可重复读、幻读等一致性问题,并通过 ACID 原则、事务隔离级别(读未提交、读已提交、可重复读、串行化)以及锁机制(表锁、行锁、意向锁、间隙锁、Next‑Key 锁)进行深入分析。重点比较了 MyISAM 的表级锁与 InnoDB 的行级锁及 MVCC 实现,演示了不同隔离级别下的读写行为、死锁产生与检测,并提供了通过索引、锁范围优化及监控指标(innodb_row_lock*)提升并发性能的实用建议。

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

本文演示了如何使用 Java 对指定文件夹下的所有 .txt 文件两两配对进行内容比较并输出差异。首先在 D:/txt 目录准备若干 txt 文件(示例中包括完全相同的 1.txt、2.txt),随后通过 `getFileName` 方法读取该目录仅限 .txt 的文件路径列表。主程序按顺序每次取相邻的两个文件,使用 `FileInputStream` 读取字节并转为 UTF‑8 字符串,先判断整体是否相同,若不同则按行拆分 (`split("\n")`) 并逐行比较,分别打印旧文件和新文件的不同或新增行。代码还处理空文件夹、非 txt 文件以及目录不存在等异常情况。运行后可直观看到每对文件的相同/不同情况及具体行差异。

微服务接口设计原则

微服务接口设计围绕高可用、高性能、易维护三大目标展开。高可用通过降级兜底、过载保护、流量限流、快速失败、无状态、最少依赖、简洁可靠、分散与隔离、幂等、故障自愈等手段实现,并依据 CAP/BASE 理论在一致性与可用性之间做权衡。高性能强调无锁编程和单线程/多 reactor 模型,避免锁竞争导致的性能瓶颈。遵循这些原则,可构建可靠、可扩展、低风险的微服务体系。

MySQL常见面试题总结

文章系统梳理了 MySQL 面试常见知识点。阐述索引原理及 Hash、B+树的优劣,聚簇与非聚簇索引、复合索引顺序及 EXPLAIN 判断索引使用;介绍事务的 ACID 特性、四种隔离级别及 InnoDB 默认可重复读、锁的类型与粒度;讨论表结构设计要点,如主键选自增、避免 UUID、字段 NOT NULL、char 与 varchar 的取舍;对比 InnoDB 与 MyISAM 存储引擎;补充 binlog 三种格式、超大分页优化、慢查询定位、水平/垂直分表、存储过程利弊以及三范式要求。

面试篇【二】

本文系统梳理了面试常见的技术要点,包括 TCP/UDP 区别及四次挥手、计算机开机流程、Linux 设备文件、Java 多线程同步方式、synchronized 与 ReentrantLock 的可重入性、线程创建、返回值获取、线程池的创建方式、核心参数及拒绝策略、Java8 新特性、何时使用多线程及并发问题、MyBatis SQL 绑定、虚拟内存原理、栈/方法区溢出、JVM 类加载过程、ThreadLocal 实现原理与场景、微服务架构特征以及 Lambda 表达式的作用与局限等,为求职者提供全面的知识点复习。

面试篇【一】

本文概述Spring AOP的JDK Proxy与Cglib代理机制、HashMap在JDK1.8前后从数组‑链表到红黑树的实现与扩容规则、ConcurrentHashMap从分段锁到CAS+Node的演进,以及CPU密集型任务(N+1)和IO密集型任务(2N)的线程池 sizing 公式。随后介绍G1 GC的并行‑分代‑可预测停顿特性与OOM排查方法、MySQL四种事务隔离级别(默认REPEATABLE_READ)及SQL慢查询、索引失效分析。再论缓存穿透、击穿、雪崩的成因与防御、LRU实现原理、JVM堆参数要点、栈/队列典型应用、InnoDB为何为默认引擎、B+树结构及MVCC、undo‑log回滚机制。