drools 6学习2--伟大的hello world

Drools+springBoot使用IDEA搭建Hello World demo 首先我们先进入idea创建maven项目,然后选择spring项目然后点击完成,在resources目录下创建META-INF文件夹和rules文件夹,然后点击pom文件进行输入下面内容 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta... 阅读详情

     IT界学习各新技术的第一个例子好像都喜欢hello world,那就从hello world开始吧。在此说明,这里用的drools是drools6,drools5和drools6还是有差别的,drools6可以说变得更简洁了。


建立个简单的maven项目



 pom.xml

<dependencies>
  
  <dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <version>6.4.0.Final</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>6.4.0.Final</version>
</dependency>
  </dependencies>

Message.java

package com.fei.drools.bean;

public class Message {

	public static final int HELLO = 0;
	public static final int GOODBYE = 1;
	@org.kie.api.definition.type.Label("消息")
	private String msg = "test";
	private int status;

	public Message() {
		super();
	}

	public String getMsg() {
		return this.msg;
	}

	public void setMsg(String message) {
		this.msg = message;
	}

	public int getStatus() {
		return this.status;
	}

	public void setStatus(int status) {
		this.status = status;
	}
	
}

kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
    <kbase name="rules" packages="rules">
        <ksession name="ksession-rules"/>
    </kbase>
    <kbase name="dtables" packages="dtables">
        <ksession name="ksession-dtables"/>
    </kbase>
    <kbase name="process" packages="process">
        <ksession name="ksession-process"/>
    </kbase>
</kmodule>

这个文件不能少,必须放在src/main/resource/META-INF下

Sample.drl

规则文件

package com.fei.drools
import com.fei.drools.bean.Message;

rule "Hello World"
    when
        m : Message( status == Message.HELLO, myMessage : msg )
    then
    	System.out.println ( "执行规则: "+drools.getRule().getName());
        System.out.println( "打印msg:"+myMessage );
        m.setMsg( "Goodbye cruel world" );
        m.setStatus( Message.GOODBYE );
        update( m );
end
rule "GoodBye"
    when
        Message( status == Message.GOODBYE, myMessage : msg )
    then
    	System.out.println ( "执行规则: "+drools.getRule().getName());
        System.out.println( "打印msg:"+myMessage );
end

MainTest.java

package com.fei.drools;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import com.fei.drools.bean.Message;

public class MainTest {

	public static void main(String[] args) {
		// load up the knowledge base
		KieServices ks = KieServices.Factory.get();
		KieContainer kContainer = ks.getKieClasspathContainer();
		KieSession kSession = kContainer.newKieSession("ksession-rules");
		
		Message message = new Message();
		message.setMsg("Hello World");
		message.setStatus(Message.HELLO);
		
		kSession.insert(message);
        kSession.fireAllRules();
        kSession.dispose();
	}
}

执行结果



源码下载


    看到打印结果,再对比规则文件Sample.drl,发现是一致的。

    代码KieContainer kContainer = ks.getKieClasspathContainer();时,会找到META-INF/kmodule.xml文件,KieSession kSession = kContainer.newKieSession("ksession-rules");时 ,是表明将使用kession-rules指向的rules文件夹下的规则文件。


这个kmodule.xml的文件的定义非常简单,其实也很容易理解:

一个kmodule里面包含了两个kbase,这个也是我们这个例子里面的两个用例,分别对应drl规则文件的例子,一个是对应Excel表格的规则例子。
每一个kbase都有一个name,可以取任意字符串,但是不能重名。
然后都有一个packages,可以看到packages里面的字符串其实就是src/main/resources下面的文件夹的名称,或者叫包名,规则引擎会根据这里定义的包来查找规则定义文件。可以同时定义多个包,以逗号分隔开来就行。
每一个kbase下面可以包含多个ksession,当然本例中都自定义了一个。
每一个ksession都有一个name,名字也可以是任意字符串,但是也不能重复。
kbase和ksession里面的name属性是全局不能重复的。
kbase和ksession中其实还有很多其它的属性,但是在这里不是很重要,就先不提了,后面我们会一一讲解的。
这样一个kmodule.xml文件就建立好了。


下面图片转载自http://www.blogjava.net/diggbag/articles/359347.html















规则引擎-drools-2-hello world 规则引擎drools的第一个demo:helloworld 阅读详情

相关推荐

Drool学习记录(一) 概念、Helloworld

1 关于规则引擎 基于知识库和规则的专家系统是早期最主流的人工智能,不同于现在流行的基于统计、机器学习的智能算法,基于规则的算法相对来说更加直观和易于理解,毕竟如果简单理解的话,就是定义好了If-Than结构,从而让不同的输入得到相应的输出。但从现实角度出发,开发基于规则的业务系统很多时候是必须的,因为很多业务场景就是规定好的处理逻辑,比如一款游戏里,使用某个道具后给角色添加哪种效果,就是要用预先...

wangzhenyang2的博客 1385

【java】drools入门之动态触发规则

1. 动态加载规则文件 假设有两个规则文件,具体执行哪一个规则文件需要根据配置文件来动态确定,那么,可以通过下述的方式实现: package com.drools; import java.io.File; import java.net.URLDecoder; import java.util.Collection; import java.util.Scanner; import ...

XYZ 3182

Drools入门-----------环境搭建,分析Helloworld

HelloWorld 博文链接:https://justsee.iteye.com/blog/1198259

规则引擎 Drools学习详解

1.规则引擎概述 1.1 什么是规则引擎 规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。 需要注意的是规则引擎并不是一个具体的技术框架,而是指的一类系统,即业务规则管理系统。目前市面上具体的规则引擎产品有:drools、VisualRules、iLog等。 规则引擎实现了将业务决策从应用程序代码

qq_45228323的博客 2011

蓝桥杯单片机学习13——NE555方波发生器&频率测量

NE555详解、引脚图介绍、原理图及工作原理讲解、方波产生的原理、定时器测量频率的原理及使用方法、代码实现

weixin_67907028的博客 1万+

零基础使用Manim画傅里叶变换

0x01 准备工作 确保你的电脑中安装的有:Python(3.6以上版本,推荐3.8)、FFmpeg(在PATH环境变量中)、LaTex发行版,如果这些都有了,就可以跳过这步。 下面是安装指南: Python:Win10用户直接在微软商店搜索Python3.8安装,也可以自行百度安装方法,在开始菜单右键打开PowerShell,或者Win+R输入PowerShell打开,输入Pyhton --version,显示3.8以上。 FFmpeg:可以直接百度下载,或者用我打包好的(下载链接)。下载好后,将ff

TagBug的博客 3191

drools kmodule属性( kbase属性,ksession属性)

kmodule.xml示例: <?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.drools.org/xsd/kmodule"> <configur...

top_explore的博客 3209

R语言maftools包实战:5分钟搞定TCGA癌症突变数据可视化(附完整代码)

本文详细介绍了如何使用R语言的maftools包快速解析和可视化TCGA癌症突变数据。通过实战演示,从环境搭建、数据导入到核心可视化(如瀑布图、棒棒糖图)和深度统计分析(如生存分析、突变特征),帮助生物信息学研究者高效完成癌症基因组学分析,大幅提升从原始MAF数据到发表级图表的效率。

weixin_29054399的博客 188

初识Drools(一): Drools 之 hello world

简单了解       Drools是一个开源的,基于java的规则引擎,用于匹配规则。会有人问,java中 if - else 也能实现,为什么要用着一个新技术,一两个条件,当然是硬编码在程序中更为方便,但是在大量规则条件下,碰到例如电商中的优惠券,大量的规则,满减,跨店,商品限制,这种多规则切复杂度极高还会随时发生变化的情况下,使用  if - else 硬编码就会大大的增加代码的复杂性,...

树欲静而风不止 1015

WorkVisual传输程序报错_发现一个内部错误

WorkVisual传输程序报错_发现一个内部错误

qq_16401025的博客 2458

大模型在心律失常预测及治疗方案制定中的应用研究报告

目录一、引言1.1 研究背景与意义1.2 研究目的与方法1.3 研究创新点二、大模型技术概述2.1 大模型基本原理2.2 常见大模型类型及特点2.3 大模型在医疗领域的应用现状三、心律失常的术前预测与准备3.1 术前心律失常预测的重要性3.2 大模型在术前预测中的应用案例3.3 基于预测结果的术前准备方案四、术中监测与实时调整4.1 术中监测心律失常的方法与技术4.2 大模型辅助术中决策的机制4.3 实时调整手术方案的策略与实践五、术后恢复与并发症风险预测5.1 术后心律失常的监测与评估5.2 大模型预测术

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1598

规则引擎 Drools 快速入门

规则引擎 Drools 快速入门

制定持续可量化的目标,不断坚持。 2312

YOLOv10改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤

本文记录的是。采用深度可分离卷积将标准卷积分解为深度卷积和1×1卷积。同时,引入来,避免非线性层导致的性能下降问题。本文将应用到YOLOv10中,借助其高效的结构和特性,在保持一定精度的前提下,显著降低YOLOv10的计算复杂度和内存占用。

Limiiiing的博客 533

Drools 6.0 Hello World

0x00 开始Drools是JBoss旗下的一款开源规则引擎。规则引擎可以实现业务规则和代码的分离,使得非技术人员也可以配置业务规则,使业务规则有更强的可维护性。而Drools是开源的规则引擎中使用最广泛的。目前Drools的最高版本是7.0.0beta,网上大多数例子都是以Drools 5.x为例,而中文的Drools 6.x 例子较少,在本文中已Drools 6.4.0.Final为例,只使用D

fuzzytalker的专栏 2268

【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)

订阅智能体进阶(2)。不用爬虫,直接提取网页信息。从RunSubscription分离出AddSubscriptionTask的action,并且让SubscriptionRunner单独运行。

同学小张的博客 1588

系统安装(kuntaiR522 kvm安装)

鲲泰R522服务器kvm安装rocky

weixin_46396917的博客 1822

Drools6.2 Eclipse环境搭建及HelloWord

由于工作的需要,我开始学习Drools了,根据官网的介绍在Eclipse中搭建了Drools的开发环境. 环境: MacOS10.10 + EclipseLuna Drools版本: Drools6 1. 从官网下载以下两个zip包 . http://www.drools.org/download/download.html drools-distribution-6.2.

ywj776199845的专栏 1951

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Drools入门-----------环境搭建,分析Helloworld Drools5.0的xls文件转drl文件提升解析效率 使用BRMS的Tomcat6.0配置

http://justsee.iteye.com/blog/1198259 Drools官网:http://www.jboss.org/drools Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) Drools Guvnor (Business Rules Manager)

Ryan Z 的技术日志 709

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Drools6 Eclipse环境搭建及HelloWord

由于工作的需要,我开始学习Drools了,根据官网的介绍在Eclipse中搭建了Drools的开发环境. 环境: MacOS10.10 + EclipseLuna Drools版本: Drools6 1. 从官网下载以下两个zip包 .http://www.drools.org/download/download.html drools-distribution-6.2.0.F...

a7639915的博客 240

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Drools规则引擎实战指南:5个场景化解决方案让业务规则开发变简单

Drools是一个开源的Java规则引擎、DMN决策引擎和复杂事件处理(CEP)引擎,为企业级应用提供强大的业务规则管理和决策自动化能力。无论您是在构建金融风控系统、电商促销引擎还是智能客服平台,Drools都能帮助您将复杂的业务逻辑从代码中解耦,实现灵活、可维护的业务规则管理。 ## 场景一:如何快速开始第一个规则项目? 当您需要将业务规则从硬编码中分离时,Drools提供了清晰的Maven

gitblog_00269的博客 1078

Drools入门-----------环境搭建,Helloworld 入门篇

Drools官网:http://www.jboss.org/drools   Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) Drools Guvnor (Business Rules Manager) (规则集管理器) Drools Expert (rule engine)

ywj776199845的专栏 2633

Drools入门Helloworld

Drools官网:http://www.jboss.org/drools   Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) Drools Guvnor (Business Rules Manager) (规则集管理器) Drools Expert (rule engine)        

每天积累一点,一年后你会发现,自己变化很大 1266

Drools规则引擎实战:SpringBoot整合与业务逻辑解耦

规则引擎是一种将业务决策逻辑从应用程序代码中分离出来的技术,其核心原理是基于RETE算法实现高效的模式匹配。通过声明式编程,规则引擎能够将复杂的业务规则以接近自然语言的形式进行定义和管理,从而显著提升系统的可维护性和灵活性。在Java生态中,Drools作为一款成熟的开源规则引擎,广泛应用于风控策略、营销活动、费用计算等需要频繁变更业务规则的场景。本文将以Drools为例,深入解析其核心概念如Fact、Rule和KieSession,并结合SpringBoot框架,演示如何实现规则文件的动态加载与热更新,解

weixin_34121304的博客 394

Drools规则引擎初学入门实例HelloWorld

(1)下载eclipse(www.eclipse.org),如果是一般的java开发,下载Eclipse IDE for Java Developers就行了,解压后即可使用; (2)下载Drools(http://jboss.org/drools/downloads.html),目前最新版本是Drools 4.0.7 Binaries,下载后解压即可; (3)之后下载eclipse的Droo...

乐在其中/Leo在其中 250
上一篇: drools学习1--介绍
下一篇: drools学习3--积分计算例子
夢_殤
博客等级 码龄15年 348粉丝 140原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值