- 博客(339)
- 资源 (8)
- 收藏
- 关注
原创 Java8中一个极其强悍的新接口,炸裂!很多人没用过(非常实用)
定义一个抛出异常的形式的函数式接口, 这个接口只有参数没有返回值是个消费型接口/*** 抛异常接口/*** 抛出异常信息* @param message 异常信息创建一个名为的函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为true或false时要进行的操作/*** 分支处理接口/*** 分支操作* @param trueHandle 为true时要进行的操作* @param falseHandle 为false时要进行的操作。
2024-07-30 10:35:07
781
原创 Mysql很慢,除了索引,还能因为什么?
数据查询过慢一般是索引问题,可能是因为选错索引,也可能是因为查询的行数太多。客户端和数据库连接数过小,会限制sql的查询并发数,增大连接数可以提升速度。innodb里会有一层内存用于提升查询速度,命中率一般>99%,如果低于这个值,可以考虑增大buffer pool的大小,这样也可以提升速度。查询缓存(query cache)确实能为查询提速,但一般不建议打开,因为限制比较大,并且8.0以后的Mysql里已经将这个功能干掉了。
2024-07-30 09:57:26
787
原创 工作流引擎 Activiti 保姆级教程
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。即使没有工作流业务系统也可以开发运行,只不过有了工作流可以更好的
2024-07-19 14:51:52
1077
原创 10 种超赞的 MyBatis 写法!
如果传递的是一个List,则mybatis会封装为一个list为key,list值为object的map,如果是array,则封装成一个array为key,array的值为object的map,如果自己封装呢,则colloection里放的是自己封装的map里的key值。使用时比较灵活, new一个这样的实体类,我们需要限制那个条件,只需要附上相应的值就会where这个条件,相反不去赋值就可以不在where中判断。当where中的条件使用的if标签较多时,这样的组合可能会导致错误。
2024-06-12 10:08:37
605
原创 前端实现文件预览img、docx、xlsx、ppt、pdf、md、txt、audio、video
另外对于不同文档还需要有定位的功能。,音视频定位到具体的时间等等。我的需求是需要先将文件上传到后台,所以我拿到的是url地址去展示,对于markdown和txt的文件需要先用fetch获取,其他的展示则直接使用url链接就可以。pdf引入外部完整的网站。
2024-06-12 08:48:04
845
原创 超强的文本转语音模型ChatTTS,一键打包,免费使用
ChatTTS是专门为对话场景设计的文本转语音模型,支持多人同时对话,适用的场景非常丰富,比如LLM助手对话任务,视频配音等。同时支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练,功能非常的强大。
2024-06-11 09:06:26
2072
原创 UE 像素流与 Web 协同开发
与Web交互主要涉及两个方面,一个是UE向Web发送消息,另一个就是Web端向UE程序发送消息,UE程序中需要启用像素流插件,Web端需要安装依赖包。
2024-06-11 08:51:16
1684
原创 13、SpringBoot 源码分析 - 自动配置深度分析六
至此自动配置类的解析完成了,后面的bean定义加载就不说了,前面说过要搞个自定义的自动配置的,我们试试吧。事件的监听器又添加了什么要排除的,貌似是个扩展点啊。这里又一次的进行了排除,我猜估计是为了防止自定义的接受。事件,具体他们收到后怎么做的自己可以去看,不多说了。最后把配置类名字结合和排除集合封装成。然后就是迭代每一个自动配置类,进行。
2024-06-07 17:38:43
392
原创 12、SpringBoot 源码分析 - 自动配置深度分析五
一个条件过滤器,还有其他两个,原理一样的,只是内部判断可能比较复杂,这个自己研究研究吧。是不是觉得很奇怪,前面索引少了几个,其实不是,只有没满足条件的才会放一个信息对象,满足条件的是。如果子线程没解析完,主线程解析完后,会调用到这里,还是会然子线程完成了,把结果返回才继续的。创建一个结果解析器对象,然后把起始索引和终止索引传进去,然后封装到。就是遍历,然后获取对应条件的类名,这里就是我前面说的从。如果有逗号的,说明有好几个,所以就循环尝试。是个枚举,判断要加载的类是否存在。加载进来的,进行加载检查。
2024-06-07 17:31:03
825
原创 推荐一款贼好用的低代码报表、大屏设计工具JimuReport,开源免费!
JimuReport是北京国炬信息技术有限公司旗下的平台,是一款免费的数据可视化报表工具,主要用于报表和大屏设计。用户可以通过在线拖拽的方式,像搭建积木一样设计报表,报表设计、图形报表、打印设计、大屏设计等,完全免费!秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、解决各类报表难题。它采用了纯Web在线技术,可以快速集成到SpringBoot的脚手架项目中,只需引入依赖即可。用户无需编写大量代码,即可快速制作各种报表,大大降低了报表开发的难度,缩短了开发周期。
2024-06-07 17:19:56
1145
原创 20K star!搞定 LLM 微调的开源利器LLaMA Factory
在人工智能领域,大型语言模型(LLM)微调(Fine-Tuning)是当下最热门的话题之一。总体来说LLaMA Factory 是一个非常优质的工具,在LLM微调中帮助用户节省了大量的精力。这些模型拥有惊人的语言理解和生成能力,但要微调和部署它们以适应特定任务,往往需要大量计算资源和专业知识,代码调试还得有深厚的技术功底。
2024-06-07 17:08:16
1761
原创 再见VMware,一款更轻量级的虚拟机!
经过一段时间的使用,我认为这款工具确实是不错的!比如说我要搞点 linux 的小试验,通过 Multipass 几分钟就能搭起系统来测试。要测试小型数据库集群,也可以通过 Multipass 在本地快速搭建虚拟机集群,很不错!唯一美中不足的是 Multipass 只能使用 Ubuntu 镜像,因为这款工具是由 Ubuntu 背后的 Canonical 公司开发开源的。
2024-06-07 16:27:14
447
原创 Spring Boot + URule 实现可视化规则引擎,太优雅了!
规则引擎其实是一种组件,它可以嵌入到程序当中。将程序复杂的判断规则从业务代码中剥离出来,使得程序只需要关心自己的业务,而不需要去进行复杂的逻辑判断;简单的理解是规则接受一组输入的数据,通过预定好的规则配置,再输出一组结果。DroolsAviatorEasyRules等等。但是URule,它可以运行在等各种类型的操作系统之上,采用纯浏览器的编辑模式,不需要安装工具,直接在浏览器上编辑规则和测试规则。当然这款规则引擎有开源和pro版本的区别,至于pro版是啥,懂的都懂,下面放个表格,了解下具体的区别。
2024-06-07 09:48:24
847
原创 Spring Cloud Alibaba 接入AI,3分钟搞定一个 AI 项目!
Spring AI是从著名的Python项目LangChain和LlamaIndex中汲取灵感,它不是这些项目的直接移植,它的成立信念是,下一波生成式人工智能应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。提供抽象能力简化AI应用的开发模型与向量支持AI集成与自动配置Spring AI简化了我们构建大型复杂的AI应用的过程,当然如果你的项目仅仅是需要调用一个AI接口,那其实直接调用官方SDK反而更方便。
2024-06-07 09:18:06
2405
5
原创 你管这破玩意儿叫负载均衡?
架构一定要结合业务的实际情况来设计,脱离业务谈架构其实是耍流氓,可以看到上文每一个架构的衍化都与我们的业务发展息息相关,对于中小型流量没有那么大的公司,其实用 Nginx 作为负载均衡足够,在流量迅猛增长后则考虑使用 lvs+nginx,当然像美团这样的巨量流量(数十 Gbps的流量、上千万的并发连接),lvs 也不管用了(实测虽然使用了 lvs 但依然出现了不少丢包的现象)所以它们开发出了自己的一套四层负载均衡器 MGW。
2024-05-30 09:04:28
1183
原创 Mybatis 查询TypeHandler使用,转译查询数据(逗号分隔转List)
通过配置MybatisTypeHandler实现返回查询参数转译
2024-05-30 08:55:52
743
原创 11、SpringBoot 源码分析 - 自动配置深度分析四
原来还有一个加载的文件 META-INF/spring-autoconfigure-metadata.properties。差点把这个细节忘记了,不好意思啊,这个要说下,不然后面说到怎么进行条件过滤的会不知道数据怎么来匹配的。这里加载的就是自动配置类上的条件类,也就是说过滤的时候会判断这些类是否存在或者不存在才能加载。每一个都会去匹配那么多配置类,所以他开了线程,看这个红色框的方法。个,超过配置类个数,每个都有过滤条件,可能还有好几个条件。好了,这里铺垫好了,就可以继续讲过滤了。所以总共属性有 486。
2024-05-24 10:09:14
380
原创 解决Tomcat启动闪退:详细指南与故障排除技巧
有时,部署在 Tomcat 上的某个 web 应用可能导致启动失败。检查 setenv.sh(Linux)或 setenv.bat(Windows)中的 JVM 参数设置,确保它们都是正确的。查看 Tomcat 的日志文件,通常位于 logs 目录下,如 catalina.out,可能会有关于启动失败的详细信息。确保为 Tomcat 分配了足够的内存,并检查 server.xml 中的内存设置是否正确。检查并配置相应的规则。确保 Tomcat 有足够的权限访问其所需的所有文件和目录。
2024-05-24 09:51:22
181
原创 深入解析Spring Boot启动机制:从原理到实践
下图代码说明了,Spring在初始化全部 单例Bean以后,会执行接口。SpringBoot 会在Spring完全启动完成后,才开启Http流量。这给了我们启示:应该在Spring启动完成后开启入口流量。Rpc和 MQ流量也应该如此,所以建议大家 在或者等位置 注册服务,开启流量。例如服务发现组件,就是在中注册服务的!
2024-05-24 09:46:05
1076
原创 效果炸裂!使用 GPT-4o 快速实现LLM OS
关于 LLM OS 的最初构想源自@karpathy 在2023年11月11日发布的一条Twitter 动态,这是 LLM OS 概念的最早出处,如下图所示:第一、 LLM 作为 「CPU」:OpenAI GPT-4 Turbo;256 核心(即 batch size,数据送入 LLM 的批次大小)处理器频率 @ 20Hz (tok/s,即吐 token 的速度)第二、 上下文窗口大小作为 「RAM」: 128Ktok(GPT-4 Turbo 的水平);第三、 嵌入工具作为「文件系统」: Ada002
2024-05-24 08:40:25
1197
原创 10、SpringBoot 源码分析 - 自动配置深度分析三
这几个条件,他会去配置类的注解上查找相应的条件类是否存在,不存在就会被过滤掉,过滤的时候可能会开启线程,帮助一起处理,因为配置类数量多。然后进行去重,再获取要排除的名字,检查排除的类的合理性,然后排除,再进行条件类过滤,因为可能有些配置类缺少某些类就不能用了,触发自动装配导入事件,最后封装成。前面讲了那么多,都是为了这里啊,不然直接上来都不知道是怎么来的,我们来看看这个干了什么,别看就那么点,其实里面很复杂,简单的说就是从我们初始化加载的所有的。个,好多啊,没关系,后面过滤就没那么多了。
2024-05-23 17:48:07
1271
原创 09、SpringBoot 源码分析 - 自动配置深度分析二
都拿出来,都注册到里面去,就是前面讲的分组注册,最后处理,处理完之后还要创建。,这里面封装着自动配置类名字集合,后面只是放到对应的映射里,方便用。,这里就是避免迭代器在迭代的时候还要新的元素添加进来,会出问题。为什么要这么分组,这里就体现出来了,看他怎么处理的,遍历所有的。,其实这个时候已经把要自动配置的类找到了,然后迭代去进行递归。实体迭代器,就是已经把自动配置的类名集合封装成迭代器了。这里就是处理逻辑,其实就是创建。这里要开始处理了,其实是要组。,然后把前面放进去的。
2024-05-23 17:38:04
314
原创 7.3K Stars!Text2SQL还不够?试试更精准的RAG2SQL开源工具
Vanna 是一个开源的基于大模型和 RAG 的 Text2SQL 工具,Vanna 通过结合RAG 框架、大语言模型、高质量的训练数据、持续优化能力、广泛的数据库支持以及开源定制化的特点,实现了在复杂数据集上的高精度表现。使用 Vanna 可以使用任何的大模型、任何的向量数据库、任何的前端,和任何的关系数据库交互。
2024-05-22 11:48:05
1151
原创 08、SpringBoot 源码分析 - 自动配置深度分析一
因为处理的方式是迭代器循环,所以不能添加,只能直接处理,当然如果不为空,表示没有在处理,可以添加到。看下他的结构,左边不用管,就是为了回调拿到一些属性,好对容器操作,主要是右边,我们前面。的原理,想看的朋友可以看下这篇文章,有这个基础对下面的理解比较好,因为这里还有个。那为什么就有这个注解就能自动配置呢,我们来看看这个注解,其他你可以不管,但是。有了这个前提,我们就可以先看这个配置类的解析过程,其实就是。进来的类,然后按不同类型进行判断处理,重点就是这里啦,我们先来看下。的解析处理,解析流程我以前的。
2024-05-22 11:39:00
1154
原创 07、SpringBoot 源码分析 - SpringApplication启动流程七
这里面有干了很多事,他会将最前面获得的初始化器都初始化,然后广播上下文准备好事件,然后这里居然还设置了不能覆盖同名。源码文章,其实内部干了不少事情,后面会讲,毕竟前面那么多初始化器初始化了,肯定会对后面。获取最开始创建的初始化器,遍历每一个初始化器,进行初始化。刷新完成后基本没啥事了,就进行启动完成事件通知,还有一些的。名字生成器,资源加载器,还有前面创建的转换器也要放进来。定义,这样就避免了用户去捣乱了。方法,进行初始化,就不讲了,可以看我写的。除了刷新外,还注册了一个钩子。类型的,所以会调用到他的。
2024-05-22 11:05:07
597
原创 你还在使用websocket实现实时消息推送吗?
在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。本文主要介绍SSE的使用场景和如何使用SSE。在很久很久以前,前端一般使用轮询来进行服务端向客户端进行消息的伪推送,为什么说轮询是伪推送?因为轮询本质上还是通过客户端向服务端发起一个单项传输的请求,服务端对这个请求做出响应而已。通过不断的请求来实现服务端向客户端推送数据的错觉。并不是服务端主动向客户端推送数据。显然,轮询一定是上述三个方法里最下策的决定。
2024-05-20 08:56:07
806
原创 基于LangChain快速实现Agent应用
Agent 构建在大语言模型的推理能力基础上,对大语言模型的 Planning 规划的方案使用工具执行(Action) ,并对执行的过程进行观测(Observation),保证任务的落地执行。Chain 是静态的面向过程架构设计,过程是事先设计好的静态流程。而 Agent 则是动态的面向目标架构设计,由大语言模型来决策整个过程。逻辑了(即不要静态的业务流程编排了),只需将 Prompt 提示词提供给大语言模型,让其进行判断决策即可。模型根据工具的描述调用相应的方法,并观察其返回结果。
2024-05-20 08:45:44
710
原创 06、SpringBoot 源码分析 - SpringApplication启动流程六
收到环境准备好的事件后做的事,当然还有其他的一些配置信息,我们还是先把主线弄明白再搞细节,不过这里配置完成会进行广播,这次的事件是。准备环境这里比较复杂,可以写很多,这个还是细节的时候去看,先把脉络理完吧,后面讲上下文的准备,这个也很重要,准备完了就是。其他剩下的暂时不讲,因为比较复杂,很多都是一些属性的配置,比如会获取你的。这里主要是配置了很多的类型转换器和格式转换器,另外两个跟换进属性相关。这个里面有配置很多转换器,我就不多讲了,自己看就行了。根据类型创建对应的上下文对象,默认全是注解。
2024-05-13 14:14:08
1079
原创 05、SpringBoot 源码分析 - SpringApplication启动流程五
如果是类型的话,就可以直接判断,不是的话要用适配器适配一下,适配器模式,接口不一致的时候,可以用这个适配,这里用的是对象适配器,持有要适配的对象。是否支持就是看事件类型和事件源类型是否支持了。
2024-05-13 13:48:24
568
原创 04、SpringBoot 源码分析 - SpringApplication启动流程四
现在有个启动事件,但是不一定所有监听器都要支持该事件,如果不支持表示对此事件不关心,那就不需要通知给他了,所以这里就是为了找出支持该事件的监听器集合,找出来之后还会给事件和监听器集合做映射,放入缓存中。//获取事件源,就是事件是谁触发的Class
2024-05-11 14:49:12
798
1
原创 03、SpringBoot 源码分析 - SpringApplication启动流程三
其实你可以看到,其实是一个事件发布监听器,他的事情就是监听SpringApplication的运行事件,然后发布给其他的监听器,他里面有一个事件广播器的,可以广播给其他监听器事件。的初始化,会进行不同初始化阶段的广播,去通知监听器,监听器就可以做一些扩展的事情啦,比如初始化自己的环境什么的。为了让其他可以扩展,让他们知道现在初始化到哪个阶段了,他们可以参数,于是让他们注册到。构造方法分析完了,具体做了什么事情,就是初始化类和监听器的创建。这里就是推断启动类的,直接抛出异常,然后找到。的,因为现在只有一个。
2024-05-11 14:29:20
776
原创 02、SpringBoot 源码分析 - SpringApplication启动流程二
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。,这个是一个一对多的映射集合,比如说一个接口,对应多个实现啦。,再去加载相应的数据,然后把值用逗号分隔符分开,然后把值去空格后和键一起都放入。内部关键的我贴一下,获取输入流,获取资源名字,处理的是xml的或者其他的类型。初始化可能有优先顺序的,所以要进行排序,如果没有实现。接口的一律优先级最低的,内部是这样排序的,好像是获取某个类型的集合,类型就是。里,后面肯定会有用,后面再讲吧。,返回小点的值就好啦。
2024-05-10 11:53:22
842
1
原创 01、SpringBoot 源码分析 - SpringApplication启动流程一
之所以能那么强大,扩展性那么好,底层还是依赖spring,他的注解,他的处理器,他的监听器,可以有无数的扩展,废话不多说,当然还是老习惯,这次要分析Spring Boot 2.2.6.RELEASE版本的,要搞懂的原理,得先从他的初始化开始,然后层层深入,各个击破。
2024-05-10 11:42:43
674
原创 19、秒懂 Java wait() 和 notify() 方法
本文,我们来讲解下 Java 并发中的基础的基础,核心的核心,Java 并发编程中的最基本的机制之一 -「 线程同步 」。为了方便你理解并发编程中的各种概念和术语,我们首先会来一阵扫盲,讨论一些基本的并发相关术语和方法。接着,我们将开发一个简单的应用程序,并在合格应用程序里处理并发问题,以方便大家理解和巩固wait()和notify()。
2024-05-09 09:16:49
710
原创 18、秒懂 Java 之 Runnable 还是 Thread ?
写Java 代码的时候,我们经常会有这样的疑问:我到底是实现一个 Runnable 呢,还是扩展一个 Thread 类?你的答案是什么呢?那有没有标准答案呢?答案是什么呢?我们先来分析下,看看哪种方法在实践中更有意义以及为什么?
2024-05-09 08:58:51
746
原创 17、秒懂 Java Thread 生命周期
本文中,我想详细的讨论下 Java 中的核心概念 - 线程的生命周期。我会使用一张我自制的图片加上实用的代码片段,一步一步的详细剖析线程的各个状态和各个状态之间如何转换。
2024-05-08 10:44:56
963
原创 16、秒懂 Java ThreadLocalRandom
随机数生成是一个非常常见的操作,而且 Java 也提供了类用于生成随机数,而且呢,这个类也是线程安全的,就是有一点不好,在多线程下,它的性能不佳。为什么多线程下,Random 的性能不佳?因为,它采用了多个线程共享一个 Random 实例。这样就会导致多个线程争用。为了解决这个问题,Java 7 引入了类,用于在多线程环境中生成随机数。本文接下来的部分,就来看看如何如何执行以及如何在实际应用程序中使用它。
2024-05-08 08:49:00
1063
原创 15、秒懂 Java java.util.concurrent.Future
Java 在并发方面引入了 「 将来 」( Future )这个概念。把所有不在主线程执行的代码都附加了将来这个灵魂。主线程只负责其它并发线程的创建、启动、监视和处理并发线程完成任务或发生异常时的回调。其它情况,则交给并发线程自己去处理。而双方之间的沟通,就是通过一个个被称之为 「 将来 」 的类出处理。Future 定义在 java.util.concurrent包中,这是一个接口,自 Java 1.5以来一直存在的接口,用于处理异步调用和处理并发编程。
2024-05-08 08:41:27
702
原创 14、秒懂 Java 守护线程 ( Daemon Thread )
在这篇简短的文章中,我们将讲解下 Java 中的守护线程,看看它们可以做什么。我们还将解释守护线程和用户线程之间的区别。
2024-05-08 08:30:42
561
Activiti-5.22、activiti-demo、Activiti-master、stencilset.json
2022-04-04
springboot集成swagger.zip
2020-04-10
TaskFramework.rar
2020-04-10
线程休眠辅助工具类,能够按秒休眠以及按毫秒数休眠
2020-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人