ElasticSearch虽然很多时候可以直接通过schema获取数据,但是有的时候也需要自己手写API来实现自定义的功能。本篇主要是elasticsearch提供的API的学习。

这个是官网的教程链接https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-api.html

下面的代码直接拷贝到本地编辑器应该是可以直接运行的。由于代码量较多,而且比较简单,这里不做过多的解释,不理解的地方可以去看看官网的教程,还是很好理解的。

稍稍评价一下,elasticsearch的API基本上把所有的情况都考虑到了,是一个很全的API,但是由于太多了,感觉不是很能研究的过来,就算全部研究了,也不一定能全部记得住,经常用的大概就那么几个API吧。

一、构建项目

新建一个maven java项目。
pom.xml文件中添加下面这些东西

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>5.5.1</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version>
</dependency>

然后在项目根目录下添加log4j2.properties文件,复制下面的东西进去,当然也可以使用slf的日志文件,这里就不配置了。

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayoutrootLogger.level = info
rootLogger.appenderRef.console.ref = console

配置很简单,到这基本上就算是配置完成了。

二、声明client

这个还是很好理解的,感觉看代码应该就能懂,不做过多的介绍。


package test;import java.net.InetAddress;
import java.net.UnknownHostException;import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.index.reindex.DeleteByQueryRequestBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;@SuppressWarnings("resource")
public class testClient {public static void main(String[] args) throws Exception {method1();method2();method3();}public static void method1() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));}/*** 集群名字,默认是elasticsearch,可以在elasticsearch.yml中进行修改。*/public static void method2() throws Exception{Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));}/*** put("client.transport.sniff", true)这东西在自己的服务器报错,在公司的服务器不会报错。*/public static void method3() throws Exception{Settings settings = Settings.builder().put("client.transport.ignore_cluster_name", "true").put("client.transport.sniff", true).build();TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE).source("movies").execute().actionGet();client.close();}}

三、添加索引信息

package test;import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;import java.io.IOException;
import java.net.InetAddress;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;@SuppressWarnings({ "deprecation", "resource" })
public class TestIndex {public static void main(String[] args) throws IOException {indexmethod1();indexmethod2();indexmethod3();indexmethod4();indexmethod5();}/*** 方法一* @throws IOException*/public static void indexmethod1() throws IOException{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));IndexResponse response = client.prepareIndex("movies", "movie", "1").setSource(jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject()).get();println(response);}/*** 方法二* @throws IOException*/public static void indexmethod2() throws IOException{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));String json = "{" +"\"user\":\"kimchy\"," +"\"postDate\":\"2017-07-30\"," +"\"message\":\"trying out Elasticsearch\"" +"}";IndexResponse response = client.prepareIndex("movies", "movie","2").setSource(json).get();println(response);}/*** 方法三* @throws IOException*/public static void indexmethod3() throws IOException{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));Map<String, Object> json = new HashMap<String, Object>();json.put("user","kimchy");json.put("postDate",new Date());json.put("message","trying out Elasticsearch");IndexResponse response = client.prepareIndex("movies", "movie","3").setSource(json).get();println(response);}/*** 方法四* @throws IOException*/public static void indexmethod4()throws IOException{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));IndexRequest indexRequest = new IndexRequest();indexRequest.index("movies");indexRequest.type("movie");indexRequest.id("10");indexRequest.source(jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject());client.index(indexRequest);}/*** 方法五* @throws IOException*/public static void indexmethod5() throws IOException{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));IndexRequest indexRequest = new IndexRequest("movies","movie","20").source(jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject());client.index(indexRequest);}/*** 输出状态* @param response*/public static void println(IndexResponse response){System.err.println("status:"+response.status()+"\n"+"ID:"+response.getId()+"\n"+"Index:"+response.getIndex()+"\n"+"Type:"+response.getType()+"\n"+"Version:"+response.getVersion()+"\n"+"Result:"+response.getResult()+"\n"+"ShardID:"+response.getShardId()+"\n"+"ShardInfo:"+response.getShardInfo()+"\n");}}

四、更新索引

package test;import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;import java.net.InetAddress;import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.script.Script;
import org.elasticsearch.transport.client.PreBuiltTransportClient;@SuppressWarnings({ "resource" })
public class testUpdate {public static void main(String[] args) throws Exception {updatemethod5();}/*** 方法一* @throws Exception*/public static void updatemethod1() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));UpdateRequest updateRequest = new UpdateRequest();updateRequest.index("movies");updateRequest.type("movie");updateRequest.id("1");updateRequest.doc(jsonBuilder().startObject().field("user", "1").endObject());client.update(updateRequest).get();}/*** 方法二* @throws Exception*/public static void updatemethod2() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));UpdateResponse response =client.prepareUpdate("movies", "movie","2").setDoc(jsonBuilder().startObject().field("user", "2").endObject()).get();println(response);}/*** 方法三* @throws Exception*/public static void updatemethod3() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));UpdateRequest updateRequest = new UpdateRequest("movies", "movie", "3").script(new Script("ctx._source.user = \"3\""));client.update(updateRequest).get();}/*** 方法四* @throws Exception*/public static void updatemethod4() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));client.prepareUpdate("movies", "movie", "10").setScript(new Script("ctx._source.user = \"10\"")).get();}/*** 方法五* @throws Exception* 上面的任一方法,只要索引中没有该字段,就自动添加该字段,若有,则修改该字段的值* 创建索引的办法基本上都可以用来修改索引的信息。*/public static void updatemethod5() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));client.prepareUpdate("movies", "movie", "10").setScript(new Script("ctx._source.waaaa = \"10\"")).get();}/*** 输出状态* @param response*/public static void println(UpdateResponse response){System.err.println("status:"+response.status()+"\n"+"ID:"+response.getId()+"\n"+"Index:"+response.getIndex()+"\n"+"Type:"+response.getType()+"\n"+"Version:"+response.getVersion()+"\n"+"Result:"+response.getResult()+"\n"+"ShardID:"+response.getShardId()+"\n"+"ShardInfo:"+response.getShardInfo()+"\n");}}

五、获取索引

package test;import java.net.InetAddress;import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
@SuppressWarnings({ "resource" })
public class testGet {public static void main(String[] args) throws Exception {getmethod2();}/*** 方法一* @throws Exception*/public static void getmethod1() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));//.get()和.action().actionGet得到的结果是一样的,区别是单线程的还是多线程的//GetResponse response = client.prepareGet("movies", "movie", "1").get();GetResponse response = client.prepareGet("movies", "movie", "1").execute().actionGet();println(response);}/*** 方法二* @throws Exception*/public static void getmethod2() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));MultiGetResponse multiGetItemResponses = client.prepareMultiGet().add("movies", "movie", "1")           .add("movies", "movie", "2", "3", "10") .get();for (MultiGetItemResponse itemResponse : multiGetItemResponses) { GetResponse response = itemResponse.getResponse();if(response.isExists())println(response);}}/*** 输出结果GetResponse* @param response*/public static void println(GetResponse response){System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-");System.err.println("SourceAsString : ");System.err.println(response.getSourceAsString());System.err.println("Source : ");System.err.println(response.getSource());System.err.println("SourceAsMap : ");System.err.println(response.getSourceAsMap());System.err.println( "\n" +"isExists : " + response.isExists() + "\n" +"type : " + response.getType() + "\n" +"id : " + response.getId() +  "\n" +"version : " + response.getVersion() + "\n" + "fields : " + response.getFields() +  "\n" +"remoteAddress : " + response.remoteAddress() + "\n" + "sourceEmpty : " + response.isSourceEmpty() );}}

六、删除索引


package test;import java.net.InetAddress;import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.transport.client.PreBuiltTransportClient;@SuppressWarnings("resource")
public class testDelete {public static void main(String[] args) throws Exception {deletemethod6();}/*** 方法一* @throws Exception*/public static void deletemethod1()throws Exception {TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));DeleteResponse response = client.prepareDelete("movies", "movie", "1").get();println(response);}/*** 方法二* @throws Exception*/public static void deletemethod2() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));BulkByScrollResponse response =DeleteByQueryAction.INSTANCE.newRequestBuilder(client).filter(QueryBuilders.matchQuery("year", "1962")) .source("movies")                                  .get();     println(response);}/*** 方法三* 这个不能删除,很奇怪,感觉和下面那个方法相同,但是下面那个方法可以删除成功,不知道为什么* @throws Exception*/public static void deletemethod3() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));DeleteRequest deleteRequest = new DeleteRequest();deleteRequest.index("movies");deleteRequest.type("movie");deleteRequest.id("10");client.delete(deleteRequest);}/*** 方法四* @throws Exception*/public static void deletemethod4() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));DeleteRequest deleteRequest = new DeleteRequest("movies","movie","10");client.delete(deleteRequest);}/*** 方法五* @throws Exception* 清楚指定索引*/public static void deletemethod5() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));DeleteIndexResponse response = client.admin().indices()    .prepareDelete("movies")    .execute().actionGet(); println(response);}/*** 方法六* 清空索引* @throws Exception*/public static void deletemethod6() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));ClusterStateResponse response = client.admin().cluster()    .prepareState()    .execute().actionGet();  //获取所有索引  String[] indexs=response.getState().getMetaData().getConcreteAllIndices();  for (String index : indexs) {  //清空所有索引。  DeleteIndexResponse deleteIndexResponse = client.admin().indices()    .prepareDelete(index)    .execute().actionGet();    println(deleteIndexResponse);}  }/*** 输出DeleteResponse* @param response*/public static void println(DeleteResponse response){System.err.println("status:"+response.status()+"\n"+"ID:"+response.getId()+"\n"+"Type:"+response.getType()+"\n"+"Index:"+response.getIndex()+"\n"+"Result:"+response.getResult()+"\n"+"Version:"+response.getVersion()+"\n"+"ShardID:"+response.getShardId()+"\n"+"ShardInfo:"+response.getShardInfo()+"\n");}/*** 输出BulkByScrollResponse* @param response*/public static void println(BulkByScrollResponse response){System.out.println("BulkRetries = " + response.getBulkRetries() + "\n"+ "SearchRetries = " + response.getSearchRetries() + "\n"+ "Created = " + response.getCreated() + "\n"+ "Deleted = " + response.getDeleted() + "\n"+ "Updated = " + response.getUpdated() + "\n"+ "ReasonCancelled = " + response.getReasonCancelled() + "\n"+ "VersionConflicts = " + response.getVersionConflicts() + "\n"+ "BulkFailures = " + response.getBulkFailures() + "\n"+ "SearchFailures = " + response.getSearchFailures() + "\n"+ "Batches = " + response.getBatches() + "\n"+ "Noops = " + response.getNoops() + "\n"+ "Status = " + response.getStatus() + "\n"+ "Took = " + response.getTook() + "\n");    }/*** 输出BulkByScrollResponse* @param response*/public static void println(DeleteIndexResponse response){System.out.println("isAcknowledged = " + response.isAcknowledged() + "\n" + "remoteAddress = " + response.remoteAddress() + "\n" );    }}

七、批量操作索引


package test;import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;import java.net.InetAddress;
import java.util.Date;import org.elasticsearch.action.bulk.BackoffPolicy;
import org.elasticsearch.action.bulk.BulkProcessor;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.transport.client.PreBuiltTransportClient;@SuppressWarnings("resource")
public class testBulk {public static void main(String[] args)throws Exception {bulkmethod2();}/*** 方法一* @throws Exception*/public static void bulkmethod1() throws Exception{TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));BulkRequestBuilder bulkRequest = client.prepareBulk();bulkRequest.add(client.prepareIndex("movies", "movie", "5").setSource(jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject()));bulkRequest.add(client.prepareIndex("movies", "movie", "6").setSource(jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date()).field("message", "another post").endObject()));BulkResponse bulkResponse = bulkRequest.get();if (bulkResponse.hasFailures()) {System.out.println("处理添加失败的地方");}}/*** 方法二* @throws Exception*/public static void bulkmethod2() throws Exception {TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("106.14.112.215"), 9300));BulkProcessor bulkProcessor = BulkProcessor.builder(client, new BulkProcessor.Listener() {@Overridepublic void beforeBulk(long executionId, BulkRequest request) {System.err.println("批量操作之前");}@Overridepublic void afterBulk(long executionId, BulkRequest request, BulkResponse response) {System.err.println("批量操作之后,且不抛出异常");}@Overridepublic void afterBulk(long executionId, BulkRequest request, Throwable failure) {System.err.println("批量操作之后,但不抛出异常");}}).setBulkActions(10000) .setBulkSize(new ByteSizeValue(5, ByteSizeUnit.MB)) .setFlushInterval(TimeValue.timeValueSeconds(5)) .setConcurrentRequests(1) .setBackoffPolicy(BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)) .build();bulkProcessor.add(new IndexRequest("movies", "movie", "4").source(jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject()));bulkProcessor.add(new DeleteRequest("movies", "movie", "1"));bulkProcessor.flush();bulkProcessor.close();}}

源码我放在http://download.csdn.net/detail/q15150676766/9920331这里了,有需要的可以去下载看看

ElasticSearch学习笔记(八)Java AP实现增删改查相关推荐

  1. MySQL学习笔记(一) 下载安装+基本增删改查 + 事务

    1. 数据库概述 1.1 数据库相关概念 1.1.1 基本概念 了解三个概念:数据库.数据库管理系统.SQL. 名称 解释 简称 数据库 存储数据的仓库,数据是有组织的进行存储 DataBase(DB ...

  2. 基础的java增删改查,Java基础系列(基础):Java使用Cookie增删改查操作!

    什么是Cookie? Cookie是由W3C组织提出,最早由NetScape社区发展的一种机制. Cookie是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个co ...

  3. java中的数组增删查改操作,java数组实现增删改查

    java 实现动态数组,Java工具类Arrays中不得不知的常用方法,数组实现队列java,java数组实现增删改查 java 增删改查代码 import java.sql.Connection; ...

  4. java简单的增删改查项目 ATM机

    java简单的增删改查项目 login: package atm;import java.util.ArrayList; import java.util.List; import java.util ...

  5. 详细解析java JDBC实现增删改查

    目录 实现java数据库的增删改查基本步骤 包与类的结构. 一,与数据库建立连接,驱动包导入. ​二,创建实体类(与数据库的属性相一致) 三,创建接口 四,sql语句预编译和执行代码 五,test测试 ...

  6. go语言学习第八天==》mysql数据库增删改查、用go语言 客户端(client)发起htttp get请求,post请求,postForm请求,Head请求,Do请求

    go语言学习第八天==>mysql数据库增删改查.用go语言写 客户端(client)发起htttp get请求,post请求,postForm请求,Head请求,Do请求 引包 import的 ...

  7. java jdbctemplate的增删改查的实现

    jdbctemplate终于到你啦,准备了三天的java jdbc的基础知识 准备从建项目中慢慢学习,遇见不知道的就查资料,在回来慢慢的补自己不知道的知识点 1.新建一个项目jdbctemplate ...

  8. 三年Java开发每天增删改查,终于靠着这份面试题,成功上岸京东

    前言 朋友本科毕业,做了3年外包,每天就是增删改查,坐吃等死状态,心里总觉得这样下去要丸,于是下定决心辞职,在家爆肝三个月,面试了10余家公司,最后拿到了京东Java岗的offer. 小编厚着脸皮要朋 ...

  9. Mybatis-Plus学习(一):实现增删改查CRUD

    首先贴一个官网网址:MyBatis-Plus,学习mybatis一定要跟着官方文档来. mybatis-plus的作用:基友搭配,效率翻倍 说下实现简单增删改查的步骤: 1.创建一个springboo ...

最新文章

  1. 透过Win2008 R2窥视微软虚拟化帝国
  2. Bluetooth协议栈
  3. DLL入门浅析(1)——如何建立DLL
  4. org.apache.commons.io——FileUtils学习笔记
  5. Java EE与NoSQL的未来
  6. 一键解决 go get golang.org/x 包失败
  7. webpack创建library及从零开始发布一个npm包
  8. C++-Qt【1】-退出程序静态调试
  9. ES6学习笔记六(新增数据结构)
  10. 2022年 品牌新零售将去向何方?
  11. VS2013产品密钥
  12. Qt日历控件显示周数为:日一二三四五六
  13. 3DMax2015的下载和安装
  14. trove 配置文件
  15. 硕士毕业论文讨论部分怎么写啊?
  16. 【C语言】选择排序从小到大,从大到小,详细注释
  17. 嵌入式常用的加密芯片
  18. 超强PS滤镜套装-Google Nik Collection
  19. luogu 4343 引用zzj大神的文章
  20. #PCIE# PCIe的接口形态之OAM 卡

热门文章

  1. 如何有效预防ddos攻击
  2. 欢迎进入MyKTV点歌系统展示
  3. “死亡之星”——“阿波非斯”
  4. Win10系统打不开html文件,电脑无法打开html文件
  5. 互联网创业公司是否需要技术外包?
  6. 启动sts后,打开项目报错:NullPointException【已解决】
  7. Jmeter接口自动化(八)函数 上
  8. PCB之分布电感分布电容
  9. ubuntu18.04根目录已满造成开机失败报错Fail to start....
  10. 尚硅谷 clickHouse