- 博客(123)
- 收藏
- 关注
原创 CompletableFuture
本文全面介绍了Java中CompletableFuture的使用方法。首先讲解基础用法,包括runAsync()执行无返回值任务和supplyAsync()执行有返回值任务。然后重点介绍了任务编排功能,通过thenApply()/thenAccept()实现串行执行,以及thenCombine()/allOf()/anyOf()实现并行组合。最后详细说明了异常处理机制,包括exceptionally()异常兜底、handle()全场景处理和whenComplete()结果监听。所有示例代码均可直接运行,帮助
2026-03-03 23:56:38
472
原创 JVM实践
本文介绍了JVM调优的实践方法,包括参数设置位置、常用调优参数、监控工具以及内存泄漏和CPU飙高的排查思路。主要内容涵盖:JVM参数可在启动命令中设置;调优参数包括堆空间、虚拟机栈等配置;常用工具有jps、jstack等命令和jconsole、VisualVM可视化工具;内存泄漏排查通过jmap获取dump文件分析;CPU飙高问题通过top、ps和jstack命令定位线程问题。这些方法可帮助开发者快速诊断和解决JVM相关问题。
2026-02-05 22:06:55
535
原创 垃圾回收(GC)
本文介绍了JVM垃圾回收机制的核心概念。主要内容包括:1)对象回收条件(无引用指向时被回收);2)垃圾定位方法(引用计数法、可达性分析算法);3)三种回收算法(标记清除、复制、标记整理);4)分代回收策略(新生代和老年代的不同处理);5)四种垃圾回收器(串行、并行、CMS、G1);6)四种引用类型(强、软、弱、虚)及其回收时机。重点讲解了G1回收器的工作原理,包括Young GC和Mixed GC两种模式,以及它们如何通过复制算法高效管理内存。
2026-02-05 18:56:17
931
原创 类加载器篇
摘要:本文介绍了Java类加载器的核心概念,包括类加载器的作用(将字节码加载到JVM)、四种类型(启动类、扩展类、应用类和自定义类加载器)。重点讲解了双亲委派模型的工作原理("先找父类再自己加载")及其重要性(保证核心类唯一性和安全性)。最后详细解析了类装载的五个执行阶段:加载→验证→准备→解析→初始化,强调准备阶段赋默认值、初始化阶段执行显式赋值和静态代码块的特性。
2026-02-04 19:32:45
977
原创 JVM组成
本文介绍了JVM核心组件知识:1)程序计数器存储下一条指令地址,线程私有;2)Java堆是线程共享的对象存储区,分为新生代和老年代,Java 8用元空间替代永久代以节省内存;3)虚拟机栈是线程私有内存,由栈帧组成方法调用;4)方法区存储类信息和常量池,Java 8改为元空间移至本地内存;5)堆栈区别在于堆存储对象且GC回收,栈存储局部变量且线程私有。还讨论了局部变量线程安全、栈溢出条件和垃圾回收范围等问题。
2026-02-04 18:26:00
774
原创 线程池使用场景
本文介绍了线程池的常见使用场景以及相关并发控制技术。主要内容包括:1)线程池的三种典型应用场景:异步处理非核心流程、高并发任务处理、网络/IO密集型任务;2)使用Semaphore信号量控制方法并发访问线程数量;3)ThreadLocal机制实现线程隔离变量存储。通过代码示例展示了CountDownLatch、Semaphore和ThreadLocal的具体实现方式,并对比了ThreadLocal与synchronized的区别。文章强调ThreadLocal的核心优势在于为每个线程提供独立变量副本。
2026-01-29 19:48:36
1080
原创 线程池使用篇
本文介绍了线程池的核心概念和常见问题。主要内容包括:1. 线程池的核心参数(核心线程数、最大线程数、存活时间等)和执行原理;2. 常见的阻塞队列(LinkedBlockingQueue和ArrayBlockingQueue);3. 如何根据任务类型确定核心线程数;4. 三种常见线程池类型(FixedThreadPool、SingleThreadExecutor、CachedThreadPool)的特点和使用场景。文章通过代码示例和图示详细讲解了线程池的工作机制,适合开发者快速掌握线程池的核心知识。
2026-01-29 14:36:48
590
原创 线程中的并发安全
本文摘要: 本文系统梳理了Java并发编程的核心知识点,包括: synchronized原理:基于Monitor实现,包含锁升级过程(无锁→偏向锁→轻量级锁→重量级锁); JMM内存模型:定义线程工作内存与主内存的交互规则,保证多线程可见性; CAS机制:通过比较交换实现无锁原子操作,依赖自旋重试; volatile特性:保证可见性(禁用JIT优化)和禁止指令重排序(内存屏障); AQS框架:JUC并发工具基石,通过CLH队列和CAS管理线程同步; ReentrantLock:基于AQS实现,支持可中断、超
2026-01-27 12:53:06
560
原创 多线程基本知识
文章摘要: 本文介绍了线程的基础知识,包括线程与进程的区别(资源分配与CPU调度)、并发与并行的概念(应对vs执行多任务)。重点讲解了4种创建线程的方式:继承Thread类、实现Runnable/Callable接口(支持返回值)及线程池(推荐生产使用)。通过状态图说明线程生命周期(新建→可运行→阻塞/等待→终止),并对比了wait/sleep的异同(锁释放、唤醒机制)。最后给出保证线程顺序执行的join方法,以及停止线程的两种方案:volatile标记变量和interrupt中断机制。核心知识点覆盖线程创
2026-01-25 19:39:37
666
原创 List和Map篇
本文总结了Java集合框架中的List和HashMap相关面试要点。List部分介绍了数组底层原理、ArrayList的动态扩容机制及与LinkedList的区别;HashMap部分讲解了哈希表原理、put方法流程、哈希碰撞解决方案及高效寻址算法。核心内容包括:ArrayList基于动态数组实现自动扩容,LinkedList采用双向链表结构;HashMap通过哈希函数+位运算实现高效寻址,使用链表+红黑树解决哈希冲突,并在特定条件下触发扩容。全文通过示意图和代码示例,清晰呈现了这些数据结构的底层实现原理和性
2026-01-25 15:11:57
750
原创 RabbitMQ篇
本文总结了RabbitMQ的核心知识点,包括消息可靠性保障、重复消费处理、死信交换机和延迟队列实现、消息堆积解决方案以及高可用机制。重点介绍了生产者/消费者确认机制、消息持久化、TTL+死信队列实现延迟消息、惰性队列扩容和镜像/仲裁集群等高可用方案。文章提供了SpringAMQP配置示例和面试回答要点,帮助开发者全面掌握RabbitMQ的关键技术。
2026-01-23 15:59:42
661
原创 微服务组件篇(含业务问题)
本文摘要: 微服务架构学习笔记总结了Spring Cloud核心组件和关键技术点。主要内容包括:1)Nacos作为注册中心实现服务发现与监控;2)LoadBalancer负载均衡策略及自定义实现;3)服务雪崩解决方案(熔断降级);4)SkyWalking服务监控工具;5)限流技术(Nginx漏桶算法/网关令牌桶算法);6)分布式系统理论(CAP/BASE);7)基于MQ的分布式事务实现方案;8)接口幂等性设计。重点分析了注册中心选型、负载均衡流程、熔断状态机等核心机制,为构建高可用微服务系统提供了实践指导。
2026-01-21 19:55:17
633
原创 MyBatis篇
本文介绍了MyBatis的核心知识点:1)执行流程分为初始化阶段(加载配置构建SqlSessionFactory)和运行时阶段(创建SqlSession通过Executor执行SQL);2)支持延迟加载但默认关闭,可通过fetchType=lazy开启;3)缓存机制包括SqlSession级别的一级缓存(默认开启)和Mapper级别的二级缓存(需手动开启);4)参数占位符#{}使用预编译防止SQL注入,${}是字符串拼接存在安全风险。文章通过流程图和代码示例详细说明了各机制的实现原理和使用场景。
2026-01-20 14:38:58
818
原创 Spring篇
本文总结了Spring框架的核心知识点,包括单例bean的线程安全性、AOP实现原理、事务失效场景、bean生命周期、循环依赖解决方案、MVC执行流程和自动配置原理。重点分析了Spring单例bean的非线程安全特性,AOP在日志记录和事务管理中的应用,以及三级缓存解决循环依赖的机制。同时详细讲解了Spring事务失效的常见原因和解决方案,并梳理了SpringMVC的完整请求处理流程和Spring Boot的自动配置实现原理。这些内容涵盖了Spring框架面试中的高频考点,对开发者深入理解Spring核心。
2026-01-19 23:43:07
716
原创 Mysql面试篇
本文主要介绍了MySQL数据库的几个核心知识点:1. 慢查询分析方法,通过EXPLAIN命令分析执行计划;2. MySQL索引原理,重点讲解B+树结构及其优势;3. 聚簇索引与非聚簇索引的区别及回表查询;4. 覆盖索引与超大分页优化;5. 常见索引失效场景;6. 事务特性(ACID)和隔离级别;7. undo log与redo log的区别及作用。文章通过图文结合的方式,深入浅出地讲解了MySQL的底层原理和优化技巧,适合数据库开发人员学习参考。
2026-01-14 20:42:25
633
原创 redis复习(2)
Redis面试题摘要: 主从复制:通过主从集群实现读写分离,数据同步分为全量同步(首次连接时完整RDB传输)和增量同步(基于命令日志的增量更新)。 哨兵模式:监控主从节点健康状态,自动故障恢复(选举新主节点),解决脑裂问题需配置min-replicas-to-write和min-replicas-max-lag。 分片集群:多Master节点存储不同数据,通过哈希槽(16384个)分配数据,解决海量存储和高并发写问题。 高性能原因:单线程避免竞争,纯内存操作,I/O多路复用(如epoll)高效处理网络请求,
2026-01-13 14:37:20
626
原创 redis复习篇(1)
本文介绍了Redis常见的面试问题及解决方案,主要包括: 缓存穿透:查询不存在数据导致数据库压力,解决方案包括缓存空数据和布隆过滤器。 缓存击穿:热点key过期引发高并发查询,可通过互斥锁或不设置过期时间解决。 缓存雪崩:大量key同时失效或Redis宕机,可通过随机TTL、集群模式和多级缓存应对。 双写一致性:根据业务需求选择强一致性(分布式锁)或最终一致性(异步通知)。 持久化机制:RDB快照和AOF日志的优缺点及适用场景。 数据过期策略:惰性删除和定期删除的结合使用。 数据淘汰策略:内存不足时的LRU
2026-01-09 14:40:05
1064
原创 mongodb的基本命令
本文介绍了MongoDB的基本概念、特点及常用操作命令。MongoDB作为非关系型数据库,适用于高并发读写、海量数据存储和高扩展性需求的场景,如社交、游戏、物流等领域。文章对比了MongoDB与MySQL的体系结构差异,详细说明了BSON数据类型的特点。在操作层面,讲解了数据库和集合的创建、查看、删除等基本命令,并演示了文档的插入方法。MongoDB支持高性能数据存储、自动故障转移和丰富的查询功能,通过灵活的数据模型满足多样化业务需求。
2026-01-08 12:18:09
820
原创 redis的数据类型和简单命令复习大全
Redis是一种基于键值对的NoSQL数据库,支持多种数据结构(字符串、哈希、列表、集合等),具有高性能(内存存储)、丰富功能(过期键、发布订阅等)和持久化特性。文章介绍了Redis的基本特性、安装方法,以及常用命令如SET、GET、MSET/MGET和KEYS的使用示例,帮助用户快速掌握Redis基础操作。
2025-09-12 13:37:31
863
原创 MyBatis-Plus的使用
MyBatis-Plus(简称 MP) 是⼀个 MyBatis 的增强⼯具, 在 MyBatis 的基础上只做增强不做改变, 为简化开发. 提⾼效率⽽⽣。润物⽆声: 只做增强不做改变,引⼊它不会对现有⼯程产⽣影响,如丝般顺滑.效率⾄上: 只需简单配置,即可快速进⾏单表 CRUD 操作,从⽽节省⼤量时间.丰富功能: 代码⽣成、⾃动分⻚、逻辑删除、⾃动填充、拦截器等功能⼀应俱全.⼴泛认可: 连续 5 年获得开源中国年度最佳开源项⽬殊荣,Github 累计 16K Star.
2025-03-11 09:43:00
1357
2
原创 SpringBoot 统⼀功能处理(拦截器,统一返回,统一异常处理)
什么是拦截器?拦截器是Spring框架提供的核⼼功能之⼀, 主要⽤来拦截⽤⼾的请求, 在指定⽅法前后, 根据业务需要执⾏预先设定的代码。定义拦截器注册配置拦截器⾃定义拦截器:实现HandlerInterceptor接⼝,并重写其所有⽅法log . info("⽬标⽅法执⾏前执⾏");log . info("⽬标⽅法执⾏中执⾏");log . info("⽬标⽅法执⾏后执⾏");} }log . info("⽬标⽅法执⾏前执⾏");
2025-03-11 09:42:19
985
原创 SpringCloud注册中心-eureka
大家好我是小帅,今天我们来讲cloud的服务注册和服务发现。在最初的架构体系中, 集群的概念还不那么流⾏, 且机器数量也⽐较少, 此时直接使⽤DNS+Nginx就可以满⾜⼏乎所有服务的发现. 相关的注册信息直接配置在Nginx. 但是随着微服务的流⾏与流量的激增,机器规模逐渐变⼤, 并且机器会有频繁的上下线⾏为, 这种时候需要运维⼿动地去维护这个配置信息是⼀个很⿇烦的操作. 所以开发者们开始希望有这么⼀个东西, 它能维护⼀个服务列表, 哪个机器上线了,哪个机器宕机了, 这些信息都会⾃动更新到服务列表上,
2025-03-05 20:49:12
1501
1
原创 SpringCloud微服务开发工程细节
今天我们来讲微服务开发工程细节,这里不包括全部代码,包括父子工程pom文件讲解,RestTemplate发送http请求。这里我提供了项目全部代码:https://gitee.com/eating-candy-is-also-buni/spring-cloud/commit/9f8d1f3a6b655876062f052dab16b0a7c9e1aee2项目结构:⽤properties来进⾏版本号的统⼀管理, 使⽤dependencyManagement来管理依赖, 声明⽗⼯程的打包⽅式为
2025-03-05 20:47:52
1056
原创 MyBatis⼊⻔
MyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发。MyBatis本是 Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了google code,并且改名为MyBatis。2013年11⽉迁移到Github。持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的.
2025-03-02 22:48:40
983
1
原创 MyBatis操作数据库动态SQL|| MyBatis Generator的快速开发
大家好我是小帅,今天我们来学习MyBatis操作数据库动态SQL本节⽬标。
2025-03-02 22:47:42
1194
原创 java 日志级别
SLF4J不同于其他⽇志框架, 它不是⼀个真正的⽇志实现, ⽽是⼀个抽象层, 对⽇志框架制定的⼀种规范,标准, 接⼝. 所有SLF4J并不能独⽴使⽤, 需要和具体的⽇志框架配合使⽤。SLF4J 就是其他⽇志框架的⻔⾯. SLF4J 可以理解为是提供⽇志服务的统⼀API接⼝, 并不涉及到具体的⽇志逻辑实现.不引⼊⽇志⻔⾯。
2025-02-24 15:50:38
1641
原创 Spring IoC管理&DI注入
容器是⽤来容纳某种物品的(基本)装置.List/Map -> 数据存储容器Tomcat -> Web 容器.其实IoC我们在前⾯已经使⽤了, 我们在前⾯讲到, 在类上⾯添加@RestController 和@Controller 注解, 就是把这个对象交给Spring管理, Spring 框架启动时就会加载该类. 把对象交给Spring管理, 就是IoC思想.IoC: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器.什么是控制反转呢?
2025-01-14 14:30:17
1177
原创 SpringBoot配置文件
properties 是以 key=value 的形式配置的键值类型的配置⽂件, yml 使⽤的是树形配置⽅式.读取配置⽂件内容, 使⽤ @Value 注解, 注解内使⽤" ${} "的格式读取.yml 层级之间使⽤换⾏缩进的⽅式配置, key 和 value 之间使⽤": "(英⽂冒号)加空格的⽅式设置, 并且空格不可省略.properties 为早期并且默认的配置⽂件格式, 其配置存在⼀定的冗余数据, 使⽤ yml 可以很好的解决数据冗余的问题, 但不适合复杂配置.
2025-01-14 14:29:46
819
原创 Spring web应⽤分层(模块结构)
MVC模式强调数据和视图分离, 将数据展⽰和数据处理分开, 通过控制器对两者进⾏组合.三层架构强调不同维度数据处理的⾼内聚和低耦合, 将交互界⾯, 业务处理和数据库操作的逻辑分开
2024-12-12 21:55:52
1637
3
原创 Spring Web 开发(响应)| lombok工具 | 快速引用依赖
1. @RestController = @Controller + @ResponseBody2. @Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.3. @ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息4. Spring Web 开发(响应)| lombok工具 | 快速引用依赖
2024-12-01 18:10:30
1724
2
原创 Spring Web开发(请求)获取JOSN对象| 获取数据(Header)
理解cookie当⽤⼾登陆的时候, 服务器在 Session 中新增⼀个新记录, 并把 sessionId返回给客⼾端. (通过HTTP 响应中的 Set-Cookie 字段返回).客⼾端后续再给服务器发送请求的时候, 需要在请求中带上 sessionId. (通过 HTTP 请求中的Cookie 字段带上).服务器收到请求之后, 根据请求中的 sessionId在 Session 信息中获取到对应的⽤⼾信息, 再进⾏后续操作.找不到则重新创建Session, 并把SessionID返回。
2024-12-01 11:22:32
1546
原创 Spring Web开发 MVC框架的注解和请求(1)
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC".什么是Servlet呢?
2024-11-29 18:17:49
1121
4
原创 网络原理->DNS协议和NAT协议解
数据链路层• 数据链路层的作⽤: 两个设备(同⼀种数据链路节点)之间进⾏传递数据• 以太⽹是⼀种技术标准;既包含了数据链路层的内容, 也包含了⼀些物理层的内容. 例如: 规定了⽹络拓扑结构, 访问控制⽅式, 传输速率等;• 以太⽹帧格式• 理解mac地址• 理解arp协议• 理解MTU⽹络层• ⽹络层的作⽤: 在复杂的⽹络环境中确定⼀个合适的路径.• 理解IP地址, 理解IP地址和MAC地址的区别.• 理解IP协议格式.• 了解⽹段划分⽅法。
2024-11-28 16:01:44
1521
24
原创 启动SpringBoot
Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念,Maven可以通过⼀⼩段描述信息来管理项⽬的构建,报告和⽂档的项⽬管理⼯具软件。简单, ⽅便, 提⾼我们的开发效率, 减少我们的开发Bug.项⽬构建管理依赖Spring让Java程序更加快速, 简单和安全. Spring对于速度、简单性和⽣产⼒的关注使其成为世界上最流⾏的Java框架。
2024-11-28 15:58:41
2006
15
转载 初识前端三剑客三 ->JavaScript
JavaScript (简称 JS), 是⼀个脚本语⾔, 解释型或即时编译型的编程语⾔. 虽然它是作为开发Web⻚⾯的脚本语⾔⽽出名,但是它也被⽤到了很多⾮浏览器环境中。HTML: ⽹⻚的结构(⻣)CSS: ⽹⻚的表现(⽪)JavaScript: ⽹⻚的⾏为(魂)HTML是⼀种超⽂本标记语⾔, 主要⽤于⻚⾯内容的显⽰和排版.如果需要更漂亮的样式展⽰和⻚⾯效果, 需要搭配CSS和JavaScript来使⽤。学习HTML主要是学习标签, HTML的标签特别多, 了解基本语法即可。
2024-11-26 19:06:29
926
1
原创 初识前端三剑客二 -> css
CSS(Cascading Style Sheet),层叠样式表, ⽤于控制⻚⾯的样式.CSS 能够对⽹⻚中元素位置的排版进⾏像素级精确控制, 实现美化⻚⾯的效果. 能够做到⻚⾯的样式和结构分离.CSS前 -> CSS修饰后东⽅四⼤邪术。
2024-11-17 09:20:26
1085
1
原创 初识前端三剑客一 -> html
HTML(Hyper Text Markup Language), 超⽂本标记语⾔.超⽂本: ⽐⽂本要强⼤. 通过链接和交互式⽅式来组织和呈现信息的⽂本形式. 不仅仅有⽂本, 还可能包含图⽚, ⾳频, 或者⾃已经审阅过它的学者所加的评注、补充或脚注等等.
2024-11-17 09:20:01
1175
原创 网络原理(应用层)->HTTP
1 . 因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空⾏就相当于是 “报头的结束标记”, 或者是"报头和正⽂之间的分隔符".2 .
2024-11-05 22:13:03
1313
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅