【Java】高频面试题

server/2025/3/18 11:20:54/

1. B树和B+树的区别

  • 结构差异
    • B树:所有节点都存储数据,非叶子节点也包含键值和数据指针。
    • B+树:只有叶子节点存储数据,非叶子节点仅作为索引(键值+指针)。叶子节点通过链表连接。
  • 查询效率
    • B树可能在非叶子节点命中数据,查询不稳定。
    • B+树必须查找到叶子节点,查询路径长度一致,适合范围查询(链表支持顺序遍历)。
  • 存储空间
    • B+树非叶子节点更小,可以缓存更多索引,减少磁盘I/O。
  • 应用场景
    • B树适用于文件系统(如早期NTFS)。
    • B+树是数据库索引的主流结构(如MySQL InnoDB)。

2. 聚簇索引 vs 非聚簇索引

  • 聚簇索引
    • 数据存储:索引的叶子节点是数据行本身,数据按主键顺序物理存储(如InnoDB)。
    • 性能:范围查询快,但插入/更新可能触发页分裂。
    • 数量限制:一张表只能有一个聚簇索引。
  • 非聚簇索引
    • 数据存储:叶子节点存储数据行的地址(如MyISAM)或主键(如InnoDB二级索引)。
    • 性能:需要回表查询,多一次I/O。
    • 数量限制:可以创建多个。

3. SQL优化思路

  • 索引优化
    • 避免索引失效(如函数操作、隐式类型转换)。
    • 联合索引遵循最左前缀原则。
  • 查询优化
    • 减少SELECT *,使用覆盖索引。
    • 避免子查询嵌套过深,改用JOIN
  • 分库分表
    • 垂直拆分(按业务模块)、水平拆分(按数据范围或哈希)。
  • 执行计划分析
    • 使用EXPLAIN查看是否命中索引、扫描行数等。
  • 数据库设计
    • 避免大事务、减少锁竞争,合理使用冗余字段。

4. Redis值对象与数据结构的关系

  • 值对象类型对应底层数据结构:
    • String:简单动态字符串(SDS)。
    • List:双向链表或ziplist(压缩列表)。
    • Hash:哈希表或ziplist(小数据时)。
    • Set:哈希表或intset(整数集合)。
    • ZSet:跳表(SkipList) + 哈希表。
  • 自动优化:Redis根据数据量动态选择高效结构(如小数据用ziplist节省内存)。

5. 缓存穿透、击穿、雪崩

  • 穿透(查询不存在的数据):
    • 应对:布隆过滤器拦截非法请求,缓存空值。
  • 击穿(热点数据过期瞬间高并发):
    • 应对:互斥锁(如Redis的SETNX),永不过期+异步更新。
  • 雪崩(大量缓存同时失效):
    • 应对:随机过期时间,集群部署保证高可用。

6. gRPC vs HTTP

  • 协议层
    • gRPC基于HTTP/2(多路复用、头部压缩),HTTP API通常基于HTTP/1.1。
  • 数据格式
    • gRPC使用Protobuf(二进制,高效序列化)。
    • HTTP常用JSON/XML(文本,冗余高)。
  • 功能特性
    • gRPC支持双向流、强类型接口定义,适合微服务间通信。
    • HTTP RESTful API更通用,但对复杂场景支持较弱。

7. AOF vs RDB

  • RDB
    • 机制:定时生成数据快照(二进制文件)。
    • 优点:恢复快、文件小。
    • 缺点:可能丢失最后一次快照后的数据。
  • AOF
    • 机制:记录所有写命令(文本追加)。
    • 优点:数据更安全(可配置同步频率)。
    • 缺点:文件大、恢复慢。
  • 混合模式(Redis 4.0+):结合两者,RDB做全量备份,AOF记录增量。

8. MySQL分表与分区表

  • 分表实现
    • 水平拆分:按规则(如用户ID取模)将数据分布到多个表。
    • 路由策略:应用层代码或中间件(如ShardingSphere)管理查询路由。
  • 分区表
    • 内置支持:按范围(RANGE)、哈希(HASH)等逻辑分区,物理存储透明。
    • 应用场景
      • 历史数据归档(按时间分区)。
      • 减少单个表的数据量,提升查询效率。

9. MyISAM vs InnoDB

  • 核心区别
    • 事务:InnoDB支持ACID,MyISAM不支持。
    • 锁粒度:InnoDB支持行锁,MyISAM仅表锁。
    • 外键:InnoDB支持,MyISAM不支持。
  • 其他引擎
    • Memory:数据存内存,重启丢失,适合临时表。
    • Archive:高压缩比,仅支持插入/查询,适合日志存储。

10. Redis数据结构及应用场景

  • String:缓存、计数器(INCR)。
  • List:消息队列(LPUSH/RPOP)、时间线。
  • Hash:存储对象(如用户信息)。
  • Set:去重(如点赞用户)、交集/并集运算。
  • ZSet:排行榜(按分数排序)、延迟队列(按时间戳排序)。

11. Redis为什么快?

  • 内存操作:数据存储在内存,读写无需磁盘I/O。
  • 单线程模型:避免多线程上下文切换和锁竞争。
  • I/O多路复用:基于epoll/kqueue高效处理并发连接。
  • 高效数据结构:如跳表(ZSet)、哈希表(快速查找)、ziplist(紧凑存储)。

以上总结涵盖了每个问题的核心要点,适合面试快速回顾。实际应用中需结合场景灵活运用。


http://www.ppmy.cn/server/175940.html

相关文章

光伏储能:未来能源的黄金搭档

光伏储能正在重塑全球能源格局。随着技术进步和成本下降,这一组合已成为清洁能源领域最具潜力的解决方案。 光伏发电受天气影响大,发电不稳定。储能系统的加入完美解决了这一难题。白天储存的太阳能,可以在夜晚或阴天时稳定输出,…

测试工作内容

测试工作内容 1、阅读需求文档2、测试计划3、测试用例4、测试执行5、测试报告6、回归测试 1、阅读需求文档 系统需求可以明白何为正确2、测试计划 根据需求文档里的模块划分每一项工作 开始时间 结束时间排期---测试负责人【测试组长、测试经理、项目经理】3、测试用例 根据分…

01-1 音视频知识学习(音频)

音频常见名词采样频率:每秒钟采样的点的个数。 常用的采样频率有:22000(22kHz):无线广播。 44100(44.1kHz):CD音质。 48000(48kHz): 数字电视,DVD。 96000(96kHz):蓝光,高清DVD。 192000(192kHz):蓝光,高清DVD。采样精度(采样深度):每个“样本点”的大小…

SAP -ABAP:SAP 业务能力培养体系(结构化学习路径)

Ⅰ. 知识筑基阶段 1.1 SAP生态系统全景认知 ✅ 核心产品线架构 产品类型代表方案适用场景传统ERPECC 6.0中大型企业本地化部署智能ERPS/4HANA实时业务与数字化转型云解决方案SuccessFactors/AribaHR/采购云化行业解决方案IS-Retail/IS-Auto垂直领域深度适配 ✅ 系统交互基础…

【第15届蓝桥杯】软件赛CB组省赛

个人主页:Guiat 归属专栏:算法竞赛真题题解 文章目录 A. 握手问题(填空题)B. 小球反弹(填空题)C. 好数D. R格式E. 宝石组合F. 数字接龙G. 爬山H. 拔河 正文 总共8道题。 A. 握手问题(填空题&…

计算机网络-1-1计算机网络体系结构

第一章计算机网络体系结构 绪论 《计算机网络》学什么?——数据如何通过网络正确、可靠地从A传送到B 【考纲内容】 (一)计算机网络概述 计算机网络的概念、组成与功能;计算机网络的分类; 计算机网络的性能指标 (二)计算机网…

11 Collection集合、Map集合:分类、功能、遍历、底层原理,Stream流:获取、中间方法、终结方法 (黑马Java视频笔记)

文章目录 集合1. 认识集合2. Collection单列集合特点3. Collection单列集合的常用功能4. Collection的遍历方式1)迭代器遍历 Iterator2)增强for循环(for...each遍历)3)Lambda表达式:forEach(&am…

TP钱包密码忘记了怎么办?(TokenPocket)——技术角度解决方案分析

​ TP钱包(TokenPocket) 作为一款多链支持的数字货币钱包,广泛用于存储和管理各种加密资产。尽管它在操作上相对简便,但在用户未能妥善保存重要信息(如密码或助记词)的情况下,忘记密码会带来不小…