- 博客(52)
- 收藏
- 关注

原创 并发编程高频八股——AQS与ReentrantLock类(源码解析)
大家好,我是钢板兽!今天继续更新并发编程高频八股,除了`synchronized`关键字,悲观锁还有一种实现方式,即基于Java同步器AQS的各种实现类,其中就有我们用得比较多的ReentrantLock类。今天我们就来探究AQS与ReentrantLock类。
2025-03-30 08:30:00
1645

原创 并发编程高频八股——线程与ThreadLocal
大家好,我是钢板兽!今天开始更新并发编程的高频八股,我打算把这块的内容分成三部分来整理:(1)线程与ThreadLocal;(2)线程池;(3)常用锁。这篇文章来写“线程与ThreadLocal”。本文涉及到的底层原理、实现比较多,但是如果你耐心看完的话,相信你对线程与ThreadLocal会有新收获。本文涉及到的八股问题有:线程与进程的区别,线程的生命周期,Thread类和Runnable接口的区别、ThreadLocal的底层实现与内存泄漏问题。
2025-03-23 08:30:00
1319

原创 MySQL高频八股——索引
大家好,我是钢板兽!今天来更新MySQL高频八股的最后一篇文章,包括很多内容:索引分类、最左匹配原则、范围查询使联合索引失效、索引下推、给联合查询加索引、索引失效情况。
2025-03-22 09:00:00
1085
1

原创 Mysql高频八股——事务与undo log、bin log、redo log的联系(超干干货)
今天咱们接着上一篇的内容,聊一聊MySQL中事务与redo log、bin log、undo log之间那些你可能不太懂、但面试又经常问到的问题。比如事务的ACID特性具体怎么实现啦,为什么每次提交事务要先刷新redo log而不是直接刷脏页啦,还有没提交事务的redo log是不是也可能提前落盘呢?放心吧,这些看似复杂的问题,我会一点点掰开揉碎了放到“事务与redo log、bin log、undo log的联系”这个大框架里给你讲清楚,看完这篇文章,你再去面试的时候绝对可以轻松应对面试官的各种拷问啦!
2025-03-12 16:59:12
1601
1

原创 一文搞懂Comparable、Comparator与集合排序之间的“恩恩怨怨”
在没有深入了解 Java 集合中元素的排序之前,我完全搞不清Comparable、Comparator与集合排序方法之间的区别与联系。于是,我写下这篇文章,深入探讨 Java 中 Comparable、Comparator 与集合排序方法之间的种种关联。
2025-03-03 18:00:00
1379

原创 DeepSeek 隐私泄露?
最近,一位社科专业的朋友问我:“如果把一些自己研究方向相关的涉密英文材料上传到 DeepSeek,让它帮忙提取文本并翻译,其他用户会不会通过拷打AI或其他方式获取这些材料的内容?”换句话说,像 DeepSeek 这样的 AI 平台,会不会悄悄地使用用户上传的数据来训练模型?
2025-03-03 12:00:00
9529

原创 手把手教你搭建Redis集群
之前在搭建Redis集群的时候,发现全网找不到一篇完整教程,即从安装Docker环境开始,到项目中使用Redis集群结束的过程。自己也在搭建过程中踩了许多坑,今天就把搭建过程记录下来,既便于自己之后回顾,也希望可以帮到其他人。
2025-01-02 12:00:00
2999
4
原创 你真的懂 AOP 吗?动态代理与 AOP 全解析
大家好,我是钢板兽!“Spring AOP 究竟是基于 JDK 动态代理还是 CGLIB动态代理?”,“两种动态代理有什么区别?”,“两种动态代理的限制?”这些问题是Java后端面试中最常见却又最容易搞错的一类问题,你知道该如何回答吗?不知道也没关系,本文将带你快速理清动态代理的核心原理、JDK 与 CGLIB 的关键区别、Spring AOP 的多种实现方式以及常见失效场景与解决方案,真正做到知其然,亦知其所以然。
2025-04-14 18:58:40
879
原创 Java常见的23种设计模式
大家好,我是钢板兽!本文将系统梳理 Java 的设计模式,涵盖创建型、结构型和行为型三大类,结合定义、原理、优点、应用场景、示例代码,帮助你初步了解常见的23种设计模式。
2025-04-08 23:09:48
1312
原创 Java反射机制深度解析:方法、实战与底层机制
大家好,我是钢板兽!反射作为Java的特性,它不仅是Spring三大特性Ioc、DI、AOP的基础,而且MyBatis、Jackson序列化、rpc远程调用接口都用到了反射机制。本文将带你系统性地掌握 Java 反射的使用,通过 JSON 反序列化的应用场景了解反射机制在实战中的使用,并通过JVM 底层实现深入剖析反射的底层机制。
2025-04-08 17:11:26
1083
原创 并发编程高频八股——乐观锁
大家好,我是钢板兽!今天继续更新并发编程高频八股,前两篇文章更新了悲观锁中的`Synchronized`和`ReentrantLock`,相比于悲观锁,乐观锁认为并发冲突是小概率事件。在访问共享资源时不会加锁,而是通过一定机制(如版本号、CAS)来检测是否存在其他线程的干扰。接下来,将分为三章,从CAS机制与自旋、Atomic原子类、版本号机制三部分来学习乐观锁。
2025-03-31 11:45:30
812
原创 《双影奇境》角色穿越风格宇宙:我用 GPT-4o 玩疯了!
最近 OpenAI 又双叒叕放大招了,新的 GPT-4o 模型加入了更强的图像生成功能,整个网上已经开始玩疯了。各种风格的图层出不穷——吉卜力、恶搞之家、美漫,还有表情包、元素替换合成、平面设计图、3D 建模、服装设计,甚至建筑草图……感觉已经没有它画不了的内容了。
2025-03-30 20:25:15
386
原创 全面解析 Spring AOP 切入点表达式
大家好,我是钢板兽!Spring AOP(面向切面编程)是我们日常开发中实现日志记录、权限控制、事务管理等功能的神器。而切入点表达式(Pointcut Expression)则是这个神器的“瞄准镜”——**你想拦哪里,就靠它来精确定位!**本篇文章将带你全面了解 AOP 切入点表达式的写法、含义、常见用法、以及典型场景实战。
2025-03-30 18:37:34
1153
原创 并发编程高频八股——synchronized关键字
接下来,将分为三篇文章,从`synchronized` 关键字、`ReentranLock`、乐观锁三个部分来掌握Java中的锁。这篇文章是关于`synchronized`关键字的介绍。
2025-03-29 10:25:02
1071
原创 并发编程高频八股——线程池
大家好,我是钢板兽!今天继续更新并发编程的第二篇高频八股——线程池,包括线程池的作用、创建线程池的方式、线程池的参数以及核心参数的设置。本文的八股在对线程池的理解上比较浅显,创建线程池的方式和核心参数的设置,建议大家可以去实现一个动态线程池的demo或者复现开源项目,这样会加深对线程池的理解。
2025-03-26 20:59:37
833
原创 MySQL高频八股:并发事务与事务隔离级别
今天继续来写MySQL的高频八股,在MySQL中,如果多个并发事务对同一条数据进行操作,可能会带来几个问题——脏读、不可重复读、幻读,为了解决这些问题,MySQL的事务隔离级别就派上用场了。这篇文章重点介绍事务隔离级别以及它的实现原理。
2025-03-19 08:00:00
766
1
原创 MySQL高频八股——事务过程中Undo log、Redo log、Binlog的写入顺序(涉及两阶段提交)
大家好,我是钢板兽!在上一篇文章中,我分别介绍了 **Undo Log**、**Redo Log** 和 **Binlog** 在事务执行过程中的作用与写入机制。然而,实际应用中,这三种日志的写入是有先后顺序的。因此,本篇文章将深入探讨它们的写入顺序,以便更好地理解三者与事务的联系。
2025-03-17 19:31:07
1325
1
原创 Mysql高频八股——SQL语句的执行过程
今天这篇文章本来想把**SQL语句的执行过程**和**事务与undo log、redo log的联系**放在一起写的。SQL语句的执行过程中会涉及到undo log、redo log,而undo log、redo log更深入的原理也是面试中经常会问到的,所以把它们放在一起再合适不过了,但是写着写着发现内容太多,于是拆成了两篇。
2025-03-11 13:36:01
725
原创 MySQL高频八股—— MySQL的存储引擎及索引结构
这篇文章包含了Java后端面试中关于MySQL八股中的两个常问的问题:(1)为什么MySQL选用innoDB作为存储引擎?,这个问题在面试的时候可能换一种问法:“innoDB和MyISAM的区别”。(2)“Mysql的索引结构你了解吗?”,这个问题也可能换一种问法:"为什么MySQL索引结构用B+树?"。接下来让我们深入理解这两个问题。
2025-03-10 20:44:31
1229
原创 Java后端高频面经——计算机网络
传统的 TLS 握手基本都是使用 RSA 算法来实现密钥交换的,在将 TLS 证书部署服务端时,证书文件其实就是服务端的公钥,会在 TLS 握手阶段传递给客户端,而服务端的私钥则一直留在服务端,一定要确保私钥不能被窃取。根据非对称加密算法,公钥加密的消息仅能通过私钥解密,这样服务端解密后,双方就得到了相同的密钥,再用它加密应用消息。TCP(Transmission Control Protocol, 传输控制协议)的三次握手过程是为了在通信双方之间建立可靠的连接,确保双方都具备发送和接收数据的能力。
2025-03-09 19:15:00
772
原创 Java后端高频面经——JVM、Linux、Git、Docker
ThreadLocal的实现中,每个Thread维护一个ThreadLocalMap映射表,使用ThreadLocal的弱引用作为key,如果一个ThreadLocal没有外部强引用来引用它,那么系统GC时,这个ThreadLocal势必会被回收,这样一来,ThreadLocalMap中就会出现key为null的Entry,就没有办法访问这些key为null的value。内存溢出:内存溢出是指Java虚拟机(IM)在申请内存时,无法找到足够的内存,最终引发这通常发生在堆内存不足以存放新创建的对象时。
2025-03-09 14:55:40
976
原创 Java后端高频面经——Spring、SpringBoot、MyBatis
是一个基于 Spring 的项目,它封装了 Spring 和其他相关技术(如 Spring MVC、Spring Data、Spring Security 等),提供自动配置、快速项目启动器、内嵌服务器三大功能,使开发者能够快速启动和构建 Spring 应用。Mybatis 在处理 ${} 时,只是创建普通的 SQL语句,然后在执行 SQL语句时 MvBatis 将参数直接拼入到 SQL里,不能防止 SQL注入,因为参数直接拼接到 SQL语句中,如果参数未经过验证、过滤,可能会导致安全问题。
2025-03-08 21:57:11
1974
3
原创 Java后端高频面经——MQ
(4)新建消费者,消费rabbitmq堆积的消息,不做任何业务逻辑处理,直接快速消费消息,把消息存在一张表里,这样就没消息的堆积,服务器压力自然就下来了。解决:开启Lazy Queues(惰性队列)模式,接收到消息后直接存入磁盘而非内存,消费者要消费消息时才会从磁盘中读取并加载到内存(懒加载),支持数百万条消息的存储。MQ你的消费集群是如何进行部署的?(1)消息队列是一个存放消息的容器,生产者发送消息到队列中,消费者处理队列中的消息,是一种先进先出的数据结构。如何保证MQ的可靠性(消息丢失的解决方案)?
2025-03-08 08:00:00
298
原创 新发布AI产品 Manus邀请码被炒到10万,AI革命再次升级了吗?
3月5日,中国AI领域再放“王炸”——全球首款通用Agent(自主智能体)产品Manus开启部分内测!Manus的邀请码在二手市场上竟然被炒到10万元的天价,甚至在社交平台上到处可见大家争先恐后“求码”的评论。
2025-03-07 11:34:45
658
原创 Java后端高频面经——Redis
假设线程1去查询缓存,然后从value中判断出来当前的数据已经过期了,此时线程1去获得互斥锁,那么其他线程会进行阻塞,获得了锁的线程他会开启一个 线程去进行 以前的重构数据的逻辑,直到新开的线程完成这个逻辑后,才释放锁, 而线程1直接进行返回,假设现在线程3过来访问,由于线程线程2持有着锁,所以线程3无法获得锁,线程3也直接返回数据,只有等到新开的线程2把重建数据构建完后,其他线程才能走返回正确的数据。 可重入分布式锁的实现核心思路是线程在获取锁的时候判断是否为自己的锁,如果是的话,就不用再重新获取了。
2025-03-07 08:00:00
677
原创 Java后端高频面经——并发编程
乐观锁能做到不锁定同步资源也能正确的实现线程同步,是因为乐观锁的主要实现方式 “CAS” (Compare And Swap)是一种无锁算法,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。synchronized是排它锁,当一个线程获得锁之后,其他线程必须等待该线程释放锁后才能获得锁,而且由FJava中的线程和操作系统原生线程是一一对应的,线程被阳塞或者唤醒时时会从用户态切换到内核态这种转换非常消耗性能。线程的栈空间的具体大小?进程里只有一个线程,线程的栈大小就是进程的栈大小吗?
2025-03-06 18:01:15
1607
原创 一文搞懂Comparable、Comparator与集合排序方法之间的“恩恩怨怨”(上)
说实话,在没有深入了解Java集合中元素的排序之前,我对Comparable、Comparator与集合排序方法之间的关系是很懵的,完全不懂它们之间有着什么样的联系,于是写下这篇文章去深入探究Java的Comparable、Comparator与集合排序方法之间的种种联系。
2025-02-25 23:58:02
673
原创 深入学习Java中的Lambda表达式
自Java 8引入以来,Lambda表达式彻底改变了Java的编程风格,让代码变得更加简洁、易读,尤其是在函数式编程的场景中。接下来,我们将深入探讨Lambda表达式的语法、原理以及实际应用,帮助你更好地理解并运用这一强大的工具。
2025-02-25 01:48:51
636
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人