- 博客(71)
- 收藏
- 关注
原创 springAOP终极总结
开头先大致说一下bean的生命周期创建 Bean 实例 → 填充属性 → 初始化前:→ 所有 postProcessBeforeInitialization(bean, name)执行 init 方法(比如 @PostConstruct)→ 所有 postProcessAfterInitialization(bean, name)
2025-09-10 15:29:49
364
原创 JUC、JVM、rocketMq、八股补充
它拥有自己独立的内存空间(代码段、数据段、堆、栈)、文件句柄、网络连接等资源。多个线程共享所在进程的资源(内存、文件等),但每个线程有自己的程序计数器、栈、寄存器等。类文件里的常量池(符号引用:类名、方法名、字段名等),被加载进来后存放在方法区(元空间管辖)---符号引用就是。(相当于线程中存了一份寄存器的副本信息,当切换到当前线程,会将副本信息加载到cpu寄存器中)方法(Method)描述(名字、参数类型、返回值类型、修饰符)元空间里存的不是普通对象(对象在堆里),而是类的元数据。元空间中存的什么信息。
2025-09-06 20:52:04
433
原创 Disruptor 的原理、应用场景
/ 处理事件逻辑,例如持久化数据库System.out.printf("用户:%d, 积分:%d\n", event.getUserId(), event.getPoints());Disruptor是一种高性能的事件驱动框架,通过无锁设计、环形缓冲区、事件驱动机制,有效解决高延迟、低吞吐量、GC频繁等问题。以上讲解,希望能帮助你深入理解Disruptor。如还有问题,欢迎继续交流!
2025-08-06 10:40:29
1093
原创 java回顾八股文中想起的知识点
反射就是在运行时动态获取类的信息,并操作类的属性、方法、构造器,甚至创建对象。不需要在编译时就知道具体的类;运行时可以根据类名、方法名等字符串进行操作。.class文件中的类元数据(字段、方法、构造器等信息)。JVM 类加载后存储在方法区/元空间的类结构。Class对象作为元数据的入口。包通过 JVM 本地方法访问元数据并操作。💡 换句话说:反射不是凭空出现的,它是 JVM 通过类加载 + 元数据存储 + Class对象 + 反射API这一整套机制支撑的。
2025-08-05 23:03:13
1074
原创 rabbitMq内容整理
RabbitMQ是一个开源的、实现AMQP(高级消息队列协议)的消息代理中间件,负责应用间异步消息传递、解耦、削峰、异步处理任务等。:发送消息的程序。:接收并处理消息的程序。:消息服务器,RabbitMQ服务端程序。:负责根据规则分发消息到队列。:存放消息的地方。:Exchange和Queue之间的关系,包含路由规则。:决定消息如何路由到队列。
2025-08-05 15:33:15
901
原创 springboot启动流程
springboot启动分为两大步:1.创建SpringApplication对象。2.执行这个对象的run方法。
2025-05-26 16:47:00
1006
原创 docker问题记录
如果找不到本地的镜像,回去中央仓库获取,所以在run的时候,-d参数,一定要和下面红线所示的名字一模一样!比如:拉取rabbitmq,强制使用"https://docker.m.daocloud.io"这个镜像。使用docker run,指定-d的时候,记得名字要相同:如下所示。解决办法:在pull镜像的时候强制走自己的镜像。
2025-05-25 16:47:33
755
原创 easyPan使用es增加搜索功能遇到的问题
问题:因为使用了@async异步,这里的es和mysql的同步状态不能直接使用@transactional注解实现。因为两者都是通过动态代理实现的,无法确定代理的先后顺序,所以可能会出现问题。1.由于是异步进行合并文件,合并文件后,将数据的状态在mysql中更新,再记录到es当中。
2025-05-24 20:39:20
145
原创 分布式事物
特性2PC3PCTCCSaga消息队列事务一致性强一致强一致强一致最终一致最终一致阻塞是否否否否容错能力差一般好好好实现复杂度中高高高中编程复杂度低高高高中恢复机制无有有有有适用场景金融、支付理论性资源控制型业务长流程补偿型解耦+异步业务。
2025-05-05 11:34:50
878
原创 spring面试题
项目说明IOC一种思想:将控制权从代码中“反转”到容器DI实现 IOC 的手段之一:通过注入依赖来实现控制反转Spring 中的体现Spring 容器实现了 IOC,而主要通过 DI 来注入 Bean 依赖IOC 是“为什么”要由容器控制对象(原则)DI 是“怎么”由容器注入对象依赖(方法)。
2025-04-29 16:10:35
781
原创 kafka的零拷贝技术
• Kafka 未默认使用(因需硬件支持),但现代高性能系统(如 Ceph、Nginx)会启用。• 仍有 1 次 CPU 拷贝(Page Cache → Socket)。,实现用户态直接访问内核缓冲区(Page Cache),避免显式拷贝。• 仍有 1 次 CPU 拷贝(内核 → Socket)。(如日志文件),但对小文件不友好(仍需 CPU 拷贝)。(Page Cache → Socket 缓冲区)。:文件描述符(如 Kafka 的日志文件)。(内核缓冲区 → Socket 缓冲区)。
2025-04-19 20:08:02
1632
原创 javaNIO详解
Java NIO(New I/O)是 Java 1.4 引入的高性能 I/O 框架,相比传统的 BIO(Blocking I/O),它提供了。:业务逻辑阻塞会影响整个系统(如 Redis)。:用于 TCP 网络通信(客户端/服务端)。:最常用的缓冲区(支持堆内存和直接内存)。处理所有 I/O 事件(连接、读、写)。处理业务逻辑(如消息解码、存储)。:处理已建立连接的 I/O 事件((如 Kafka 的日志存储)。(如游戏服务器、RPC 框架)。:避免 I/O 线程被阻塞。(如网络传输、文件映射)。
2025-04-19 20:03:32
1136
原创 Redis数据结构整理
先说整体结构Redis整体键值对形式存储的。Redis 会将所有你存储的键值对(key-value)都维护在一个叫做dict(数据字典)的哈希表结构中,这个哈希表就是我们说的。每个 Redis 数据库(默认是 16 个)都拥有一个这样的dict,来存储所有的键值对。:O(1) 查找时间复杂度。:随着 key 的增多自动扩容,保证性能。dict(全局哈希表)│├── ht[0]:dictht(主工作区)│ └── table[]:dictEntry 链表(真正存数据)--
2025-04-17 15:13:19
689
原创 java线程池详解
Executors场景核心线程最大线程队列类型拒绝策略说明CPU 密集CPU 核数核数控制上下文切换IO 密集核数×2核数×2~4有界队列防止内存膨胀高并发高并发数高并发×2快速失败顺序执行11保证顺序定时任务按需设置按需设置使用如果你有具体的业务场景(如消息队列消费、Web接口处理、批量处理等),我可以帮你单独设计一个更合理的线程池配置,想要吗?
2025-04-17 11:04:06
802
原创 小八股-CDN
CDN:内容分发网络(CDN)是一种通过全球分布的服务器节点,加速内容传输并提升用户体验的技术。:通过将内容缓存到离用户更近的节点,减少延迟和带宽消耗,加快网站加载速度,尤其适用于静态资源(如图片、视频、CSS/JS文件)。HTTP 请求头(Request Headers)和响应头(Response Headers)是 HTTP 协议通信的重要组成部分,用于传递客户端和服务器的额外信息。以下是 。
2025-04-13 21:50:23
488
原创 限流、降级、熔断、隔离?
•限流是流量入口的“阀门”,控制请求数量。•降级是功能维度的“止损”,优先保障核心业务。•熔断是故障服务的“保险丝”,快速切断故障源。•隔离是资源层面的“屏障”,缩小故障影响范围。实际系统中,这些手段通常结合使用:例如通过Sentinel同时实现限流和熔断,配合Kubernetes资源隔离,再通过Nacos动态下发降级策略,形成完整的弹性防护体系。
2025-04-12 22:04:31
1108
原创 springcloud整理
非动态路由:当网关服务启动时,从配置文件中读取,并缓存入路由表,但是无法实现热更新,每次配置文件更改都需要重启路由服务。所以,OpenFeign就利用SpringMVC的相关注解来声明上述4个参数,然后基于动态代理帮我们生成远程调用的代码,而无需我们手动再编写,非常方便。微服务共享的配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。下单的过程中,需要调用商品服务扣减库存,调用购物车服务清理用户购物车。
2025-04-12 21:06:53
765
原创 CAP理论
所有只有CP,AP,AC 当前场景:订单系统下单买了1瓶酒,库存系统酒的数量-1。无法实现买了1瓶酒,库存即时-1。(异步处理后通知订单系统,若异步处理失败,有补偿机制(重新发请求,补录,校对程序)保证数据一致)。AC:不拆分数据库系统,在一个数据库的一个事务中完成操作,即单体应用。缺点:不能做分区, 分区涉及网络,进而涉及分区容错性,进而选CP,AP。指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。
2025-04-12 15:05:48
229
原创 说一下JMM
规则定义操作之间的可见性关系。若操作A happens-before 操作B,则A的结果对B可见。JMM是Java多线程编程的基石,通过定义线程与内存的交互规则,解决了原子性、可见性、有序性问题。Java内存模型(Java Memory Model, JMM)是Java虚拟机规范中定义的一种。理解JMM能帮助开发者编写高效、线程安全的代码,避免竞态条件和内存可见性问题。,用于屏蔽不同硬件和操作系统的内存访问差异,确保多线程程序在。下都能有一致的内存可见性、原子性和有序性行为。
2025-04-10 09:05:37
636
原创 springboot自动配置原理例子讲解
↓↓↓读取 spring.factories / spring-autoconfigure-metadata↓加载 xxxAutoConfiguration 类↓根据条件注册 Bean(@ConditionalOnClass / OnBean / OnProperty)↓你就能直接使用这些 Bean如果你自己定义了同名 Bean,比如,就会覆盖自动配置(@ConditionalOnMissingBean 生效)。
2025-04-09 15:42:42
657
原创 easyPan技术回顾day4
3.将delFilePidList的所有子文件状态更新为已删除(也就是除了选中的文件,他们的子文件通过delFilePidList一步步都被删除,删除的条件是pid IN delFilePidList)。1.跟上面一样,获取子目录,删除子目录下所有内容(将状态设置为-1),更改redis中用户的空间信息。2.根据文件集合,递归查询所有状态为已删除的所有子目录,将其放入delFileSubFolderFileIdList。1.先查询要删除的文件是否存在。1.根据选中的文件id,查询文件集合。
2025-04-03 22:00:42
384
原创 easyPan技术回顾day3
当我们在方法上加入了@async或者@transaction这些注解,他们是使用aop实现的,底层用到了动态代理,所以,我们其实拿到的是代理对象,调用的方法是代理对象的方法,此时如果方法里是使用synchronized(this)这种方法加锁,那么锁就会在事物提交之前就释放那么可能就会引起并发安全问题。加锁在方法上(synchronized)的时候,锁住的是调用当前方法的对象,我们Bean一般是单例模式,所以锁住这个Bean对象之后其他用户调用这个方法也会串行执行(严重影响效率)。防止高并发也可以加锁。
2025-04-02 22:20:44
1063
原创 技术回顾day2
接着构建临时目录(由用户id和fileId构成),创建临时文件(命名规则是当前的chunk值),使用File.copy来进行文件的复制(在这里可以使用我们的限流器)。秒传前先从redis里面获取用户的空间是否满足,不满足就抛出异常,空间充足就构造文件信息插入到数据库中,接着更新用户的空间,返回上传成功的状态信息(秒传)。因为当前的项目中异步合并包括合并文件和图片压缩,视频处理。@async注解实现异步合并,他的原理是aop,当调用这个方法的时候,其实是调用的代理方法,将其放到默认线程池中执行。
2025-04-01 22:28:08
875
原创 CDN是什么?
由于大量请求被 CDN 缓存命中,源站(Origin Server)承担的流量大大减少,提高可扩展性。由于重复的资源请求可由 CDN 直接返回,而无需请求源站,因此可节省。,CDN 会回源请求并缓存该内容,减少后续请求的回源频率。:CDN 向源服务器请求该资源,并缓存一份副本。,将流量路由到其他可用节点,提高系统的可靠性。直接在 CDN 边缘节点完成,减少源站压力。时,CDN 会在全球多个节点缓存该视频。,将请求重定向到最近的 CDN 节点。(图片、CSS、JS),缓存时间长。
2025-04-01 15:15:36
902
原创 Mapper的工作原理
/ 其他方法...MyBatis 通过动态代理技术"自动"实现了 Mapper 接口,开发者只需要定义接口和 SQL 映射,无需编写实现类。这种设计既保持了接口的清晰性,又减少了样板代码,大大提高了开发效率。这种机制的优势在于:接口与实现解耦减少手动编码错误便于单元测试保持代码的简洁性。
2025-04-01 14:49:38
723
原创 技术回顾day01
接下来每次请求浏览器都会携带sessionid,后端服务器会自动拿着这个sessionid去帮我们找到他自己的session,然后我们再对session做一些校验。(也就是说设置和解析都是springboot帮我们做的,我们通过request拿到session对他做一些操作就可以啦)。验证账号密码、更新最后一次登录时间、将用户的总空间和已使用空间存储到redis中、构建用户的基本信息、保存用户信息到session中。,超过超时时间(默认 30 分钟),Session 会自动失效。
2025-03-31 17:42:44
337
原创 学成在线--day02
将前端资源部署到nginx服务器,让nginx服务器访问后端接口(因为跨域是因为浏览器,这个时候我们不使用浏览器访问而是通过nginx代理访问后端服务器就不存在跨域问题)。类加载路径,也就是jvm找字节码文件的路径,我们自己写的类,以及依赖的包,都会放到这个路径下面用于加载。是由于浏览器的同源策略(协议,端口,ip地址),这三者任何一个不一样就认为不是同源就不能访问。是日志标准,提供统一的 API,实际日志行为由具体实现(如 Log4j)决定。日志管理:使用slf4J和log4j配合。
2025-03-29 19:37:13
351
原创 学成在线--day1搭建项目
-接下来是每一个微服务模块:比如content:又分为四个部分,model(放po,vo,dto),api(接受请求,controller),service(放service,mapper),content模块(用来整合三个小模块)。base模块:比如内容模块或者管理模块都用到的一些工具放到这个里面,还有定义的一些返回值类,分页参数等等都可以定义在这里,方便所有模块共用。复习的知识点:mybatisPlus的分页查询机制,lambdaQuery的使用,结果的封装。git的工作目录就是写代码的地方。
2025-03-28 22:50:22
266
原创 一个请求在spring项目中完整的流转过程
这样,整个 Spring Web 项目的请求流动路径就完全理清了!解析 HTTP 请求的 URL、Headers、Body 等信息。在 Controller 方法执行完成后,返回数据之前,拦截器的。是 Spring 提供的机制,不属于 Servlet 规范。,确定请求由哪个 Controller 方法处理。,负责接收所有 HTTP 请求,并进行分发。但在执行具体的 Controller 之前,,监听 HTTP 端口(默认 8080)。处理返回数据,生成 HTTP 响应对象。,但在完整的请求流程中,还有。
2025-03-27 11:57:43
445
原创 https握手过程
HTTPS 握手过程通过非对称加密和对称加密的结合,确保了通信的机密性、完整性和身份验证。通过数字证书验证服务器身份,并通过会话密钥加密通信内容,HTTPS 有效地保护了数据在传输过程中的安全性。希望以上内容能帮助你更好地理解 HTTPS 的握手过程和安全性机制!如果还有其他问题,欢迎继续提问!
2025-03-18 15:49:21
1077
原创 java多线程中-用于同步控制的各种方法作用
你说得对,要完整讲解 Java 线程同步控制的方法,还需要涵盖yield()ConditionSemaphore等相关机制。我会详细讲解它们的作用、区别、适用场景,以及背后的实现原理,以确保你能全面理解 Java 线程同步控制。
2025-03-16 14:59:24
627
原创 hashmap为什么每次扩容都是2倍?
为什么用 2 倍扩容,并使用移位操作来优化哈希索引计算的核心原因!不是 2 的幂时,需要 CPU 执行。我们来分析一个元素的索引如何变化。,扩容时也是原大小的。
2025-03-15 17:19:38
1064
原创 io多路复用-背
允许进程同时监听多个文件描述符(FD),只有在 IO 事件就绪时才进行真正的读写操作。,并在有数据可读/可写时进行相应的操作。通常,IO 读写操作会阻塞进程,而多路复用提供了一种。的方式,减少系统资源消耗,提高并发处理能力。来存储监听的 FD,最大支持。的 IO 处理方式,它允许。需要轮询所有 FD 的问题。如果面试官深入追问,可以结合。结构)存储 FD,克服了。IO 多路复用是一种。(Linux 默认)。的 1024 限制。
2025-03-15 15:14:22
778
原创 缓存的双写一致性实现方案
的数据,在 Redis 作为缓存的情况下,保证 Redis 和数据库数据的一致性,可以选择。:数据读取多、实时性要求不高的场景(比如商品详情、用户信息等)。❌ 如果 Redis 更新失败,可能导致缓存和数据库数据不一致。✅ 避免缓存和数据库数据不一致的问题(先删缓存)。✅ 读性能高,数据实时同步,减少不一致问题。,减少数据库压力(因为数据库只需批量写入)。的业务场景,能有效减少数据库压力。的场景,如日志收集、订单队列等。,不适用于实时性要求高的业务。,对一致性要求高的场景。,增加了写操作的延迟。
2025-03-12 19:53:02
1190
原创 easy云盘笔记--重要功能
该上传功能实现了分片上传、秒传、文件合并和转码等核心功能,结合 Redis 缓存和异步处理提高了性能和用户体验。通过事务管理和异常处理确保了数据的一致性和可靠性。视频分片处理是其中的重要环节,通过。
2025-02-26 19:06:57
866
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅