什么是 Siddhi?
Siddhi 是一种 lightweight, easy-to-use, open source CEP(Complex Event Processing)引擎,由wso2公司开发(http://wso2.com/about/)。
像绝大多数的 CEP 系统一样,Siddhi 支持对于流式数据的类 SQL 的查询,SQL 式的 query 通过 complier 翻译成 Java 代码。 当一条数据流或多条数据流流入时,Siddhi Core 会实时的 check 当前数据流是否满足定义的 query,如果满足则触发 Callback 执行相应的逻辑。
Siddhi和传统的CEP系统,如Esper,相比区别? 主要是比较轻量和高效,之所以可以达到更高的 performance,因为:
Multi-threading
Queues and use of pipelining
Nested queries and chaining streams
Query optimization and common sub query elimination
尤其是前两点非常关键,传统的CEP系统,如果Esper,都是使用单线程去处理所有的 query matching,这样虽然简单,但是效率不高,无法利用 cpu 多核。 所以 Siddhi 采用多线程,并且结合pipeline机制,如下图
Siddhi 将整个 query 切分成独立的 stages,即 processors,这样做的好处,首先是便于多线程化,再者,可以重用相同的 processor; 而 processor 之间通过 queue 进行连接,这里就不详细描述了,有兴趣的同学可以去仔细看 Siddhi 的论文和文档。
Siddhi 能做什么?
下面我们就来看看,最关键的,Siddhi 可以为我们做什么?
这里就用几个形象的例子来说明 Siddhi 使用的典型的场景
简单 ETL
我们先用个最简单的例子,看看如果 run 一个真正的 Siddhi 例子,
上面说了,Siddhi 是用类 SQL 的查询语言,
首先需要先定义流的格式,
define stream TempStream (deviceID long , roomNo int , temp double );
然后定义查询,
from TempStream
select roomNo, temp * 9 / 5 + 32 as temp , ' F ' as scale, roomNo >= 100 and roomNo < 110 as isServerRoom
insert into RoomTempStream;
这样就能实现一个完整的 ETL 过程, extraction,将需要的字段从 TempStream 里面 select 出来; transform, 将摄氏温度转换为华氏温度; loading,将结果输出到RoomTempStream流;
很方便,不用再另外写任何的逻辑,只需要写类SQL的Query语句。 为了增加感性认识,我给出一个完成的 Java 测试例子,
SiddhiManager siddhiManager = new SiddhiManager();
String executionPlan = "" +
"ddefine stream TempStream (deviceID int, roomNo int, temp float);" +
"" +
"@info(name = 'query1') " +
"from TempStream " +
"select roomNo, temp * 9/5 + 32 as temp, 'F' as scale, roomNo >= 100 and roomNo < 110 as isServerRoom " +
"insert into RoomTempStream;";
ExecutionPlanRuntime executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(executionPlan);
executionPlanRuntime.addCallback( "query1", new QueryCallback() {
@Override
public void receive(long timeStamp, Event[] inEvents, Event[] removeEvents) {
EventPrinter.print(timeStamp, inEvents, removeEvents);
}
});
InputHandler inputHandler = executionPlanRuntime.getInputHandler("TempStream");
executionPlanRuntime.start();
inputHandler.send( new Object[] {12344, 201, 28.2f});
inputHandler.send( new Object[] {12345, 202, 22.2f}); inputHandler.send( new Object[] {12346, 203, 24.2f});
// Shutting down the runtime
executionPlanRuntime.shutdown();
// Shutting down Siddhi
siddhiManager.shutdown();
基于 window 聚合
Siddhi 支持很多中类型的 window,具体参考https://docs.wso2.com/display/CEP400/Inbuilt+Windows#InbuiltWindows-time
这里给出最基本的,基于时间窗口的例子,
from TempStream#window.time(1 min )
select roomNo, avg (temp ) as avgTemp
group by roomNo
insert all events into AvgRoomTempStream ;
这个查询会计算以1分钟为滑动窗口的,每个 room 的平均温度
Siddhi时间窗口也支持,按照外部的输入的时间进行聚合,但是它要求时间是必须递增的;这点我们brain的聚合库比它通用,可以适用于非单调递增的场景
多个流 Join
Siddhi 支持基于 window 的多个流的实时 join,
from TempStream[ temp > 30.0 ] #window.time(1 min ) as T
join RegulatorStream[ isOn == false ] #window.length(1 ) as R
on T.roomNo == R.roomNo
select T.roomNo, T.temp , R.deviceID, ' start ' as action
insert into RegulatorActionStream ;
上面的查询将,TempStream 和RegulatorStream 通过 roomNo 进行 join
Pattern Query
这种 query 最能表达出 CEP 的威力,什么是Pattern Query? “Pattern allows event streams to be correlated over time and detect event patterns based on the order of event arrival.”
直接看个例子,用 Pattern 查询来 detect credit card/ATM transaction frauds:
from every a1 = atmStatsStream[ amountWithdrawed < 100 ]
-> b1 = atmStatsStream[ amountWithdrawed > 10000 and a1.cardNo == b1.cardNo ]
within 1 day
select a1.cardNo as cardNo, a1.cardHolderName as cardHolderName, b1.amountWithdrawed as amountWithdrawed, b1.location as location, b1.cardHolderMobile as cardHolderMobile
insert into possibleFraudStream;
注意看到这个符号‘->’,这个表示 event 发生顺序, 上面这个查询的意思就是,在一天内,出现一次取现金额 < 100后,同一张卡,出现取现金额 > 10000,则认为可能是 fraud。
当然这只是个例子,不是说这样真的可以 detect fraud。你可以参照这个,写出更为复杂的查询。
Sequence Query
和 pattern 的区别是,pattern 的多个 event 之间可以是不连续的,但 sequence 的 events 之间必须是连续的。
我们可以看个例子,用 sequence 来发现股票价格的 peak:
from every e1= FilteredStockStream[ price>20 ] , e2 = FilteredStockStream[ ((e2[last ] .price is null ) and price>= e1.price) or ((not (e2[ last ] .price is null )) and price>= e2[ last ] .price)], e3 = FilteredStockStream[ price] .price]
select e1.price as priceInitial, e2[ last ] .price as pricePeak, e3.price as priceAfterPeak
insert into PeakStream ;
上面的查询的意思, e1,收到一条 event.price>20 e2,后续收到的所有 events 的 price,都大于前一条 event e3,最终收到一条 event 的 price,小于前一条 event
ok,我们发现了一个peak
Siddhi 还有其他很多的功能,这里就不一一说明。。。。。。
集成到 Storm
那么最后,我们看看如何将 Siddhi 融入到我们当前的框架中,达到作为 Brain 补充的目的。
我将 Siddhi core 封装成一个 Siddhi Bolt,这样可以在 JStorm 的 topology 中很灵活的,选择是否什么方案,可以部分统计用 brain,部分用 Siddhi,非常简单。
废话不说,直接给出源码,供大家参考,
public class SiddhiBolt implements IRichBolt {
protected OutputCollector collector;
protected SiddhiManager siddhiManager = null ;
protected String executionPlan = null ;
ExecutionPlanRuntime executionPlanRuntime = null ;
protected HashMap handlers = null ;
public SiddhiBolt(String plan) {
this .executionPlan = plan;
}
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
this .collector = collector;
this .siddhiManager = new SiddhiManager();
this .executionPlanRuntime = siddhiManager.createExecutionPlanRuntime(executionPlan);
addCallbacks();
handlers = new HashMap();
executionPlanRuntime.start();
}
public void execute(Tuple tuple) {
String inputStream = tuple.getSourceStreamId();
InputHandler inputHandler = getInputHandler(inputStream);
List values = tuple.getValues();
Object[] objects = values.toArray();
try {
inputHandler.send(objects);
} catch (Exception e){
LOG.error( "Send stream event error: ", e);
}
// collector.fail(tuple); // test replay
collector.ack(tuple); // remember ack the tuple
// Make sure that add anchor tuple if you want to track it
// collector.emit(streamid, tuple,new Values(counters, now));
}
public InputHandler getInputHandler(String streamName){
InputHandler handler = null ;
if (handlers.containsKey(streamName))
handler = handlers.get(streamName);
else {
handler = executionPlanRuntime.getInputHandler(streamName);
if (handler != null ) {
handlers.put(streamName, handler);
}
}
return handler;
}
// Need Override
public void addCallbacks( ){
// StreamCallback example
executionPlanRuntime.addCallback("outputStream", new StreamCallback() {
@Override
public void receive(Event[] events) {
LOG.info( "receive events: " + events.length);
for (Event e:events)
LOG.info(e);
}
});
// QueryCallback example
executionPlanRuntime.addCallback("query1", new QueryCallback() {
@Override
public void receive(long timeStamp, Event[] inEvents, Event[] removeEvents) {
printEvents(timeStamp, inEvents, removeEvents);
}
});
}
public void printEvents(long timeStamp, Event[] inEvents, Event[] removeEvents){
StringBuilder sb = new StringBuilder();
sb.append( "Events{ @timeStamp = ").append(timeStamp).append(", inEvents = ").append(
Arrays.deepToString(inEvents)).append( ", RemoveEvents = ").append(Arrays.deepToString(removeEvents)).append(" }");
LOG.info(sb.toString());
}
public void cleanup() {
// Shutting down the runtime
executionPlanRuntime.shutdown();
// Shutting down Siddhi
siddhiManager.shutdown();
}
}
Reference
1. Siddhi paper, https://people.apache.org/~hemapani/research/papers/siddi-gce2011.pdf
2. Siddhi doc, https://docs.wso2.com/display/CEP400/SiddhiQL+Guide+3.0
你可能感兴趣的:(让Storm插上CEP的翅膀 - Siddhi调研和集成)
关于uni-app发布手机APP上架各应用商城,隐私政策书写方案说明
Otaku love travel
uni-app 应用发布 政策说明 uni-app 应用发布 隐私政策
uni-app应用隐私政策书写与上架方案说明一、前言随着移动互联网监管日趋严格,隐私政策已成为APP上架应用商城的核心合规文件。隐私政策不仅体现开发者对用户数据的尊重,更是满足《个人信息保护法》《网络安全法》《数据安全法》等法规的法律义务。核心目标:清晰告知用户数据收集与使用规则,建立用户信任。适用对象:所有通过uni-app开发并计划上架主流应用商城(如苹果AppStore、华为应用市场、小米应
页面跳转隐藏url参数
Otaku love travel
html html 前端
在某些特定的情况下,直接请求会在url显示参数传值等,基于简单的安全性考虑,可以去掉参数,但是传参问题有出现了,以下提供了一个简单的解决方案1、a标签直接url跳转改为点击事件2、调用以下方法httpPostLocationUrl/***页面跳转*@paramurl请求地址xxx\xxx?xxx=xx&xx=xx*@paramparams可选参数json对象数据{‘a’:1}*/functionh
HIBERNATE - 符合Java习惯的关系数据库持久化
popkiler
Atleap代码读解 hibernate 数据库 java session class payment
HIBERNATE-符合Java习惯的关系数据库持久化Hibernate2参考文档2.1.1TableofContents前言1.在Tomcat中快速上手1.1.开始Hibernate之旅1.2.第一个可持久化类1.3.映射cat1.4.与猫同乐1.5.结语2.体系结构2.1.总览2.2.持久化对象标识(PersistentObjectIdentity)2.3.JMX集成2.4.JCA支持3.Se
如果,你想找 AI大模型相关的工作,这三个建议你一定要看!
我爱学大模型
人工智能 chatgpt AI大模型 AI 大模型入门 转行 程序员
01各种大厂小厂创业团队和AI擦边的面试难度,由难到简单,依次是:大模型算法(⭐⭐⭐⭐⭐)模型部署加速(⭐⭐⭐⭐)RAG等相关技术(⭐⭐⭐)纯应用(⭐⭐)Prompt工程师等其他自媒体(⭐)会简单应用就行02这结果方向,B站找几个视频看看,这里推荐用Qwen7B,开源的模型,一个3060都能跑。例如这个,如何微调Qwen开源模型。https://www.bilibili.com/video/BV1
你了解TikTok的矩阵玩法吗?这一策略能帮助你实现精准引流!
m0_74891046
矩阵
TikTok已经不再是一个单纯的娱乐平台,它逐渐成为了很多人商业变现的利器。今天,咱们来聊聊TikTok矩阵玩法,看看如何利用多个账号协同作战,实现精准的引流和推广。什么是TikTok矩阵玩法?矩阵玩法是一种通过多个TikTok账号配合运营,进行内容推广和流量引导的策略。通过精细化分工和协同作战,每个账号都有不同的目标和任务,从而实现更高效的流量转化和用户增长。矩阵玩法的优势:精准引流每个账号针对
【NLP 39、激活函数 ⑤ Swish激活函数】
L_cl
NLP 自然语言处理 人工智能
我的孤独原本是座荒岛,直到你称成潮汐,原来爱是让个体失序的永恒运动——25.2.25Swish激活函数是一种近年来在深度学习中广泛应用的激活函数,由GoogleBrain团队在2017年提出。其核心设计结合了Sigmoid门控机制和线性输入的乘积,通过引入平滑性和非单调性来提升模型性能。一、数学定义与变体1.基础形式Swish的标准表达式为:Swish(x)=x⋅σ(βx)其中:σ(x)是Sigm
Monorepo与pnpm:前端项目管理的完美搭档
秋の本名
前端 pnpm 前端框架 mojo
一、什么是pnpmpnpm又称performantnpm,翻译过来就是高性能的npm。1.节省磁盘空间提高安装效率pnpm通过使用硬链接和符号链接(又称软链接)的方式来避免重复安装以及提高安装效率。硬链接:和原文件共用一个磁盘地址,相当于别名的作用,如果更改其中一个内容,另一个也会跟着改变符号链接(软链接):是一个新的文件,指向原文件路径地址,类似于快捷方式官网原话:当使用npm时,如果你有100
ES6语法详解
八月五
前端 前端 es6
ES的全称是ECMAScript,它是由ECMA国际标准化组织,制定的一项脚本语言的标准化规范。ES6实际上是一个泛指,泛指ES2015及后续的版本。目录1.let关键字和const关键字let关键字const关键字2.解构赋值数组解构赋值对象解构赋值解构赋值用于传参3.字符串新增特性模板字符串字符串实例新增方法4.数值新增特性新增二进制和八进制表示方法Number构造函数本身新增方法和属性安全整
CentOS停更;阿里发布全新操作系统(Anolis OS)
萌褚
Linux 运维
镜像下载、域名解析、时间同步请点击阿里云开源镜像站Linux系统对于Java程序员来说,就好比“乞丐手里的碗”,任何业务都离不开他的身影,因为服务端的广泛使用,也因此衍生出了各种不同的发行版,其中我个人用的最多、且最喜欢的就是CentOS;不幸的是,2021年底CentOS8宣布停止了维护;不过,喜欢CentOS的朋友们不用为此而难过;21年的云栖大会上,阿里云发布全新操作系统“龙蜥”(Anoli
公务员行测之速算分数记忆检验-无答案版本
Lemon爱吃苹果
公务员 公务员 计算机
前言为了提高速算速度,有一些分数是必须要记忆的,这个博客是为了检验自己记忆效果的,答案在下一篇博客上面,自己查看哟!!!速算之分数记忆检验12=%\frac{1}{2}=\%21=%13=%\frac{1}{3}=\%31=%14=%\frac{1}{4}=\%41=%15=%\frac{1}{5}=\%51=%16=%\frac{1}{6}=\%61=%17=%\frac{1}{7}=\%71=
Halcon 3月License 持续更新
lkasi
haclon 计算机视觉 c++
大家新年快乐啊!3月License:仅仅支持以下版本24.05和24.1111月:呜呜呜呜,才装的23,又要装24了12月:yeah!我是24.05!!!1月:新的一年,24还是可以用大家春节快乐呀2月:新的一年,24依然可以用3月:24.0524.11依然可以用!!!链接:https://pan.baidu.com/s/1GmymNfYVFlokESK2r1HnmA?pwd=agey提取码:ag
零基础必看!CCF-GESP Python一级考点全解析:运算符这样学就对了
奕澄羽邦
python 开发语言
第一章编程世界的基础工具:运算符三剑客在Python编程语言中,运算符如同魔法咒语般神奇。对于CCF-GESPPython一级考生而言,正确掌握比较运算符、算术运算符和逻辑运算符这三大基础工具,就相当于打开了数字世界的大门。这三个运算符家族共同构成了程序逻辑的核心骨架,其灵活组合能实现从简单计算到复杂判断的多样功能。1.1运算符分类图谱算术运算符:负责数字间的数学运算(+-*/%)比较运算符:用于
机器学习(Machine Learning)
七指琴魔御清绝
大数据学习
原文链接:http://blog.csdn.net/zhoubl668/article/details/42921187希望转载的朋友,你可以不用联系我.但是一定要保留原文链接,因为这个项目还在继续也在不定期更新.希望看到文章的朋友能够学到更多.《BriefHistoryofMachineLearning》介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Ada
Python 字符串操作
iteye_13776
Python Python C C++ C#
Python截取字符串使用变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。#例1:字符串截取str='12345678'printstr[0:1]>>1#输出str位置0开始到位置1以前的字符printstr[1:6]>>23456#输出str位置1开始到位置6以前的字符num=18str='0000'+str(num)#合并字
ES6解构赋值详解
漫天转悠
ES6 es6 前端 ecmascript
ES6解构赋值详解ES6解构赋值是JavaScript语言的一项强大特性,它允许从数组或对象中提取数据,并将其赋值给变量。这一特性不仅简化了代码,提高了可读性,还增强了代码的灵活性。本文将详细介绍ES6解构赋值的基本概念、语法、应用场景以及一些高级用法。1.基本概念解构赋值是对赋值运算符的扩展。它允许按照一定的模式,从数组或对象中提取值,并赋值给变量。这种语法使得从复杂数据结构中提取数据变得更加简
【PX4】Ubuntu20.04安装PX4教程
davidson1471
PX4 git 无人机 linux ubuntu
*建议早上安装*1.下载以往版本从github上clone源码gitclonehttps://github.com/PX4/PX4-Autopilot.git进入PX4-Autopilot文件夹cdPX4-Autopilot查看当前分支,位于origin/maingitstatus查看所有远程分支,带release的gitbranch-r|grep"release"切换到发行分支v1.12gitc
ES6解构语法详解
勇敢小陈
javascript vue.js 前端 es6
ES6的解构语法简化了我们开发过程中复杂的取值过程,可能你在a.b.c.d的时候别人早就把值一开始就取出来了,使代码更加简洁。下面开始进行语法的详解。一、单层解构单层解构constearth={people:'人类',animal:'动物'}const{people,animal}=earthconsole.log(people,animal);//人类动物单层解构并更改变量名称consteart
Go 语言使用Protobuf 进行序列化详解
尘鹄
Go 语言学习之路 golang 开发语言 后端 rpc go
文章目录Go语言使用Protobuf进行序列化详解1.Protobuf是什么?2.安装Protobuf及Go依赖3.编写.proto文件4.实现序列化和反序列化Go语言使用Protobuf进行序列化详解1.Protobuf是什么?以下是Protobuf官方中文文档的概述:Protobuf(ProtocolBuffers)是一种语言中立、平台中立的可扩展机制,用于序列化结构化数据。它类似于JSON,
Qt 串口类QSerialPort 使用笔记
一对一答疑的编程作家朱文伟
qt qt 笔记 开发语言
Qt串口类QSerialPort使用笔记虽然现在大多数的家用PC机上已经不提供RS232接口了。但是由于RS232串口操作简单、通讯可靠,在工业领域中仍然有大量的应用。Qt以前的版本中,没有提供官方的对RS232串口的支持,编写串口程序很不方便。现在好了,在Qt5.1中提供了QtSerialPort模块,方便编程人员快速的开发应用串口的应用程序。本文就简单的讲讲QtSerialPort模块的使用。
Towards Multimodal Large-Language Models for Parent-Child Interaction: A Focus on Joint Attention
UnknownBody
LLM Daily Multimodal 语言模型 人工智能 大数据
摘要共同注意是儿童早期语言发展的关键组成部分,也是亲子互动有效性的重要指标。然而,目前对共同注意的检测和分析研究仍然有限,尤其是在多模态大语言模型(MLLMs)方面。本研究通过分析由两位语言病理学家标注的26段亲子互动视频,评估了多模态大语言模型理解共同注意的能力。这些标注识别出了共同注意程度高和低的片段,作为评估模型解释能力的基准。我们的研究结果显示,由于当前的多模态大语言模型对儿童发起的眼神交
web前端期末大作业:婚纱网页主题网站设计——唯一旅拍婚纱公司网站HTML+CSS+JavaScript
IT-司马青衫
前端 课程设计 html
静态网站的编写主要是用HTMLDⅣV+CSSJS等来完成页面的排版设计,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉导航栏、鼠标划过效果等知识点,学生网页作业源码,制作水平和原创度都适合学习或交作业用,记得点赞。精彩专栏推荐【作者主页——获取更多优质源码】【web前端期末大作业——毕设项目精品实战案例(1
在 ASP.NET Core WebAPI 中使用 JWT 验证
.NET跨平台
ASP.NET Core Web API IdentityServer4 OAuth2.0协议 .NET CORE WEBAPI JWT
为了保护WebAPI仅提供合法的使用者存取,有很多机制可以做,透过JWT(JSONWebToken)便是其中一种方式,这篇示范如何使用官方所提供的System.IdentityModel.Tokens.Jwt扩充套件,处理呼叫API的来源是否为合法的使用者身分。顺道一提,要产生JWTToken有很多套件可以帮助开发者快速建立,JWT这个NuGet套件就是其中一个,但这裡我使用官方所提供的Syste
API身份验证使用JWT的.NET实现
雨夜思绪~静谧思考
.net
API身份验证使用JWT的.NET实现在现代的应用程序开发中,API身份验证是一项至关重要的任务。JWT(JSONWebToken)是一种常用的身份验证机制,它使用JSON格式表示身份验证信息,并使用签名进行验证。在.NET平台上,我们可以使用一些库来实现JWT身份验证。本文将介绍如何使用.NET来进行API身份验证并使用JWT作为身份验证机制。引入依赖项首先,我们需要在我们的项目中引入相关的依赖
关联规则算法:揭秘数据中的隐藏关系,从理论到实战
秋声studio
机器学习算法详解 关联规则算法 数据挖掘 Apriori算法 FP-Growth算法 大数据优化 数据预处理 增量式更新
引言在当今数据驱动的时代,如何从海量数据中挖掘出有价值的信息成为了各行各业的核心挑战。关联规则算法作为数据挖掘领域的重要工具,能够帮助我们发现数据中隐藏的关联关系,从而为决策提供支持。无论是电商平台的商品推荐,还是医疗领域的疾病诊断,关联规则算法都展现出了强大的应用潜力。本文将从基础概念出发,逐步深入探讨关联规则算法的核心原理、经典算法及其优化策略。无论你是数据挖掘的初学者,还是希望进一步了解关联
【Go语言圣经1.1】
Pyroyster
golang 开发语言 后端
目标学习Go的编译方式、包的组织方式以及工具链的统一调用方式概念与定义packageGo语言通过包来组织代码。包类似于其它语言的库librarries或模块modules,每个包通常对应一个目录,目录中的所有.go文件都属于同一个包。特殊的main包:当代码使用packagemain声明时,表示这是一个可独立执行的程序而非一个库。程序的执行入口就是main函数import通过import语句,编译
Spike Neural Network Introduction and Research Directions
Debug_Snail
SNN Neuralnetwork 人工智能 AIGC
1.SNNs是一类神经网络,其中的神经元通过脉冲(spikes)来传递信息,而不是像传统的人工神经网络中那样使用实数值激活。SNNs更接近生物学上的神经系统,因为生物神经元也是通过电信号脉冲来传递信息的。与传统神经网络相比,SNNs具有以下几个特点:更低的功耗-因为只在发生脉冲时才激活神经元,所以整体功耗会比传统神经网络低很多。这使得SNNs很适合应用在对功耗要求非常严格的场景,如边缘计算。时序编
一文理清:阿里系数据中台-数据治理工具集(傻傻也能分清楚)
Debug_Snail
Hadoop Big Data 技术工具 人工智能 hadoop 数据仓库
阿里云提供的大数据与数据分析产品种类较多,各产品的定位和核心功能有所不同。以下是对DataWorks、MaxCompute、Dataphin、AnalyticDBforMySQL(ADB)、QuickBI、EMR的详细梳理。一、核心产品定位与功能DataWorks定位:一站式大数据开发治理平台,提供数据集成、开发、调度、治理、服务等全链路能力。核心功能:数据集成:支持异构数据源(如数据库、OSS、
灵犀X2:人形机器人的新篇章
Anima.AI
机器人
简介灵犀X2是智元机器人推出的最新款人形机器人,很可能是其前代产品灵犀X1的升级版本。灵犀X1作为一款开源的模块化机器人,其机械设计和软件代码完全公开,全球开发者都可以参与优化和创新。这款机器人身高130厘米,体重33公斤,具备34到44个自由度(DegreesofFreedom,DoF,即关节活动范围),能够执行轻型任务,如端茶送水、整理房间等。灵犀X2在继承这些特性的基础上,可能进一步提升了动
哪个AI论文生成助手好用?5 款AI论文工具深度评测
AI论文图鉴
人工智能
2025年,AI论文写作工具如雨后春笋般涌现,迅速在学术圈走红。身为一个常被论文写作困扰的“懒人”,我对这些工具的实际表现充满好奇。于是,我亲测了五款当下国内外最热门的AI论文写作助手,从功能、交互、写作水平、写作效率等维度进行全面评测,结果令人惊喜。相信这篇文章能为仍在观望的你带来新的启发与认识。这次测评,我挑选了五款极具代表性的AI工具,以“基于大语言模型的医疗诊断研究”为主题,看它们如何大显
大语言模型(LLM)入门学习路线图_llm教程,从零基础到精通,理论与实践结合的最佳路径!
AGI学习社
语言模型 学习 人工智能 LLM 大模型 大数据 自然语言处理
Github项目上有一个大语言模型学习路线笔记,它全面涵盖了大语言模型的所需的基础知识学习,LLM前沿算法和架构,以及如何将大语言模型进行工程化实践。这份资料是初学者或有一定基础的开发/算法人员入门活深入大型语言模型学习的优秀参考。这份资料重点介绍了我们应该掌握哪些核心知识,并推荐了一系列优质的学习视频和博客,旨在帮助大家系统性地掌握大型语言模型的相关技术。大语言模型(LargeLanguageM
戴尔笔记本win8系统改装win7系统
sophia天雪
win7 戴尔 改装系统 win8
戴尔win8 系统改装win7 系统详述
第一步:使用U盘制作虚拟光驱:
1)下载安装UltraISO:注册码可以在网上搜索。
2)启动UltraISO,点击“文件”—》“打开”按钮,打开已经准备好的ISO镜像文
BeanUtils.copyProperties使用笔记
bylijinnan
java
BeanUtils.copyProperties VS PropertyUtils.copyProperties
两者最大的区别是:
BeanUtils.copyProperties会进行类型转换,而PropertyUtils.copyProperties不会。
既然进行了类型转换,那BeanUtils.copyProperties的速度比不上PropertyUtils.copyProp
MyEclipse中文乱码问题
0624chenhong
MyEclipse
一、设置新建常见文件的默认编码格式,也就是文件保存的格式。
在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致,即GBK。
在简体中文系统下,ANSI 编码代表 GBK编码;在日文操作系统下,ANSI 编码代表 JIS 编码。
Window-->Preferences-->General -
发送邮件
不懂事的小屁孩
send email
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
动画合集
换个号韩国红果果
html css
动画 指一种样式变为另一种样式 keyframes应当始终定义0 100 过程
1 transition 制作鼠标滑过图片时的放大效果
css
.wrap{
width: 340px;height: 340px;
position: absolute;
top: 30%;
left: 20%;
overflow: hidden;
bor
网络最常见的攻击方式竟然是SQL注入
蓝儿唯美
sql注入
NTT研究表明,尽管SQL注入(SQLi)型攻击记录详尽且为人熟知,但目前网络应用程序仍然是SQLi攻击的重灾区。
信息安全和风险管理公司NTTCom Security发布的《2015全球智能威胁风险报告》表明,目前黑客攻击网络应用程序方式中最流行的,要数SQLi攻击。报告对去年发生的60亿攻击 行为进行分析,指出SQLi攻击是最常见的网络应用程序攻击方式。全球网络应用程序攻击中,SQLi攻击占
java笔记2
a-john
java
类的封装:
1,java中,对象就是一个封装体。封装是把对象的属性和服务结合成一个独立的的单位。并尽可能隐藏对象的内部细节(尤其是私有数据)
2,目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而使软件错误能够局部化,减少差错和排错的难度。
3,简单来说,“隐藏属性、方法或实现细节的过程”称为——封装。
4,封装的特性:
4.1设置
[Andengine]Error:can't creat bitmap form path “gfx/xxx.xxx”
aijuans
学习Android遇到的错误
最开始遇到这个错误是很早以前了,以前也没注意,只当是一个不理解的bug,因为所有的texture,textureregion都没有问题,但是就是提示错误。
昨天和美工要图片,本来是要背景透明的png格式,可是她却给了我一个jpg的。说明了之后她说没法改,因为没有png这个保存选项。
我就看了一下,和她要了psd的文件,还好我有一点
自己写的一个繁体到简体的转换程序
asialee
java 转换 繁体 filter 简体
今天调研一个任务,基于java的filter实现繁体到简体的转换,于是写了一个demo,给各位博友奉上,欢迎批评指正。
实现的思路是重载request的调取参数的几个方法,然后做下转换。
android意图和意图监听器技术
百合不是茶
android 显示意图 隐式意图 意图监听器
Intent是在activity之间传递数据;Intent的传递分为显示传递和隐式传递
显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图;不指明调用的名称,根据设
spring3中新增的@value注解
bijian1013
java spring @Value
在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件中的文件,进行键值对的注入,例子如下:
1.首先在applicationContext.xml中加入:
<beans xmlns="http://www.springframework.
Jboss启用CXF日志
sunjing
log jboss CXF
1. 在standalone.xml配置文件中添加system-properties:
<system-properties> <property name="org.apache.cxf.logging.enabled" value=&
【Hadoop三】Centos7_x86_64部署Hadoop集群之编译Hadoop源代码
bit1129
centos
编译必需的软件
Firebugs3.0.0
Maven3.2.3
Ant
JDK1.7.0_67
protobuf-2.5.0
Hadoop 2.5.2源码包
Firebugs3.0.0
http://sourceforge.jp/projects/sfnet_findbug
struts2验证框架的使用和扩展
白糖_
框架 xml bean struts 正则表达式
struts2能够对前台提交的表单数据进行输入有效性校验,通常有两种方式:
1、在Action类中通过validatexx方法验证,这种方式很简单,在此不再赘述;
2、通过编写xx-validation.xml文件执行表单验证,当用户提交表单请求后,struts会优先执行xml文件,如果校验不通过是不会让请求访问指定action的。
本文介绍一下struts2通过xml文件进行校验的方法并说
记录-感悟
braveCS
感悟
再翻翻以前写的感悟,有时会发现自己很幼稚,也会让自己找回初心。
2015-1-11 1. 能在工作之余学习感兴趣的东西已经很幸福了;
2. 要改变自己,不能这样一直在原来区域,要突破安全区舒适区,才能提高自己,往好的方面发展;
3. 多反省多思考;要会用工具,而不是变成工具的奴隶;
4. 一天内集中一个定长时间段看最新资讯和偏流式博
编程之美-数组中最长递增子序列
bylijinnan
编程之美
import java.util.Arrays;
import java.util.Random;
public class LongestAccendingSubSequence {
/**
* 编程之美 数组中最长递增子序列
* 书上的解法容易理解
* 另一方法书上没有提到的是,可以将数组排序(由小到大)得到新的数组,
* 然后求排序后的数组与原数
读书笔记5
chengxuyuancsdn
重复提交 struts2的token验证
1、重复提交
2、struts2的token验证
3、用response返回xml时的注意
1、重复提交
(1)应用场景
(1-1)点击提交按钮两次。
(1-2)使用浏览器后退按钮重复之前的操作,导致重复提交表单。
(1-3)刷新页面
(1-4)使用浏览器历史记录重复提交表单。
(1-5)浏览器重复的 HTTP 请求。
(2)解决方法
(2-1)禁掉提交按钮
(2-2)
[时空与探索]全球联合进行第二次费城实验的可能性
comsci
二次世界大战前后,由爱因斯坦参加的一次在海军舰艇上进行的物理学实验 -费城实验
至今给我们大家留下很多迷团.....
关于费城实验的详细过程,大家可以在网络上搜索一下,我这里就不详细描述了
在这里,我的意思是,现在
easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符
daizj
oracle ORA-12154
用easy connect连接出现“tns无法解析指定的连接标示符”的错误,如下:
C:\Users\Administrator>sqlplus username/pwd@192.168.0.5:1521/orcl
SQL*Plus: Release 10.2.0.1.0 – Production on 星期一 5月 21 18:16:20 2012
Copyright (c) 198
简单排序:归并排序
dieslrae
归并排序
public void mergeSort(int[] array){
int temp = array.length/2;
if(temp == 0){
return;
}
int[] a = new int[temp];
int
C语言中字符串的\0和空格
dcj3sjt126com
c
\0 为字符串结束符,比如说:
abcd (空格)cdefg;
存入数组时,空格作为一个字符占有一个字节的空间,我们
解决Composer国内速度慢的办法
dcj3sjt126com
Composer
用法:
有两种方式启用本镜像服务:
1 将以下配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置)。见“例1”
2 将以下配置信息添加到你的项目的 composer.json 文件中(针对单个项目配置)。见“例2”
为了避免安装包的时候都要执行两次查询,切记要添加禁用 packagist 的设置,如下 1 2 3 4 5
高效可伸缩的结果缓存
shuizhaosi888
高效可伸缩的结果缓存
/**
* 要执行的算法,返回结果v
*/
public interface Computable<A, V> {
public V comput(final A arg);
}
/**
* 用于缓存数据
*/
public class Memoizer<A, V> implements Computable<A,
三点定位的算法
haoningabc
c 算法
三点定位,
已知a,b,c三个顶点的x,y坐标
和三个点都z坐标的距离,la,lb,lc
求z点的坐标
原理就是围绕a,b,c 三个点画圆,三个圆焦点的部分就是所求
但是,由于三个点的距离可能不准,不一定会有结果,
所以是三个圆环的焦点,环的宽度开始为0,没有取到则加1
运行
gcc -lm test.c
test.c代码如下
#include "stdi
epoll使用详解
jimmee
c linux 服务端编程 epoll
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linu
Hibernate对Enum的映射的基本使用方法
linzx0212
enum Hibernate
枚举
/**
* 性别枚举
*/
public enum Gender {
MALE(0), FEMALE(1), OTHER(2);
private Gender(int i) {
this.i = i;
}
private int i;
public int getI
第10章 高级事件(下)
onestopweb
事件
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
孙子兵法
roadrunners
孙子 兵法
始计第一
孙子曰:
兵者,国之大事,死生之地,存亡之道,不可不察也。
故经之以五事,校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五
曰法。道者,令民于上同意,可与之死,可与之生,而不危也;天者,阴阳、寒暑
、时制也;地者,远近、险易、广狭、死生也;将者,智、信、仁、勇、严也;法
者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知之者不胜。故校
之以计,而索其情,曰
MySQL双向复制
tomcat_oracle
mysql
本文包括:
主机配置
从机配置
建立主-从复制
建立双向复制
背景
按照以下简单的步骤:
参考一下:
在机器A配置主机(192.168.1.30)
在机器B配置从机(192.168.1.29)
我们可以使用下面的步骤来实现这一点
步骤1:机器A设置主机
在主机中打开配置文件 ,
zoj 3822 Domination(dp)
阿尔萨斯
Mina
题目链接:zoj 3822 Domination
题目大意:给定一个N∗M的棋盘,每次任选一个位置放置一枚棋子,直到每行每列上都至少有一枚棋子,问放置棋子个数的期望。
解题思路:大白书上概率那一张有一道类似的题目,但是因为时间比较久了,还是稍微想了一下。dp[i][j][k]表示i行j列上均有至少一枚棋子,并且消耗k步的概率(k≤i∗j),因为放置在i+1~n上等价与放在i+1行上,同理