drools kie框架测试工程

  • 目录
    • 工程配置文件
    • 测试代码
    • 源码

目录

│ .gitignore
│ pom.xml
│ README.md

├─.idea
│ workspace.xml

├─src
│ ├─main
│ │ ├─java
│ │ │ └─cn
│ │ │ └─org
│ │ │ └─zhixiang
│ │ │ │ DroolsApplication.java
│ │ │ │
│ │ │ ├─config
│ │ │ │ DroolsAutoConfiguration.java
│ │ │ │
│ │ │ └─entity
│ │ │ BookInfo.java
│ │ │ Dog.java
│ │ │ User.java
│ │ │
│ │ └─resources
│ │ │ application.yml
│ │ │
│ │ └─rules
│ │ Function.drl
│ │ HelloWord.drl
│ │ Property.drl
│ │
│ └─test
│ └─java
│ └─cn
│ └─org
│ └─zhixiang
│ BlogsUrlOutputTest.java
│ DroolsApplicationFunctionTests.java
│ DroolsApplicationHelloWordTests.java
│ DroolsApplicationKieServerTest.java
│ DroolsApplicationPropertyTests.java
│ DroolsApplicationWorkBenchTests.java

└─target
├─classes
│ │ application.yml
│ │
│ ├─cn
│ │ └─org
│ │ └─zhixiang
│ │ │ DroolsApplication.class
│ │ │
│ │ ├─config
│ │ │ DroolsAutoConfiguration$1.class
│ │ │ DroolsAutoConfiguration.class
│ │ │
│ │ └─entity
│ │ BookInfo.class
│ │ Dog.class
│ │ User.class
│ │
│ └─rules
│ Function.drl
│ HelloWord.drl
│ Property.drl

├─generated-sources
│ └─annotations
├─generated-test-sources
│ └─test-annotations
└─test-classes
└─cn
└─org
└─zhixiang
BlogsUrlOutputTest.class
DroolsApplicationFunctionTests.class
DroolsApplicationHelloWordTests.class
DroolsApplicationKieServerTest.class
DroolsApplicationPropertyTests.class
DroolsApplicationWorkBenchTests.class

工程配置文件

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.org.zhixiang</groupId><artifactId>drools</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>drools</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.0.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><drools.version>7.14.0.Final</drools.version></properties><repositories><repository><id>guvnor-m2-repo</id><name>Guvnor M2 Repo</name><!--<url>http://localhost:8080/kie-drools/maven2/</url>--><url>http://118.25.197.252:8080/drools-wb/maven2/</url></repository><repository><id>Central-Repository</id><name>Central Repository</name><!--<url>http://localhost:8080/kie-drools/maven2/</url>--><url>    https://repo1.maven.org/maven2/</url></repository></repositories><dependencies><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-spring</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.3.7.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>org.eclipse.jdt</groupId><artifactId>org.eclipse.jdt.core</artifactId><version>3.15.0</version></dependency><!-- kieServer依赖--><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>7.14.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.14.0.Final</version></dependency><dependency><groupId>org.kie.server</groupId><artifactId>kie-server</artifactId><version>7.14.0.Final</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.22</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.51</version></dependency><dependency><groupId>com.qchery</groupId><artifactId>harper</artifactId><version>1.0.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.3</version><!--$NO-MVN-MAN-VER$--><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins></build></project>

application.yml:

server:port: 8081

Function.drl:

package rules;
import cn.org.zhixiang.entity.Userrule "test1"whentheninsert(new User("赵六",12));System.err.println("创造赵六");
endrule "test2"when$u:User(name=="赵六")then$u.setName("王五");update($u);System.err.println("赵六");
endrule "test3"when$u:User(name=="王五")thenSystem.err.println("王五");retract($u);
endrule "test4"when$u:User(name=="王五")thenSystem.err.println("王五删除删除之后"+$u.getName());
end

HelloWord.drl

package rules;
import cn.org.zhixiang.entity.User;
import java.lang.String;
import java.util.List;rule "hello,word"wheneval(true)thenSystem.err.println("hello,word!");
endrule "user"when$u:User(name=="张三",age==18)//连接符: && || ,then$u.setName("李四");System.err.println("hello,word:"+$u.getName());
endrule "contains"when$s:String()$u:User(name contains $s)thenSystem.err.println("用户张三存在");
endrule "memberOf"when$list:List()$u:User(name memberOf $list)thenSystem.err.println("用户李四存在");
endrule "matches"when$u:User(name matches "张.*")thenSystem.err.println("用户张xx存在");
end

Property.drl

package rules;
import cn.org.zhixiang.entity.User;rule "salience2"
salience 2wheneval(true)thenSystem.err.println("salience2");
endrule "salience1"
salience 1wheneval(true)thenSystem.err.println("salience1");
endrule "dateEffective"
date-effective "2018-11-24"whenthenSystem.err.println("2018-11-24被执行");
endrule "dateEffectiveTomorrow"
date-effective "2018-11-25"whenthenSystem.err.println("2018-11-25被执行");
endrule "enabled"
enabled falsewhenthenSystem.err.println("被禁用的规则");
end

测试代码

BlogsUrlOutputTest

package cn.org.zhixiang;import cn.org.zhixiang.entity.BookInfo;
import org.junit.Test;import java.io.*;
import java.util.ArrayList;
import java.util.List;public class BlogsUrlOutputTest {private static List<BookInfo> books;static{books=new ArrayList<>();books.add(new BookInfo(0,"weixin_40078053","79869321"));books.add(new BookInfo(1,"free-wings","10281198.html"));books.add(new BookInfo(0,"X5fnncxzq4","82919860"));books.add(new BookInfo(1,"loveyou","cuckoo.html"));books.add(new BookInfo(1,"loveyou","cuckoo.html"));}@Testpublic void testRule2() throws Exception {genUrlText();}private void genUrlText() throws IOException {BufferedReader buf=new BufferedReader(new FileReader(new File("D://example.txt")));String line  = null;books=new ArrayList<>();while((line = buf.readLine()) != null) {String[] meta=line.split(" ");books.add(new BookInfo(Integer.valueOf(meta[0]),meta[1],meta[2]));}File f=new File("D://books.txt");f.delete();f.createNewFile();FileWriter w=new FileWriter(new File("D://books.txt"),true);for(BookInfo b:books){String bookUrl="";if(b.getType()==0){bookUrl="https://blog.csdn.net/"+b.getAuthorName()+"/article/details/"+b.getSuffix();}else{bookUrl="https://www.cnblogs.com/"+b.getAuthorName()+"/p/"+b.getSuffix();}w.write(bookUrl);w.write("\r\n");}w.flush();w.close();}
}

DroolsApplicationFunctionTests

package cn.org.zhixiang;import org.drools.core.base.RuleNameEndsWithAgendaFilter;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.api.runtime.KieSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class DroolsApplicationFunctionTests {@AutowiredKieSession kieSession;@Testpublic void testFunction() {kieSession.fireAllRules();}}

DroolsApplicationHelloWordTests

package cn.org.zhixiang;import cn.org.zhixiang.entity.User;
import org.drools.core.base.RuleNameEndsWithAgendaFilter;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.api.runtime.KieSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;
import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest
public class DroolsApplicationHelloWordTests {@AutowiredKieSession kieSession;@Testpublic void testHelloWord() {kieSession.fireAllRules();}@Testpublic void testUser() {User user=new User("张三",18);kieSession.insert(user);kieSession.fireAllRules();System.err.println("规则执行完毕后张三变为了:"+user.getName());}@Testpublic void testOneRule() {User user=new User("张三",18);kieSession.insert(user);kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("user"));}@Testpublic void testContains() {String name="张三";User user=new User("张三",18);kieSession.insert(name);kieSession.insert(user);kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("contains"));}@Testpublic void testMemberOf() {List list=new ArrayList();list.add("张三");list.add("李四");User user=new User("李四",18);kieSession.insert(list);kieSession.insert(user);kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("memberOf"));}@Testpublic void testMatches() {User user=new User("张三",18);kieSession.insert(user);kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("matches"));}}

testKieServer

package cn.org.zhixiang;import com.alibaba.fastjson.JSONObject;
import com.qchery.harper.fact.Address;
import com.qchery.harper.fact.ApplyInfo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.api.KieServices;
import org.kie.api.command.Command;
import org.kie.api.command.KieCommands;
import org.kie.api.runtime.ExecutionResults;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.api.model.ServiceResponse;
import org.kie.server.client.KieServicesClient;
import org.kie.server.client.KieServicesConfiguration;
import org.kie.server.client.KieServicesFactory;
import org.kie.server.client.RuleServicesClient;
import org.springframework.test.context.junit4.SpringRunner;import java.util.LinkedList;
import java.util.List;@RunWith(SpringRunner.class)
public class DroolsApplicationKieServerTest {public static final String SERVER_URL = "http://118.25.197.252:8180/kie-server/services/rest/server";public static final String PASSWORD = "kieserver1!";public static final String USERNAME = "kieserver";public static final String KIE_CONTAINER_ID = "com.qchery:harper:1.0.0";//"kie-server-80835beb889a";@Testpublic void testKieServer() {// KisService 配置信息设置KieServicesConfiguration kieServicesConfiguration =KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, 10000L);kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON);// 创建规则服务客户端KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration);RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class);// 规则输入条件ApplyInfo applyInfo = new ApplyInfo();applyInfo.setAge(19);Address familyAddress = new Address();familyAddress.setProvince("aa");applyInfo.setFamilyAddress(familyAddress);// 命令定义,包含插入数据,执行规则KieCommands kieCommands = KieServices.Factory.get().getCommands();List<Command<?>> commands = new LinkedList<>();commands.add(kieCommands.newInsert(applyInfo, "applyInfo"));commands.add(kieCommands.newFireAllRules());String payload="{\"lookup\": \"ksessionId1\",  \"commands\": [{      \"insert\": {             \"return-object\": true,          \"out-identifier\": \"applyInfo\",          \"object\": {                 \"com.qchery.harper.fact.ApplyInfo\": {                   \"name\": null,                   \"age\": 19,                  \"familyAddress\": {                      \"city\": null,                       \"detail\": null,                         \"distract\": null,                       \"province\": \"aa\"                    }               }           }       }   }, {        \"fire-all-rules\": \"\"    }] }";System.err.println(payload);System.err.println(JSONObject.toJSON(kieCommands.newBatchExecution(commands, "ksessionId1")).toString());ServiceResponse<ExecutionResults> results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID,/*kieCommands.newBatchExecution(commands, "ksessionId1")*/payload);// 返回值读取ApplyInfo value = (ApplyInfo) results.getResult().getValue("applyInfo");System.out.println(JSONObject.toJSON(value).toString());}
}

DroolsApplicationPropertyTests

package cn.org.zhixiang;import org.drools.core.base.RuleNameEndsWithAgendaFilter;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.api.runtime.KieSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class DroolsApplicationPropertyTests {@AutowiredKieSession kieSession;@Testpublic void testSalience() {kieSession.fireAllRules();}@Testpublic void testDateEffective() {kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("dateEffective"));}@Testpublic void testDateEffectiveTomorrow() {kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("dateEffectiveTomorrow"));}@Testpublic void testEnabled() {kieSession.fireAllRules(new RuleNameEndsWithAgendaFilter("enabled"));}}

DroolsApplicationWorkBenchTests

package cn.org.zhixiang;import cn.org.zhixiang.entity.Dog;
import org.drools.compiler.kproject.ReleaseIdImpl;
import org.drools.core.io.impl.UrlResource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.api.KieServices;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.KieRepository;import org.kie.api.builder.KieScanner;
import org.kie.api.builder.ReleaseId;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.springframework.test.context.junit4.SpringRunner;import java.io.IOException;
import java.io.InputStream;@RunWith(SpringRunner.class)
public class DroolsApplicationWorkBenchTests {@Testpublic void testWorkbench() {String url = "http://118.25.197.252:8080/drools-wb/maven2/cn/org/zhixiang/drools-test1/0.0.1/drools-test1-0.0.1.jar";KieServices kieServices = KieServices.Factory.get();KieRepository kieRepository = kieServices.getRepository();UrlResource resource = (UrlResource) kieServices.getResources().newUrlResource(url);resource.setBasicAuthentication("enabled");resource.setPassword("admin");resource.setUsername("admin");InputStream is = null;try {is = resource.getInputStream();} catch (IOException e) {e.printStackTrace();}KieModule kieModule = kieRepository.addKieModule(kieServices.getResources().newInputStreamResource(is));KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());KieSession kieSession = kieContainer.newKieSession();Dog dog = new Dog();dog.setName("大黄");kieSession.insert(dog);kieSession.fireAllRules();}
}

源码

DroolsApplication.java

package cn.org.zhixiang;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DroolsApplication {public static void main(String[] args) {SpringApplication.run(DroolsApplication.class, args);}}

DroolsAutoConfiguration.java

package cn.org.zhixiang.config;import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.builder.*;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.internal.io.ResourceFactory;
import org.kie.spring.KModuleBeanFactoryPostProcessor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;import java.io.IOException;/*** d** @author syj* CreateTime 2018/11/23* describe:*/
@Configuration
public class DroolsAutoConfiguration {private static final String RULES_PATH = "rules/";@Bean@ConditionalOnMissingBean(KieFileSystem.class)public KieFileSystem kieFileSystem() throws IOException {KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();for (Resource file : getRuleFiles()) {kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH + file.getFilename(), "UTF-8"));}return kieFileSystem;}private Resource[] getRuleFiles() throws IOException {ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();return resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "**/*.*");}@Bean@ConditionalOnMissingBean(KieContainer.class)public KieContainer kieContainer() throws IOException {final KieRepository kieRepository = getKieServices().getRepository();kieRepository.addKieModule(new KieModule() {public ReleaseId getReleaseId() {return kieRepository.getDefaultReleaseId();}});KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem());kieBuilder.buildAll();return getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());}@Bean@ConditionalOnMissingBean(KieBase.class)public KieBase kieBase() throws IOException {return kieContainer().getKieBase();}@Bean@ConditionalOnMissingBean(KieSession.class)public KieSession kieSession() throws IOException {KieSession kieSession = kieContainer().newKieSession();return kieSession;}@Bean@ConditionalOnMissingBean(KModuleBeanFactoryPostProcessor.class)public KModuleBeanFactoryPostProcessor kiePostProcessor() {return new KModuleBeanFactoryPostProcessor();}public KieServices getKieServices() {System.setProperty("drools.dateformat","yyyy-MM-dd");return KieServices.Factory.get();}
}

BookInfo.java

package cn.org.zhixiang.entity;public class BookInfo {private int type;//0;csdn; 1:cnblogsprivate String authorName;private String suffix;public BookInfo(int type, String authorName, String suffix) {this.type = type;this.authorName = authorName;this.suffix = suffix;}public int getType() {return type;}public void setType(int type) {this.type = type;}public String getAuthorName() {return authorName;}public void setAuthorName(String authorName) {this.authorName = authorName;}public String getSuffix() {return suffix;}public void setSuffix(String suffix) {this.suffix = suffix;}
}

Dog.java

package cn.org.zhixiang.entity;/*** d** @author syj* CreateTime 2018/11/26* describe:*/
public class Dog  {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

User.java

package cn.org.zhixiang.entity;public class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

drools kie框架测试工程相关推荐

  1. ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤(特征分析与特征处理)+分类模型设计)

    ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤+分类模型设计) 目录 一.总体思路框架 二.特征工程详细步骤(特征分析与特征处 ...

  2. 创建 Robotium 测试工程

    前面学习了instrumentation框架,现在来学习robotium了解怎么使用不就是一个晚上的事吗,robotium也是基于Instrumentation框架的.一般用于app的功能性测试,不能 ...

  3. RadASM的测试工程!

    RadASM已经安装完毕了,是否可以正常工作了呢?我们通过创建一个工程来测试一下,下面就是创建这个测试工程的过程: 1, 2, 3, 4, 5, 6, 7, 8, 9, 至此,我们通过RadASM的模 ...

  4. Maven 创建、测试工程

    创建工程 Maven 使用原型(archetype)插件创建工程. cd d: cd eclipse-workspace mvn archetype:generate -DgroupId=com.wj ...

  5. mock方法常用框架_基于MOCK对象和JUNIT框架测试DAO

    对于Java组件开发者来说,他们都盼望拥有一组能够对组件开发提供全面测试功能的好用的单元测试.一直以来,与测试独立的Java对象相比,测试传统型J2EE Web组件是一项更为困难的任务,因为Web组件 ...

  6. 六.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---4.laserMapping.cpp--后端建图和帧位姿精估计(优化)

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

  7. 五.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---3.laserOdometry.cpp--前端雷达里程计和位姿粗估计

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

  8. 四.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---2.scanRegistration.cpp--前端雷达处理和特征提取

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

  9. 开源按键组件Multi_Button的使用,含测试工程

    之前的文章中介绍过按键的处理方法<多功能(单击.双击.长按)按键设计>,今天再来分享另外一种方式:MultiButton. 1.Multi_Button简介 MultiButton 是Gi ...

最新文章

  1. 深度剖析不一样的Redis架构设计!
  2. FPGA设计心得(5)Aurora 例子工程分析与仿真实例分析(streaming版)
  3. 专科生学什么计算机专业好,平均月薪5000以上的专科专业,机械排在首位,计算机专业有点意外...
  4. 云炬随笔20190419
  5. Java集合篇:LinkedList源码分析
  6. 抛硬币正面期望_如果抛硬币,正面的数量多于反面的可能性
  7. java画一个小车_小轿车简笔画怎么画
  8. Android滑动返回上一级界面
  9. python中可迭代对象,迭代器,生成器的区别和联系
  10. 整理并记录电压比较器
  11. 网站被ddos攻击了怎么办?网站正在被ddos攻击怎么解决
  12. 战地5离线bot模式_战地2怎么增加bot
  13. python中用来返回序列的最大函数_Python内置函数____________用来返回序列中的最大元素。...
  14. 在同一个数据集中同时更新多表..............
  15. 最好的十个英语网课平台,这年头在网上学英语靠谱吗?
  16. Java 线上问题排查思路与工具使用
  17. 给小学生科普计算机知识,小学生必懂的15个科普知识
  18. windows上ppt转图片的方法
  19. 舆情总结汇报撰写范文模板格式详介
  20. 为什么都推崇测试先行?论软件测试先行的12个好处

热门文章

  1. 使用insmod命令安装驱动模块出现insmod: ERROR: could not insert module module_test.ko: Invalid module format解决办法
  2. CIST信息系统培训师认证
  3. 通过硬件架构设计应对“熔断”和“幽灵”等CPU漏洞
  4. 美丽说蘑菇街首页效果(UITableView和UIScrollerView联动)
  5. 张俊林:对比学习在微博内容表示的应用
  6. 党建学习答题系统源码,开源免费版是如何搭建的呢?
  7. canvas视频截图
  8. Vue事件修饰符的总结
  9. 异步电机开环变频变压调速
  10. Vue项目里Websocket的使用