- 博客(147)
- 收藏
- 关注
原创 LangChain4j 多模态
本文介绍了多模态模型的概念及其应用。多模态模型能同时处理文本、图像、音频等多种数据类型,突破传统单模态模型的局限性。文章以LangChain4j为例,展示了如何调用阿里云通义千问的多模态API进行图文交互,包括上传图片获取文本解读(如分析MySQL事务流程图)以及通过百炼平台生成图片(如根据提示词"可爱的石头"生成图像)。代码示例演示了配置模型参数、转换图片格式、构建请求消息等关键步骤,体现了多模态技术在AI应用中的实践价值。
2026-02-16 22:37:08
193
原创 LangChain4j 与 SpringBoot 整合
优先发在:https://juejin.cn/post/7606173847994122294。定义 AI 服务接口,使用。例如,对于 OpenAI(注意,如果同时存在多个。将 AI 服务接口作为。
2026-02-15 23:07:40
120
原创 LangChain4 初体验
本文介绍了如何使用LangChain4j框架在Java应用中集成阿里百炼平台的Qwen大语言模型。主要内容包括:1)引入兼容OpenAI API的LangChain4j依赖;2)获取API_KEY和模型信息;3)配置模型参数(API_KEY、model_name、base_url);4)通过ChatModel接口调用模型;5)可选的高级功能如日志监控、超时重试等机制实现。文章还提供了SpringBoot集成方案和BOM依赖管理建议,帮助开发者快速实现LLM功能集成。
2026-02-15 23:03:09
471
原创 数据库 关系代数
意为:用户对数据的语义和逻辑要求必须被满足。解释:单个属性的取值只能在许可的范围内,称域完整性。一个元组的多个属性值之间相容,称元组完整性。指定每个列的数据类型和取值范围。制定数据检查规则。例如:生日必须是一个日期,学生考试成绩必须在0到100之间,在职职工年龄不能超过65岁;性别属性为“男”,宿舍楼属性不能为“紫薇楼”。
2025-09-17 16:12:20
708
原创 Rust 字符串与切片
指向自身(Python 中的 self,Java 中的 this),也就是说该函数的作用是:在原字符串 s1 上追加 s2,最后得到一个新的字符串。源码可以发现,String 字符串的底层采用的是一个 u8 容器。由于 Rust 的底层是一个字节数组,而非字符,没法绝对准确的确保边界,所以没办法很方便的得到字符串的子串。字符串切片是切割的字节数组,采用的 UTF-8 编码,所以需要额外小心使得切割的边界要保证恰好落在边界上。这个函数,而该函数的第二个参数是字符串切片类型,因此必须要保证。
2025-09-06 08:58:16
1300
原创 Rust 基础语法
Rust 中可以使用 As 来完成一个类型到另一个类型的转换,其最常用于将原始类型转换为其他原始类型,但是它也可以完成诸如将指针转换为地址、地址转换为指针以及将指针转换为其他指针等功能。当在 debug 模式编译时,Rust 会检查整型溢出,若存在这些问题,则使程序在编译时 panic (崩溃,Rust 使用这个术语来表明程序因错误而退出)。下面这段代码是将字符串 42 进行解析,而编译器在这里无法推导出我们想要的类型,因此编译器就会报错。函数式编程,以函数的最后一条表达式返回的结果作为函数的返回值。
2025-09-05 15:22:59
797
4
原创 【Rust 入门】01. 创建项目
可参考:https://course.rs/first-try/slowly-downloading.html。文件夹,表示我们将以 debug 模式运行程序。依赖仓库:https://crates.io/作用:快速地检查一下代码能否编译通过。如果此时需要校验程序的正确性就需要用。进入所创建的项目下,运行项目。,该命令执行速度较快,效率较高。,但在现在版本中默认就是创建。第二种:手动编译 + 运行项目。在生成的文件中,可以看到。接着项目下会多出一些东西。的执行效率就会降低。
2025-09-05 14:06:17
300
原创 数据库系统概述
概念模型是现实世界的抽象反映,它表示实体类型及实体间的联系,是独立于计算机系统的模型,是现实世界到机器世界的一个中间层。概念模型独立于计算机系统,只描述某个特定组织所关心的信息结构,是按用户的观点对数据和信息建模,用于数据库设计,是数据库设计人员和用户之间进行交流的工具(实体-联系模型)。数据处理的目的:从大量的数据中,根据数据自身的规律和它们之间固有的联系,通过分析、归纳、推理等科学手段,提取出有效的信息资源。在学生数据中,学号,姓名,性别,专业,班级用字符串来表示,生日用日期型数据来表示,……
2025-09-04 15:09:48
965
原创 Vue 评论组件设计 V1.0
基于 Element Plus 封装的一套二级评论组件。算是版本吧,总体还是有很多不完善的地方,后续在安排改进。先用着先吧,哈哈。本文不算是教学,只是记录设计该组件的思路,虽然只是简单的记录了一下过程,给自己看的,各位仅供参考。
2025-09-03 16:26:34
622
1
原创 【ChatGPT】教我 Flyweight(享元) 模式
Flyweight 模式是一种结构型设计模式,它旨在减少内存使用和提高性能,通过共享对象来优化大量细粒度对象的创建和管理。该模式适用于以下情景:文本编辑器:在一个文本编辑器中,字符是细粒度的对象,如果每个字符都创建一个独立的对象,将会占用大量内存。使用 Flyweight 模式可以共享相同字符的实例,从而减少内存开销。图像处理:在图像处理中,像素是细粒度的对象。使用 Flyweight 模式可以共享相同像素值的实例,以减少内存占用。游戏开发:在游戏中,例如棋盘游戏,棋子是细粒度的对象。通过使用
2023-11-01 16:37:57
420
原创 《Linux 内核设计与实现》13. 虚拟文件系统
该对象(切记,不是具体的文件,即不是物理的,而只是存在于内存中的,因此 VFS 的文件对象没有对应的磁盘数据)由相应的 open() 系统调用创建,由 close() 系统调用撤销。各种文件系统都必须实现超级块对象,该对象用于存储特定文件系统的信息,通常对应于存放在磁盘特定扇区中的文件系统超级块或文件系统控制块。其实就是无效目录项,一个负状态的目录项没有对应的有效索引节点(d_inode 为 NULL),因为索引节点已被删除,或路径不在正确,但目录项仍然可以保留,以便快速解析以后的路径查询。
2023-10-07 00:45:31
500
原创 《Linux 内核设计与实现》12. 内存管理
当你创建了一个高速缓存后,slab 层所起的作用就像一个专门的分配器,可以为具体的对象类型进行分配。不能给 _get_free_pages() 或 kalloc() 指定 ZONE_HIGHMEM,因为这两个函数返回的都是逻辑地址,而不是 page 结构,这两个函数分配的内存当前有可能还没有映射到内核的虚拟地址空间,因此,也可能根本就没有逻辑地址。若想要释放的内存不是由 kmalloc() 申请的,或想要释放的内存早被释放了,再调用 kfree() 的话,就会导致很严重的后果。
2023-05-09 12:27:23
1456
1
原创 《Linux 内核设计与实现》11. 定时器和时间管理
若随意改变内核中的 HZ 值,而不及时更新用户空间的 HZ,则会给用户空间中的某些程序造成些异常结果。jiffies_to_clock_t() 将一个由 HZ 表示的节拍计数转换成一个由 USER_HZ 表示的节拍计数。jiffies 是无符号长整型,在 32 位,时钟频率为 100HZ 的情况下,497 天会溢出,1000HZ 的情况下,49.7 天就会溢出。其次,一般情况下,应该使用 del_timer_sync() 代替 del_timer(),因为无法确定在删除定时器时,它是否在其它处理器上运行。
2023-05-09 12:25:21
1012
原创 《Linux 内核设计与实现》10. 内核同步方法
在 Linux 上 atomic_t 整数类型都是 32 位,其中数据位为高 24 位,低 8 位嵌入了一个锁,因为 SPARC 体系结构对原子操作缺乏指令级支持,所以只能利用该锁来避免对原子类型数据的并发访问。down_read_trylock() 和 down_write_trylock() 方法,若成功获得了信号量锁,返回非0,若信号量锁被争用,则返回0,这与普通信号量情况相反,要小心。自旋锁不可递归:你试图得到一个你持有的锁,必须自旋等待,可是你处于自旋等待中,因此无法释放锁,导致给自己锁死了。
2023-05-09 12:24:22
654
原创 《Linux 内核设计与实现》09. 内核同步介绍
共享资源之所以要防止并发访问,是因为如果多个执行线程同时访问和操作数据,就有可能发生各线程之间相互覆盖共享数据的情况,从而造成被访问的数据不一致状态。临界区和竞争条件- 临界区:访问和操作共享数据的代码段。- 原子操作:对资源的操作必须保证在结束之前不可被打断。- 竞争条件:两个执行线程对同一个临界区操作。- 同步:避免并发和防止竞争条件。现在有一个队列,有两个函数,一个是在尾部添加元素,另一个是删除尾部元素。这两个函数在内核的各个部分都可以调用,因此现在假设程序 A 要增加一个元素,当增加完了
2023-05-08 12:44:26
440
原创 《Linux 内核设计与实现》08. 下半部和推后执行的工作
这个 taskle 被调度之后,还未运行,此时又有一个相同的 tasklet 又被调度了,那么它仍然只会运行一次,或者说后来的那个无法被调度,因为在 task_schedule() 中已经做了判断。在这种情况下,中断处理程序执行硬件相关的操作,然后触发相应的软中断,最后退出。这被称作触发软中断。通常,中断处理程序会在返回前标记它的软中断,使其在稍后被执行。大部分软中断处理程序,都通过采取单处理器数据(仅属于某一个处理器的数据,因此根本不需要加锁)或其它一些技巧来避免显示地加锁,从而提供更出色的性能。
2023-05-08 12:43:04
661
原创 《Linux 内核设计与实现》07. 中断和中断处理
但在一条指定的中断线上,对 disable_irq() 或 disable_irq_nosync() 的每次调用,都需要响应地调用一次 enable_irq()。若指定的中断线不是共享的,那么,该函数删除处理程序的同时将禁用这条中断线。若中断线是共享的,则仅仅只是删除 dev 所对应的中断处理程序,而这条中断线只有当最后一个中断处理程序被删除时才会跟着被禁用。即同一条中断线上只允许接收一个中断,而该中断线上的其它中断我们此时不接收,但其它中断线上的不受影响。禁用多个中断处理程序共享的中断线是不合适的。
2023-05-08 12:40:32
632
原创 《Linux 内核设计与实现》06. 内核数据结构
链表中添加元素不再是添加一整个结构体 fox,而是添加 list_head 指针,每个 fox 都有一个 list 成员属性,通过这个属性可以得到上一个元素和下一个元素,以及还可以通过 list_entry() 转换得到父结构体 fox。这时因为在 C 语言中,一个给定结构中的变量偏移在编译时地址就被 ABI 固定下来了。而是将 fox 和 next/prev 指针分开,将 next/prev 形成一个新结构体 list_head。
2023-05-07 15:22:06
172
原创 《Linux 内核设计与实现》05. 系统调用
在系统调用表添加一个表项。表中的位置序号(索引)就是对应的系统调用号。对于所支持的各种体系结构,系统调用号都必须定义于中。系统调用必须被编译进内核映像(不能被编译成模块)。这只要把它放进 kernel 下的一个相关文件中就可以了,如 sys.c 它包含了各种各样的系统调用。新增系统调用 foo(),此时这个函数只是系统调用的具体实现,是在内核中的。第一步:在系统调用表中添加一个表项。;...;....long sys_foo /* 新增的表项 */第二步:将系统调用号添加到 unistd.h 中。
2023-05-07 15:15:15
860
原创 《Linux 内核设计与实现》03. 进程管理
此时内核需要代替用户程序执行用户程序所需的程序(其实就是说,用户程序没权限去得到或执行内核的东西,但是我用户程序需要内核的部分东西来辅助用户程序的执行,所以我需要内核来帮我去执行某些程序,最后将结果给我),这便是“代表进程执行”。调用完 exit() 后,对应的内存位图被重置,但是此时并没有将进程描述符 task_struct 以及 thread_info 给删除掉,由此可见资源的释放和进程描述符的删除是被分开执行的。如果在一个拥有大量进程的系统中遍历所有进程,代价是很大的,因此尽量不要这么做。
2023-05-07 15:11:13
795
原创 「蓝桥杯」积木大赛
接下来每次操作,小朋友们可以选择一段连续区间 [L,R],然后将第 L 块到第 R 块之间(含第 L 块和第 R 块)所有积木的高度分别增加 1。缩小范围,观察两栋楼,例如前两栋,若第 i 个柱子大于第 i - 1 个柱子,则表示第 i - 1 栋楼盖楼时已经把第 i 栋给一起联动覆盖了,因此第 i 栋只需要盖 A[i] - A[i - 1] 层就够了。今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为 1 的积木组成,第 i 块积木的最终高度需要是 h_i。
2023-05-04 11:52:18
664
原创 「蓝桥杯」扫地机器人
第一台路线:2-1-2-3-4-3-2,清 扫了 1、2、3、4 号区域。题目要求多个机器人一起扫地,需要最少多少时间可以全部扫完,根据贪心思想,既然我们有 K 台机器人,路程为 N,那么我们自然是要把路程均分给每台机器人才可以得到最少时间,每台机器人负责 N/K 区域。给定一个每台机器人能扫的距离 m,校验每台机器人扫了 m 距离后,能否扫完整个路程,若可以则继续缩小 m ,否则扩大 m,从这里就能看得出来只是二分思想。回来,也就是说扫了 4 个距离,花费了 6 时间,不管从。行,每行一个整数 A_i。
2023-05-04 11:44:52
1252
原创 「Codeforces」D. Infinite Set
通过上面的例子,我们发现,只是 1 后面的 0 发生了变化,而我们的规则是要么增加一个 1,要么增加两个0(这0是一起添加的,不能分开)。上表意思:一个数的二进制在其后面增加若干位数,每次只能增加一个 1 或两个 0 ,那么最终得到的不同的数有多少个。的元素是 {5,11,20,23,39,41,44,47,79,80,83,89,92,95}。的数,其实就是求对应的二进制最高位 1 的后面 0 的变化,例如。的元素是 {1,3,4,6,7,9,12,13,15}。**Tips:**以后但凡看到这种。
2023-05-04 11:40:10
549
原创 「Codeforces」C. Differential Sorting
对于每个测试用例,如果没有解决方案,则在一行中打印 -1。那么接下来的 m 行中的第 i 行应该包含三个整数 x,y,z (1≤x
2023-05-04 11:37:52
613
原创 「Codeforces」B. Avoid Local Maximums
对于每个测试用例,首先输出一个包含单个整数 m 的行——所需的最小操作数。根据局部最大值的定义,可以知道局部最大值若有多个,一定是相隔开的,两两之间至少隔了一个元素,那么我们只需要让这个元素修改为左右两边最大的那一方就可以啦。然后是 t 个测试用例。每个测试用例的第一行包含一个整数 n (2≤n≤2⋅105) — 数组 a 的大小。讲真,虽然过了,不过就是做法好像比较笨(不管,反正我过了,哈哈哈)。在第一个示例中,数组不包含局部最大值,因此我们不需要执行操作。求:使用最少的操作,使数组内不包含局部最大值。
2023-05-04 10:06:11
790
原创 「Codeforces」A. Reverse
不是,前者是因为数字重复,后者是因为最大值超过了 n(不在 n 范围内)。序列是一个数组,由 1 到 n 以内的不同数字任意顺序排列组成。每组测试用例的第二行包含 n 个整数,表示序列元素。要求你找到恰好执行一次反转操作获得的字典最小序列。每组测试用例的第一行包含一个整数 n(2022年2月15日15:29:19。选择两个整数,即一个区间。输出可以获得的字典序最小的排列。的元素下标为 L,接着找。,对其区间进行反转操作。的元素下标 R,对这个。给一个长度为 n 序列,
2023-05-04 10:03:22
592
原创 「Codeforces」B. Odd Swap Sort
上面的第二条信息,既然偶数相连或奇数相连都不可能交换位置,那么如果要保证最终的结果为非递减序列,那么所有的偶数序列和奇数序列都必须是非递减的才行。,an (1≤ai≤109) — 数组的元素。每个测试用例的第一行包含一个整数 n (1≤n≤105) — 数组的长度。因此我们只需要判断偶数序列和奇数序列是否都是递增的就行。,使得最终得到的序列是一个非递减的序列。这题目其实是可以模拟的,不过复杂度为。的和为奇数,则交换这两个数的位置。,数据量很大,因此必然为 TLE。有一个数组A,遍历这个数组,若。
2023-05-04 10:02:08
869
原创 「Codeforces」C. Inversion Graph
有上面的几个信息,我们知道只需要维护最大值就可以了,简单来说就是“大于该数的就是新的连通块,小于该数的则连接该连通块”,因此我们只需要维护最大值就行,如何维护?这也是维护时需要注意的点:判断一个数是不是属于当前连通块的时候,如果是,则还需要判断是否也属于前面的连通块。,表示 2 即使属于 5 的连通块,也是属于 3 的连通块,所以 3 也属于 5 的连通块。答:一定,因为若数小于栈顶即不属于当前连通块,就不入栈,若大于栈顶,则是新的连通块,会入栈。,所以 1 是属于 3 的连通块。≤n) — 排列的元素。
2023-05-03 11:30:08
849
原创 「Codeforces」D. Big Brush
都是同一个颜色,也就是说,无论前面的如何操作,这个色块无论是什么颜色,在最后一步的时候都会被填充为同一色块,换句话说,这几个色块可以与任意颜色匹配,因为到了最后一步都会被填充回来,每次找到这种色块,我们需要将其设置为 “-1”,这种色块我们称之为“万能块”。在接下来的 q 行的第 k 行,打印三个整数 i, j, c (1≤i
2023-05-02 09:25:44
1247
原创 「Codeforces」771-div2 E. Colorful Operations
个人认为本题的难点主要是如何维护这个颜色,我一开始是想用一个结点内部维护一个 color 和 val 属性,表示每个结点的颜色和值,用的是线段树,后面我发现如果一个区间内的颜色不同,那么 color 到底应该填什么呢…这样效率很低,可以考虑先操作,等该数的颜色发生变化时,再去更新元素的值,这就是一个延迟操作的效果。对于操作 2 和 操作 3 来说,其实和单点的是一样。对于操作 1:只修改同一种颜色的区间,否则就一定往下找,最后一个点一定为 true。接下来的每一个q行包含以问题陈述中描述的形式给出的查询。
2023-05-01 15:24:15
749
原创 「数论-最大公约数」P1372 又是毕业季I
既然是求一个序列中,选 k 个数,并且这组数据是最大的公约数,那么我们所选的 k 个数,就一定要满足倍数关系,因为只有这样才可以得到最大公约数。并且这组数据一定是在最后面的,即离 n 最近的 k 个数。为了把毕业晚会办得更好,老师想要挑出默契程度最大的 k 个人参与毕业晚会彩排。老师列出全班同学的号数。知识点:若多个数都是倍数关系,则最大公约数一定是最小的那个。本题给 n 个数,从 1~n 中选 k 个数,求最大公约数。例如:8 与 24,3×8=24,gcd(8,24)=8。一个整数,为最大的默契值。
2023-04-30 10:06:38
874
原创 「欧拉定理」[SDOI2008]仪仗队
仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图)。现在,C君希望你告诉他队伍整齐时能看到的学生人数。作为体育委员,C君负责这次运动会仪仗队的训练。共一个数,即C君应看到的学生人数。
2023-04-29 08:21:06
963
2
原创 「背包问题-步入」CSL分苹果
CSL手上有n个苹果,第i个苹果的质量是wi,现在他想把这些苹果分给他的好朋友wavator和tokitsukaze。01背包问题,苹果的质量即为价值,要将苹果按质量均分为两堆,那么必然是 质量/2,我们可以先计算其中一堆的苹果个数,将总质量除以2,就是一堆的质量,以此质量为上界进行01背包即可。计算出其中一堆的苹果个数后,剩下的苹果个数即为另外一名同学苹果个数,且另外一名同学的苹果个数一定大于或等于该同学。输出两个整数,分别表示wavator和tokitsukaze得到的苹果的质量。
2023-04-28 10:20:31
251
原创 「背包问题-步入」[NOIP2005]采药
医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。第一行有两个整数T(1
2023-04-27 09:39:48
98
原创 「背包问题-步入」[NOIP2006] 金明的预算方案
从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有3个非负整数v p q(其中v表示该物品的价格(v < 10000),p表示该物品的重要度(1~5),q表示该物品是主件还是附件。如果q=0,表示该物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号)第1行,为两个正整数,用一个空格隔开:N m(其中N( < 32000 )表示总钱数,m( < 60 )为希望购买物品的个数。设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,……
2023-04-26 13:00:21
197
原创 「背包问题-步入」失衡天平
终于Alice走出了大魔王的陷阱,可是现在傻傻的她忘了带武器了,这可如何是好?这个时候,一个神秘老人走到她面前答应无偿给她武器,但老人有个条件,需要将所选武器分别放在天平的两端,若天平平衡则可以将天平上的所有武器拿走,还好这个天平锈迹斑斑,只要两端重量相差小于等于m就会保持平衡,Alice傻傻的认为越重的武器越好,求Alice最多能拿走的武器总重量。可以称两次,第1次:(1;一个整数,表示Alice最多能拿走的武器总重量。称一次,(10,20,30,40;第二行n个整数x,分别表示n件武器的重量。
2023-04-25 08:41:47
478
原创 「背包问题-步入」队伍配置
队伍配置里,可供玩家选择的作战人物被称作“从者”,玩家可以对每个“从者”可以装备至多1件的“概念礼装”,玩家具有一个cost上限值。数据保证:0
2023-04-24 09:42:38
541
1
原创 「区间DP-步入」凸多边形的划分
给定一个具有N个顶点的凸多边形,将顶点从1至N标号,每个顶点的权值都是一个正整数。将这个凸多边形划分成N-2个互不相交的三角形,试求这些三角形顶点的权值乘积和至少为多少。)为例,以 BE 为固定边做辅助线,可作出 BD 或 EC,分别可以划分三角形为 EBD 与 BDC 或 BEC 和 CED,其中划分的点 D 与 C 称为分界点 K。输入第一行为顶点数N第二行依次为顶点1至顶点N的权值。输出仅一行,为这些三角形顶点的权值乘积和的最小值。以下代码只能获得 40 分(方便理解DP过程)
2023-04-23 11:45:30
480
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅