加载中

面试

文章分类

浏览该分类下的所有文章

29 篇文章 3

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

本文系统阐述了 MySQL 并发事务导致的脏写、脏读、不可重复读、幻读等一致性问题,介绍了事务的 ACID 特性及四种隔离级别(read‑uncommitted、read‑committed、repeatable‑read、serializable)及其实现原理,重点分析了表锁、行锁、意向锁、间隙锁和临键锁的作用与区别,比较了 InnoDB 行级锁与 MyISAM 表级锁的性能影响,并提供了锁状态查询、死锁检测与排查方法以及通过索引、缩小锁范围等实际的锁优化建议。

MySQL常见面试题总结

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

面试篇【二】

文章系统梳理了面试常见的网络、操作系统、并发、JVM、Java8、微服务等知识点。包括 TCP/UDP 的特性、TCP 四次挥手、计算机开机流程、Linux 设备文件;多线程同步方式(synchronized、volatile、ReentrantLock 等)、线程创建与返回值获取、线程池的种类、核心参数及拒绝策略;Java8 新特性(Lambda、Stream、Optional 等)及其优缺点;多线程使用场景、并发问题、ThreadLocal 实现原理及应用;JVM 类加载过程、虚拟内存原理、栈与方法区溢出;Mybatis 生成 SQL、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根与四种引用(强、软、弱、虚),分代收集假设与记忆集,标记‑清除、复制、标记‑整理三大算法及三色标记,STW、Safepoint 与 OopMap 的作用;常见收集器(Serial、ParNew、Parallel Scavenge/Old、CMS、G1、Z、Shenandoah)特性;栈溢出、OOM 排查;类加载机制、双亲委派模型、对象栈上分配及内存布局。

面试现场【综合篇】

面试现场综合篇提供了一套完整的技术面试指南,涵盖项目亮点、代码设计、零拷贝实现方式、五大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 通过看门狗定时续期解决锁提前失效;⑦ Redlock 在多主节点上多数获锁后生效,提升跨节点安全性。文章强调可靠分布式锁应具备互斥、超时释放、可重入、高性能、高可用和安全性等特征。

面试现场【多线程篇】

多线程用于提升资源利用率和CPU并发能力,常见于高并发、耗时任务、定时任务等场景。线程安全指在多线程访问同一对象时无需额外同步仍能得到正确结果,处理方式包括原子类、并发集合、CountDownLatch、Semaphore、synchronized、Lock、分布式锁等。synchronized 通过 monitorenter/monitorexit 实现对象监视器锁,方法级使用 ACC_SYNCHRONIZED 标记。与 ReentrantLock 相比,后者需手动释放、可设公平性、支持可中断、超时和 tryLock。公平锁按请求顺序获取,非公平锁则不保证。CAS(Compare‑And‑Swap)是乐观锁实现,Atomic 类等基于 CAS 进行无锁同步。

面试现场【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 取模实现节点选择,解决写和存储扩展问题。