从零开始学Flink:数据输出的终极指南
在实时数据处理的完整链路中,数据输出(Sink)是最后一个关键环节,它负责将处理后的结果传递到外部系统供后续使用。Flink提供了丰富的数据输出连接器,支持将数据写入Kafka、Elasticsearch、文件系统、数据库等各种目标系统。本文将深入探讨Flink数据输出的核心概念、配置方法和最佳实践,并基于Flink 1.20.1构建一个完整 ...
Java并发编程(5)
线程池
1、什么是线程池?
管理线程,避免增加创建线程和销毁线程的资源消耗:线程也是一个对象,创建一个对象要类加载,销毁一个对象要走GC垃圾回收流程,都是有资源开销的。
提高响应速度:对比普通的做法,是重新创建一个线程执行,要慢很多。
重复利用:线程用完再放回池子,可以达到重复利用的效果,节省资源。
2、 ...
10. Spring AI + RAG
10. Spring AI + RAG
@目录10. Spring AI + RAGRAG概念向量:文本向量化向量数据库匹配检索SearchRequest接入ChatClientRetrievalAugmentationAdvisor最后:
RAG
检索增强生成(Retrieval-augmented Generation)
对于基础大模型来说, 他只具备通用信息,他的参数都是拿公网进行训练,并且有一定的时间延迟, 无法得知一 ...
浅谈ThreadLocal----每个线程一个小书包
ThreadLocal是什么?thread是线程,local是本地的意思字面意思是线程本地。其实更通俗的理解是给每个线程设置一个缓存。这个缓存用来存储当前线程在未来的业务逻辑中需要执行到的变量。我们先来看怎么用:
首先创建全局变量ThreadLocal,各自启动一个线程任务:线程任务将变量设置到缓存中。线程任务需要用到缓存中的变量时 ...
7. Spring AI 对话记忆 + 结构化输出
7. Spring AI 对话记忆 + 结构化输出
@目录7. Spring AI 对话记忆 + 结构化输出对话记忆PromptChatMemoryAdvisor配置聊天记录最大存储数量配置多用户隔离记忆原理源码$数据库存储对话记忆Redis存储多层次记忆架构 痛点结构化输出基础类型:Pojo类型:原理最后:
对话记忆
大型语言模型 (LLM) 是无状态的,这意味着它们不会 ...
Spring篇知识点(4)
MVC
一、Spring MVC的工作流程
客户端向服务端发送一次请求,这个请求会先到前端控制器DispacherServlet
DispacherServlet接收到请求后会调用HandlerMapping处理器映射器——该请求由哪个Controller来处理
DispacherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该去执行哪个Controller(这个存在的 ...
JUC: 线程锁
1 面试题复盘
如何理解多线程,如何处理并发,线程池有哪些核心参数?
Java加锁有哪几种锁?
synchronized原理是什么?为什么可重入?如何获取对象的锁?
JVM对原生锁做了哪些优化?
什么是锁清除和锁粗化?
乐观锁是什么?synchronized与乐观锁什么区别?
volatile有什么作用?
ReentrantLock原理是什么? ...
Spring知识点(2)
一、有哪些依赖注入方式?
构造方法注入:通过调用类的构造方法,推荐用于强依赖(没有依赖对象就没法工作)。这也是官方推荐的注入方式。好处:依赖不可变(final修饰)、更安全。
@Component
public class UserService {
private final UserDao userDao;
// Spring 会自动注入 UserDao
@Autowired ...
Spring Boot接入邮箱,完成邮箱验证码
原文出处:[https://www.huaguoniang.top/archives/spring-boot-mail]
先知
邮箱的一些基本概念:
发送邮件
STMP协议:
Simple Mail Transfer Protocol ,简单邮箱传输协议,用于发送邮件的协议。
基于TCP,保证可靠性,但不安全,是明文传输
Spring Boot默认也是基于此协议进行发送邮件
接收邮件
POP3协议: ...
Java中实现html转pdf
目录1、背景2、需求3、思路4、实现步骤4.1 搭建一个简单的工程4.1.1 引入依赖4.1.2 编写Freemarker工具类4.1.3 编写pdf工具类4.1.4 增加一个模板4.1.5 增加一个控制层4.1.6 运行4.2 功能完善4.2.1 生成的pdf需要支持中文4.2.1.1 程序中引入宋体4.2.1.2 pdf工具类中增加使用中文字体4.2.1.3 freemarker模板中使用中文字体4.2 ...
全球知名的Java Web开发平台Vaadin上线慧都网!
近日,慧都科技正式与国际知名的企业级Java Web开发平台供应商Vaadin达成合作伙伴关系。双方的合作,不仅补强了慧都在前端与应用开发领域的能力,更标志着慧都在软件工程数字化方案版图上的进一步扩展与深化,也为中国企业构建现代化应用开发注入了新动能。
目前Vaadin 开发框架及核心组件已全面上架慧都网,对慧都Dev ...
Java 日志管理的黄金组合: SLF4J+Logback
slf4j 的前世今生
Log4J、Log4J2和LogBack的历史故事
使用过Log4J和LogBack的同学肯定能发现,这两个框架的设计理念极为相似,使用方法也如出一辙。其实这个两个框架的作者都是一个人,Ceki Gülcü,俄罗斯程序员。
Log4J 最初是基于Java开发的日志框架,发展一段时间后,作者Ceki Gülcü将Log4j捐献给了Apache软件基金会 ...
【LeetCode】121. 买卖股票的最佳时机
121. 买卖股票的最佳时机
题目
给定一个数组 prices ,它的第 i 个元素 prices 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
例子
...
剑指offer-33、丑数
题⽬描述
把只包含质因⼦ 2 、 3 和 5 的数称作丑数( Ugly Number )。例如 6 、 8 都是丑数,但 14 不是,因为它包含质因⼦ 7 。 习惯上我们把 1 当做是第⼀个丑数。求按从⼩到⼤的顺序的第 N 个丑数。
如果 n = 9 , 返回 10 。注意事项:我们可以认为 1 也是⼀个丑数。
输⼊:7
返回值:8
思路及解答
暴⼒破解
⾸先,我 ...
【源码解读之 Mybatis】【基础篇】-- 第3篇:SqlSession的创建与生命周期
第3篇:SqlSession的创建与生命周期
1. 学习目标确认
1.0 第2篇思考题解答
在深入学习SqlSession之前,让我们先回顾并解答第2篇中提出的思考题,这将帮助我们更好地理解SqlSession在整个架构中的作用。
思考题1:为什么MyBatis要设计如此复杂的配置系统?
答案要点:
统一管理:所有配置项集中管理,避免配置分散和重复
灵 ...
内部类
什么是内部类
内部类是一个定义在另一个类内部的类。
内部类可分为四种:
1. 成员内部类: 定义在另一个类内部,且没有使用static修饰,且可以访问外部类所有的成员。要创建内部类的实例必须先存在外部类的实例。
public class Outer {
String name;
class Inner {
public void test() {
...
靠谱的程序员推荐阅读----->《阿里Java开发手册》【强制】所有的覆写方法,必须加@Override注解
《阿里巴巴Java开发手册》编程规约->OOP规约 其中有一条,强制要求所有覆写方法添加 @Override 注解。
这是一项非常重要的编码规范。它主要有以下几个核心目的和好处:
📌 1. 编译时检查覆写是否正确
@Override 注解会让编译器检查该方法是否确实成功覆写了父类(或接口)中的方法。如果方法签名与父类方法不一致(例如, ...
springboot~获取原注解的方法findMergedAnnotation使用场景
一 重要知识点
在Spring框架中,AnnotationUtils.findAnnotation()和AnnotatedElementUtils.findMergedAnnotation()是两种不同的注解查找方式,主要区别如下:
1. AnnotationUtils.findAnnotation()
特点:直接查找原始注解
局限性:
无法获取被元注解(如@AliasFor)覆盖的属性值
无法处理注解属性覆盖(Annotation Attr ...
国产化Excel处理组件Spire.XLS教程:Java在 Excel 表格中轻松添加下标
当 Excel 表格中包含化学式、统计脚注或科学数据时,往往需要使用下标来表示。这不仅能够让数据更加清晰,也使文档更加专业。但是,Microsoft Excel 自带的下标功能操作比较繁琐,而且也不支持批量应用,手动操作通常需要花费大量的时间。 基于此,本篇指南将介绍如何借助Spire.XLS使用 Java 实现轻松在 Excel 中插入 ...
剑指offer-32、把数组排成最⼩的数
题⽬描述
输⼊⼀个正整数数组,把数组⾥所有数字拼接起来排成⼀个数,打印能拼接出的所有数字中最⼩的⼀个。例如输⼊数组 {3,32,321} ,则打印出这三个数字能排成的最⼩数字为 321323 。
示例1
输⼊:[3,32,321]
返回值:"321323"
思路及解答
自定义排序(推荐解法)
这道题要求拼起来的数是最⼩的数字,其实是⼀个排序问 ...