定位:入门→中级→高级后端,用作自学知识库+速查+背诵手册
结构总览:
Java基础(1~60)
Java集合(61~110)
Java并发多线程(111~160)
JVM虚拟机(161~200)
Java8新特性(201~220)
Spring / SpringBoot(221~260)
MySQL数据库(261~300)
Redis缓存(301~350)
RabbitMQ消息队列(351~380)
SpringCloud微服务(381~420)
分布式核心理论(421~440)
Linux与线上问题排查(441~450)
大高频(451~500)
一、Java基础(1~60)
1、Java语言特点?面向对象、跨平台、垃圾回收、多线程、编译+解释型、强类型。
2、解释Java跨平台原理源码编译为.class字节码;不同系统安装JVM,JVM解析字节码。字节码跨平台,JVM不跨平台。
3、JDK、JRE、JVM三者关系?JVM:执行字节码;JRE = JVM + 基础类库(运行程序);JDK = JRE + 开发工具(javac、jdb,开发使用)。
4、== 和 equals() 区别==:基本类型比较值;引用类型比较内存地址。equals:Object原生等价==;String、包装类重写后比较内容。/ 基本类型用 ==,比较对象内容用 equals()。字符串内容比较永远用 equals(),避免空指针可用常量放在前面。
5、String、StringBuilder、StringBuffer区别String:不可变对象,拼接产生新对象;StringBuilder:可变,线程不安全,速度快;StringBuffer:可变,方法加synchronized,线程安全,速度慢。
String s = new String("test");6、 创建几个对象?2个:常量池"test"、堆内String实例。
7、final关键字三种用法修饰类:不能被继承;修饰方法:不能重写;修饰变量:基本类型值不变;引用类型地址不变,内部属性可修改。
8、抽象类 abstract class 和 interface 区别抽象类:有构造方法,支持实例变量,单继承;is-a关系;接口:无构造器,Java8支持default/static方法,多实现;代表能力has-a。
9、方法重载 Overload同类中,方法名相同,参数列表(个数/类型/顺序)不同;与返回值无关。
10、方法重写 Override父子类,方法签名完全一致;子类访问权限不能更小;不能抛出更大范围异常。
11、Java8种基本数据类型byte、short、int、long、float、double、char、boolean
12、包装类作用?自动装箱、拆箱装箱:基本类型→包装类 Integer a=10;拆箱:包装类→基本类型 int b=a。
13、Integer缓存范围?-128 ~ 127;区间内复用缓存对象,超出新建对象。
Integer a=127,b=127; a==b14、 true;a=128,b=128 false 为什么?127命中缓存;128超出缓存,创建两个不同对象。
15、static关键字作用属于类,不属于实例;类加载时初始化;静态方法不能直接访问实例变量、不能使用this/super。
16、this与super区别this:当前对象;调用本类构造;super:代表父类对象;调用父类构造;构造器第一行只能存在this()或super()其中一个。
17、四种访问修饰符权限范围private(本类) < default包访问 < protected(包+子类) < public(全部)
18、volatile关键字三大特性保证可见性、禁止指令重排序;不保证原子性。
19、transient关键字作用对象序列化时,该字段不参与序列化保存。
20、instanceof作用判断对象是否为某个类/子类实例。
21、break、continue、return区别break跳出循环;continue终止本次循环;return结束当前方法。
22、Java异常体系顶层结构Throwable ├ Error:系统级错误,程序无法处理 └ Exception ├ RuntimeException:运行时异常(非受检,无需捕获) └ 受检异常:编译期强制捕获或throws抛出
23、try-catch-finally,finally一定执行吗?绝大多数情况执行;调用System.exit(0)终止JVM时不执行。
24、throw 和 throwsthrow:方法内部主动抛出异常实例;throws:方法声明,向外抛出异常,交给上层处理。
25、递归两大必要条件递归体 + 终止条件;层级过深会栈溢出StackOverflowError。
26、switch支持哪些数据类型?byte、short、int、char;Java5枚举;Java7 String。
27、什么是函数式接口?只有一个抽象方法,可标注@FunctionalInterface,支持Lambda调用。
28、Lambda表达式优缺点优点:代码简洁,配合Stream;缺点:不方便调试,不能直接访问外部非final局部变量。
29、null可以调用静态方法吗?可以;静态方法依靠类调用,不依赖实例。
30、Java按值传递还是引用传递?全部按值传递。传递引用类型时,拷贝的是对象地址值。
31、深拷贝与浅拷贝区别浅拷贝:拷贝对象,内部引用共用;深拷贝:完整复制所有嵌套对象,互不影响。
32、Object类有哪些常用方法?equals、hashCode、toString、clone、getClass、wait、notify、notifyAll、finalize。
33、hashCode()与equals()规范equals相等,hashCode必须相等;hashCode相等,equals不一定相等。
func(String… args)34、什么是可变参数?方法参数个数可变;底层是数组;可变参数必须放在参数列表最后。
35、package和import作用package划分命名空间;import导入其他类,简化代码。
36、权限修饰符能否修饰局部变量?不能。private/protected/public只能修饰类、成员变量、方法。
37、内部类分类?成员内部类、静态内部类、局部内部类、匿名内部类。
38、匿名内部类和Lambda适用场景区别匿名内部类可以是多抽象方法接口、抽象类;Lambda仅限函数式接口。
39、boolean默认值?各类成员变量默认值boolean=false;数值0;引用类型null。局部变量无默认值,必须手动赋值。
40、float f = 3.14; 编译报错原因?3.14字面量默认double;需要写3.14f。
41、移位运算符 << >> >>>区别<<左移;>>有符号右移;>>>无符号右移。
42、接口中变量默认修饰符?public static final,常量,必须初始化。
43、抽象方法能否用private、static、final修饰?都不行;抽象方法目的就是被子类重写。
44、main方法标准写法为什么是 public static void main(String[] args)public方便JVM访问;static无需实例;void无返回;固定参数接收命令行参数。
45、方法参数传数组,方法内修改数组内容,外部是否变化?会变化;传递的是数组地址。
46、什么是方法签名?方法名 + 参数列表;不包含返回值。
47、父类静态方法能否重写?不能;静态方法属于类,只存在“隐藏”,不存在重写。
48、构造方法能不能重写、重载?不能重写;可以重载。
49、子类实例化执行顺序父类静态 → 子类静态 → 父类构造代码块 → 父构造方法 → 子类代码块 → 子类构造。
50、能否在静态方法使用this?不能;静态方法执行时不一定存在实例。
51、Unicode与UTF-8关系?Unicode字符集;UTF-8是Unicode的编码实现方式。
52、IO流分类:字节流、字符流InputStream/OutputStream 字节流(处理文件、图片);Reader/Writer字符流(文本)。
53、Buffered缓冲流作用?减少磁盘IO次数,提升读写性能。
54、序列化作用?实现序列化需要什么?对象转为字节流传输/持久化;实现Serializable标记接口。
55、版本号serialVersionUID作用?防止类结构轻微修改后,旧序列化文件反序列化失败。
56、File类能否操作文件内容?不能;只能操作文件路径、创建删除,读写需要IO流。
57、try-with-resources作用(Java7)实现AutoCloseable的资源自动关闭,不用finally手动释放流。
58、== 判断两个new String("abc")结果?false,两个不同堆对象;equals为true。
59、字符串常量池存在哪里?JDK7及以后移至堆中。
60、什么是代码块?静态代码块、构造代码块执行时机静态代码块:类加载执行一次;构造代码块:每次创建实例执行。
二、Java集合框架(61~110)
61、集合两大顶层父接口Collection(单列:List、Set、Queue);Map(键值对)。
62、ArrayList底层实现?动态Object数组;查询快,中间增删慢;线程不安全。
63、ArrayList默认容量与扩容机制默认初始容量10;扩容:原容量 * 1.5倍。
64、LinkedList底层?双向链表;首尾增删高效,随机查询慢。
65、ArrayList和LinkedList如何选择?大量查询、少量增删选ArrayList;频繁首尾插入删除选LinkedList。
66、Vector特点?数组实现;方法synchronized线程安全;扩容2倍;性能差,基本淘汰。
67、HashSet底层实现?封装HashMap;元素作为key,value固定Object常量。
68、HashSet去重原理?先比较hashCode,哈希相同再用equals判断。
69、HashMap JDK8底层结构数组 + 链表 + 红黑树;链表长度≥8且数组长度≥64转为红黑树。
70、HashMap负载因子0.75含义?元素数量达到容量*0.75触发扩容;平衡空间占用与哈希冲突。
71、HashMap为什么线程不安全?多线程put存在数据覆盖;JDK7环形链表死循环;JDK8无循环但依旧不安全。
72、HashMap、Hashtable区别Hashtable方法加锁、key不能null;HashMap允许一个key为null,线程不安全。
73、ConcurrentHashMap JDK8原理CAS + synchronized锁定链表头节点;分段锁淘汰,并发性能更好。
74、LinkedHashMap特点?继承HashMap,维护双向链表,保留插入顺序;可实现LRU缓存。
75、TreeMap底层?红黑树;key必须实现Comparable或者传入比较器,有序。
76、Iterator迭代器原理,fail-fast快速失败遍历期间集合结构修改抛出ConcurrentModificationException;仅预警,不保证并发安全。
77、遍历集合时调用list.remove()为什么报错?modCount修改,触发快速失败;需要使用iterator.remove()。
78、ListIterator和Iterator区别ListIterator仅支持List;支持向前遍历、增加、修改元素。
79、Queue队列常用实现类ArrayDeque、LinkedList、PriorityQueue(优先队列,小顶堆)。
80、ArrayDeque优势?数组双端队列;作为栈比Stack快,不允许null。
81、Collections和Collection区别Collection是集合顶层接口;Collections操作集合的工具类。
82、Set接口实现类特点对比HashSet无序;LinkedHashSet插入有序;TreeSet自然排序。
83、HashMap key允许null吗?value允许null?key最多一个null;value允许多个null。
84、为什么不建议使用Object作为HashMap key?极易忘记重写hashCode与equals,造成存储异常。
85、什么是弱引用集合WeakHashMap?key为弱引用,GC时自动回收,适合缓存。
86、Arrays.asList()陷阱返回内部ArrayList,不支持add/remove;传入基本类型数组会整体作为一个元素。
87、ArrayList subList陷阱?子列表是原列表视图,不是新对象;原集合修改会引发异常。
88、线程安全集合有哪些?Vector、Hashtable、ConcurrentHashMap、CopyOnWriteArrayList。
89、CopyOnWriteArrayList原理?写时复制;修改时复制新数组;读不加锁,写加锁;适合读多写少。
90、CopyOnWrite缺点?占用内存;写操作开销大;读到的数据存在弱一致性,实时性差。
91、什么是不可变集合 Collections.unmodifiableList?只允许查询,增删修改直接抛出异常。
92、集合泛型作用?编译期类型检查,避免类型转换异常。
93、泛型擦除是什么?编译后泛型信息被抹除,运行时不存在泛型。
94、通配符 ?、? extends T、? super T 区别?任意类型;上界extends只能读;下界super只能写。
95、Stream分为中间操作、终端操作中间操作:filter、map、sorted(懒加载,不执行);终端操作:collect、forEach、count,触发执行。
96、并行流 parallelStream 注意事项?底层ForkJoinPool;存在线程安全问题,慎用共享变量。
97、Collectors.toList()返回什么集合?默认ArrayList,线程不安全。
98、Stream和for循环怎么选择?简单遍历for;复杂连续过滤映射使用Stream,可读性更高。
99、Hash冲突解决办法?HashMap使用链地址法开放寻址、链地址法、再哈希;HashMap采用链地址法。
100、红黑树优势?平衡二叉树,查找、插入、删除稳定O(logn)。
101、HashMap扩容流程?新建数组,重新计算hash迁移元素;JDK8优化不需要全部重算hash。
102、初始容量为什么建议设置为2的幂?hash & (length-1) 替代取模运算,提升效率。
103、PriorityQueue排序规则?默认自然升序;自定义Comparator改变顺序。
104、集合中允许存储null的类?ArrayList、LinkedList、HashSet、HashMap;Tree系列不允许key为null。
105、栈Stack为什么不推荐使用?继承Vector,同步锁性能差;优先使用ArrayDeque。
106、BlockingQueue阻塞队列作用?生产者消费者模型;队列满put阻塞,空take阻塞。
107、常见阻塞队列:ArrayBlockingQueue、LinkedBlockingQueue数组有界队列;链表可设置有界/无界。
108、DelayQueue延迟队列用途?定时任务、订单超时关闭。
109、如何判断集合是否为空?推荐工具方法CollectionUtils.isEmpty();不要只判断null,还要判断size=0。
110、集合遍历三种方式对比普通for:支持索引;增强for底层迭代器;迭代器适合遍历中删除元素。
三、多线程并发(111~160)
111、创建线程四种方式继承Thread类;实现Runnable;Callable+FutureTask;线程池。
112、start()和run()区别start()向操作系统申请创建新线程;直接调用run只是普通方法执行。
113、线程五大状态新建 → 就绪 → 运行 → 阻塞 → 终止。
114、sleep()与wait()区别sleep Thread方法,不释放锁;时间结束自动恢复;wait Object方法,释放锁;需要notify唤醒,只能在同步块内。
115、notify() 和 notifyAll()notify随机唤醒一个等待线程;notifyAll唤醒全部等待线程。
116、yield()方法作用让出CPU执行权,但不释放锁;依旧处于就绪状态。
117、synchronized锁优化流程偏向锁 → 轻量级锁(自旋) → 重量级锁(OS互斥锁)。
118、synchronized可重入?支持同一个线程多次获取同一把锁,避免死锁。
119、Lock锁和synchronized对比synchronized自动释放;Lock手动lock/unlock;支持公平锁、Condition、可中断等待。
120、AQS核心原理双向等待队列;state状态;独占模式、共享模式;CAS修改状态。
121、ReentrantLock公平锁与非公平锁区别公平锁按照等待顺序获取;非公平锁允许抢占,吞吐量更高(默认)。
122、volatile能否保证原子性?举例i++不能。i++分为读取、自增、写入三步,多线程依然出错。
123、CAS 是什么?比较并交换;乐观锁思想;无锁操作。
124、CAS三大问题ABA问题、自旋循环消耗CPU、只能保证单个变量原子操作。
125、ABA如何解决?增加版本号 AtomicStampedReference。
126、什么是原子类?AtomicInteger底层CAS,保证单个变量原子操作。
127、ThreadLocal作用?保存线程私有变量;每个线程拥有独立副本。
128、ThreadLocal内存泄漏原因?key弱引用,value强引用;线程不销毁则value无法释放;用完调用remove()。
129、什么是守护线程?setDaemon(true);主线程结束守护线程自动退出,如GC线程。
130、线程池优势?降低创建销毁开销;控制并发数量;方便管理线程。
131、线程池七大核心参数核心线程数、最大线程数、空闲存活时间、阻塞队列、拒绝策略、线程工厂。
132、线程池四种拒绝策略AbortPolicy抛异常;DiscardPolicy丢弃任务;DiscardOldest丢弃队首;CallerRunsPolicy调用者线程执行。
133、Executors为什么不推荐使用?底层线程池无边界,队列无限大,容易OOM;建议手动ThreadPoolExecutor。
134、核心线程什么时候创建?默认懒加载,有任务才创建。
135、任务提交线程池执行流程核心线程未满→创建;核心满放入队列;队列满创建新线程直到最大线程;触发拒绝策略。
136、Callable与Runnable区别Callable有返回值、可抛出异常;Runnable无返回值。
137、Future缺点?阻塞获取结果;无法回调。
138、CompletableFuture作用?异步回调、任务编排;多异步任务组合,替代Future。
139、什么是死锁?产生四个必要条件互斥、持有并等待、不可剥夺、循环等待。
140、如何避免死锁?统一锁获取顺序、设置超时、尝试获取锁。
141、volatile禁止指令重排序原理?内存屏障插入内存屏障,屏障前后指令不能交换顺序。
142、Java内存模型JMM规定线程、主内存、工作内存交互规则;解决可见性、重排序问题。
143、happens-before规则是什么?一套可见性规则,不用volatile也能保证部分场景可见性。
144、CountDownLatch使用场景等待多个线程任务全部完成再继续执行。
145、CyclicBarrier多个线程互相等待,全部到达屏障点再一起执行;可循环使用。
146、Semaphore信号量控制同时访问资源的线程数量,限流。
147、读写锁 ReentrantReadWriteLock读共享、写互斥;适合读多写少场景。
148、锁降级是什么?获取写锁 → 获取读锁 → 释放写锁;Java支持锁降级,不支持锁升级。
149、什么是自旋锁?不阻塞,循环尝试获取锁;适合锁持有时间很短场景。
150、乐观锁与悲观锁区别悲观锁:认为一定会冲突,加锁;乐观锁假设冲突少,CAS/版本号校验。
151、并发容器ConcurrentSkipListMap跳表实现,有序,线程安全。
152、什么是伪共享?多线程修改同一缓存行不同变量;使用@sun.misc.Contended解决。
153、线程中断 interrupt()设置中断标记;不直接终止线程;线程主动检测处理。
154、stop()为什么废弃?暴力终止线程,可能数据不一致,不释放锁。
155、线程状态WAITING和BLOCKED区别BLOCKED:等待监视器锁;WAITING:主动wait()等待唤醒。
156、多线程单例模式双重检查锁DCLvolatile禁止指令重排,防止拿到半初始化对象。
157、四种单例实现:饿汉、懒汉、DCL、静态内部类静态内部类实现懒加载,简洁安全,推荐。
158、同步容器Collections.synchronizedList缺陷方法加锁,复合操作(遍历+删除)依旧线程不安全。
159、什么是并发三大问题:原子性、可见性、有序性原子性:操作不可分割;可见性:修改其他线程立刻感知;有序性:指令不乱序。
160、多线程开发最佳实践尽量无状态;缩小锁粒度;避免频繁创建线程;优先线程池;防止死锁。
四、JVM虚拟机(161~200)
161、JVM运行时数据区划分程序计数器、虚拟机栈、本地方法栈、堆、方法区(元空间Metaspace)。
162、程序计数器特点?唯一一个不会发生OOM的区域;记录当前字节码执行位置。
163、虚拟机栈存放什么?栈帧包含?每个方法对应栈帧;局部变量表、操作数栈、动态链接、方法返回地址。
164、栈溢出两种异常StackOverflowError:栈深度过大;OutOfMemoryError:不断创建线程耗尽栈内存。
165、堆作用?存放什么对象?所有对象实例、数组;GC主要回收区域。
166、堆划分:Eden、Survivor、老年代比例Eden:S0:S1 = 8:1:1。
167、Minor GC触发时机?Eden空间不足;清理新生代。
168、Major GC、Full GC区别Major GC:老年代回收;Full GC:新生代+老年代整堆回收,STW时间很长,尽量避免。
169、对象晋升老年代条件存活年龄达到阈值;大对象直接进老年代;Survivor空间不足。
170、GC Roots常见对象虚拟机栈局部变量、静态变量、JNI本地引用、Class常量。
171、可达性分析算法作用判断对象是否存活;替代传统引用计数法(无法解决循环引用)。
172、四种引用类型强引用、软引用、弱引用、虚引用。
173、垃圾回收三大基础算法标记清除、复制算法、标记整理。
174、新生代、老年代分别使用什么算法?新生代复制算法;老年代标记清除/标记整理。
175、STW Stop-The-WorldGC暂停全部用户线程;所有收集器都存在,只是停顿长短不同。
176、CMS收集器特点并发标记清除;低延迟;产生内存碎片;并发阶段占用CPU。
177、G1收集器特点分区Region模型;可预测停顿;整体标记整理,局部复制。
178、ZGC核心优势?几乎无STW;染色指针;支持大堆;JDK11提供。
179、对象创建流程类加载校验 → 分配内存 → 初始零值 → 设置对象头 → 执行构造方法。
180、对象头 Mark Word存放信息哈希码、GC分代年龄、锁状态标记。
181、内存分配两种方式:指针碰撞、空闲列表指针碰撞:内存规整;空闲列表:内存碎片化。
182、什么是TLAB?线程本地分配缓冲区,减少多线程内存分配竞争。
183、方法区存放内容?类信息、常量、静态变量、即时编译代码。
184、永久代与元空间区别永久代堆内存;元空间使用本地直接内存,默认无上限。
185、运行时常量池在哪里?方法区;字符串常量池在堆。
186、类加载三阶段:加载、链接、初始化链接分验证、准备、解析;初始化执行静态代码块、静态变量赋值。
187、双亲委派模型流程类加载请求先交给父加载器;父无法加载再自己加载。
188、双亲委派好处防止核心类重复加载,安全防护。
189、能否破坏双亲委派模型?可以;自定义类加载器重写loadClass。
190、类加载器层级启动类加载器、扩展类加载器、应用程序类加载器、自定义加载器。
191、什么时候触发类初始化?主动引用new对象、调用静态方法/静态变量、反射、main启动。
192、被动引用不会触发初始化举例子类访问父类静态变量;数组定义类;常量池常量访问。
193、垃圾回收什么时候执行finalize()?对象第一次标记不可达;最多执行一次,不保证一定执行,不建议依赖。
194、OOM常见场景堆内存溢出、元空间溢出、栈溢出、直接内存溢出。
195、jmap、jstack、jstat作用jmap查看堆快照;jstack打印线程栈;jstat持续监控GC。
196、内存泄漏与内存溢出区别泄漏:无用对象无法回收;溢出:内存不足无法分配。
197、逃逸分析作用?判断对象是否逃出方法;栈上分配、标量替换,减少GC压力。
198、即时编译JIT是什么?热点字节码编译成本地机器码,提升运行速度。
199、什么是安全点safepoint?STW只能在安全点暂停线程,避免不一致状态。
200、GC调优核心目标减少Full GC、降低STW停顿时间、控制内存占用。
五、Java8新特性(201~220)
201、Java8重要新特性列表Lambda、Stream、接口default/static、LocalDateTime、Optional、CompletableFuture、重复注解。
202、函数式接口 @FunctionalInterface仅有一个抽象方法;允许默认、静态方法。
203、四大核心函数式接口Consumer消费型、Supplier供给型、Predicate断言、Function转换。
204、方法引用四种形式对象::实例方法;类::静态方法;类::实例方法;类::new构造引用。
205、Stream流数据源有哪些?集合、数组、文件、Stream.of()。
206、Optional解决什么痛点?优雅处理null,减少空指针异常。
207、Optional常用方法 of() ofNullable() empty()of不允许null;ofNullable支持null;empty空对象。
208、旧Date类缺陷?可变、线程不安全、API混乱;推荐LocalDateTime。
209、Java8时间类设计特点?不可变对象,线程安全;LocalDate、LocalTime、LocalDateTime。
210、DateTimeFormatter代替SimpleDateFormat线程安全;SimpleDateFormat多线程并发会异常。
211、接口default方法作用?接口新增方法,不破坏已有实现类兼容。
212、Stream终端操作collect常用收集器toList、toSet、toMap、分组groupingBy、分区partitioningBy。
213、Stream分组 groupingBy 示例场景按照字段分组统计、聚合求和。
214、并行流底层ForkJoinPool分治任务;默认共用公共线程池,不要执行阻塞IO。
215、Lambda表达式外部变量要求必须final或者有效final,不能修改。
216、Stream distinct()去重原理依靠equals与hashCode。
217、map与flatMap区别map一对一转换;flatMap拆分集合,一对多。
218、CompletableFuture runAsync supplyAsync区别runAsync无返回;supplyAsync带有返回结果。
219、重复注解 @Repeatable同一位置多次使用同一个注解。
220、Base64内置工具类 Base64替代第三方工具;注意Base64不是加密,只是编码。
六、Spring & SpringBoot(221~260)
221、Spring两大核心 IOC、AOPIOC控制反转;AOP面向切面编程。
222、IOC控制反转含义?DI依赖注入对象创建控制权交给容器;DI容器自动注入依赖,解除硬耦合。
223、三种依赖注入方式构造注入、setter注入、字段@Autowired注入。
224、@Autowired与@Resource区别@Autowired按类型;@Resource默认按名称,JSR规范。
225、Bean作用域singleton单例、prototype多例、request、session、application。
226、单例Bean是否线程安全?Spring单例指容器只创建一个对象;本身不保证线程安全,不要在Bean定义可变成员变量。
227、Bean完整生命周期实例化 → 属性填充 → 初始化 → 销毁。
228、初始化三种方式@PostConstruct、InitializingBean、xml init-method。
229、循环依赖是什么?A依赖B,B依赖A;单例setter注入依靠三级缓存解决。
230、三级缓存分别作用?一级:成品单例池;二级:半成品Bean;三级:工厂ObjectFactory,提前暴露代理。
231、构造注入为什么无法解决循环依赖?实例化阶段互相等待,没有提前暴露对象机会。
232、AOP作用场景日志、权限校验、事务、接口耗时统计、异常统一处理。
233、AOP两种动态代理目标实现接口:JDK动态代理;无接口:CGLIB字节码代理。
234、AOP通知类型前置、后置、返回通知、异常通知、环绕通知。
235、@Transactional底层原理?AOP动态代理;拦截方法开启、提交、回滚事务。
236、事务传播行为默认REQUIRED含义存在事务就加入;不存在新建事务。
237、REQUIRES_NEW传播特性新建独立事务,不受外层事务影响。
238、@Transactional常见失效场景非public方法;同类内部调用;异常被catch捕获;数据库不支持事务。
239、事务隔离级别由谁控制?数据库;Spring只是封装设置。
240、Spring事务何时回滚?默认只捕获RuntimeException与Error;受检异常不会自动回滚。
241、BeanFactory与ApplicationContext区别BeanFactory顶层容器;ApplicationContext扩展功能,自动加载Bean。
242、Aware接口作用Bean获取容器内部资源:ApplicationContextAware、BeanNameAware。
243、@Component、@Service、@Repository、@Controller关系@Service、@Controller都是@Component衍生注解。
244、SpringBoot核心注解 @SpringBootApplication组合注解:@Configuration + @EnableAutoConfiguration + @ComponentScan。
245、自动装配原理 @EnableAutoConfiguration读取META-INF/spring.factories加载自动配置类。
246、starter启动器作用整合依赖包,内置自动配置,简化项目引入。
247、yml与properties区别yml层次清晰;properties优先级更高;注意空格格式。
248、@ConfigurationProperties批量读取配置前缀绑定配置文件属性,替代多个@Value。
249、SpringBoot启动内嵌容器默认Tomcat;可切换Jetty、Undertow。
250、全局异常处理器 @RestControllerAdvice统一捕获Controller异常,返回标准化结果。
251、SpringBoot条件注解 @ConditionalOnClass类存在才创建Bean,自动装配核心。
252、@Configuration配置类 full模式与lite模式full模式拦截@Bean,保证单例;lite模式不拦截。
253、Spring事件监听机制发布事件、监听者处理;解耦业务。
254、Spring资源加载Resource统一加载文件、classpath、网络资源。
255、@Scope("prototype")多例Bean特点每次获取新建对象;容器不负责销毁。
256、怎么自定义Spring Starter?编写配置类、spring.factories文件、自动配置依赖。
257、SpringBoot actuator监控端点作用健康检查、线程信息、环境变量、Bean信息。
258、CORS跨域怎么解决?@CrossOrigin、全局CorsConfig、Nginx反向代理。
259、Spring Validation参数校验@NotBlank @NotNull;统一捕获MethodArgumentNotValidException。
260、SpringBoot热部署 devtools原理类文件变更自动重启;双类加载器提升速度。
七、MySQL数据库(261~300)
261、InnoDB与MyISAM核心区别InnoDB:支持事务、行级锁、外键、崩溃恢复,读写均衡,是MySQL默认引擎;MyISAM:不支持事务、表级锁、无崩溃恢复机制,查询速度快,适合纯读静态数据,并发性能差,现已基本淘汰。
262、事务四大特性ACID原子性(Atomic):事务要么全部执行成功,要么全部回滚;一致性(Consistent):事务前后数据库数据状态合法、约束有效;隔离性(Isolate):多事务并发互不干扰;持久性(Durable):事务提交后数据永久落地,断电不丢失。
263、MySQL四大事务隔离级别(从低到高)读未提交、读已提交、可重复读、串行化;InnoDB默认可重复读(RR)。
264、各隔离级别对应的脏读、不可重复读、幻读问题读未提交:存在脏读、不可重复读、幻读;读已提交:解决脏读,存在不可重复读、幻读;可重复读:解决脏读、不可重复读,存在幻读;串行化:全部解决,并发最低。
265、脏读、不可重复读、幻读定义脏读:一个事务读取到另一个事务未提交的脏数据;不可重复读:同一事务内,两次读取同一数据结果不一致(其他事务更新提交);幻读:同一事务内,范围查询结果条数不一致(其他事务新增/删除提交)。
266、InnoDB如何解决幻读?通过Next-Key Lock(临键锁),锁住查询范围左右区间,防止其他事务新增、删除数据,彻底解决RR级别幻读问题。
267、MySQL锁分类按粒度:表锁、行锁、页锁;按类型:共享锁S、排他锁X;按机制:意向锁、临键锁、间隙锁、记录锁。
268、行锁与表锁区别行锁:锁定单行数据,并发高,InnoDB支持;表锁:锁定整张表,并发低,MyISAM默认、InnoDB无索引时触发。
269、什么是意向锁?意向共享锁、意向排他锁,是表级辅助锁;用来提前标记表内存在行锁,避免全表遍历检测锁冲突,提升锁检测效率。
270、记录锁、间隙锁、临键锁区别记录锁:锁定单条索引记录;间隙锁:锁定索引区间间隙,防止插入数据;临键锁=记录锁+间隙锁,锁定左开右闭区间,彻底杜绝幻读。
271、MySQL索引底层结构?为什么用B+树不用B树、哈希?InnoDB索引底层B+树;B+树叶子节点串联,范围查询高效、磁盘IO少、层高更低;B树非叶子节点存数据,范围查询弱;哈希索引无法范围查询、不支持排序、存在哈希冲突。
272、B+树索引特点非叶子节点只存索引键,不存数据,层高小、查询快;所有数据都在叶子节点,有序串联;适配磁盘分页存储,IO次数极少。
273、聚簇索引与非聚簇索引区别聚簇索引:主键索引,叶子节点存完整行数据,一张表仅有一个;非聚簇索引(二级索引):普通索引,叶子节点存主键值,查询需要回表。
274、回表查询是什么?通过二级索引找到主键,再通过主键索引查询完整行数据的过程,会增加IO开销,影响查询性能。
275、覆盖索引原理与优势查询所需字段全部包含在二级索引中,无需回表查询;极大减少IO,是高频优化手段。
276、最左前缀原则联合索引生效规则:查询条件必须匹配索引最左侧字段,后续字段依次生效;跳过左侧字段、索引断裂,后续索引全部失效。
277、联合索引失效常见场景违反最左前缀、索引列参与运算/函数、隐式类型转换、or无索引、like前置模糊匹配、order by字段无索引。
278、like %xxx、xxx%、%xxx% 索引情况xxx%:走索引;%xxx、%xxx%:不走索引,全表扫描。
279、MySQL隐式类型转换索引失效场景字符串字段与数字对比、字段类型与参数类型不一致,会触发隐式转换,索引失效。
280、索引设计最佳实践高频查询字段建索引、区分度高字段优先、短字段建索引、联合索引遵循最左前缀、避免冗余索引、控制索引数量。
281、索引不是越多越好原因索引占用磁盘空间;增删改数据需要同步维护索引,降低写入性能。
282、唯一索引、普通索引、主键索引区别主键索引:非空唯一、一张表一个;唯一索引:字段唯一可空;普通索引:无唯一性约束,仅加速查询。
283、自适应哈希索引作用InnoDB自动将高频访问的页数据建立哈希索引,提升热点数据查询速度,无需手动维护。
284、MVCC多版本并发控制原理基于undo log版本链+read view,实现无锁读写;读数据读取历史快照版本,写数据加行锁,提升并发性能,支撑RR隔离级别。
285、undo log、redo log作用区别undo log:保存数据修改前版本,用于事务回滚、MVCC版本快照;redo log:保存数据修改后日志,崩溃重启恢复数据,保证持久性。
286、binlog作用与特点二进制日志,记录所有DDL、DML语句;用于主从复制、数据恢复、日志审计;属于Server层日志。
287、binlog三种格式STATEMENT:记录SQL语句,日志量小,可能主从数据不一致;ROW:记录行数据变更,精准无误差,日志量大;MIXED:混合模式,自动择优。
288、MySQL主从复制原理主库写入数据,记录binlog;从库IO线程拉取主库binlog写入本地relay log;从库SQL线程重放日志,同步数据。
289、主从延迟原因与解决方案原因:大事务、SQL执行慢、网络延迟、从库单线程重放;方案:拆分大事务、优化慢SQL、并行复制、提升服务器配置。
290、读写分离原理与适用场景主库负责增删改写操作,从库负责查询读操作;分担主库压力,提升并发能力,适合读多写少业务。
291、慢查询日志作用记录执行超时、未走索引的SQL,用于定位慢SQL、优化数据库性能。
292、explain执行计划核心字段type(连接类型)、key(使用索引)、rows(扫描行数)、Extra(额外信息)、possible_keys(候选索引)。
293、type字段性能优先级system > const > eq_ref > ref > range > index > all,避免all全表扫描。
294、limit 10000,10 深分页优化偏移量大导致扫描行数过多;优化:主键索引分页、子查询筛选、延迟关联、覆盖索引。
295、count(*)、count(1)、count(字段)区别count(*)、count(1)统计所有行,InnoDB无差异;count(字段)忽略null值,性能更低。
296、MySQL大表优化方案分库分表、冷热数据分离、优化索引、定时归档、分区表、读写分离。
297、分库分表垂直拆分、水平拆分垂直拆分:按业务模块拆库拆表,解耦业务;水平拆分:按数据量拆分,均匀分摊数据,解决单表数据量大问题。
298、分表后跨分页、跨排序问题多表数据无序,直接分页排序不准确;解决方案:中间层聚合、分片排序、业务层汇总计算。
299、数据库死锁产生与排查多事务互相持有对方锁、循环等待导致死锁;通过show engine innodb status查看死锁日志,统一锁顺序、缩小事务粒度规避。
300、MySQL性能优化总结SQL优化(避免全表扫描、函数运算)、索引优化、事务优化(小事务、无大事务)、架构优化(读写分离、分库分表)、参数调优。
八、Redis缓存(301~350)
301、Redis特点高性能内存数据库、键值对存储、支持多数据结构、持久化、单线程模型、高并发、低延迟。
302、Redis为什么高性能?纯内存操作、单线程无锁竞争、IO多路复用、精简数据结构、协议简单高效。
303、Redis单线程核心解释核心读写命令单线程执行,避免线程切换、锁竞争;持久化、集群同步等操作由子线程完成。
304、Redis常用数据结构及场景String:缓存、计数器、分布式ID;List:消息队列、有序列表;Set:去重、交集差集;Hash:对象缓存、购物车;ZSet:排行榜、延时队列。
305、String底层结构SDS特点动态字符串、预分配内存、杜绝缓冲区溢出、记录长度获取O(1)、可存二进制数据。
306、Redis过期删除策略惰性删除+定期删除;惰性删除:访问时判断过期删除;定期删除:定时随机抽查删除过期key。
307、Redis内存淘汰策略(8种)volatile-lru:过期key LRU淘汰;allkeys-lru:所有key LRU淘汰;volatile-ttl:淘汰即将过期key;随机淘汰、LFU淘汰、禁止淘汰等;生产常用allkeys-lru、volatile-lru。
308、LRU、LFU区别LRU:淘汰最久未使用;LFU:淘汰使用频率最低,更贴合热点数据。
309、Redis持久化两种方式RDB快照、AOF日志。
310、RDB原理与优缺点定时生成内存快照文件;优点:文件小、恢复快、性能高;缺点:可能丢失最后一次快照后的数据。
311、AOF原理与优缺点记录每条写命令日志;优点:数据安全、丢失数据极少;缺点:文件大、恢复慢、性能略低。
312、AOF重写机制合并冗余命令,压缩AOF文件体积,避免日志无限膨胀,不影响正常业务。
313、生产持久化配置方案RDB+AOF混合持久化,兼顾性能与数据安全。
314、缓存穿透、击穿、雪崩区别与解决方案穿透:查询不存在数据;方案:布隆过滤器、空值缓存、接口校验;击穿:热点key过期瞬间大量请求打数据库;方案:互斥锁、热点key永不过期、二级缓存;雪崩:大量key同时过期/缓存宕机;方案:过期时间加随机值、集群高可用、限流降级。
315、布隆过滤器原理多个哈希函数映射同一bit数组,判断数据是否存在;高效去重、防穿透,存在误判、不支持删除。
316、Redis分布式锁实现原理SET key value NX EX 过期时间;NX保证互斥,EX防止死锁。
317、分布式锁存在的问题与优化问题:锁过期业务未执行完、主从延迟锁失效;优化:Redisson可重入锁、看门狗续期、Redlock多机锁。
318、Redisson核心优势支持可重入、自动续期、公平锁、读写锁、联锁,封装完善,适配生产场景。
319、缓存更新策略先更新数据库再更新缓存、先更新数据库再删除缓存、定时更新缓存;推荐先更库后删缓存,减少数据不一致。
320、缓存与数据库一致性解决方案延时双删、消息队列异步删缓存、订阅binlog更新缓存、定时校验同步。
321、Redis主从架构原理一主多从,主写从读,数据异步复制,分担读压力。
322、哨兵Sentinel作用监控主从节点、自动故障转移、自动切换主库、通知客户端,实现高可用。
323、Redis集群Cluster原理16384个哈希槽,分片存储数据;多主多从,去中心化,支持水平扩容。
324、集群哈希槽分配规则CRC16(key)%16384 计算槽位,分配至对应节点。
325、集群扩容缩容原理迁移哈希槽数据,不影响业务正常运行,实现平滑扩容。
326、Redis事务特点批量命令一次性执行、不支持回滚、原子性弱、无隔离级别。
327、Lua脚本优势多条命令原子执行、减少网络IO、保证操作一致性,替代简单事务。
328、Redis流水线Pipeline作用批量发送命令、批量返回结果,减少网络往返耗时,提升批量操作性能。
329、BigKey问题与优化大key占用内存高、拷贝慢、阻塞线程;优化:拆分key、精简数据、放弃大key结构。
330、HotKey热点key问题优化热点key流量集中单节点;优化:本地缓存、key分片、集群分摊流量。
331、Redis慢查询日志记录执行耗时较长的命令,用于定位性能瓶颈。
332、Redis内存碎片原因与解决内存分配不连续、频繁增删数据;解决:主动内存碎片整理、重启服务。
333、Redis过期key删除延迟问题不会实时删除,大量过期key堆积会占用内存,依赖定期删除+主动访问删除清理。
334、Redis支持的发布订阅基于频道模式实现消息发布订阅,适合简单即时通知,不保证消息可靠。
335、Redis Stream作用消息队列结构,支持消息持久化、消费确认、消费者组,替代简单MQ场景。
336、Redis为什么适合做缓存?高性能、内存存储、数据结构丰富、过期机制、集群高可用、支持持久化。
337、Redis不适用场景海量冷数据存储、复杂事务场景、数据一致性要求极高场景。
338、主从同步全量复制、增量复制全量:初次同步/偏移量过大,传输完整RDB;增量:正常同步,传输偏移量后增量命令。
339、复制积压缓冲区作用存储主库增量命令,用于从库增量复制,减少全量复制概率。
340、Redis客户端连接优化使用连接池、合理设置最大连接数、闲置连接回收,避免频繁创建销毁连接。
341、Redis超时时间设置规范结合业务有效期设置,避免永久key堆积内存,热点key可适当延长或取消过期。
342、多级缓存架构本地缓存(Caffeine)+ Redis分布式缓存,兼顾极致性能与数据一致性。
343、Redis CAS乐观锁实现基于watch监听key,事务执行前key被修改则放弃执行,保证数据一致性。
344、Redis批量操作注意事项避免一次性操作海量key,防止阻塞主线程,分批执行。
345、集群槽位迁移失败问题检查节点状态、网络连通、数据冲突,手动重置槽位重新迁移。
346、哨兵集群最少节点数最少3个哨兵节点,保证多数投票机制,防止脑裂。
347、Redis脑裂问题网络分区导致双主节点,数据写入混乱;解决方案:设置最小从节点数、哨兵防护。
348、Redis版本核心升级点Redis6支持多线程IO、客户端缓存、ACL权限;Redis7优化集群、性能大幅提升。
349、Redis监控核心指标内存使用率、key过期率、命中率、QPS、连接数、持久化状态、集群节点状态。
350、Redis生产最佳实践禁止大key、合理过期时间、混合持久化、集群部署、限流防护、监控告警、定期清理无效数据。
九、RabbitMQ消息队列(351~380)
351、消息队列核心作用解耦、削峰填谷、异步处理、流量控制、事务最终一致性。
352、RabbitMQ核心组件生产者、交换机、队列、消费者、虚拟主机vhost。
353、四大交换机类型Direct直连:精准匹配路由键;Topic主题:模糊匹配,支持通配符;Fanout广播:全队列分发;Headers头部:匹配消息头参数。
354、Direct交换机适用场景一对一精准推送、单业务点对点消息。
355、Topic交换机适用场景多订阅、消息分类、多级路由,最常用。
356、Fanout交换机适用场景广播通知、多服务同步、批量推送。
357、消息可靠投递机制生产者确认confirm、消息退回return、队列持久化、消息持久化、消费者手动ack。
358、生产者Confirm机制消息发送到交换机成功则回调确认,失败触发异常,保证消息不丢失。
359、Return退回机制消息无法路由到队列时触发退回,避免消息丢失。
360、消息持久化配置交换机持久化、队列持久化、消息deliveryMode=2持久化。
361、消费者ACK机制手动ack:业务处理成功确认,失败可重试;自动ack:消息分发即确认,容易丢消息。
362、消息重复消费原因与解决网络超时、ack未送达、重试机制导致重复;解决方案:业务幂等、唯一消息ID去重。
363、消息幂等实现方案消息ID唯一约束、数据库唯一索引、状态机判断、分布式锁。
364、死信队列DLX原理消息过期、被拒绝、队列满,自动转发至死信队列,用于异常消息处理、延时任务。
365、延时队列实现方式TTL过期时间+死信队列组合实现,替代定时任务。
366、消息堆积原因与解决方案消费者消费速度慢、业务阻塞、消费者宕机;方案:优化消费逻辑、增加消费者数量、批量消费、临时扩容队列。
367、RabbitMQ集群模式普通集群:同步队列元数据,数据不共享;镜像集群:队列数据镜像同步,高可用。
368、镜像队列作用主节点故障,从节点自动接管,保证消息不丢失、服务不中断。
369、消息顺序性保证方案单队列单消费者、消息分区路由、有序消息分发。
370、事务消息使用场景本地事务与消息发送原子性,保证事务成功发消息、失败不发送。
371、RabbitMQ限流机制消费者prefetch设置单次拉取消息数量,防止瞬间流量压垮消费者。
372、消息过期清理机制设置TTL过期时间,超时未消费自动进入死信队列,避免无效消息堆积。
373、RabbitMQ与Kafka区别RabbitMQ:可靠、事务支持完善、适合业务消息;Kafka:高吞吐、分区架构、适合日志、大数据流式处理。
374、MQ解耦优势上下游服务无直接依赖,业务迭代互不影响,扩展性更强。
375、削峰填谷原理瞬时高峰流量缓存至队列,消费者匀速消费,避免流量击穿后端服务。
376、MQ消息丢失完整防护方案生产者confirm+return、消息持久化、手动ack、死信兜底、定时补发。
377、批量消费优势与注意事项提升消费吞吐量,减少IO次数;需保证批量消息处理失败可回滚、可重试。
378、RabbitMQ监控核心指标消息生产速率、消费速率、堆积数量、死信数量、节点状态、连接信道数。
379、MQ业务最终一致性方案可靠投递+幂等消费+定时补偿+日志溯源,实现分布式事务最终一致。
380、RabbitMQ生产避坑点禁止自动ack、合理设置TTL、避免无限重试、监控堆积、做好幂等、集群高可用部署。
十、SpringCloud微服务(381~420)
381、微服务架构核心思想单体拆分为独立小型服务,单一职责、独立部署、独立迭代、分布式协作。
382、微服务与单体架构区别单体:耦合高、迭代慢、扩容困难;微服务:解耦、独立扩展、迭代快、适配高并发大型项目。
383、SpringCloud核心组件栈Nacos注册配置中心、Gateway网关、Feign远程调用、Sentinel熔断限流、Ribbon负载均衡、Seata分布式事务。
384、Nacos作用一站式服务注册发现、配置中心、动态配置刷新、服务管理。
385、Nacos核心优势兼容SpringCloud、动态配置实时刷新、集群高可用、轻量易用、同时支持注册+配置。
386、服务注册发现原理微服务启动注册实例信息至Nacos,消费者拉取服务列表,实现远程调用。
387、Nacos心跳机制服务定时上报心跳,超时未上报判定服务下线,剔除无效实例。
388、Gateway网关核心作用统一入口、路由转发、负载均衡、鉴权、限流、日志、跨域处理。
389、Gateway与Zuul区别Gateway基于Netty异步非阻塞、性能高;Zuul基于Servlet同步阻塞、性能低,已淘汰。
390、网关核心过滤器全局过滤器、路由过滤器,实现自定义拦截、预处理、后置处理逻辑。
391、Feign远程调用原理基于动态代理封装HTTP请求,简化远程调用,自带负载均衡。
392、Feign与RestTemplate区别Feign声明式调用、代码简洁、集成度高;RestTemplate手动拼接请求,繁琐。
393、Ribbon负载均衡策略轮询、随机、加权、最小并发、响应时间加权等。
394、Sentinel核心功能流量限流、熔断降级、系统自适应保护、热点流量防护。
395、限流与熔断降级区别限流:限制瞬时流量,防止流量过大;熔断:服务故障自动熔断,避免级联失败;降级:故障时返回兜底数据,保障可用。
396、Sentinel流量控制规则QPS限流、线程数限流、链路限流、热点参数限流。
397、熔断策略慢调用比例、异常比例、异常数触发熔断,熔断后进入静默期自动恢复。
398、Seata分布式事务解决方案AT、TCC、SAGA、XA四种模式,常用AT模式无侵入、适配业务。
399、Seata AT模式原理一阶段执行业务SQL、记录undo日志;二阶段成功删除日志、失败回滚日志,保证全局事务一致。
400、TCC模式特点手动实现Try-Confirm-Cancel三阶段,侵入业务,适合高一致性场景。
401、微服务跨域解决方案Gateway统一跨域配置、服务局部跨域注解、Nginx跨域配置。
402、服务调用链路追踪SkyWalking、Sleuth+Zipkin,追踪全链路调用日志、定位异常瓶颈。
403、配置中心动态刷新原理Nacos推送配置变更,服务监听变更自动刷新配置,无需重启服务。
404、微服务认证授权方案OAuth2.0、JWT令牌、网关统一鉴权、服务内部权限校验。
405、JWT令牌结构与特点头部、载荷、签名三段;无状态、可自校验、无需存储、适合分布式认证。
406、微服务日志规范统一日志格式、链路ID贯穿全链路、集中日志收集(ELK)。
407、服务雪崩成因与防护下游服务故障,上游大量请求堆积导致级联宕机;防护:熔断、降级、限流、隔离。
408、线程隔离作用不同服务调用独立线程池,故障互不影响,避免全局雪崩。
409、微服务版本灰度发布滚动发布、蓝绿发布、灰度流量分发,实现无停机迭代。
410、Nacos配置优先级本地配置 < 远程配置,远程配置覆盖本地,实现动态统一管控。
411、网关限流实现方式网关全局限流、接口粒度限流、IP限流、用户维度限流。
412、Feign超时重试配置自定义超时时间、失败重试次数,适配网络波动场景。
413、微服务接口幂等设计所有对外接口、远程调用接口必须保证幂等,避免重复操作。
414、分布式ID生成方案雪花算法、UID、数据库自增、Redis自增、百度UidGenerator。
415、雪花算法结构时间戳+机器ID+数据中心ID+序列号,全局唯一、有序、高性能。
416、微服务监控体系服务健康监控、指标监控、链路监控、日志监控、告警体系。
417、SpringCloud Alibaba优势组件轻量、易用、生态统一、国产适配、文档完善、适配国内业务场景。
418、服务优雅上下线主动注销服务、等待请求处理完毕、关闭连接,避免请求丢失。
419、微服务拆分原则单一职责、高内聚低耦合、业务边界清晰、避免过度拆分。
420、微服务核心痛点分布式事务、服务治理、链路排查、部署运维复杂、网络延迟。
十一、分布式核心理论(421~440)
421、CAP理论一致性、可用性、分区容错性;分布式系统无法同时满足三者,必须取舍。
422、CAP取舍策略CP:舍弃可用性,保证数据一致(注册中心、数据库);AP:舍弃强一致,保证高可用(缓存、MQ)。
423、BASE理论基本可用、软状态、最终一致性;分布式系统主流设计思想,放弃强一致,保障最终一致。
424、最终一致性含义短暂数据不一致,经过同步、补偿后,最终所有节点数据统一。
425、分布式事务问题成因跨服务、跨数据库操作,本地事务无法管控,出现数据不一致。
426、分布式事务解决方案对比XA强一致、AT无侵入、TCC高可靠、SAGA长事务适配。
427、幂等性核心意义分布式网络不稳定,重试频繁,幂等保证多次请求结果一致,无副作用。
428、分布式锁使用场景定时任务防重复执行、并发扣减库存、分布式资源竞争。
429、分布式锁实现方案Redis分布式锁、Zookeeper分布式锁、数据库悲观/乐观锁。
430、Zookeeper锁优势天然公平锁、自动释放、无死锁、可靠性更高,性能低于Redis。
431、分布式限流层级网关限流、服务限流、接口限流、单机限流多层防护。
432、流量削峰核心思路异步化、队列缓冲、延迟处理、错峰执行、限流兜底。
433、数据一致性分级强一致性、弱一致性、最终一致性、业务一致性。
434、分布式系统时钟问题机器时间不同步,导致时序错乱、数据异常;通过NTP时钟同步、时间戳容错处理解决。
435、脑裂问题定义与解决集群网络分裂,多节点独立工作导致数据混乱;解决:过半选举、最小节点限制、心跳检测。
436、数据分片核心思想海量数据拆分存储,分摊压力,突破单库单表性能瓶颈。
437、读写分离核心收益读写压力拆分,提升数据库并发能力,适配读多写少业务。
438、异地多活架构多机房部署,异地容灾,单机房故障不影响整体业务可用。
439、服务治理核心内容注册发现、流量管控、熔断降级、监控告警、灰度发布、故障自愈。
440、分布式架构设计原则高可用、高并发、可扩展、可容错、最终一致、无状态设计。
十二、Linux与线上问题排查(441~450)
441、线上CPU飙升排查流程top查看高CPU进程 → ps定位线程 → jstack打印线程栈 → 定位死循环、频繁GC、死锁代码。
442、线上内存溢出OOM排查jmap导出堆快照 → MAT分析大对象、内存泄漏点 → 定位无效对象堆积、代码漏洞。
443、磁盘占用过高排查df查看磁盘使用率 → du统计大文件 → 清理日志、临时文件、无用缓存。
444、网络延迟、接口超时排查ping、telnet检测连通性 → netstat查看连接状态 → 排查端口占用、网络拥堵、防火墙限制。
445、日志排查核心命令tail实时查看、grep筛选关键字、less分页查看、awk统计日志、sed替换处理。
446、进程状态排查ps查看进程、kill终止异常进程、nohup后台运行、screen持久会话。
447、线上卡顿常见原因频繁Full GC、线程死锁、数据库慢SQL、Redis大key、MQ消息堆积、CPU满载。
448、服务重启流程规范优雅下线 → 停止流量接入 → 关闭服务 → 重启服务 → 健康检查 → 恢复流量。
449、线上故障处理原则先恢复可用、再定位问题、最后复盘优化,优先保障业务正常。
450、Linux高频运维命令top、df、du、netstat、ps、grep、tail、curl、free、vmstat,用于日常监控与故障排查。
十三、大高频(451~500)
451、如何设计一个高并发秒杀系统?前端限流、页面静态化;网关限流、黑名单拦截;Redis预减库存、异步削峰;MQ异步下单、最终落地数据库;库存锁、防超卖、幂等设计;分层降级兜底。
452、秒杀防超卖解决方案Redis原子递减、数据库乐观锁、分布式锁、库存预扣+回滚机制。
453、如何解决接口幂等问题?唯一流水号、数据库唯一索引、状态机校验、分布式锁、Redis去重标记。
454、Redis缓存一致性最终方案先更新数据库、后删除缓存+延时双删+binlog异步更新+定时校验补偿。
455、百万级QPS系统架构设计多级缓存、读写分离、分库分表、异步解耦、限流降级、集群扩容、无状态服务。
456、如何排查线上Full GC频繁问题?jstat观察GC频率、jmap分析堆内存、排查大对象、内存泄漏、不合理内存参数、频繁创建销毁对象。
457、微服务接口超时连锁问题如何解决?合理超时时间、熔断降级、线程隔离、异步处理、避免同步串行调用。
458、分布式事务最终一致性完整方案可靠消息+幂等消费+定时补偿+事务状态表+日志溯源。
459、大流量峰值场景架构优化静态资源CDN、本地缓存+分布式缓存、异步MQ削峰、限流排队、弹性扩容。
460、数据库千万级大表优化方案合理索引、避免深分页、分库分表、冷热分离、读写分离、定时归档、SQL极致优化。
461、如何设计分布式限流组件?Redis计数器、令牌桶算法、网关统一拦截、分维度限流、限流熔断联动。
462、Redis热点key、大key线上解决方案热点key:本地缓存、key分片、流量分摊;大key:拆分数据、精简结构、分批删除。
463、MQ消息堆积线上紧急处理临时增加消费者、开启批量消费、优化消费逻辑、清理无效消息、扩容队列节点。
464、如何实现服务无损扩容缩容?优雅上下线、灰度流量、健康检查、流量平滑切换、无停机发布。
465、高可用架构设计核心要点多节点集群、异地多活、故障自动转移、限流降级兜底、无状态服务、数据多副本。
466、Spring循环依赖三级缓存核心原理?一级缓存存完整Bean,二级存半成品Bean,三级存Bean工厂;提前暴露未初始化Bean,解决单例Setter循环依赖。
467、JVM调优核心参数与场景堆内存大小、新生代比例、GC收集器选择、元空间大小、逃逸分析开启,减少Full GC、降低STW。
468、MySQL慢SQL完整优化流程抓取慢日志→explain分析执行计划→优化索引→改写SQL→优化业务逻辑→压测验证。
469、如何避免微服务级联故障?熔断、降级、限流、线程隔离、超时控制、故障兜底、快速失败。
470、分布式ID设计要求全局唯一、有序、高性能、可扩容、无重复、适配分布式场景。
471、本地缓存与分布式缓存结合方案Caffeine本地缓存+Redis分布式缓存,减少网络IO,兼顾性能与一致性。
472、接口性能优化通用思路减少IO、减少循环、批量操作、缓存复用、异步化、避免锁竞争、优化SQL。
473、如何处理分布式定时任务?Quartz、XXL-Job、分布式锁防重、任务分片、故障重试、日志监控。
474、高并发扣库存防超卖完整方案Redis预扣、分布式锁、数据库乐观锁、事务兜底、超时回滚、库存校验。
475、线上内存泄漏常见场景与定位静态集合堆积、ThreadLocal未清理、连接未释放、循环引用、缓存无过期;通过堆快照精准定位。
476、微服务链路追踪核心作用贯穿全服务调用链路,快速定位超时、异常、卡顿节点,解决分布式排查难问题。
477、分库分表后跨表查询、分页、排序解决方案业务层聚合、中间层分片计算、ES辅助查询、避免复杂跨分片SQL。
478、Redis集群脑裂问题解决方案最小从节点配置、哨兵防护、网络分区容错、数据校验兜底。
479、系统稳定性保障体系监控告警、限流降级、故障演练、灰度发布、日志追踪、应急预案、复盘优化。
480、如何实现接口零重复执行?全局唯一幂等键、前置去重、状态机锁定、分布式锁防护。
481、大数据量导入导出优化批量读写、分页处理、异步导出、文件分片、IO缓冲、避免一次性加载全量数据。
482、Spring事务失效最全场景总结非public、同类自调用、异常被捕获、嵌套事务、数据库不支持事务、传播配置错误。
483、CAS优缺点与适用场景优点:无锁、高性能;缺点:ABA、自旋耗CPU、仅支持单变量;适合轻量并发场景。
484、线程池参数动态调整思路根据QPS、CPU负载、队列堆积,动态调整核心线程数、最大线程数、队列长度。
485、MQ顺序消息、事务消息落地方案单消费者保证顺序、事务半消息机制、消息状态回查、最终一致。
486、多级缓存一致性保障定时刷新、事件更新、过期淘汰、主动更新、版本号校验。
487、高可用Redis架构选型哨兵模式适配中小型集群、Cluster集群适配大规模分片、主从适配基础缓存场景。
488、MySQL索引失效真实业务场景隐式转换、函数运算、or查询、前置模糊、索引断裂、数据量过少。
489、微服务灰度发布实现原理流量权重分发、版本路由、灰度标记、分层放量、异常回滚。
490、分布式锁续期、释放异常处理看门狗自动续期、防误删、过期兜底、解锁幂等。
491、系统限流阈值如何合理配置?压测摸底峰值、预留冗余、结合机器配置、业务峰值、动态调整阈值。
492、线上慢接口优化完整流程链路追踪定位耗时节点→优化SQL/缓存/异步→压测验证→灰度上线→监控观测。
493、冷热数据分离设计思路热点数据放内存/高性能库、冷数据归档至低成本存储,减少主库压力。
494、如何解决分布式会话问题?统一Redis存储session、JWT无状态令牌、网关统一鉴权。
495、高并发下单业务完整架构限流拦截→库存预扣→异步下单→消息确认→数据库落地→结果回调。
496、服务雪崩完整防护体系超时控制、线程隔离、熔断降级、流量限流、故障兜底、快速失败。
497、数据不一致问题通用排查思路核对同步链路、检查重试机制、查看日志、校验事务状态、补偿数据。
498、大厂项目性能优化通用套路缓存优先、异步解耦、批量处理、IO优化、锁优化、SQL优化、架构分层。
499、面试高频:从0到1设计一个后端项目架构基础架构(SpringBoot+Mysql+Redis+MQ)、分层架构、权限体系、缓存体系、消息体系、监控体系、限流降级、高可用部署、日志追踪。
500、后端工程师核心成长核心能力扎实基础、性能优化、故障排查、架构思维、业务抽象、分布式认知、稳定性保障、持续复盘优化。






