标签: 面试题

58 篇文章

MySQL中如何优化多表JOIN?
MySQL多表JOIN的优化是数据库性能调优的核心环节,主要从索引设计、驱动表选择、执行计划分析、SQL写法优化四个维度入手。 一、索引优化:JOIN性能的基石 关联字段必须建索引,这是JOIN优化的首要原则。被驱动表的JOIN字段如果没有索引,MySQL会执行全表扫描,性能急剧下降。例如,orders o JOIN users u ON o.us…
为什么互联网大厂不推荐使用多表 join?
互联网大厂不推荐使用多表JOIN,主要基于性能瓶颈、可扩展性差、与微服务架构冲突三大核心原因。在高并发、海量数据的互联网场景下,JOIN操作会产生大量中间结果集,消耗大量CPU和内存资源,容易成为慢查询拖垮数据库。在分库分表架构下,跨物理节点的JOIN查询变得异常复杂甚至无法执行,同时强依赖其他服务的数据库表进行JOIN也违反了微服务边界的封装性。…
在java中HashMap是怎么解决哈希冲突的?
HashMap 主要通过以下几种方式解决哈希冲突: 1. 链表法(拉链法) 这是HashMap最基本的冲突解决方式: 每个数组元素(桶)存储一个链表 当多个key的哈希值相同(哈希碰撞)时,这些键值对会以链表形式存储在同一个桶中 新元素插入到链表头部(Java 8改为尾部插入) // 简化示意图 [0] -> null [1]…
Redisson分布式锁为什么要用lua脚本实现,而不用事务?
Redisson使用Lua脚本实现分布式锁主要是为了解决原子性、网络开销和事务局限性三个核心问题。下面详细解释: 1. 原子性保证 这是最主要的原因。Lua脚本在Redis中执行时是原子性的,整个脚本在执行过程中不会被其他命令打断。 -- Redisson的加锁Lua脚本示例 if (redis.call('exists', KEYS[1]…
为什么重写 equals()就必须要同时重写 hashCode()?
这是一个非常经典的Java面试题。重写 equals() 时必须重写 hashCode() 主要是为了维护 hashCode方法的通用约定,确保基于哈希的集合(如 HashMap、HashSet、Hashtable)能够正常工作。 根本原因:hashCode 方法的约定 在 Object类的规范中,hashCode()方法有以下重要约定: 一致性:…
Redis是如何实现IO多路复用的?
Redis 通过使用操作系统提供的 IO 多路复用​ 机制来实现高性能的网络通信,使得单个线程能够同时处理多个客户端连接。以下是其核心实现方式: 1. 支持的 IO 多路复用模型 Redis 在运行时自动选择系统最高效的多路复用模型(按优先级): epoll(Linux) kqueue(FreeBSD/macOS) select(跨平台,但效率较低…