自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不堪提

海内存知己,天涯若比邻

  • 博客(26)
  • 收藏
  • 关注

原创 【面试突击】MySQL 查询优化核心面试知识点

MySQL查询优化核心知识点包括索引优化和SQL语句优化两大方面。索引优化部分详解了B+Tree、Hash等索引类型及适用场景,索引分类(单列/联合、主键/唯一/普通等),以及索引优化规则(最左前缀原则、索引失效场景、索引覆盖和索引下推)。SQL语句优化则强调了避免SELECT *、小表驱动大表原则、用JOIN替代子查询、分页优化等技巧。这些知识点是MySQL性能调优的核心内容,能有效提升查询效率,减少系统资源消耗。

2025-12-25 15:33:50 75

原创 【面试突击】PostgreSQL vs MySQL 索引架构深度对比:聚簇索引 vs 堆表

本文深入对比了PostgreSQL和MySQL在索引架构上的核心差异。MySQL采用聚簇索引,数据按主键排序存储,主键查询只需一次索引查找;而PostgreSQL使用堆表结构,数据无序存储,所有索引都指向数据物理位置,查询需要额外访问堆表。通过图书馆管理系统的生动类比,文章阐释了两种架构的工作机制:MySQL类似按书号排序的书架,PostgreSQL则像无序仓库配合索引册。文中详细解析了PostgreSQL堆表和索引的存储原理,包括TID概念和索引结构,帮助读者理解两者在查询性能、更新成本等方面的差异。这种

2025-12-25 15:31:00 595

原创 【面试突击】深入理解 TCP 三次握手与 HTTP 协议演进

本文深入解析TCP三次握手机制和HTTP协议演进过程。TCP三次握手通过序列号确认建立可靠连接:客户端发送SYN和初始序列号x,服务器回应SYN-ACK和自己的序列号y并确认x+1,客户端最后确认y+1完成连接。数据传输时序列号会按字节递增。 HTTP协议从1.0到1.1的重要改进包括:1.0版本每次请求需新建TCP连接,性能低下;1.1引入持久连接(Keep-Alive)复用TCP连接,支持管道化请求和分块传输,显著提升性能。通过对比1.0需要多次握手/挥手和1.1复用连接的实例,展示了协议演进对网络性能

2025-12-25 14:14:42 768

原创 【面试突击】Spring Security + OAuth2 密码模式实战:Gateway 作为网关与资源服务器,Auth 作为认证服务器(完整认证链路解析)

本文介绍了一种基于Spring Security和OAuth2密码模式的微服务认证鉴权方案。Auth服务作为认证服务器负责Token签发与校验,Gateway同时承担网关和资源服务器角色。文章详细梳理了从客户端登录到Token生成、校验及用户信息透传的全流程,包括关键组件如BasicAuthenticationFilter、ProviderManager、UserDetailsService和TokenStore的执行顺序。方案采用Redis存储Token,通过Gateway实现Token远程校验和用户信息

2025-12-24 15:44:13 899

原创 【面试突击】深度解析:Redis 与数据库(DB)的一致性方案

懒加载(Lazy Loading):更新后的数据可能很久才被读一次。直接删除,等下次读时再加载,能节省内存资源。安全性(防止脏数据覆盖)如果两个线程同时写,更新缓存可能导致并发问题(线程 A 先写,线程 B 后写,但 B 的网络慢,导致 A 的旧值覆盖了 B 的最新值)。删除操作是幂等的,能显著降低这种竞争风险。“通常我们采用模式,即先更新 DB 再删除缓存。为了应对极端情况下的主从延迟,可以配合延时双删。如果业务对数据一致性要求极高,我们会通过Canal 监听 Binlog。

2025-12-24 09:33:15 648

原创 【面试突击】MySQL 索引必会:B+Tree、回表、覆盖索引、最左前缀、索引下推(ICP)

本文深入解析MySQL InnoDB索引的核心机制,重点剖析B+Tree索引结构、聚簇索引与二级索引的区别。详细解释了回表查询的原理及其性能问题,并介绍如何通过覆盖索引避免回表。深入讲解联合索引的最左匹配原则及其实现原理,包括范围查询对索引使用的影响。特别介绍了索引下推(ICP)技术如何优化查询性能。文章还提供了索引设计实战建议,帮助开发者合理设计索引结构,并通过EXPLAIN分析查询执行计划。这些知识对MySQL性能优化和面试准备都具有重要价值。

2025-12-22 15:05:31 773

原创 【面试突击】Spring IOC:Bean 创建流程全解析(从 getBean 到 AOP 代理生成)

本文深入解析了Spring IOC容器中Bean的创建流程。核心流程包括:1)通过doGetBean入口检查缓存或触发创建;2)doCreateBean四步生产线:实例化生成原始对象、属性填充注入依赖、初始化执行回调、注册销毁方法;3)AOP代理在初始化阶段的BeanPostProcessor.after环节生成;4)最终成品存入单例池。特别强调了循环依赖处理通过三级缓存机制实现,以及AOP代理的生成时机。整个流程将BeanDefinition转化为可用的Bean实例(可能是代理),体现了Spring依赖注

2025-12-22 15:02:59 822

原创 【面试突击】深度进阶:Spring AOP 代理机制、失效场景与切面顺序全解析

本文深入解析Spring AOP三大核心问题:代理机制、失效场景与切面顺序。Spring AOP基于动态代理,默认JDK代理(需接口)或CGLIB代理(继承实现)。常见失效场景包括内部调用(this指向原始对象)、方法权限问题和非Spring Bean对象。多切面执行顺序遵循"洋葱模型",@Order值越小优先级越高,入站先执行@Before,出站后执行@After。文章还总结了AOP五大术语:切面、切入点、通知、连接点和代理,建议合理使用AOP,避免过度增加调试难度。

2025-12-22 14:24:43 670

原创 【面试突击】Spring Bean 生命周期深度解析:结合三级缓存理解循环依赖

Spring通过三级缓存机制解决循环依赖问题,其中AOP代理的提前触发是关键。一级缓存存储成品Bean,二级缓存存储半成品Bean,三级缓存存放对象工厂。当发生循环依赖时(如A依赖B,B依赖A),B在填充属性A时会触发三级缓存中的工厂,通过getEarlyBeanReference提前生成A的代理对象并存入二级缓存,确保注入的是代理对象而非原始对象。这种机制既保证了Bean的单例性,又避免了AOP切面逻辑丢失。三级缓存的核心价值在于按需延迟处理AOP,而二级缓存则确保多依赖场景下代理对象的唯一性。

2025-12-22 14:15:49 784

原创 【面试突击】JVM 内存结构和 JDK7 / JDK8 差异,用一次就能讲清楚

本文对比了JDK7和JDK8的JVM内存结构差异,重点解析了方法区的实现变化:JDK7使用堆内的PermGen存储类信息,而JDK8改用本地内存的Metaspace。文章还概述了堆、栈、直接内存等关键区域的功能及常见问题,提供了清晰的总览表。通过简洁的语言和对比表格,帮助读者快速掌握核心知识点,应对面试和排查OOM问题。

2025-12-22 10:05:56 1068

原创 【面试突击】JAVA基础知识-线程池与参数调优

本文深入解析Java线程池的核心参数与调优策略,重点围绕ThreadPoolExecutor的构造参数展开。首先阐明使用线程池的必要性:降低线程创建开销、控制并发数、提升系统稳定性。随后详细解析corePoolSize、maximumPoolSize等关键参数,对比ArrayBlockingQueue、LinkedBlockingQueue等不同队列的特性与适用场景,分析四种拒绝策略的差异。最后指出不推荐直接使用Executors工厂方法的原因:其默认使用无界队列存在OOM风险。文章为Java线程池的合理配

2025-12-20 09:15:36 683

原创 【面试突击】JAVA基础知识-GC 机制与分代回收

Java GC机制与分代回收 Java采用自动垃圾回收(GC)机制管理堆内存,通过可达性分析算法判断对象存活状态。核心GC算法包括标记-清除、标记-整理和复制算法,各具特点:标记-清除简单但会产生内存碎片;标记-整理解决碎片问题但成本较高;复制算法适合存活率低的区域但空间利用率低。 JVM采用分代收集策略,将堆分为新生代和老年代。新生代使用复制算法,包含Eden区和两个Survivor区,通过Minor GC快速回收短期对象;老年代存放长期存活对象,采用标记-清除或标记-整理算法进行Major GC。对象在

2025-12-20 09:15:16 934

原创 【面试突击】JAVA基础知识-volatile、synchronized与ReentrantLock深度对比

Java并发编程核心机制摘要: volatile关键字: 保证变量可见性(写立即刷新到主存,读直接从主存获取) 禁止部分指令重排序 不保证原子性(如i++仍需配合锁或原子类) 典型应用场景: 线程状态标志位(单写多读) 对象引用的安全发布(如单例模式DCL) 配置热更新 synchronized vs ReentrantLock对比: synchronized:语法简单自动释放,不支持超时/中断 ReentrantLock:需手动释放,支持可中断、超时、公平锁及多条件队列 两者都支持可重入,但Reentra

2025-12-19 14:42:22 937

原创 【面试突击】JAVA基础知识-集合

摘要:JDK1.8的HashMap采用数组+链表+红黑树结构,优化了链表尾插和红黑树转换机制,核心参数包括默认容量16、负载因子0.75等。通过hash扰动和位运算定位桶,put/get流程高效,扩容时利用位运算拆分节点。线程不安全,推荐使用ConcurrentHashMap。ConcurrentHashMap1.8通过桶粒度锁和CAS实现线程安全,get无锁,put仅锁当前桶,支持多线程扩容,相比1.7分段锁更高效。两者均不允许null键值,ConcurrentHashMap在并发场景下性能更优。

2025-12-19 14:40:59 1140

原创 【Redis数据结构·链表】之前仆后继

Redis 通过 adlist(双向链表)与 quicklist(链表 + 压缩列表)管理 List 类型,使其在头尾操作时能保持高效的 O(1) 性能,并结合压缩技术来节省内存。在需要频繁头尾操作或顺序处理的场景中,Redis 的链表往往表现优秀;若需要随机访问或有序检索,可考虑使用其他数据结构。对链表在 Redis 中的实现理念有了深入了解后,开发者能更好地针对业务需求优化 Redis 应用与系统设计。

2025-02-06 21:46:32 910

原创 【Mysql】快来看看面试官最喜欢问的Mysql索引知识啦

通过这篇文章,我们深入了解了 MySQL 中的几种常见索引类型及其实现方式。重点讲解了 MySQL 数据存储结构中的聚簇索引和辅助索引,详细介绍了 B+ 树在 MySQL 中的应用及其优势。MySQL 数据存储结构MySQL 主要通过聚簇索引来存储全部数据。聚簇索引是一种数据存储方式,不是一种单独的索引类型。聚簇索引的实现方式数据行存储在索引的叶子页中,主键值与相邻数据行紧密存储。推荐使用自增主键,避免无规则的 UUID 以减少页分裂。B+ 树MySQL 使用 B+ 树作为数据存储结构。

2024-12-21 18:28:06 1207

原创 【杂谈】如何撰写出色的技术文档

在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它不仅是知识传承的载体,更是团队协作的桥梁,甚至可以说是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。在这篇文章中,我将分享一些撰写优秀技术文档的经验和技巧,帮助你清晰阐释复杂技术,完美融合文档结构与内容。

2024-12-21 15:36:53 733

原创 【杂谈】如何拷贝别人的站点

下载完成后,会在 jdk-docs 文件夹中看到所有下载的 HTML 文件,并且这些文件中的链接已经被转换为本地链接。这样就可以在没有网络连接的情况下离线浏览这些文档了。今天接到了一个奇怪的需求,已知有个工具类网站,上面罗列了各种开源项目的文档。我需要将里面提供的JDK,MySQL文档拷贝到本地的网站里面。大家都知道这是JDK的API文档,需求是将其集成到我们自己的网站里面,当然由于我们自己的网站部署在内网服务器,是无法联网的,所以需要将该API文档的所有HTML页面下载到本地。

2024-12-20 22:39:14 799

原创 【Redis数据结构·SDS】之另起炉灶

C字符串不记录自身的长度,在执行字符串拼接的时候,若原字符串的内存长度不足以支持拼接时,就会溢出到相邻的内存空间中,造成别的数据内容的修改。注:SDS字符串的最大容量是512MB,当扩容时不到1MB,扩容时会分配原先一倍的长度,当扩容时超过1MB是,只会再增加1MB。SDS由于里面free代表未使用的空间数量,当字符串长度添加时,若free足够使用,就不会进行分配内存。而二进制数据是存在空格的,所以是没法保存的,而SDS则是可以正常保存的。键是SDS类型,值是list,list存放的字符串也是SDS类型。

2024-12-19 21:58:39 722

原创 【mac】如何安全的SSH到自己家里的mac

截止目前,已经可以通过公网ip加上外部端口来访问家里的电脑了,但是通过ssh的密码登录总是觉得有点不安全,如果你有常用的远程登录的机器的话,比如公司,那就可以通过公钥来登录。首先需要一个公网ip,以便于在互联网的环境中,能够访问到你家里的网络地址。那么如何看当前家里的公网ip呢,我是小米的路由器,使用小米路由器的app“小米wifi”,在他的上面就可以看到当前的ip地址。需要注意的是,外部端口不要使用22端口,尽量使用一些长的,比如2022,2024之类的跟ssh没有关系的端口,防止被攻击。

2024-12-15 22:48:06 1767

原创 【Redis数据结构·跳跃表】之异火排行榜

跳跃表是有序集合的底层实现之一。❑Redis的跳跃表实现由zskiplist和zskiplistNode两个结构组成,其中zskiplist用于保存跳跃表信息(比如表头节点、表尾节点、长度),而zskiplistNode则用于表示跳跃表节点。❑每个跳跃表节点的层高都是1至32之间的随机数。❑在同一个跳跃表中,多个节点可以包含相同的分值,但每个节点的成员对象必须是唯一的。❑跳跃表中的节点按照分值大小进行排序,当分值相同时,节点按照成员对象的大小进行排序。

2024-11-28 20:09:17 681

原创 【前端】iframe嵌入单点登录链接后,一直访问登录页面?

sessionStorage:仅在同一窗口或标签页中共享,不同窗口或标签页之间不共享。Cookies:在同一域名下的所有窗口和标签页之间共享。

2024-11-28 20:02:00 3319 3

原创 【坚如磐石】一文带你理解Spring Security认证环节

本文介绍了Spring Security框架的核心功能与工作原理。作为Spring家族的安全框架,Spring Security提供认证、授权和漏洞保护三大功能,通过一系列过滤器链实现安全控制。文章重点解析了DelegatingFilterProxy作为连接原生过滤器与Spring Security过滤器的"胶水"角色,以及FilterChainProxy如何通过SecurityFilterChain调用具体安全过滤器。作者通过源码分析揭示了Spring Security的底层实现机制,

2022-09-26 22:24:32 3678 2

原创 【并发安全】synchronized的偏斜锁,轻量级锁,重量级锁

synchronized的偏斜锁,轻量级锁,重量级锁synchronized重在哪里?JDK1.6之后synchronized发生了什么变化?偏斜锁(偏向锁)轻量级锁重量级锁参考有关synchronized锁升级的理念,很多博客讲的很明白,在这里我将我个人的理解讲述一下,方便各位的理解,如果有描述的不正确的地方还请多多指正,不胜感激。synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其

2021-03-17 21:46:17 401

原创 【并发安全】如何使主线程等待子线程?

本文介绍了两种主线程等待子线程执行完成的方法。第一种是使用awaitTermination结合shutdown,适合一次性任务场景,但不适用于高频接口调用。第二种是通过Future.get()阻塞特性实现等待,适用于复用线程池的场景,能有效避免资源浪费。文章分析了两种方式的优缺点,并提供了示例代码,帮助开发者根据实际场景选择合适方案。

2020-04-18 00:06:56 1190

原创 优快云,久违了。

优快云,久违了很久很久以前众里寻他千百度暮然回首,那人却在灯火阑珊处很久很久以前才发现已经注册优快云4年了,当初是在学校的时候,发现优快云有很多资料,但是下载却需要登录,于是便有了这个账号。记得第一次萌生要写博客的想法是在17年,还是16年的国庆节。那天学校刚刚结束运动会,大家都忙着回家过十一。学校在沈阳,沈阳化工大学,俗称铁西区的北大(狗头保命)。那次十一,我并没有回家。一个...

2020-03-31 22:39:20 391 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除