- 博客(140)
- 资源 (1)
- 收藏
- 关注
原创 设计并实现高并发系统,应用无锁编程与CAS机制
无锁编程与 CAS 机制是高并发系统的核心优化手段:适用场景:高频修改的共享数据(如计数器、队列)。优势:避免锁竞争,提升吞吐量和扩展性。挑战:ABA 问题、自旋开销、实现复杂度。
2025-05-14 19:54:13
640
原创 Java内存模型与并发编程解析核心面试题
JMM 的意义:它不仅是 Java 并发编程的理论基础,更是编写正确、高效多线程代码的指南。开发者需结合 JMM 规则选择合适工具(如 volatile、锁、原子类),避免因内存可见性、指令重排序等问题导致 Bug。
2025-05-14 11:35:20
971
原创 堆转储的重要性
分析内存问题时进行堆转储(Heap Dump)的核心原因在于:堆转储是唯一能完整保留内存中对象状态和引用关系的技术手段。堆转储是内存分析的终极手段,它能提供其他工具无法替代的 对象级微观视角,尤其对偶发性或复杂内存问题(如跨线程泄漏)的诊断至关重要。即使存在短暂性能开销(转储时可能暂停应用),其价值仍远超成本
2025-05-09 13:32:04
462
原创 内存溢出与内存泄漏的处理
内存溢出(OOM):程序申请内存时,系统无法提供足够的空间。常见于堆内存不足、元空间不足或线程栈溢出。内存泄漏:程序分配内存后未正确释放,导致可用内存逐渐减少,最终可能引发OOM。
2025-05-09 11:19:25
809
原创 泛型设计模式实践
通过将泛型与设计模式结合,可以创建出既灵活又类型安全的代码结构,显著提升代码的可维护性和可扩展性。每种模式都通过泛型增强了其适用场景,使代码更加通用而不失类型安全.在实际项目中,应根据场景选择合适模式,避免过度泛型化导致代码复杂度上升。结合Optional<T>、Stream API等特性,可进一步构建灵活且健壮的Java应用。
2025-05-07 09:59:31
918
原创 Java泛型深度解析与电商场景应用
Java泛型是Java语言中一项强大的特性,其核心目标是通过类型参数化提升代码的复用性、安全性和可读性。尤其在电商这类复杂业务场景中,泛型能够显著优化系统设计并简化代码维护。以下从泛型的工作原理及其在电商场景下的应用两方面进行深入分析。
2025-05-06 17:40:03
1005
原创 反射与注解实现动态功能扩展案例-插件系统
结合 反射与注解 实现动态功能扩展的详细案例,以模拟一个 插件系统 为例,展示如何通过注解标记插件类,并在运行时动态加载并执行插件功能
2025-04-28 19:14:57
521
原创 自定义注解的创建与使用以及注解处理器的开发
假设我们需要一个注解@Route,用于标记类或方法对应的 HTTP 路由路径。// 元注解:定义注解的作用目标(类、方法)和保留策略(保留到运行时)@Retention(RetentionPolicy.RUNTIME) // 注解保留到运行时,方便反射获取// 路由路径(必填)// HTTP 方法,默认GET关键元注解说明@Target:指定注解可以应用的位置(类、方法、字段等)。@RetentionSOURCE:仅保留在源码中(如@OverrideCLASS:保留到字节码,但运行时不可见。
2025-04-28 10:42:10
1127
原创 MYSQL面试题50
答案:」幻读是指在同一个事务中多次执行相同的查询,但由于其他事务的插入操作导致结果集不一致的情况。具体来说,就是一个事务在读取某个范围内的记录时,另一个事务插入了一条新的记录到这个范围内,导致前一个事务再次读取时看到了之前不存在的记录。「MVCC」:通过为每个事务提供一个唯一的事务ID,InnoDB可以确保事务只看到在其开始之前已经提交的事务所做的修改。这保证了事务的一致性视图,从而避免了幻读。「间隙锁」:除了对记录本身加锁外,InnoDB还会对索引范围内的间隙(两个索引值之间的空间)加锁。
2025-04-27 08:30:00
702
原创 Spring面试12问
答案要点Spring中的类型转换机制是通过和Converter接口来实现的。用于将字符串转换为其他类型的对象,而Converter则提供了更通用的类型转换方法。在Spring 3.0之后,推荐使用Converter接口进行类型转换,因为它提供了更灵活和强大的类型转换能力。要在Spring中进行自定义类型转换,可以创建实现Converter接口的类,并在配置文件中将其注册为Spring容器中的Bean。然后,在需要转换类型的地方,Spring会自动使用注册的转换器进行转换。
2025-04-26 09:00:00
533
原创 深度解析反射机制原理与电商场景高级应用
反射(Reflection)是程序在运行时动态获取类信息、操作对象属性和方法的能力,无需在编译时确定具体类型。其本质是通过Class对象反向解析类的结构,类似“程序的自省能力”。
2025-04-25 09:00:00
848
原创 电商项目中的软件架构模式实践
微内核适用于模块化扩展,典型案例如插件化支付与物流系统。事件驱动擅长解耦高并发流程,如订单处理与实时风控。实际项目中常结合两者,例如核心系统采用微内核,异步流程通过事件驱动实现,兼顾灵活性与性能。
2025-04-25 08:30:00
1592
原创 电商项目所使用的设计模式(如策略模式、装饰器模式、观察者模式)
功能模块推荐设计模式应用场景描述支付系统策略模式多种支付方式(支付宝、微信、银联等)的动态选择优惠券系统策略模式不同类型的优惠券(满减、折扣、免运费)使用不同的计算策略价格计算系统装饰器模式基础价格、运费、优惠券、会员折扣等层层叠加计算订单状态通知系统观察者模式订单状态变更时通知库存系统、积分系统、物流系统等多个子系统商品搜索系统工厂模式根据不同搜索条件创建不同的查询对象物流跟踪系统状态模式订单物流状态(已发货、运输中、已签收等)的行为变化购物车系统组合模式。
2025-04-24 09:00:00
1600
原创 模块化编程(Java Module System)及其在大型项目中的应用
Java 模块化通过强封装、显式依赖和服务机制,显著提升了大型项目的可维护性、安全性和性能。结合构建工具和现代框架(如 Spring),开发者能更高效地管理复杂代码库。实际应用中,模块化设计需遵循“最小暴露”原则,合理划分模块边界,并利用工具链(如 jlink、Maven)优化开发流程学海无涯,志当存远。燃心砺志,奋进不辍。愿诸君得此鸡汤,如沐春风,事业有成。若觉此言甚善,烦请赐赞一枚,共励学途,同铸辉煌!
2025-04-24 08:30:00
606
原创 1.1 深入理解Java 8及以上版本的新特性(如Lambda表达式、Stream API、Optional)
特性核心优势典型场景Lambda简化函数式接口实现集合遍历、线程创建、排序Stream API声明式数据处理、并行支持数据过滤、映射、聚合Optional显式空值处理、链式安全调用可能为空的返回值、嵌套对象这些特性共同构成了现代Java函数式编程的基础,正确使用可使代码量减少40%同时提升可维护性。但需注意:在Android开发中需关注64K方法数限制(Lambda会生成额外方法),在低版本Java环境需确认API兼容性。学海无涯,志当存远。燃心砺志,奋进不辍。
2025-04-23 13:33:18
1359
原创 java学习路线
1.需要学习扎实掌握外,还需深入理解系统设计与架构、优化大型分布式系统的性能与可扩展性、并推动项目进展。2.重点应放在。3.此外,提升代码质量与架构决策能力、掌握持续集成与持续部署(CI/CD)流程、以及深入理解计算机网络与操作系统的高级原理,将助于在复杂项目中高效解决问题,领导技术团队,实现业务目标。4.这时候需要放宽视野,以团队 leader 的视角看待问题,除了架构能力外,还需要能力。
2025-04-23 10:09:40
769
原创 java知识点
当发生扩容时,Arraylist 会创建一个新的数组,其容量为原数组的15倍(即 oldcapacity +(oldcapacity >>1)),然后将原数组中的元素复制到新数组中,复制过程是通过 Arrays.copyof()方法实现的。如果线程空闲时间超过空闲存活时间,并且当前线程数大于核心线程数,则会按照配置逐步销毁多余的线程,直到线程数等于核心线程数。线程池的线程数量没有上限,空闲线程会在 60 秒后被回收,如果有新任务且没有可用线程,会创建新线程。线程池中的线程数是固定的,空闲的线程会被复用。
2025-04-22 19:28:36
545
原创 为什么不能把服务端发送的ACK和FIN合并起来,变成三次挥手
若合并ACK和FIN,相当于要求Server在收到FIN的瞬间必须完成所有数据处理,这在实际场景中无法保证(如高延迟、大数据传输)。合并ACK和FIN会破坏协议的状态管理逻辑,增加数据丢失风险,因此不能简化为三次挥手。:若Server直接合并ACK和FIN,可能因未完成数据处理而强制关闭连接,导致数据丢失或应用异常。(Server)发送ACK响应Client的FIN,但此时Server仍可能有数据需要发送;:若Server在ACK后立即发FIN,可能因未处理完数据导致丢失。
2025-04-22 13:37:51
492
原创 为什么在TCP层(即传输层)没有解决半包、粘包的问题
它将数据视为连续的字节流(类似水流),发送方写入的数据可能被接收方以任意分段方式读取。这种分工使得 TCP 能够广泛适应不同场景(从实时视频流到金融交易),而应用层可以灵活选择最适合自身的消息格式。:不同的应用对消息边界的定义不同(如固定长度、分隔符、头声明长度等),TCP 无法统一支持。UDP 是面向数据报的协议,每个 UDP 数据包都有明确边界,但这是以。:负责定义数据的语义和逻辑边界(如 HTTP 消息、JSON 对象)。:即使应用不需要边界处理(如文件传输),也会被迫承担额外开销。
2025-04-21 19:53:14
968
原创 Spring 框架源码
3.1 Spring框架中的单例bean是线程安全的吗?3.2 什么是AOP,你们项目中有没有使用到AOP3.3 Spring中事务失效的场景有哪些3.4 spring的bean的生命周期3.5 Spring中的循环引用3.6 构造方法出现了循环依赖怎么解决?3.7 SpringMVC的执行流程3.8 springboot自动配置原理3.9 Spring 、SpringMVC 、Springboot的常见注解有哪些
2025-04-14 14:37:49
698
原创 java中使用微服务的痛点有哪些,怎么解决
(如 Quarkus/Micronaut),减少启动时间和内存占用(传统 Spring Boot 应用启动需 3-5 秒。:Java 版本与框架版本冲突(如 Spring Boot 3.x 需 Java 17+)。(Spring Cloud Config、Consul、Nacos)动态管理配置。:多个服务共享依赖时容易冲突(如不同版本的 Spring、Netty)。(如 Spring Boot Starter),通过依赖注入复用。:基础功能(如鉴权、日志)需要在各服务中重复实现。
2025-04-14 11:31:39
1099
原创 为什么分布式中间件常常角色有个leader
Leader 宕机时,Controller 节点(本身也是一个 Leader)会从 ISR(In-Sync Replicas)中选举新 Leader。:在 Redis 主从集群中,Sentinel 集群通过 Raft 算法选举 Leader,由 Leader 执行故障转移(提升从节点为主节点)。:Leader 负责接收所有写请求,确保数据变更按顺序同步到 Follower(如 Kafka 分区的 Leader 副本)。:无 Leader 的系统中,多个节点可能自认为主,导致数据不一致(如双主写入冲突)。
2025-04-03 17:58:36
457
原创 RPC框架需要解决的问题
RPC框架需要解决网络通信、序列化和反序列化、服务注册与发现、负载均衡、容错处理、安全性、服务治理、性能监控以及透明化远程调用和跨语言、跨平台支持等多个方面的问题。这些问题的解决直接关系到系统的高效性、稳定性和可扩展性
2025-04-01 19:48:06
731
1
原创 Vue计算属性和data的属性的名字命名冲突问题
Vue 计算属性的函数名和 data 中的属性可以同名吗?不可以。因为 Vue 会将 data 中的性和计算属性都挂载到 Vue 实例上,如果它们同名,则会发生命名冲突,导致实例中的属性被覆盖,从而引发不可预知的错误
2025-04-01 08:30:00
249
原创 RabbitMQ 的三种集群模式
三种集群模式:标准、镜像、联邦集群。对于标准集群,节点共享元数据,但消息只存在一个节点。元数据的内容:队列、交换机、绑定关系等,而消息本身不复制。性能和资源利用的优势,但单点故障的问题,比如队列所在节点宕机的影响。镜像集群是解决高可用的问题,每个队列的镜像分布在多个节点。需要说明如何配置策略,同步方式,以及自动故障转移的机制。同时要指出资源消耗和网络带宽的问题,适合需要高可用性的场景。联邦集群用于跨地域的多活部署,数据可以异步复制。
2025-03-31 17:32:17
1197
原创 rabbitMQ怎么实现延迟队列
RabbitMQ怎么实现延迟队列。使用死信交换机(DLX)和消息的TTL设置,或者用rabbitmq-delayed-message-exchange插件。可能需要延迟执行的任务:比如订单超时未支付取消,或者定时提醒之类的场景。实际需求:比如,他们是否需要精确的延迟时间,还是可以接受一定的误差?使用死信队列的话,每个消息的TTL需要单独设置,但如果有不同延迟时间的消息,可能需要为每个延迟时间创建不同的队列,这样扩展性不太好。而使用插件的话,可能更方便,但需要确保环境允许安装插件。
2025-03-31 17:10:52
779
原创 锁和线程生命周期
1.竞态条件指的是在多线程环境下,多个线程非同步地访问共享资源,导致数据不一致或结果不符合预期的问题。知识点:多线程、竞态条件、共享资源2.synchronized 关键字用于在 Java 中对方法或代码块加锁,使得同一时刻只有一个线程能够访问该方法或代码块,从而实现线程同步知识点:Java 关键字、synchronized、线程同步3.CountDownLatch 用于确保当计数到达零之前,所有等待的线程都会等待,直到由其他线程触发 latch,知识点:CountDownLatch、并发工具类、同步机
2025-03-28 17:48:02
498
原创 Kafka Rebalance(再平衡)的机制和解决方法
Kafka Rebalance(再平衡)是消费者组内分区重新分配的关键机制,但其频繁触发可能导致重复消费、延迟增加等问题。Rebalance 期间若消费者未及时提交 Offset,新分配的消费者会从已提交的旧 Offset 开始消费,导致数据重复处理。消费逻辑支持重复消息处理(如数据库唯一索引、Redis 去重),缓解 Rebalance 导致的重复消费问题。升级至支持增量 Rebalance 的版本,仅重新分配受影响的分区,减少全量 Rebalance 耗时。
2025-03-28 16:37:29
919
原创 设计秒杀系统(高并发的分布式系统)
针对紧急上线的商品秒杀需求,我将采用分阶段实现、优先保障核心功能的方案,在确保高并发安全性的前提下快速交付。- 数据库:开启MySQL批量提交(innodb_flush_log_at_trx_commit=2)- 流量突增处理:预先准备Nginx静态降级页面(秒杀页自动跳转到维护公告)- JVM:预设秒杀专用线程池(核心线程数=CPU*2,队列容量=0)- 网络:SLB配置TCP快速打开(tcp_fastopen=3)- 第三阶段(上线后2周):引入分布式锁优化热点库存。- 按钮防抖(点击后禁用3秒)
2025-03-27 20:17:07
1676
原创 kafka 如何保证消息不丢失,详细讲解
在 Kafka 中,确保消息不丢失需要从生产者发送消息、Broker 存储消息、消费者消费消息三个核心环节进行全链路保障。
2025-03-27 10:16:45
992
原创 java初学之数组
定义数组的时候直接给数组赋值// 完整格式数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };// 简化格式数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };数组是属于引用数据类型,数组变量名中存储的是存储的数组在内存中的地址信息。
2025-03-26 11:40:19
624
原创 springcloud企业大项目会存在什么特殊的难点,怎么解决的
Spring Cloud企业级项目的核心挑战在于如何在高复杂度下保障系统的可用性、一致性和可维护性。需结合具体业务场景,灵活选用组件(如Nacos替代Eureka实现更高可用注册中心),并辅以完善的监控、自动化工具和团队规范。同时,适时引入Service Mesh(如Istio)解耦治理逻辑,或采用云原生方案(如Spring Cloud Kubernetes)进一步提升弹性,方能在大型项目中游刃有余
2025-03-26 10:27:24
913
原创 netty select/poll/epoll区别
在Netty框架中,select、poll和epoll是不同操作系统提供的I/O多路复用机制,用于高效管理多个网络连接。它们的核心区别在于事件通知方式和性能表现
2025-03-25 19:50:07
821
原创 AQS的重入机制和锁释放逻辑
重入机制通过state计数和线程独占标记实现。释放锁时递减state,归零后唤醒其他线程。必须严格匹配lock()和unlock()的调用次数。学海无涯,志当存远。燃心砺志,奋进不辍。愿诸君得此鸡汤,如沐春风,事业有成。若觉此言甚善,烦请赐赞一枚,共励学途,同铸辉煌!
2025-03-25 16:59:20
1031
原创 AQS是什么,使用应注意什么
理解 AQS 后,可以更深入掌握 JUC 中各种同步工具的工作原理,并能够自定义高性能同步器。AQS 封装通用逻辑(如队列管理、线程阻塞/唤醒),子类只需实现资源获取/释放的具体逻辑。:双向链表,头节点(dummy node)不关联线程,后续节点为等待线程。:将复杂的线程排队、阻塞/唤醒交给 AQS,开发者只需关注资源管理。:通过 CAS 和 CLH 队列减少锁竞争,避免内核态阻塞。独占模式(如锁)与共享模式(如信号量)的区别。表示剩余许可数,共享模式唤醒多个线程。),确保所有等待线程都能被唤醒。
2025-03-24 22:48:46
766
原创 使用ThreadLocal可能导致内存泄漏的原因与其底层实现机制
内存泄漏条件实例被回收 + 线程长期存活 + 未调用remove()。最佳实践始终在finally块中调用remove ()。避免在长生命周期线程中滥用。使用静态实例(减少实例数量,但需更谨慎清理)。通过理解底层机制并遵循最佳实践,可以有效避免的内存泄漏问题。学海无涯,志当存远。燃心砺志,奋进不辍。愿诸君得此鸡汤,如沐春风,事业有成。若觉此言甚善,烦请赐赞一枚,共励学途,同铸辉煌!
2025-03-24 22:11:34
528
原创 java线程池最佳实践
显式创建线程池,避免使用Executors快捷方法、合理配置线程池参数、选择合适的拒绝策略、线程命名与线程工厂、正确关闭线程池、监控与调优、异常处理、线程池复用与资源管理、队列选择策略、动态调整参数、避免任务依赖死锁、定时任务Future超时
2025-03-22 11:00:00
940
原创 Java 中使用 Executors 工具类创建线程池的潜在问题
Executors 工具类虽然便捷,但其预设的线程池参数(如无界队列、无限制线程数)容易引发生产环境中的严重问题。手动创建线程池是更可靠的选择,开发者需根据业务负载、资源限制和容错需求,精细配置核心参数、队列类型及拒绝策略,并结合监控实现动态调优。
2025-03-22 10:00:00
852
【电商平台开发】基于设计模式的模块化架构设计:提升系统扩展性和维护性的最佳实践
2025-04-25
【本地电脑安装DeepSeek】多系统环境下DeepSeek安装指南:Ollama、Python&Hugging Face、Docker、llama.cpp安装方法详解
2025-04-25
Java开发Spring框架核心概念详解:Bean生命周期、AOP、事务管理及MVC工作原理探讨了Spring框架
2025-04-25
MySQL核心面试题详解:涵盖ACID属性、锁机制、视图、存储过程等关键技术
2025-04-25
AlxcTools.zip
2020-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人