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

最近更新

Java 2022-07-31

深入理解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 阅读全文
Java 2022-08-10

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

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

面试 MySQL 阅读全文
Java 2022-08-03

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

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

算法 2022-08-06

NC100 把字符串转换成整数(atoi)

实现字符串转整数(atoi)功能,要求自行编写 `StrToInt`,不使用库函数。算法步骤:①去除首尾空格;②识别首个非空字符的正负号,默认正;③从符号后连续读取数字构成有效整数,遇非数字即停止;④若无有效数字返回 0;⑤结果超出 32 位有符号整数范围时截断到 `[-2^31, 2^31‑1]`。代码采用先去除空格、判断首字符合法性、记录数字起始位置,并统一以负数形式累加防止溢出,最后根据符号返回相应正负值。示例展示了普通、带空格、含多余字符、无数字及溢出等情况的处理。

NowCoder 阅读全文
Java 2022-08-10

微服务接口设计原则

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

SpringCloud 阅读全文
Java 2022-08-11

MySQL常见面试题总结

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

面试 MySQL 阅读全文