- 博客(148)
- 收藏
- 关注
原创 Liteflow 在 SpringBoot 启动时无法注入组件问题 couldn‘t find chain with the id[THEN(NodeComponent)]
这么处理可能会有问题,就是用户在第一次调用 execute2Future 时,配置有可能没有加载进来,因此需要在 spring 启动的时候,调用 LiteFlowChainELBuilder 构建一次 Chain。加上后还是失败了,此时确认 node 已经在 spring 容器中,考虑到在容器中但是不在 Liteflow 的组件中的情况,翻阅文档,发现可以设置启动时不检查规则。Liteflow 的配置源读取有很多方式,但是这些方式可能不能满足我们的业务需要。
2025-03-26 16:43:07
227
原创 简单聊聊并发安全
我们在处理多个线程或者系统访问同一资源的时候就需要考量并发安全问题,不同的组件给我们处理并发安全问题的方式不一样,比如 java 中有 synchronized、@Transactional、ReentrantLock 等,mysql 中有读写锁意向锁、MVCC、事务等,操作系统中有信号量、compare-and-swap、内存屏障等,甚至在分布式系统中,我们也有 2pc、3pc、TCC、saga、可靠消息队列等机制维持事务原子性。
2025-03-15 16:27:44
673
原创 如何用少量内存处理巨量数据
用低内存处理大量数据,统一参考 hoodap 的 mapreduce 思路,先映射,再集合1,先映射:读取文件,将文件整合(映射)成我们需要的样子2,再集合:读取整合后的文件,集合处理,进行统计操作下面是一些 case,在实战的时候可以参考这些,举一反三。
2025-03-06 16:49:43
509
原创 高 QPS 下的系统优化
其实可以看到,怎么设计高并发系统这个问题本身他是不难的,无非是基于你知道的知识点,从物理硬件层面到软件的架构、代码层面的优化,使用什么中间件来不断提高系统的抗压能力但是这个问题本身会带来更多的问题,微服务本身的拆分带来了分布式事务的问题,http、RPC 框架的使用带来了通信效率、路由、容错的问题,MQ的引入带来了消息丢失、积压、事务消息、顺序消息的问题,缓存的引入又会带来一致性、雪崩、击穿的问题。
2025-03-02 13:57:08
511
原创 windous 下 ollama 迁移到 D 盘
结束操作后,可以删除 C:\Users\用户名.ollama 文件夹以及 C:\Users\用户名\AppData\Local\Programs\Ollama 文件夹。3,C:\Users\用户名\AppData\Local\Programs 这个路径下 Ollama 整个文件夹复制到 D 盘指定文件夹里。系统变量 Path 中添加系统变量 D:\Ollama\Ollama,用于让系统找到 ollama 命令的存放路径。1,创建 D:\Ollama 文件夹,用于存放 ollama 应用。
2025-03-01 21:16:11
497
原创 设计模式——过滤器模式在 Spring 中的实践
过滤器模式(Filter Pattern),也称为标准模式(Criteria Pattern),是结构型设计模式之一,旨在通过应用多个条件标准来筛选对象集合。此模式的核心思想是允许对象集合按照不同的标准被过滤,并可以灵活组合这些标准进行复杂的筛选操作。在开发中,尤其是在需要根据多种动态条件对数据进行筛选时,这种模式具有极大的灵活性和可扩展性有大量对象集合,需要根据不同标准进行筛选筛选条件是动态的或组合复杂度较高希望筛选逻辑与对象本身的结构解耦,从而保持代码清晰、可扩展。
2025-02-28 19:39:18
987
原创 Hadoop 基础原理
Hadoop 主要解决了海量数据的存储问题高可用性:底层会维护多个数据副本,所以即使 Hadoop 某个计算元素或存储出现故障,也不会导致数据的丢失。高扩展性: 在集群间分配任务数据,可方便的扩展数以千计的节点。高效性: 在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。高容错性: 能够自动将失败的任务重新分配。一个 block 块在 NameNode 中占150byte(固定),过多小文件会占用 NameNode 内存小文件的寻址时间大于读取时间。
2025-02-17 19:17:03
1682
1
原创 提供可传递的易受攻击的依赖项
原因:okhttp3.version 3.14.9 版本存在部分漏洞,在 maven 仓库是可以看到的。下图中 Vulnerabilities 即为漏洞。处理:换一个无漏洞的版本即可。
2025-02-14 22:29:30
224
原创 股票技术面——盘口
之前说到,关注资金入场意愿是否强烈,以找到合适的时机入场。那这里的入场意愿是否强烈该如何判断呢技术面分析可以作为买卖时机判定的工具,但是投资还是需要基本面的分析作为支撑。也就是基本面选股,技术面判断买点卖点盘口用于判断一天内的高点与低点。
2025-02-09 13:11:12
906
9
原创 Gossip 协议
Gossip 协议如其名,在办公室,只要一个人八卦一下,在有限的时间内所有的人都会知道该八卦的信息,这种方式也与病毒传播类似,因此 Gossip 有众多的别名,如“闲话算法”、“疫情传播算法”、“病毒感染算法”、“谣言传播算法”。但 Gossip 并不是一个新东西,之前的泛洪查找、路由算法都归属于这个范畴,不同的是 Gossip 给这类算法提供了明确的语义、具体实施方法及收敛性证明。
2025-02-09 11:45:27
433
原创 设计模式——状态模式
状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。状态模式的主要目的是将状态的转换逻辑和状态相关的操作封装在不同的类中,从而使得系统更易于扩展和维护说白话就是在代码中合理的维护状态机的变更,这看上去很简单,不过也很重要,遇到适当的需求画出状态机变更图并且合理的实现它,是一个架构师的必经之路主要组成部分:1,Context(上下文):定义一个类,维护一个对当前所有涉及到的状态对象的引用,这东西很可能是聚合根。
2025-02-06 16:58:22
549
5
原创 设计模式——策略模式
策略模式(Strategy Pattern)是一种行为设计模式,它在运行时选择算法或行为。它定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换
2025-02-06 16:06:56
838
原创 Python 基础语法
目前在工作和日常生产中接触 python 较少,每次接触时靠着 ai 和前人留下的代码可以照葫芦画瓢将产品做出来,但是一直没有时间去整理总结 python 的语法,今天集中整理一下过去遇到的语法,方便以后查找使用。
2025-02-05 15:23:22
1037
原创 定时任务单线程消费 redis 中数据导致消费能力不足
1,本次问题是由于 Redis 内存使用率过高导致的,主要原因是上游消息量大,消费速度跟不上2,虽然问题本身并不复杂,但由于发生在非窗口期(春节期间),需要紧急变更代码,增加了处理难度。还有需要及时向上级反馈问题,并与 Redis 管理同学紧密合作,快速获取关键信息,制定并实施了有效的临时解决方案3,未来应加强对 Redis 内存使用情况的监控,提前发现潜在问题。
2025-02-05 12:03:02
391
原创 Grape-RAG
比如人和手机是两个独立的实体,在向量数据库中的相似性一定非常差,但是结合实际生活场景,人和手机的关系是非常密切的,假如我搜索一个人的信息,我大可能性也关心他的周边,例如用什么型号的手机、喜欢拍照还是玩游戏等等。1,新增或者删除知识项的代价很大:文本知识库中,数据删了就是删了,但是在 GraphRAG 中,除去删掉这个知识项的实体,我们还需要删除这个知识项和其他知识项的所有关系,对于其他的知识项来说,这个知识项不复存在了。然而,在 RAG 的语境中,向量只有在你需要比较一组词语与另一组词语的相似性时才有用。
2025-01-03 16:35:29
814
原创 MVC 架构学习笔记
具体该使用1还是使用2完全可以看团队要求,保持统一风格即可,调优本来就是一个取舍的过程,没有十全十美的方案,许多细节只能争取做到平衡,然后去关注其他要点,比如一个烂 sql 带来的损耗可能比 1-2 方案之间的损耗要大数百倍。Service 层也不是就非有不可,对于极小的项目而言,加了 Service 层,反而增加了代码量,而且 Dao 层中已经预见了可能出现的情况,并进行了相应的扩展。那么,此时就不需要了。2比1提高了很多的扩展性,基本会满足大多数场景,但代码可读性较差,上层需要通过层层判断来获取信息。
2024-12-28 12:14:43
1116
原创 如何编写 Prompt
对于特定的任务来说,没有万能的Prompt,只有一些通用的模式,要完成这个任务还需要这个任务特定的 Example,大部分优秀的 Prompt 都需要 Example,这其实应用了模型的短期学习能力。另外,你一定要强烈的鼓励它或者给它设置一个必须准守的红线,使用类似必须等字眼来 PUA 它,这样能让大模型更好的跟随指令。
2024-12-24 17:11:53
524
原创 股票技术面——量价关系
量,指的是一支股票的单位时间的成交量,有日成交量,月成交量,年成交量等。这是股市中最基础也是最重要的指标价,指的是一支股票的价格,以收盘价为准,还有开盘价,最高价,最低价。一支股票价格的涨跌与其成交量大小之间存在一定的内在关系。投资者可通过分析此关系,判断形势,买卖股票有很多人说,放量上涨买入,缩量下跌卖出。这句话可能是不对的。这句话,只在一定的条件下才有用。有些人会为了故弄玄虚,过分强调量能的重要性,事实上量能需要配合成交量来看才行。
2024-12-09 13:45:24
1070
原创 程序员职场工作需要注意什么
比如我们其实需要解决 lag 的问题,但是你给出的方案是迁移到工作流,辛辛苦苦调用一堆,最后了解详情后发现,需要迁移的任务根本不重要,可以直接丢弃。7,自己可以不拼,但是需要让上级看到你拼命,每天早上很早上班,就是一个比较差的习惯。并且对这个问题,有充分的处理思路、问题文档、事后反思,如果是别人的问题更好了,提出问题的同时,提出解决方案。2,给你派活的时候需要注意什么:可以做的慢,但是需要做的准确、可以推脱,但是需要合理的理由、活干完后立刻汇报(预案+测试+等等)4,可以做的慢,但是需要做的准确。
2024-12-01 16:09:45
234
原创 股票基础总结
来总结一下量\价少量下跌多量下跌少量上涨多量上涨少量下跌局势不明朗,需要警惕观察?价格上涨较少,说明资金入场意愿不强,局势不明朗,可以再观察观察;高位则是入场资金意愿不足可以出售了买方力量疲软,已经入场的资金可以先放着观察一下,外部资金需要注意风险多量下跌阴跌市场一致看跌,重大利空,找个合适的位置割肉或者止损需要警惕观察,不要轻易入场封板重大利好少量上涨换手率增加,小幅度利好,适合观察高位可能是庄家出货,小幅度利空走势健康,值得参与量高价更高,利好,尽快参与多量上涨。
2024-11-16 11:46:37
1226
原创 Hex 和 Base64
Hex 和 Base64 是最简单的密码学算法之一,严格来说他甚至不具备加密功能,只是一数据的表现方式,他们在传输视频、图片等二进制文件的时候经常发挥作用。
2024-11-14 15:14:14
1576
原创 crontab 表达式
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推。当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推。当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推。
2024-11-07 20:44:38
428
原创 Server-Sent Events (SSE)
有一个需求,这个需求希望如果用户触发了下单操作,就对b端的管理员发送一次弹窗,如果想让前端源源不断的接受到后端发送的实时数据,这种需求可以使用什么技术来实现可以采用以下几种技术方案:1,WebSocket:WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许网页和后端进行双端通信2,Server-Sent Events (SSE):SSE 是一种让服务器向浏览器推送更新的技术。它基于 HTTP 协议,只需要服务器端发送一个特殊的 HTTP 响应头即可建立连接。
2024-10-16 17:52:41
1168
原创 ffmpeg 的安装以及实现音频切分功能
背景是需要在 java 项目中实现一个音频切分的功能,比如用户上传了一个100分钟的视频,我们需要将该音频的前10分钟和最后10分钟切出来,需要切的音频格式包含 mp4、mp3、wav 等常见的压缩文件格式经过调研发现 ffmpeg 比较适合处理这个,在 java 中有提供对应的封装库 javacv、ffmpeg-platform,当然 java 中也提供了其他的组件去切音频,但是他们的泛用性不如 ffmpeg。
2024-08-12 19:03:20
977
原创 操作系统 IO 相关知识
IO 就是计算机内部与外部进行数据传输的过程,比如网络 IO 与磁盘 IO所有 IO 都需要系统调用,由操作系统代理执行,并经历从 IO 设备拷贝到内核空间拷到用户空间的环节在内核收到调用请求之后,会有数据准备、数据就绪、数据拷贝的阶段每一个程序员面试的时候或多或少都会被问到相关知识,了解一下相关概念是非常重要的。
2024-08-07 20:46:03
1429
1
原创 NLP 相关知识
在全监督学习中,算法的目标是从给定的输入数据(特征)和对应的正确输出(标签)中学习一个函数或模型,使得该模型能够在新的未知数据上准确预测标签。这样,在微调时,模型只需要少量的标记数据就能达到较好的性能,尤其对于那些标记数据稀缺的任务来说,预训练极大地提高了效率和效果。向量库:将一段文本、图像、音频拆分成多个纬度的数据,根据用户传入,锚定坐标然后选择最近的点做返回,这大概就是向量数据库在 LLM 工程(langchain)中的使用,简单来说就是做缓存。其实就是指基于语言模型的应用程序设计和开发的架构。
2024-06-25 15:47:15
1447
1
原创 Java 常用的规则引擎
这样我们可以重写组件的 isAccess 方法并将组件的执行状态记录在数据库中,每次执行到该组件的时候,根据状态判断是否需要执行。利用 LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。在流程执行的过程中可能有很多上下文对象,在不同的流程模块中调用,因此在创建流程的时候,我们可以封装一个 Context 对象,里面可以存放很多的上下文数据。flow.el.xml 文件。
2024-06-05 17:34:57
536
原创 韭菜的自我总结
2,左侧交易者的核心逻辑是,虽然投资者无法有效的高精确度同时高正确率的去判断市场的最高点和最低点,但是有一件事在股票市场中是一定的,那就是跌多了要涨,涨多了要跌。根据这个理论,有一些聪明的朋友可能就会动脑筋了,我手里有大量的现金流并且有大量的该股股票,我可以一个人大量的买进并且卖出这只股票造成一种量增的错觉,放出利好信号吸引其他的韭菜朋友过来购买这只股票,然后我再在一个高点去卖出股票以获取利益。,并在自己想象的底部进场买股。所以,在这种游戏里,最终,决定输赢的不是运气,而是实力,场外实力,你赚钱的实力。
2024-05-25 17:21:20
763
原创 Protobuf 通信协议
在移动互联网时代,手机流量、电量是最为有限的资源,而移动端的即时通讯应用无疑必须得直面这两点解决流量过大的基本方法就是使用高度压缩的通信协议,而数据压缩后流量减小带来的自然结果也就是省电:因为大数据量的传输必然需要更久的网络操作、数据序列化及反序列化操作,这些都是电量消耗过快的根源当前即时通讯应用中最热门的通信协议无疑就是 Google 的 Protobuf 了。
2024-04-30 14:47:04
808
原创 数据库分库分表
如果存储的数据过多,查询效率会大大降低,如何去解决这个问题?1,限定数据的范围:禁止不带任何限制数据范围条件的查询语句,这样就不用查询整个数据库2,范式优化(垂直拆表):优化为 BC 范式,删除重复数据,或者单纯的拆字段3,水平拆表:保持数据表结构不变,通过某种策略将存储的数据分片。这样每一片数据分散到不同的表或者库中4,读写分离:主读副写,配置一下来实现 mysql 的主从复制今天介绍的重点就是垂直拆表(拆字段)和水平拆表(拆数据)
2024-03-24 13:35:55
305
原创 抽象方法与设计模式
真正的屎山不是初级程序员写的巨量胶水代码,而是没学明白抽象的程序员写的大量设计模式耦合形成的。你甚至不理解为什么当初的创作者需要使用到这个设计模式,不知道从哪开始读之前的代码,甚至在心中咒骂之前的作者无数遍。为了不让我们的后者觉得我们的水平很差,学好设计模式是很重要的设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决本文会列出几个常用框架以及 jdk 中使用的设计模式。
2024-02-20 21:20:22
1450
原创 权限系统设计
普通的系统无非 CRUD,那系统如何控制一个用户该看到哪些数据、能操作哪些功能?日常开发中最常用到 RBAC 和 OAuth2 这两种访问控制和授权方案。
2024-02-13 14:21:27
747
原创 Java 语法糖
语法糖指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用带有语法糖的代码一般不能直接翻译为汇编语言,JDK 需要将语法糖先翻译成直接支持的编程语言,然后执行正常的转换为汇编语言的操作。在 java 中,翻译语法糖的任务被交给了前端编译器。
2024-02-07 17:46:25
947
1
原创 Java 序列化
序列化机制可以让对象地保存到硬盘上,减轻内存压力的同时,也起了持久化的作用;也可以让 Java 对象在网络传输。一般我们可以使用 java 自带的序列化机制和 json 来就行序列化。以下讲解一下序列化相关概念。
2024-01-24 20:24:07
935
原创 excel 关于 =vlookup 的用法
函数的第四个参数填 TURE 或者 FALSE,意思为模糊查找和精确查找,这里选择 FALSE,点击回车即可实现两个表格关联。函数第一个参数设置成 sheet1 中的 A 列(如果数据很多,可以直接选中 A 列)函数的第三个参数填需查找条件所在列数,实例中查找名字,但返回的城市在第二列,所以就填2。实现两个 sheet 间的关联需要用 vlookup 函数实现。函数的第二个参数选中 sheet2 中的 A 列和 B 列。
2024-01-18 17:43:18
2719
原创 分布式 id
2,自增 ID:不管是数据库自增还是MP自增,分布式数据库中总是要存放一定范围的数据,使用自增策略可能会导致不同数据库存放同一id的问题。雪花算法是一个比较常见的生成分布式 id 的方式,它会生成一个 8 字节的数据,通过确保每段数据在空间与时间上唯一来确定最终数据的唯一。接下来 41bit 代表时间戳,这个是毫秒级的时间,存放时间戳的差值(当前时间-固定的开始时间),41位的时间戳可以使用69年。4,雪花算法:生成一个64bit的id,也就是long类型的数字,长度适中并且方便快捷。
2023-11-17 17:49:22
815
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人