分类: 面试题

58 篇文章

为什么互联网大厂不推荐使用多表 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(跨平台,但效率较低…
Java 中 final、finally 和 finalize 各有什么区别?
在Java中,final、finally 和 finalize​ 是完全不同的三个概念,主要区别如下: 1. final(关键字) 作用:用于声明不可变的实体 修饰变量:变量一旦初始化就不能被修改(基本类型值不能变,引用类型引用不能变) 修饰方法:方法不能被子类重写(override) 修饰类:类不能被继承 // 1. final变量 final …