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

原创 《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》
在平常开发过程中会遇到许多意想不到的坑,本篇文章就记录在开发过程中遇到一些常见的问题,看了许多博主的异步编程,我只能说一言难尽。在Promise返回给调用者的时候,操作往往还没有完成,但Promise对象可以让我们操作最终完成时对其进行处理(无论成功还是失败)Promise是现代JavaScript中异步编程的基础,是一个由异步函数返回的可以向我们指示当前操作所处的状态的对象。类似与前端Promise代表异步对象,类似Java中的CompletableFuture。
2025-01-08 10:14:34
898
1
原创 《面试必考》 — JVM堆栈溢出问题
理论上,堆内存也属于元空间的一部分(所以jdk8以前的版本,其异常信息是一样的),区别在于堆内存是会被java的垃圾回收机制进行回收的,而其它元空间被使用后会一直固定占用,这就是为什么程序一旦启动,无论有没有被访问,总是持续稳定地占用了一部分内存资源而不会被回收走的原因。3、POD就是容器化部署的最小单元。所以,关于内存的正常合理的使用,我们需要经常关注K8S的POD管理工具,一般内存的使用率在30%-50%较为合理,如果长期使用在70%以上,就要考虑是否内存泄漏或增加内存的方式减少OOM事件的频发。
2025-02-11 19:34:06
1041
1
原创 《面试必考》 — 类加载过程和类加载器
clinit>()类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)。其中,验证、准备和解析这三个阶段可以统称为连接(Linking)。类加载是 JVM 将.class字节码文件加载到内存,并转换为Class。
2025-02-06 18:04:57
307
原创 《面试必考》 — 请你讲解一下Spring Bean的生命周期
TaskRegister 类通过实现Spring的ImportBeanDefinitionRegistrar接口,结合ResourceLoaderAware和EnvironmentAware接口的功能,实现了TMS异步任务的自动化注册和管理。ResourceLoaderAware:实现了该接口的类可以在Bean实例化后、初始化之前获取到Spring容器中的ResourceLoader对象。初始化 (Initialization):调用自定义的初始化方法(如init-method属性指定的方法)。
2025-01-13 11:09:41
549
原创 远程调用事务问题治好了我的头痛
通过配置FallbackFactory,可以在远程服务调用失败时提供一个替代的实现逻辑,从而避免直接抛出异常。:在分布式事务中,如果Feign调用的服务抛出了异常并触发了降级机制,可能会导致Seata事务无法正常回滚。:在某些情况下,可以通过调整Ribbon的超时时间来避免因网络延迟导致的事务回滚失败。分布式事务确实让我头痛了一回,A系统a方法修改表后远程调用B系统的b方法,却把a方法修改表之前的数据查出来了的,匪夷所思。:一种常见的解决方案是在调用方的服务中开启一个本地事务,并保证该事务的一致性。
2025-01-08 09:47:18
436
原创 Java类创建对象时成员变量、语句块、构造函数的加载顺序
这次我们来看一个面试题,主要讨论 Java 类创建对象时,静态成员变量、普通成员变量、静态语句块、普通语句块、构造函数、静态方法、普通方法的执行先后顺序,同时会提及何种情况下会触发类加载。静态成员变量和静态语句块只会首次类加载时才会触发加载,后续的对象实例化并不会触发它们再次加载;普通成员变量、普通语句块、构造函数会随着后续对象的实例化而进行重新加载;静态方法、普通方法在对象实例化时,并不会触发加载,而是方法调用时才会触发加载;
2025-01-05 14:49:00
182
原创 内存溢出(OOM)的场景分析及解决方案
理论上,堆内存也属于元空间的一部分(所以jdk8以前的版本,其异常信息是一样的),区别在于堆内存是会被java的垃圾回收机制进行回收的,而其它元空间被使用后会一直固定占用,这就是为什么程序一旦启动,无论有没有被访问,总是持续稳定地占用了一部分内存资源而不会被回收走的原因。3、POD就是容器化部署的最小单元。所以,关于内存的正常合理的使用,我们需要经常关注K8S的POD管理工具,一般内存的使用率在30%-50%较为合理,如果长期使用在70%以上,就要考虑是否内存泄漏或增加内存的方式减少OOM事件的频发。
2025-01-03 16:56:02
615
原创 EDA设计2.0
如果是转单的子事件也是写入托运单轨迹, 那么这个子事件对应的sub_event_topic也是1022,进入托运单轨迹这个实现类消费, 只是在具体实现类里面, 根据不同的子事件编号sub_event_no判断是哪一种托运单轨迹, 则写入不同的托运单轨迹==修改事件表, 设置错误原因,已重试次数,下次执行时间,根据不同的次数,设置不同的重试间隔时间。修改事件状态, 迁移成功数据到备份表, 删除原事件表数据 , 缓存事件值-1 已处理。2.查询是否存在待处理事件。
2025-01-02 10:50:22
8
原创 《笑谈设计模式》 — 23种尝鲜版(已完结2025-02-11)
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当⻓的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
2024-08-20 14:08:22
971
原创 《面试必考》 — AOP
在Spring Boot中,使用AOP(面向切面编程)、拦截器(Interceptor)或过滤器(Filter)来实现限流功能或IP黑名单功能时,它们的主要区别在于作用范围、配置方式以及执行时机等方面。配置复杂度:拦截器和过滤器相对简单,只需要配置路径即可,而AOP可能需要更多的配置和代码编写工作。AOP可以作用于Spring管理的Bean的方法上,可以精确到特定的方法或类。灵活性:AOP提供了最细粒度的控制,可以针对特定的服务方法进行限流或黑名单检查。如果需要对特定的URL路径进行限制,可以选择拦截器。
2024-08-14 09:12:59
437
原创 《面试必考》— 找出重复的元素
综上所述,从效率角度,使用HashMap和Stream API过滤的方法是最佳选择,其次是使用Stream API的groupingBy和counting,然后是排序+二分查找,最后是双重for循环。效率: 高,因为HashMap操作在平均情况下是常数时间,且Stream API的过滤操作也很快。哈喽,各位道友,在平时面试过程中,避免不了一些笔试题(算法&SQL),今天分享想一个经典的笔试题,空间复杂度: O(1) 或 O(k),其中k是重复元素的数量。效率: 低,不适合数据量大的情况。
2024-08-02 16:46:46
578
原创 《面试必考》— MySQL调优指南与踩坑记录(持续更新.....)
哈喽,大家好!在平常开发过程中会遇到许多意想不到的坑,本篇文章就记录在开发过程中遇到一些常见的问题一、replace into 隐藏风险在上面博客中说到接了一个小活(传送门:一套玩转Datahub,多shard订阅数据(阿里云K8S与Datahub实操)_datahub 订阅量-优快云博客),对接Datahub。为了图省事,没采用saveOrUpdata,直接使用replace into,结果寄了。话不多说,代码如下 <insert id="tra
2024-06-17 11:15:25
264
原创 《面试必考》— 分布式锁实现方式
分布式锁在应用开发中,特别是web工程开发,通常都是并发编程,不是多进程就是多线程。这种场景下极易出现线程并发性安全问题,此时不得不使用锁来解决问题。在多线程高并发场景下,为了保证资源的线程安全问题,jdk为我们提供了synchronized关键字和ReentrantLock可重入锁,但是它们只能保证一个工程内的线程安全。在分布式集群、微服务、云原生横行的当下,如何保证不同进程、不同服务、不同机器的线程安全问题,jdk并没有给我们提供既有的解决方案。此时,我们就必须借助于相关技术手动实现了。目前主流的实现
2024-06-14 15:07:02
667
原创 《面试必考》— 详谈分布式锁(从一个小小JUC说起)
一、Java常见锁哈喽,大家好!本次带来的是对于分布式锁的思考,让我们从Java常见的锁🔐走起,各位看官里面请!一、Java常见锁提到Java的锁,立马就想到JUC那些事儿,众所周知JVM与JUC不分家。这里先不赘述JVM的知识,面试常见的几个面试题就是:Lock与Synchronized的区别?Synchronized锁升级(膨胀)过程?ReentrantLock是什么?AQS是什么?公平锁、非公平锁、锁降级是什么?在JUC包中有哪些常见的Lock实现类,作用分别是什么?
2024-06-14 12:08:18
392
原创 MySQL向Es数据同步策略
目前有有一个小项目功能落到自己手中,也是一个面试必考点。如何保证MySQL与Es、Redis等之间的数据一致性,带着大家的问题,我给提供一种解决方案(最终一致性)最后:①②是强一致性的解决方案,③④是最终一致性的解决方案。项目实战是一个漫长的过程,山高路远,道阻且长!③通过MQ异步消息推送实现,MySQL数据发生变化时向MQ发送消息。大家知道有几种保证数据一致性的解决方案呢?④通过定时任务获取MySQL中更新的数据。
2024-06-12 15:49:05
561
原创 一套玩转Datahub,多shard订阅数据(阿里云K8S与Datahub实操)
最近接了一个小活,之前同事通过请求接口的形式获取上游系统数据,轮询一时爽,改bug火葬场。没办法,只能用上Datahub,看到阿里云提供的SDK源码与其提供的demo,感觉有的拉胯,看了全网如github、scdn、gitee、掘金等诸多文章没几个能说明白,开箱即用的。写在前面:Datahub是什么?阿里云流数据处理平台数据总线。ps:文章末尾有Python版本的🔗链接。
2024-06-06 21:59:46
793
原创 MySQL主要支持7种JOIN方式:
FULL OUTER JOIN:返回左表和右表中所有的行。但需要注意的是,MySQL本身不直接支持FULL OUTER JOIN,可以通过UNION将LEFT JOIN和RIGHT JOIN的结果合并来模拟这一行为。RIGHT JOIN(右连接):返回右表的所有行,即使左表没有匹配项。LEFT JOIN(左连接):返回左表的所有行,即使右表没有匹配项。CROSS JOIN(交叉连接):返回左表的每一行与右表的每一行的笛卡尔积,即所有可能的组合。INNER JOIN(内连接):返回两个表中键相匹配的行。
2024-06-05 17:07:54
332
原创 《面试必考》 — 微服务调用(OpenFeign)、过滤器(Filter)和拦截器(Interceptor)的区别
断言(Assertion)是在请求结果返回后对结果进行校验的机制,通过判断返回结果是否符合预期,来确定本次请求是否成功。== 在Java和Spring框架中,过滤器(Filter)和拦截器(Interceptor)都是用于处理HTTP请求的组件,但它们有明显的区别:==拦截器:基于Java的反射机制,Spring MVC中的拦截器是基于AOP(面向切面编程)思想实现的,使用代理模式来拦截请求。拦截器:在请求处理前后被调用,可以多次被调用,形成拦截器链,每次请求可以触发多个拦截器,并按照声明顺序执行。
2024-06-03 10:26:35
575
原创 《面试必考》 — MQ专题精讲(持续更新中......)
这些操作与使用普通队列无异,只是由于使用了惰性队列,消息的消费速度可能会受到磁盘I/O性能的影响,因此在设计消费者逻辑时,可能需要考虑消息处理的延迟和吞吐量。综上所述,Kafka 通过结合生产者确认策略、消息持久化、Broker 集群稳定性、日志存储与同步机制、消费者位移管理以及幂等生产者功能,从多个层面确保消息在传输和存储过程中的可靠性,最大限度减少消息丢失的可能性。在实际应用中,它们可以独立使用,也可以根据业务需求组合使用,如在一个系统中同时配置惰性队列以节省内存,并结合延迟队列实现消息的定时投递。
2024-04-19 20:36:49
798
3
原创 新SpringCloudAlibaba
微服务其实本质上还是分布式,只是拆分的粒度大与小的问题。微服务是一种架构风格,这个概念最早是 Martin Folwer 提出,它的每个服务都是一个可以独立运行的应用,每个服务运行在自己独立的进程中,服务间通常使用http请求来相互沟通,每个服务以一种去中心化的方式进行运行。
2023-10-10 15:49:40
134
原创 liunx实用指南
source /usr/local/java (参考地址 https://blog.youkuaiyun.com/Elliseaon/article/details/118275142)
2023-09-24 19:29:56
181
原创 SpringCloudAlibaba
微服务其实本质上还是分布式,只是拆分的粒度大与小的问题。微服务是一种架构风格,这个概念最早是 Martin Folwer 提出,它的每个服务都是一个可以独立运行的应用,每个服务运行在自己独立的进程中,服务间通常使用http请求来相互沟通,每个服务以一种去中心化的方式进行运行。
2023-03-31 21:44:05
2225
原创 Elasticsearch(全文搜索引擎)
Elasticsearch是一个搜索引擎,它底层是基于Lucene来实现的。 Lucene是一个Java库,它存在着一定的问题,如果项目的开发语言不是Java,那么是无法使用 Lucene;Lucene底层设计非常的复杂,需要深入的了解搜索相关的知识,才能用好它。 Elaticsearch它是完全基于Restful风格的API来使用,那么就不在局限于任何一门语言,都可以直接调用接口即可实现搜索服务。
2023-03-16 14:01:48
1158
原创 Maven进阶
团队开发现状分析[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DV0uRN8m-1672725994115)(assets/1630987192620.png)](1)张三负责ssm_crm的开发,自己写了一个ssm_pojo模块,要想使用直接将ssm_pojo安装到本地仓库即可(2)李四负责ssm_order的开发,需要用到张三所写的ssm_pojo模块,这个时候如何将张三写的ssm_pojo模块交给李四呢?
2023-01-03 14:09:14
289
原创 JSP详解
JSP理解 JSP 及 JSP 原理能在 JSP中使用 EL表达式 和 JSTL标签理解 MVC模式 和 三层架构能完成品牌数据的增删改查功能1,JSP 概述JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的网页技术,其中既可以定义 HTML、JS、CSS等静态内容,还可以定义 Java代码的动态内容,也就是 JSP = HTML + Java。如下就是jsp代码<html> <head> <ti
2022-12-10 12:18:28
8692
CAP 定理(Consistency、Availability、Partition Tolerance Theorem),也称为 Brewer 定理,起源于在 2000 年 7 月,是加州大学伯克利分
2025-01-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人