mysql 数据去重用DISTINCT还是GROUP BY?
在数据去重时,DISTINCT 和 GROUP BY 都可以实现去重功能,但它们在语义、性能和功能上有重要区别: 1. 基本用法对比 DISTINCT -- 简单去重 SELECT DISTINCT department, job_title FROM employees; -- 与聚合函数结合 SELECT COUNT(DISTINCT depa…
|
571 字
|
5 分钟
为什么重写 equals()就必须要同时重写 hashCode()?
这是一个非常经典的Java面试题。重写 equals() 时必须重写 hashCode() 主要是为了维护 hashCode方法的通用约定,确保基于哈希的集合(如 HashMap、HashSet、Hashtable)能够正常工作。 根本原因:hashCode 方法的约定 在 Object类的规范中,hashCode()方法有以下重要约定: 一致性:…
|
720 字
|
6 分钟
Redis是如何实现IO多路复用的?
Redis 通过使用操作系统提供的 IO 多路复用 机制来实现高性能的网络通信,使得单个线程能够同时处理多个客户端连接。以下是其核心实现方式: 1. 支持的 IO 多路复用模型 Redis 在运行时自动选择系统最高效的多路复用模型(按优先级): epoll(Linux) kqueue(FreeBSD/macOS) select(跨平台,但效率较低…
|
752 字
|
4 分钟
有三个线程T1,T2,T3 怎么确保都按顺序执行?
确保多个线程按顺序执行(T1→T2→T3)是常见的线程同步问题。以下是几种解决方案: 1. 使用Thread.join()(最简单) public class ThreadJoinExample { public static void main(String[] args) throws InterruptedException { Th…
|
591 字
|
17 分钟
springboot如何解决跨域问题?
在Spring Boot中解决跨域问题有几种常用方法,以下是详细的解决方案: 1. 使用@CrossOrigin注解(局部配置) 在控制器类或方法上添加注解 // 在控制器类上使用 @RestController @CrossOrigin(origins = "http://localhost:3000") @RequestMapping("/ap…
|
496 字
|
9 分钟
Java 中 final、finally 和 finalize 各有什么区别?
在Java中,final、finally 和 finalize 是完全不同的三个概念,主要区别如下: 1. final(关键字) 作用:用于声明不可变的实体 修饰变量:变量一旦初始化就不能被修改(基本类型值不能变,引用类型引用不能变) 修饰方法:方法不能被子类重写(override) 修饰类:类不能被继承 // 1. final变量 final …
|
566 字
|
5 分钟
Java 中 String、StringBuffer 和 StringBuilder 的区别是什么?
在 Java 中,String、StringBuffer和 StringBuilder都是用于处理字符串的类,但它们在可变性、线程安全性和性能方面有重要区别。以下是详细的对比: 1. String(字符串常量) 不可变性:String对象创建后不可改变,任何修改操作都会生成新的对象 线程安全:由于不可变,天生线程安全 存储位置:字符串常量池(字面量…
|
754 字
|
5 分钟
Redis 红锁能解决死锁问题吗?
这是一个非常经典的问题。简单来说,红锁(RedLock)本身并不能完全、通用地解决死锁问题,但它通过“自动过期”机制,可以预防和解决由锁持有者崩溃或长时间阻塞而导致的一种特定死锁场景。 下面我们来详细分解一下: 1. 什么是死锁? 死锁通常指在并发系统中,两个或以上的进程/线程因竞争资源而陷入的一种相互等待的僵局。经典的产生条件有四个(必须同时满足…
|
1359 字
|
6 分钟
为什么不能用浮点型表示金额?
这是一个非常重要且常见的问题。简单来说,因为浮点型(如 float、double)是二进制近似值,无法精确表示十进制小数,而金融计算要求绝对精确,一分一厘都不能有误差。 下面从原理、问题和解决方案三个方面详细解释: 1. 根本原因:二进制浮点数的固有缺陷 计算机使用二进制(0和1)存储数字。浮点数(如IEEE 754标准)通过“符号位+指数+尾数”…
|
1081 字
|
5 分钟
Redis的LFU淘汰策略如何解决时效性问题?
Redis 的 LFU(Least Frequently Used)淘汰策略通过引入时间衰减机制和概率递增算法,巧妙地平衡了访问频率与访问时效性,有效避免了“频率老化”问题。 下表清晰地展示了解决时效性问题的两个核心机制: 机制名称解决的核心问题实现方式配置参数时间衰减 (Time Decay)过去频繁访问但现在不再活跃的键(频率老化)根据时间间…
|
1285 字
|
5 分钟