自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 ByteBuffer 中 position 的含义

是一个非常重要的概念,它代表当前。会变为 2,意味着接下来将会写入。从 0 开始,经过两次。

2025-03-07 20:07:21 426

原创 如何在 WebSocketHandler 中控制连接的断开

返回的Mono<Void>和返回的Mono<Void>是同一个概念,它们表示 WebSocket 连接的生命周期。只有在连接关闭时,这些Mono才会完成。通过Mono<Void>和,你可以灵活地控制 WebSocket 连接的打开、消息的发送与接收,以及连接的关闭。

2025-03-05 14:48:40 1028

原创 Spring Boot WebFlux 中 WebSocket 生命周期解析

阶段说明连接建立客户端发起 WebSocket 连接请求,服务器接受并返回 101 Switching Protocols 响应,连接建立。消息传输服务器和客户端可以双向传输文本或二进制消息。连接关闭连接可由客户端、服务器、网络异常等原因关闭。资源清理连接关闭后需要进行资源清理操作,如取消订阅、清理状态等。我们还可以通过")));

2025-03-05 14:36:58 1014

原创 Spring WebFlux 中 WebSocket 使用 DataBuffer 的注意事项

在 Spring WebFlux 中使用和DataBuffer避免重复读取DataBuffer,建议在读取后缓存数据。避免阻塞操作,尽量使用FluxMono进行异步处理。防止内存泄漏,在手动管理DataBuffer生命周期时使用释放资源。确保DataBuffer只在最终消费时释放,避免Flux流程中数据丢失。

2025-03-04 16:05:34 482

原创 doOnNext() vs flatMap():区别与适用场景

都可以用来处理流中的元素,但它们有不同的作用和适用场景。,确保它的逻辑执行完成后才继续。在 Reactor(

2025-03-03 19:49:07 919

原创 Spring WebFlux WebSocket 连接保持策略

在 Spring WebFlux 的 WebSocket 处理器 (`WebSocketHandler`) 中,`handle(WebSocketSession session)` 方法用于管理 WebSocket 连接。其返回的 `Mono<Void>` 表示 WebSocket 处理的生命周期,`Mono` 终止时,WebSocket 连接将被关闭,`WebSocketSession` 也会释放资源。 由于 `session.receive()` 是 `Flux`,它本身不会结束,但 `sessio

2025-03-03 19:37:49 918

原创 线程池中的四种队列类型及其对线程池配置的影响

队列类型队列容量核心线程数的变化最大线程数的变化无界队列(无限制核心线程数会保持在,只有在负载过高时会创建新线程。线程池可以创建新线程,直到达到。如果达到最大线程数,任务会根据拒绝策略处理。有界队列(有限容量如果核心线程空闲,任务将由核心线程处理。队列已满时不会创建新线程,任务会阻塞。线程池会创建新线程直到达到,如果达到最大线程数,新的任务会根据拒绝策略处理。优先级队列(无限制与其他队列相同,核心线程数会在负载过高时创建。线程池会创建新线程直到达到,并且新任务的优先级会影响处理顺序。

2025-02-26 20:17:54 668

原创 深入理解 Spring 中的 `ThreadPoolTaskExecutor` 与 `ThreadPoolExecutor`

尽管。

2025-02-26 19:46:52 773

原创 深入理解 `Sinks.Empty<Void>` 和 `Mono<Void>`:如何触发完成信号并结合 WebSocket 示例

是一个手动控制的信号源,它不会自动发出完成信号,必须通过显式调用来触发。Mono<Void>表示一个不发射数据的异步序列,它只会发出完成或错误信号。WebSocket 连接示例通过和Mono<Void>,可以灵活地表示 WebSocket 连接的完成状态。在连接关闭或发生错误时,手动触发完成或错误信号。通过和Mono<Void>,我们可以灵活地控制异步操作的完成信号。结合 WebSocket 示例,展示了如何在实际场景中使用这些工具。关键在于理解的初始状态是未完成的,必须通过显式调用或。

2025-02-25 20:02:50 1059

原创 Project Reactor中 map、flatMap、concatMap 和 flatMapSequential 的区别

(Reactive Streams 的实现库,常用于 Spring WebFlux)中,是常用的操作符,但它们的功能和行为有显著区别。根据你的需求选择合适的操作符。如果有更多问题,欢迎继续提问!

2025-02-25 17:31:39 1047

原创 Stream 的使用和基本原理

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。接下来正式进入主题,首先介绍一些重要接口参考:浅谈 jdk 中的 Stream 流使用及原理]列举了相关的接口以及有流程图Java 8 Stream流底层原理]列举了常用操作的sink代码,还有总的执行流程图,深得我心。

2024-10-30 16:03:39 906

原创 ForkJoinPool简介

(2023年3月公司内部分享)本文是主要基于以下三篇文章摘录和整理,屏蔽了一些细节,主要讲基本原理和任务处理流程,具体细节可以先看原文:ForkJoinPool大型图文现场(一阅到底 vs 直接收藏)(上)ForkJoinPool大型图文现场(一阅到底 vs 直接收藏)(中)ForkJoinPool大型图文现场(一阅到底 vs 直接收藏)(下)在计算机科学中,分治法是一种很重要的算法。字面上的解释是「分而治之」,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子

2024-10-30 15:19:31 984

原创 从内部类到Lambda表达式

内部类->匿名内部类->Lambda表达式-> 方法引用,代码越来越简洁,同时也越来越抽象,越抽象越变化多端。但是万变不离其宗,在编译时或者运行时还是会生成对应的类。掌握其原理并且灵活使用,可以让我们的代码更加优雅,在看源码的时候也更加从容。以上内容只是介绍了一些基本原理,在实际应用过程中,Lambda表达式结合接口和泛型的使用,可以使得简单的代码就可以面对变化多端的需求,这个可以在Stream源码中体会。

2024-10-29 18:19:09 1061

原创 Java常用任务调度

在日常开发过程中,我们经常会遇到周期性执行某段代码的场景。比如定期同步订单,定期更新商品信息,定期发送消息等。这些重复执行的代码可以抽象为一个任务(Task)。 一个Task的特点如下:围绕Task的特点,开发者们开发了不同的调度框架或者中间件,满足日常开发中的使用。以下表格列出了部分实现。本文对部分技术的实现进行了介绍,从简单到复杂,从具体到抽象,希望可以让大家在面对一个任务调度框架时可以快速抓住要点,不再陌生。java.util.Timer位于JDK的rt.jar包下,始于jdk1.3,是JDK自带的任

2024-10-29 17:23:58 1236

原创 使用 EasyOCR 识别 PDF 中的文字

在读取PDF上文字的时候,发现有些pdf是图片格式的,常规的pdf库是提取不到的。因此考虑使用OCR进行提取。

2024-08-16 10:26:14 700

原创 macOS上运行 Ollama & AnythingLLM,打造自己的桌面智能体/知识库。

如果你不想通过命令行来使用Ollama,可以搭配一些界面来用。比如AnythingLLM。但是我发现,如果只是体验一下,没有必要使用doker这么麻烦的方式使用。比如我是macOs系统,apple芯片,就选了第一个安装。已经开发了多种系统的桌面端,直接下载使用即可。其他使用步骤与docker没区别,直接参考。下载安装Ollama可以参考前序文章。

2024-05-09 16:56:53 1871

原创 ubuntu 本地部署体验Llama3的中文微调模型Llama3-Chinese-8B-Instruct

ubuntu 本地部署体验Llama3的中文微调模型Llama3-Chinese-8B-Instruct

2024-05-09 10:02:47 3169 2

原创 Ubuntu 环境安装和使用Ollama

Ubuntu 环境安装和使用Ollama

2024-05-07 12:19:05 4380 1

原创 macOS 本地部署体验Llama3

打开终端,输入命令 :ollama run llama3。即可启动llama3。如果第一次启动,会先下载模型。ollama run llama3下载的是8b模型。很明显,现在官方的llama3对中文的支持不是很好,所以现在也已经有人针对中文进行了训练,可以更好支持中文。点击模型名称后,可以看到模型的具体信息。选择不同的模型,右边会给出相对应的命令。使用Ollama本地部署非常容易,首先下载Ollama。ollama list: 查看已经下载的模型。查看Ollama 已经支持的模型。下载完成后正常安装。

2024-05-07 10:50:18 836

原创 在macOS中如何配置Ollama环境变量

【代码】在macOS中如何配置环境变量。

2024-05-04 17:28:50 6347 3

原创 Mac 使用Aspose的时候,提示字体不存在的问题

提示异常 Warning: the font "Times" is not available, so "Lucida Bright" has been substituted, but may have unexpected appearance or behavor. Re-enable the "Times" font to remove this warning.下载后点击安装,解决。

2024-04-11 22:59:29 548

原创 Java ProjectReactor 响应式编程 Mono 简单工作流程解析

本文通过自己实现接口的方式,揭示了响应式编程核心类 Mono 的基本原理。其核心接口为三个 Publisher,Subscriber,Subsription。核心方法为 Publisher#onSubscribe(Subscription),Subscriber#onSubscribe(Subscription),Subsription#request(long), Subscriber#onNext(T)

2023-02-02 09:34:41 14096 2

原创 EasyExcel 如何在很低的内存下导出百万条数据的 excel

SXSSFWorkbook 本身是支持导出海量数据而不至于内存溢出的, 而使用 EasyExcel 来导出xlsx文件的时候,他的底层实际使用了SXSSFWorkbook,只是做了进一步的封装,因此自然支持海量数据导出。

2023-01-10 22:00:00 1119

原创 Spring Cloud Loadbalancer (三) 如何实现 ReactorLoadBalancer

RestTemplate 负载均衡最终是委托给了 LoadBalancerClient 去执行的,而 LoadBalancerClient 的负载均衡策略,则是交给了 ReactorLoadBalancer,是由 LoadBalancerClientConfiguration 进行配置的。本文只展示了 ServiceInstanceListSupplier 的基本逻辑,实际上 ServiceInstanceListSupplier 提供了多种场景的使用方法,可以参考。

2023-01-02 20:06:31 1482

原创 Spring Cloud Loadbalancer (二) 如何实现LoadBalancerClient

RestTemplate 负载均衡最终是委托给了 LoadBalancerClient 去实现,核心逻辑是依靠 serviceId 去获取 ServiceInstance。为了达到灵活配置的作用,引入了 NamedContextFactory,为每个 serviceId 分配了一个子容器,每个子容器都拥有 ReactorLoadBalancer 的实现。ReactorLoadBalancer 才是真正实现负载均衡策略的地方。

2023-01-02 20:05:10 3967 3

原创 Spring Cloud Loadbalancer (一) 如何对 RestTemplate 进行客户端负载均衡

RestTemplate 的负载均衡是通过 ClientHttpRequestInterceptor 去实现的,本质上委托给了 LoadBalancerClient 去重写了 HttpRequest 的 getURI 方法,从而达到将 serviceId 替换成实际 host 的目的。至于 LoadBalancerClient 的具体实现, spring-cloud-commons 模块没有提供,而是由另一个模块 spring-cloud-loadbalancer 来实现

2022-12-29 22:00:00 1007

原创 Spring Cloud NamedContextFactory 用于创建子容器

NamedContextFactory 并不复杂,通过创建 Spring 子容器,可以获取独立的上下文,每个上下文的类是隔离的。应用场景比如open-feign中,每一个接口都对应一个子容器,可以拥有不同的配置。这篇文章同样是 Spring Cloud Loadbalancer 模块学习的前置文章,对学习 Spring Cloud Loadbalancer 有帮助。

2022-12-29 21:00:00 339

原创 Spring Cloud 的服务发现和注册的接口

Spring Cloud 将服务注册和发现高度抽象为了3个接口:DiscoveryClient,ServiceRegistry 和 ServiceInstance,其中 ServiceInstance 代表提供服务的实例的信息,而 DiscoveryClient,ServiceRegistry 代表服务发现行为和服务注册行为。其中 DiscoveryClient 和 ServiceInstance 的使用范围更加广泛。

2022-12-08 21:45:00 741

原创 RestTemplate 的拦截器 ClientHttpRequestInterceptor

这篇文章是 Spring Cloud Loadbalancer 模块学习的前置文章。因为 Spring Cloud loadbalancer 是通过 ClientHttpRequestInterceptor 对 RestTemplate 进行负载均衡的。因此需要对 ClientHttpRequestInterceptor 有所了解。

2022-12-08 21:40:21 6253

原创 云原生(Cloud Native) 与Spring Cloud

云原生(Cloud Native) 是一种编程风格,符合云原生的应用,可以充分利用、发挥云平台的弹性与分布式优势。其特征跟随着技术的不断发展有所变化,目前认为,其特征包括:DevOps+持续交付+微服务+容器。为了能够让JAVA应用云原生化,Pivotal 在2015年开源了 Spring Cloud 。这不是一个新的框架,而是一些依赖或者服务。比如注册中心,配置中心,API网关等,可以认为是一些基础设施,通过这些服务,可以让JAVA适应现代的编程方式,并能利用云平台达到分布式部署,快速扩容或者缩容的目的,

2022-12-02 19:49:10 998

原创 xxl-job源码学习-服务端代码

上期回顾:xxl-job源码学习-客户端代码

2021-06-21 09:42:39 247

原创 xxl-job源码学习-客户端代码

xxl-job是一个优秀的分布式任务调度平台,国内很多公司在用,部署简单,使用方便。最近想看看是怎么实现的,于是就研究下他的源码。项目结构

2021-06-11 10:22:26 1536 1

原创 redis混合持久化的配置

redis4.0之后,持久化方式多了一种,叫混合持久化,我在安装配置过程中费了一些周折,以为没有配置成功,后来看了一些持久化的原理才弄明白,记录如下:一、参考1、redis源码分析(6)——aof rewrite https://blog.youkuaiyun.com/chosen0ne/article/details/444614972、REDIS AOF的实现https://blog.csdn...

2019-07-13 13:00:07 4324

原创 RestTemplate的配置和使用

配置/** * resttemplate 配置 */@Configurationpublic class RestTemplateConfig { @Bean public SimpleClientHttpRequestFactory simpleClientHttpRequestFactory() { SimpleClientHttpRequestFactory fac...

2019-05-17 08:05:02 1846

原创 @ControllerAdvice注解和@ExceptionHandle注解的使用

@ControllerAdvice注解查看源码,可以看到@ControllerAdvice注解有以下几个方法,可以用来指定作用范围。@AliasFor("basePackages")String[] value() default {};@AliasFor("value")String[] basePackages() default {};Class<?>[]...

2019-05-14 23:50:22 1809

原创 jdbcTemplate 使用总结

String sql = "select distinct space_id FROM mzj_ad.ad_baidu ";  List&lt;String&gt; spaceIds = jdbcTemplate.query(sql, new SingleColumnRowMapper&lt;String&gt;());

2018-06-04 19:30:03 798

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除