面试

浏览该分类下的所有文章

深入理解Mysql锁与事务隔离级别

本文系统阐释了 MySQL 并发控制的核心机制,包括事务的 ACID 特性、脏读/脏写、不可重复读、幻读等并发问题,以及对应的四种事务隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE)与 MVCC、间隙锁、Next‑Key 锁的实现原理。进一步比较了 MyISAM 的表锁与 InnoDB 的行锁、意向锁、共享/排他锁的行为差异,演示了不同隔离级别下的读写冲突和死锁情形,并提供了通过索引、锁粒度、系统状态变量等手段进行锁优化和死锁诊断的实用建议。

MySQL常见面试题总结

文章系统梳理了MySQL面试常见知识点:索引原理及Hash、B+树区别,聚簇与非聚簇、联合索引顺序与使用场景;事务的ACID特性、四种隔离级别及锁机制;表结构设计要点,如主键选自增、NOT NULL、char/varchar 区别;InnoDB 与 MyISAM 的特性比较;binlog 三种格式、超大分页优化、慢查询分析与分表策略;存储过程优缺点及数据库三范式。

面试篇【二】

本文系统梳理了面试常见的网络、操作系统、Java 并发、JVM、微服务等知识点。包括 TCP 与 UDP 的区别、四次挥手原理、计算机加电流程、Linux 设备文件、同步方式(synchronized、volatile、Lock 等)及可重入锁概念;线程创建、返回值获取、线程池的四种实现、核心参数与拒绝策略;Java8 新特性(Lambda、Stream、Optional 等)及其优缺点;多线程使用场景、并发问题、MyBatis SQL 绑定、虚拟内存工作原理、栈/方法区溢出、类加载五阶段;ThreadLocal 实现原理与典型应用;微服务的定义与特征;以及 MySQL 事务的 ACID 特性。全文突出概念解释与实际应用场景。

面试篇【一】

文章系统梳理了面试常考的技术要点:Spring AOP 动态代理实现原理、JDK8 前后 HashMap 与 ConcurrentHashMap 的结构与扩容机制、线程池大小的 CPU/IO 区分、G1 垃圾回收特性与 OOM 排查、MySQL 事务隔离级别及默认 REPEATABLE_READ、SQL 慢查询优化、缓存穿透/击穿/雪崩的原因与防御、LRU 实现、JVM 堆参数设置、栈队列应用、InnoDB 与 B+ 树索引、MVCC 与 undo log 原理以及索引失效情形。

面试现场【MySQL篇】

文章介绍MySQL主从架构的概念、优势及应用,详细阐述基于 binlog 的复制流程及主从一致性保障,比较主主、主从、主备的区别,分析导致主从延迟的硬件、事务、网络等因素并给出相应优化措施,最后列举双机主备、一主一从、一主多从、MariaDB 多主集群以及基于中间件的高可用方案,帮助读者构建可靠的数据库高可用环境。

面试现场【JVM篇】

本文系统梳理了 JVM 面试常见要点,包括运行时内存结构(程序计数器、虚拟机栈、本地方法栈、堆、方法区、直接内存),垃圾回收原理(引用计数、根可达、GC Roots 分类),四种引用类型,分代收集假设与记忆集,标记‑清除、复制、整理三大算法及 STW、Safe‑point、OopMap 的作用。随后简介了 Serial、ParNew、Parallel Scavenge、Parallel Old、CMS、G1 等主流收集器的特点与适用场景,并简述对象栈上分配、内存布局、类加载双亲委派等概念,为面试提供完整参考。

面试现场【综合篇】

本篇面试指南围绕系统设计与实现展开,涵盖项目亮点、零拷贝原理、五大IO模型及NIO与多路复用区别、Future阻塞获取结果机制、ReentrantLock 与 synchronized 的实现与差异、AQS、乐观/悲观锁、Paxos 协议、B+树特性、TCP 拥塞控制、JVM 实践、数据库分库分表及其缺点、分布式事务(TCC)方案、RocketMQ 消息可靠性保证,以及常见算法题。通过概念阐释与实现细节,帮助读者系统复习面试热点。

面试现场【MQ篇】

本文梳理了十个常见的消息队列面试题及要点:阐述了 MQ 的概念和 RabbitMQ、RocketMQ、Kafka 等主流中间件;列举了应用解耦、流量削峰、异步处理、消息通信、远程调用等典型场景;重点说明了生产者、存储端和消费者三阶段如何防止消息丢失、实现同步刷盘和复制、确保消费成功;介绍了保证顺序消费的分区/单线程策略及局部有序实现方式;讨论了重复消费的可能性及基于唯一标识或 Redis 的幂等方案;提供了排查与扩容、分批消费等应对消息积压的思路;对 Kafka、RocketMQ、RabbitMQ 在吞吐、语言、持久化、顺序、集群等方面进行对比选型;解析了基于副本选举的高可用机制;说明了事务消息的两段提交流程以保证数据一致性;最后给出设计自研 MQ 时应考虑的整体流程、RPC、持久化、消费模型、高可用、事务与伸缩等关键要素。

面试现场【List篇】

List是Java集合接口,常用实现ArrayList(数组,查询快,容量不足时按1.5倍扩容)和LinkedList(链表,增删快)。ArrayList适合读多写少,LinkedList适合写多读少。List可重复有序,Set不重复无序且基于Map。Vector已少用,线程安全List可用Collections.synchronizedList或CopyOnWriteArrayList;后者写时复制实现并发读,但占内存多且读到旧数据。排序用list.sort或Collections.sort,遍历删除用Iterator.remove或list.removeIf避免fast‑fail。

Redis分布式锁的七种方案

Redis 常用于实现分布式锁,可靠的锁应具备互斥、超时释放、可重入、高性能、高可用和安全性。文中系统梳理了七种实现方式:① SETNX + EXPIRE,操作不原子易导致死锁;② SETNX + 时间戳值,需客户端时间同步且仍缺唯一标识;③ Lua 脚本一次性完成 SETNX 与 EXPIRE,保证原子性;④ SET EX PX NX 直接原子加锁;⑤ 在 value 中存唯一随机标识并用 Lua 脚本校验后删除,防止误删;⑥ Redisson 框架通过 watchdog 自动续期解决锁提前失效问题;⑦ Redlock 多节点算法,在多数 Redis master 上同时加锁并校时,提升跨节点的安全性。每种方案的优缺点和适用场景均有阐述。

面试现场【多线程篇】

面试围绕多线程展开,阐述使用多线程提升资源利用率和并发能力的原因及适用场景,如大文件读写、耗时任务和定时任务。解释线程安全的含义,并给出常用解决方案:原子类、CountDownLatch、并发集合、synchronized、Lock 及分布式锁。说明 synchronized 通过 monitorenter/monitorexit 实现锁机制及其字节码标志。比较 synchronized 与 ReentrantLock 的锁释放方式、可公平性、可中断性、超时获取和 tryLock。简述公平锁概念并介绍 CAS 的工作原理及在 AtomicInteger 中的应用。

面试现场【Redis篇】

Redis 4.0 前单线程处理网络 I/O 与 Set/Get,避免锁竞争并使用 epoll 实现高效 I/O;4.0 后引入多线程用于大数据异步删除。持久化提供 AOF(追加日志)和 RDB(快照)两种方式,4.0 还支持二者混合。AOF 先执行命令再写日志,存在数据丢失和阻塞风险;RDB 可通过 save 同步阻塞或 bgsave 子进程异步生成快照,写时复制保证数据可修改。高可用方案包括主从复制、哨兵自动故障转移和 Cluster。Cluster 将键映射至 16384 个哈希槽,采用 CRC16 取模实现节点选择,解决写和存储扩展问题。