- 博客(60)
- 资源 (1)
- 问答 (9)
- 收藏
- 关注
原创 分布式面试题库
回答:脑裂是指分布式系统因网络分区,分裂成多个独立部分,每部分都认为自己是主节点,导致数据不一致。解决方案Quorum 机制:只有获得大多数节点支持才能成为主节点:每次选主生成递增的 token,旧主的操作会被拒绝Lease 机制:主节点持有租约,过期前其他节点不能成为主STONITH:Shoot The Other Node In The Head,强制关闭疑似故障节点Redis Sentinel/Cluster、ZooKeeper、etcd 都通过 Quorum 机制避免脑裂。
2025-11-28 11:45:54
327
原创 MySQL 面试题库
总结:批量数据入库是指将多条数据一次性插入数据库,而不是逐条插入。相比单条插入,批量插入可以减少网络往返次数、减少事务开销、提高插入性能。MySQL 支持多种批量插入方式,包括、批量 PreparedStatement 等。总结:全量同步是指每次同步都传输所有数据,增量同步是指只同步发生变化的数据。全量同步实现简单、数据一致性好,但数据量大、耗时较长;增量同步数据量小、速度快,但实现复杂、需要维护同步状态。实际应用中通常结合使用:首次全量同步,后续增量同步。总结。
2025-11-25 23:39:45
318
原创 Redis 面试题库
Redis Big Key 是指占用内存较大的 key,通常指单个 key 的 value 大小超过 10KB,或者包含大量元素的集合类型。Big Key 会导致内存占用高、阻塞操作、网络传输慢、主从同步延迟等问题。解决方案包括:1. 拆分大 key,将大 key 拆分为多个小 key;2. 压缩 value,使用压缩算法减少内存占用;3. 设置过期时间,定期清理;4. 使用合适的数据结构,避免使用不必要的大集合;5. 监控和预防,建立监控机制,及时发现和处理 Big Key。
2025-11-25 23:39:12
331
原创 Spring 面试题库
总结:循环依赖是指两个或多个 Bean 相互依赖,形成循环引用。Spring 通过三级缓存解决循环依赖:一级缓存(singletonObjects)存储完整的 Bean,二级缓存(earlySingletonObjects)存储提前暴露的 Bean,三级缓存(singletonFactories)存储 Bean 工厂。解决原理:在 Bean 创建过程中,提前暴露 ObjectFactory 到三级缓存,当另一个 Bean 需要注入时,通过三级缓存获取早期引用。
2025-11-25 23:38:41
338
原创 Spring Boot 面试题库
总结:Spring Boot 是 Spring 框架的扩展,旨在简化 Spring 应用的开发和部署。Spring Boot 通过约定优于配置的理念,提供了开箱即用的功能,减少了大量的 XML 配置。核心特性包括:1. 自动配置(Auto Configuration),根据类路径自动配置 Bean;2. Starter 依赖,简化依赖管理;3. 内嵌服务器,可以打包成 jar 直接运行;4. 生产就绪特性,提供监控、健康检查等功能;5. 无需 XML 配置,使用 Java 配置和注解;
2025-11-25 23:38:01
266
原创 Spring Cloud 面试题库
总结:防悬挂是指防止已回滚的事务分支再次提交,空回滚是指在没有收到 Try 请求的情况下执行回滚操作。需要使用分布式事务的场景:跨数据库、跨服务、跨系统的事务操作。分布式事务方案:2PC、3PC、TCC、Saga、Seata(AT、TCC、Saga、XA)。Seata 是阿里开源的分布式事务解决方案,支持 AT、TCC、Saga、XA 四种模式。
2025-11-25 23:37:12
304
原创 Sentinel 限流算法详解
滑动窗口算法(默认)令牌桶算法漏桶算法预热限流算法排队等待算法滑动窗口:Sentinel 默认算法,精确控制 QPS令牌桶:允许突发流量,适合流量波动大的场景漏桶:严格控制输出速率,适合需要平滑输出的场景预热限流:保护系统冷启动排队等待:保证请求不丢失。
2025-11-19 14:33:38
1006
原创 MySQL 事务隔离性
事务隔离性(Isolation)是指多个并发事务之间相互隔离,一个事务的执行不应该影响其他事务的执行。实现方式不加锁不使用 MVCC保证❌ 不保证隔离性锁机制共享锁(S 锁):允许读取,不允许修改排他锁(X 锁):不允许读取和修改间隙锁:防止幻读临键锁:行锁 + 间隙锁MVCC隐藏字段:DB_TRX_ID、DB_ROLL_PTRUndo Log:保存历史版本Read View:判断数据可见性。
2025-11-19 10:39:39
692
原创 ActiveMQ 核心知识点
排名问题核心要点1消息模型Queue/Topic、P2P/发布订阅2消息确认机制4种模式、使用场景、可靠性3消息可靠性3个维度、持久化、重投递4消息丢失/重复原因、解决方案、幂等性5性能优化异步发送、预取、连接池6高可用主从模式、集群模式7性能、功能、场景选型8消息堆积原因、处理方案。
2025-11-11 10:52:59
421
原创 RabbitMQ 核心知识点
Exchange特点使用场景性能Direct精确匹配点对点消息⭐⭐⭐⭐⭐Fanout广播广播通知⭐⭐⭐⭐⭐Topic模式匹配复杂路由 ⭐推荐⭐⭐⭐⭐Headers属性匹配复杂匹配(少用)⭐⭐⭐消息被拒绝(basicReject/basicNack)且 requeue=false消息过期(TTL超时)队列达到最大长度排名知识点核心要点⭐⭐⭐⭐⭐Exchange类型Direct/Fanout/Topic/Headers,使用场景⭐⭐⭐⭐⭐消息可靠性。
2025-11-11 10:52:11
1100
原创 RocketMQ核心知识点
优先级问题核心要点⭐⭐⭐⭐⭐RocketMQ架构4个组件、职责、通信方式⭐⭐⭐⭐⭐消息可靠性3个维度、刷盘、主从复制、重试⭐⭐⭐⭐⭐消息存储CommitLog、ConsumeQueue、顺序写⭐⭐⭐⭐⭐消息堆积原因、应急方案、预防措施⭐⭐⭐⭐⭐事务消息Half消息、本地事务、回查机制⭐⭐⭐⭐消息顺序分区顺序、MessageQueueSelector⭐⭐⭐⭐消费模式集群消费、广播消费⭐⭐⭐⭐高可用Dledger、主从切换⭐⭐⭐延迟消息。
2025-11-11 10:51:18
848
原创 Netty核心设计模式详解
Reactor模式是一种事件驱动的设计模式,用于处理并发的服务请求。核心思想将I/O事件分离到不同的线程处理- 接收连接(Acceptor)- 读写事件(Handler)传统IO vs Reactor传统阻塞IO:客户端1 → 线程1(阻塞等待)客户端2 → 线程2(阻塞等待)客户端N → 线程N(阻塞等待)问题:线程数 = 连接数,资源耗尽Reactor模式:客户端1 ─┐客户端2 ─┤客户端N ─┴→ Reactor(多路复用) → 少量线程处理优势:少量线程处理大量连接定义。
2025-10-22 11:16:14
725
原创 MySQL锁机制详解
锁(Lock)是数据库用来管理并发访问的机制,防止多个事务同时修改同一数据导致数据不一致。核心作用保证数据一致性实现事务隔离控制并发访问定义:两个或多个事务相互等待对方持有的锁,形成循环等待。经典示例时间线 事务A 事务B-- 持有id=1的锁-- 持有id=2的锁-- 等待id=2的锁 ←-- 等待id=1的锁 ←死锁!
2025-10-21 19:30:51
741
原创 MySQL连接查询(JOIN)详解
JOIN(连接)是用于根据两个或多个表之间的关联关系,组合查询这些表中的数据。核心作用关联多个表的数据避免数据冗余实现数据库的规范化设计内连接返回两个表中满足连接条件的记录,即交集部分。左连接返回左表的所有记录,以及右表中满足连接条件的记录。如果右表没有匹配记录,则显示NULL。右连接返回右表的所有记录,以及左表中满足连接条件的记录。如果左表没有匹配记录,则显示NULL。注意:RIGHT JOIN 是 LEFT JOIN 的镜像,可以相互转换。全连接返回左表和右表的所有记录。
2025-10-21 19:30:07
447
原创 EXPLAIN执行计划详解
EXPLAINMySQL如何执行这条SQL是否使用了索引扫描了多少行数据是否需要临时表或排序指标优良中差需优化typerefrangeindexALLkey显示索引名显示索引名显示索引名显示索引名NULLrows< 100< 1000< 10000< 100000> 100000Extra。
2025-10-21 19:20:04
1010
原创 慢查询优化
慢查询(Slow Query)是指执行时间超过指定阈值的SQL语句。判断标准-- 查看慢查询阈值(默认10秒)-- 临时设置为1秒-- 永久配置(my.cnf)[mysqld]log_queries_not_using_indexes = 1 # 记录未使用索引的查询1. 发现问题:慢查询日志 + 监控2. 分析问题:EXPLAIN + 执行计划3. 定位原因:索引 / SQL / 数据量 / 锁4. 制定方案:索引优化 / SQL改写 / 分表5. 验证效果:性能对比 + 压力测试。
2025-10-21 19:17:46
986
原创 MySQL索引指南
索引(Index)是一种数据结构,用于帮助数据库高效地查找数据。类比理解图书馆找书的方式:没有索引 = 逐本翻找(全表扫描)有索引 = 通过目录快速定位(索引查找)书籍目录:- 章节目录:按顺序组织(B+树)- 关键词索引:按字母排序(索引)- 页码:快速定位到具体位置(主键)索引是一种数据结构(通常是B+树),用于帮助数据库高效查找数据。作用大幅提升查询速度(O(n) → O(log n))加速排序和分组避免全表扫描保证数据唯一性查询的所有列都在索引中,无需回表查询。优势。
2025-10-21 19:16:16
1083
原创 多线程&并发篇面试题
答案:线程:CPU调度的基本单位,是进程内的执行单元。进程:操作系统资源分配的基本单位。主要区别:进程独立的内存空间进程间通信复杂(需要IPC机制)创建和销毁开销大线程共享进程内存空间线程间通信简单(共享内存)创建和销毁开销小答案:线程安全指多线程环境下,程序能够正确处理共享数据,不会出现数据不一致或竞态条件。线程安全级别:不可变(Immutable)- String、Integer等不可变对象绝对线程安全。
2025-10-09 21:53:49
853
原创 notify 死锁核心要点总结
notify()本身不会直接导致死锁notify()可能成为死锁链条中的关键环节主要原因是信号丢失和条件不匹配解决方案是使用和正确的编程模式。
2025-10-09 21:36:41
460
原创 CountDownLatch 应用场景与优势分析
特性代码简洁性高低线程安全性内置保证需要手动保证异常处理简单复杂性能高中等可读性高低维护性高低虚假唤醒无有超时支持内置需要手动实现CountDownLatch 是一个强大的同步工具,特别适用于等待多个任务完成的场景。代码更简洁:减少了样板代码线程更安全:内置线程安全保证性能更好:基于 AQS 实现,性能更优更易维护:代码可读性和维护性更好无虚假唤醒:避免了 wait/notify 的虚假唤醒问题。
2025-10-09 21:35:17
342
原创 Spring 面试宝典
答案:Spring 是一个轻量级的开源 Java 框架,用于构建企业级应用程序。它提供了全面的编程和配置模型,支持 Java 应用程序的快速开发。核心特性:答案:答案:答案:IoC (Inversion of Control) 是一种设计原则,将对象的创建和依赖关系的管理从应用程序代码中转移到外部容器。传统方式:IoC 方式:5. Spring IoC 容器有哪些类型?答案:主要实现类:答案:答案:依赖注入是 IoC 的一种实现方式,通过外部容器将依赖对象注入到目标对象中。三种注入方式:答案:构
2025-10-09 21:28:36
499
原创 MQ 面试宝典
消息队列(MQ)是分布式系统中重要的中间件,用于解耦、异步处理、削峰填谷等场景。性能对比功能对比选型建议传统数据拷贝过程:零拷贝优化过程:RocketMQ中的零拷贝应用:Master-Slave模式配置示例2. RocketMQ 高可用实现NameServer集群Broker主从架构配置示例3. RabbitMQ 高可用实现镜像队列(Mirrored Queues)集群模式配置示例4. 高可用技术对比架构模式对比故障恢复时间对比生产者端消息丢失消息队列端消息丢失消费者端消息丢失ActiveM
2025-10-09 21:23:58
291
原创 JVM 永久代垃圾回收深度解析
永久代(Permanent Generation,PermGen)是 JVM 内存模型中的一个重要组成部分,主要用于存储类的元数据信息。永久代会发生垃圾回收:当满足类卸载条件时,永久代中的类元数据可以被回收类卸载的三个条件:所有实例被回收、ClassLoader被回收、Class对象无引用垃圾回收类型:Minor GC、Major GC、Full GC 都会涉及永久代JDK 8 变化:永久代被元空间替代,使用本地内存,垃圾回收效率更高内存泄漏风险。
2025-10-09 21:22:00
498
原创 JVM 线上调优与排查指南
提高吞吐量:减少 GC 时间,提高应用处理能力降低延迟:减少 GC 停顿时间,提高响应速度减少内存占用:优化内存使用,避免内存泄漏提高稳定性:避免 OOM,提高系统稳定性监控先行:先监控再调优,基于数据做决策参数调优:合理设置内存、GC 等参数问题排查:掌握各种排查工具和方法持续优化:持续监控和优化性能# 生产环境推荐配置 -Xms4g -Xmx4g -Xmn2gjps:查看 Java 进程jstat:监控 JVM 统计信息jmap:生成堆转储文件jstack:生成线程转储文件。
2025-10-09 21:21:26
466
原创 JVM 面试宝典
JVM类加载机制是指JVM将.class文件加载到内存,并转换为可执行代码的过程。主要包括加载、验证、准备、解析、初始化五个阶段。1. 五个加载阶段2. 类加载器层次结构JVM采用双亲委派模型,类加载器分为三层:双亲委派机制确保类加载的安全性,避免核心类被恶意替换。3. 类加载时机类加载的触发时机包括:4. 类加载器特点每个类加载器都有独立的命名空间,同一个类被不同类加载器加载会被视为不同的类。这为Java提供了良好的隔离性。常见追问及回答:Q1: 什么是双亲委派模型?A: 双亲委派模型是类加载器的
2025-10-09 21:20:47
409
原创 JVM 类加载机制深度解析
类加载是 JVM 将字节码文件(.class)加载到内存中,并转换为可以被 JVM 执行的 Class 对象的过程。// 自定义类加载器实现@Overridetry {// 读取类文件= null) {// 定义类= -1) {// 自定义类加载器使用示例try {// 创建自定义类加载器// 加载自定义类Class<?System.out.println("类加载成功: " + clazz.getName());
2025-10-09 21:18:54
437
原创 HashMap 与 Hashtable 深度对比分析
性能指标HashMapHashtable单线程性能优秀良好多线程性能差(数据不安全)良好(但性能较低)内存使用较少较多CPU 使用较少较多推荐场景单线程环境多线程环境(不推荐)Hash 计算方法HashMap:使用扰动函数Hashtable:使用初始容量HashMap:16(2 的幂次)Hashtable:11(任意正整数)扩容机制HashMap:双倍扩容(2n)Hashtable:2n+1 扩容线程安全性HashMap:非线程安全。
2025-10-09 21:13:37
367
原创 ConditionObject 核心功能详解与源码分析
Q: ConditionObject 是什么?A: AQS 的内部类,实现条件等待/通知机制提供比更灵活的线程间通信方式支持多个条件变量,避免虚假唤醒Q: 条件队列和同步队列的区别?同步队列:管理等待获取锁的线程(prev/next双向链表)条件队列:管理等待特定条件的线程(nextWaiter单向链表)await()进入条件队列,signal()转移到同步队列条件队列:用于等待特定条件的线程同步队列:用于等待获取锁的线程转移机制await()进入条件队列,signal()
2025-10-09 21:09:45
342
原创 Redis 面试宝典
问题描述:了解Redis的基本概念、特点和核心优势。Redis是什么Redis(Remote Dictionary Server)是一个开源的内存数据结构存储,用作数据库、缓存和消息中间件。Redis的核心特点内存存储:数据存储在内存中,读写速度极快数据结构丰富:支持多种数据结构持久化:支持RDB和AOF两种持久化方式高可用:支持主从复制、哨兵、集群原子操作:所有操作都是原子性的问题描述:Redisson是什么,它解决了原生Redis客户端的哪些问题。Redisson是什么。
2025-09-25 19:54:33
857
原创 Semaphore 信号量深度解析
答案Semaphore(信号量)是 Java 并发包中的一个同步工具,用于控制同时访问特定资源的线程数量。它维护了一组许可证(permits),线程在访问资源前必须先获取许可证,访问完成后释放许可证。核心特性许可证管理:维护一定数量的许可证访问控制:控制同时访问资源的线程数量公平性支持:支持公平和非公平两种模式可重入性:不支持重入,但可以获取多个许可证基本概念// 创建一个有 3 个许可证的信号量// 获取许可证// 释放许可证。
2025-09-11 18:53:28
747
原创 ThreadLocal 线程本地变量源码深度解析
答案ThreadLocal 是 Java 提供的一个线程本地存储机制,它为每个线程提供独立的变量副本,每个线程只能访问自己的副本,实现了线程间的数据隔离。核心特性线程隔离:每个线程都有自己独立的变量副本自动清理:线程结束时,ThreadLocal 变量会被自动清理无锁设计:基于 ThreadLocalMap 实现,避免了锁竞争内存管理:使用弱引用避免内存泄露ThreadLocal 是 Java 并发编程中的重要工具,它通过线程本地存储实现了数据隔离,避免了线程安全问题。
2025-09-11 18:21:38
583
原创 ReentrantLock 源码深度解析
ReentrantLock 是 Java 并发包中最重要的锁实现之一,它是一个可重入的互斥锁,具有与 synchronized 相同的基本行为和语义,但提供了更多的功能特性。功能丰富:提供比 synchronized 更多的功能性能优秀:非公平锁模式下性能优于 synchronized灵活配置:支持公平锁和非公平锁可扩展性:基于 AQS,易于扩展。
2025-09-11 13:16:52
702
原创 Semaphore 信号量源码深度解析
答案Semaphore(信号量)是 Java 并发包中的一个计数信号量,用于控制同时访问特定资源的线程数量。核心特性计数机制:维护一组许可证(permits),每个 acquire() 操作获取一个许可证资源控制:限制同时访问某个资源的线程数量共享锁模式:基于 AQS 的共享锁实现,支持多个线程同时获取许可证公平性选择:支持公平和非公平两种模式无实际对象:不维护实际的许可证对象,只维护计数使用场景资源池管理:控制数据库连接池、线程池等资源的使用限流控制:限制系统并发访问量互斥锁。
2025-09-11 13:15:25
727
原创 Phaser 阶段器源码深度解析
答案Phaser(阶段器)是 Java 7 引入的一个可重用的同步屏障,它结合了 CyclicBarrier 和 CountDownLatch 的功能,但提供了更灵活的使用方式。核心特性动态注册:支持在运行时动态注册和注销参与者阶段管理:使用阶段号(phase number)管理不同的同步周期分层结构:支持树形分层结构,减少竞争灵活等待:提供多种等待方式(阻塞、可中断、超时)终止控制:支持优雅终止和强制终止高性能:使用 CAS 操作和位操作优化性能使用场景多阶段任务。
2025-09-11 13:14:38
610
原创 CyclicBarrier 循环栅栏源码深度解析
答案CyclicBarrier(循环栅栏)是 Java 并发包中的一个同步辅助工具,它允许一组线程相互等待,直到所有线程都到达一个公共的屏障点。核心特性循环使用:CyclicBarrier 可以重复使用,每次所有线程到达屏障后可以重新开始相互等待:多个线程相互等待,而不是一个线程等待其他线程屏障动作:支持可选的屏障动作,在最后一个线程到达后、所有线程释放前执行代际管理:使用 Generation 机制管理不同的使用周期异常处理。
2025-09-11 13:14:03
931
原创 CountDownLatch 源码深度解析
CountDownLatch 是 Java 并发包中的一个同步辅助工具,它允许一个或多个线程等待,直到一组在其他线程中执行的操作完成。简单易用:API 简洁,易于理解和使用高效实现:基于 AQS 的共享锁模式,性能优秀线程安全:使用 CAS 操作确保线程安全内存一致性:提供强内存一致性保证。
2025-09-11 13:13:11
576
原创 ReentrantReadWriteLock 源码深度解析
是 Java 并发包中实现读写锁的核心类,它允许多个线程同时读取共享资源,但只允许一个线程写入。这种设计在读多写少的场景下能显著提升性能。先获取写锁,然后在写锁保护下获取读锁,最后释放写锁,这样数据仍然被读锁保护,但写锁已经被释放。先获取读锁,然后在读锁保护下尝试获取写锁。为什么有写锁后能获取读锁?写锁是独占的,当前线程拥有完全控制权获取读锁不会增加死锁风险支持锁降级,满足实际业务需求为什么有读锁后不能获取写锁?读锁是共享的,多个线程可能同时持有允许锁升级会导致死锁违反写操作独占的原则。
2025-09-03 09:18:36
742
原创 AbstractQueuedSynchronizer的ConditionObject 核心功能详解与源码分析
Q: ConditionObject 是什么?A: AQS 的内部类,实现条件等待/通知机制提供比更灵活的线程间通信方式支持多个条件变量,避免虚假唤醒Q: 条件队列和同步队列的区别?同步队列:管理等待获取锁的线程(prev/next双向链表)条件队列:管理等待特定条件的线程(nextWaiter单向链表)await()进入条件队列,signal()转移到同步队列条件队列:用于等待特定条件的线程同步队列:用于等待获取锁的线程转移机制await()进入条件队列,signal()
2025-08-25 10:50:27
712
原创 AbstractQueuedSynchronizer (AQS) 源码深度解析
AbstractQueuedSynchronizer 是 Java 并发包中最重要的基础组件,它为实现各种同步器提供了强大的基础框架。ReentrantLock、CountDownLatch、Semaphore、ReentrantReadWriteLock 等都基于 AQS 实现。快速路径: 首先调用tryAcquire尝试直接获取锁失败处理: 如果获取失败,调用addWaiter将线程加入等待队列队列等待: 调用在队列中等待获取锁中断处理: 如果在等待过程中被中断,调用恢复中断状态关键特点。
2025-08-21 16:29:41
329
百度地图的标注如何显示数字和改变标注的颜色
2016-09-26
servlet 执行destory()方法后还能访问该页面吗
2016-07-17
安装oracle database 后出现这种情况,该怎么解决
2016-06-19
sql developer 出现错误 the network adapter
2016-06-19
三菱PLC 使用,特殊模块fx2n–4da模拟量输出模块 输出5v电压程序怎么写,
2016-05-19
vb.net向另一个窗口中的文本框内写入字符
2016-04-26
java+ 程序 子类继承父类 创建子类对象时构造方法中无显示调用父类构造方法
2016-04-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅