SpringBoot--简单处理高并发demo
目录结构:(只跟book相关的)
model:
package com.cxb.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
//自动生成表
@Entity
@Table(name="book")
public class Book {
@Id
@GeneratedValue
private Integer id;
@Column(length=100)
private String name;
@Column(length=50)
private String author;
@Column(length=50)
private Integer stock; //库存
public Integer getStock() {
return stock;
}
public void setStock(Integer stock) {
this.stock = stock;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
BookDao:
package com.cxb.dao;
import java.util.List;
import javax.transaction.Transactional;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import com.cxb.model.Book;
/**
* springbootJPA
* 这种就不需要写service类,直接在controller里面调用该dao的方法
* @author 81046
*
*/
public interface BookDao extends JpaRepository<Book, Integer>{
//And --- 等价于 SQL 中的 and 关键字
public List<Book> findByNameAndStock(String name,int stock);
// Or --- 等价于 SQL 中的 or 关键字
public List<Book> findByNameOrStock(String name,int stock);
//Between --- 等价于 SQL 中的 between 关键字
public List<Book> findByStockBetween(int min,int max);
//LessThan --- 等价于 SQL 中的 "<"
public List<Book> findByStockLessThan(int max);
//GreaterThan --- 等价于 SQL 中的">"
public List<Book> findByStockGreaterThan(int min);
//IsNull --- 等价于 SQL 中的 "is null"
public List<Book> findByNameIsNull();
//IsNotNull --- 等价于 SQL 中的 "is not null"
public List<Book> findByNameIsNotNull();
//NotNull --- 与 IsNotNull 等价
public List<Book> findByNameNotNull();
//Like --- 等价于 SQL 中的 "like"
public List<Book> findByNameLike(String name);
//NotLike --- 等价于 SQL 中的 "not like"
public List<Book> findByNameNotLike(String name);
//OrderBy --- 等价于 SQL 中的 "order by"
public List<Book> findByNameNotNullOrderByStockAsc();
//Not --- 等价于 SQL 中的 "! ="
public List<Book> findByNameNot(String name);
//In --- 等价于 SQL 中的 "in"
public List<Book> findByNameIn(String name);
//NotIn --- 等价于 SQL 中的 "not in"
public List<Book> findByNameNotIn(String name);
//***************************************
//利用原生的sql进行操作
// @Query 注解中编写 JPQL 语句
// 使用 @Modifying 进行修饰. 以通知 SpringData, 这是一个 UPDATE 或 DELETE 操作
@Query(value="select * from book where name = ?1 ",nativeQuery=true)
@Modifying
public List<Book> findBookByName(String name);
@Query(value="delete from book where id = ?1 ",nativeQuery=true)
@Modifying
@Transactional
public void deleteBookById(int id);
//利用原生的SQL进行修改操作
@Query(value = "update book set name=?1 where id=?2 ", nativeQuery = true)
@Modifying
@Transactional
public void updateBookName(String name,int id);
//利用原生的SQL进行插入操作
@Query(value = "insert into book(name,author) value(?1,?2)", nativeQuery = true)
@Modifying
@Transactional
public void insertBook(String name,String author);
//分页查询 查询计算元素总个数总页数,数据多的情况下,代价是昂贵的
Page<Book> findByNameAndAuthor(String name ,String author,Pageable pageable);
//分页查询,返回的是一个片段,它只知道下一片段或者上一片段是否可用。
Slice<Book> findByName(String name,Pageable pageable);
//分页查询所有
//分页查询 查询计算元素总个数总页数,数据多的情况下,代价是昂贵的
Page<Book> findAll(Pageable pageable);
@Query(value = "update book set stock=stock-?1 where id=?2", nativeQuery = true)
@Modifying
@Transactional
public void reduce(int num,int id);
}
BookController:
package com.cxb.controller;
import java.util.List;
import java.util.concurrent.Semaphore;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.cxb.dao.BookDao;
import com.cxb.model.Book;
@Controller
@RequestMapping("/book")
public class BookController {
@Autowired
private BookDao bookDao;
//处理并发事件
//定义资源的总数量
Semaphore semaphore=new Semaphore(1);
/** 查询所有的图书
* http://localhost:8080/book/list
* @return
*/
@RequestMapping(value="/list", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public List<Book> list() {
return bookDao.findAll();
}
/**
* 新增图书
* @param request
* @return
*/
@RequestMapping(value="/saveBook", method=RequestMethod.POST,produces = "application/json; charset=utf-8")
@ResponseBody
public Book saveBook(HttpServletRequest request) {
String author = request.getParameter("author");
String name = request.getParameter("name");
String stock = request.getParameter("stock");
Book book = new Book();
book.setAuthor(author);
book.setName(name);
book.setStock(Integer.parseInt(stock));
return bookDao.save(book);
}
/**
* 修改图书
* @param request
* @return
*/
@RequestMapping(value="/updateBook", method=RequestMethod.POST,produces = "application/json; charset=utf-8")
@ResponseBody
public Book updateBook(HttpServletRequest request) {
String author = request.getParameter("author");
String name = request.getParameter("name");
String stock = request.getParameter("stock");
Book book = new Book();
book.setAuthor(author);
//设置id之后,就会执行update
book.setId(3);
book.setName(name);
book.setStock(Integer.parseInt(stock));
return bookDao.save(book);
}
/**
* 根据id删除图书
* @param request
*/
@RequestMapping(value="/delete", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public void delete(HttpServletRequest request) {
String id = request.getParameter("id");
bookDao.deleteById(Integer.parseInt(id));
}
/** 根据库存和名称查询图书
* http://localhost:8080/book/findByNameAndStock?name=庐州月&stock=20
* @param request
* @return
*/
@RequestMapping(value="/findByNameAndStock", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public List<Book> findByNameAndStock(HttpServletRequest request) {
String name = request.getParameter("name");
String stock = request.getParameter("stock");
return bookDao.findByNameAndStock(name,Integer.parseInt(stock));
}
/** 根据名称或者库存查询图书
* http://localhost:8080/book/findByNameOrStock?name=庐州月&stock=22
* @param request
* @return
*/
@RequestMapping(value="/findByNameOrStock", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public List<Book> findByNameOrStock(HttpServletRequest request){
String name = request.getParameter("name");
String stock = request.getParameter("stock");
//满足条件1和条件2的集合
return bookDao.findByNameOrStock(name,Integer.parseInt(stock));
}
/**
* 根据库存量在某个区间查询图书
* @return
*/
@RequestMapping(value="/findByStockBetween", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public List<Book> findByStockBetween(){
//满足条件1和条件2的集合
return bookDao.findByStockBetween(10,20);
}
/** 根据名称查询图书
* http://localhost:8080/book/findBookByName?name=千百度
* @param request
* @return
*/
@RequestMapping(value="/findBookByName", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public List<Book> findBookByName(HttpServletRequest request){
String name = request.getParameter("name");
return bookDao.findBookByName(name);
}
/** 根据id修改图书的名称
* http://localhost:8080/book/updateBookName?name=叹服&id=1
* @param request
*/
@RequestMapping(value="/updateBookName", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public void updateBookName(HttpServletRequest request) {
String name = request.getParameter("name");
String id = request.getParameter("id");
bookDao.updateBookName(name, Integer.parseInt(id));
}
/** 插入图书
* http://localhost:8080/book/insertBook?name=千百度1&author=许嵩
* @param request
*/
@RequestMapping(value="/insertBook", method=RequestMethod.POST,produces = "application/json; charset=utf-8")
@ResponseBody
public void insertBook(HttpServletRequest request) {
String name = request.getParameter("name");
String author = request.getParameter("author");
bookDao.insertBook(name, author);
}
/** 根据id删除图书
* http://localhost:8080/book/deleteBookById?id=6
* @param request
*/
@RequestMapping(value="/deleteBookById", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public void deleteBookById(HttpServletRequest request){
String id = request.getParameter("id");
bookDao.deleteById(Integer.parseInt(id));
}
/**
* 分页查询图书 根据名称和作者
* @param request
* @return
*/
@RequestMapping(value="/findByNameAndAuthor", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public Page<Book> findByNameAndAuthor(HttpServletRequest request){
@SuppressWarnings("deprecation")
//根据id降序
Pageable pageable = new PageRequest(0,3, Sort.Direction.DESC,"id");
String name = request.getParameter("name");
String author = request.getParameter("author");
return bookDao.findByNameAndAuthor(name, author, pageable);
}
/**
* 分页查询所有的图书
* @return
*/
@RequestMapping(value="/findAll", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public Page<Book> findAll(){
@SuppressWarnings("deprecation")
//根据id降序
Pageable pageable = new PageRequest(0,3, Sort.Direction.DESC,"id");
return bookDao.findAll(pageable);
}
/**
*
* @param request
* @return
*/
@RequestMapping(value="/findByName", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
Slice<Book> findByName(HttpServletRequest request){
@SuppressWarnings("deprecation")
//根据id降序
Pageable pageable = new PageRequest(0,3, Sort.Direction.DESC,"id");
String name = request.getParameter("name");
return bookDao.findByName(name, pageable);
}
/**
* 减库存 处理多线程(成功几个也会失败几个)
*/
@RequestMapping(value="/reduce", method=RequestMethod.GET,produces = "application/json; charset=utf-8")
@ResponseBody
public String reduce(HttpServletRequest request){
//可用资源数
int availablePermits = semaphore.availablePermits();
System.out.println("可用资源数量---"+availablePermits);
if(availablePermits>0) {
System.out.println("抢到资源****根据id修改该图书的库存");
try {
//请求占用一个资源
semaphore.acquire(1);
//根据id修改该图书的库存
String id = request.getParameter("id");
bookDao.reduce(5, Integer.parseInt(id));
System.out.println("根据id修改该图书的库存完成");
}catch (Exception e) {
e.printStackTrace();
}finally {
//释放一个资源
semaphore.release(1);
}
return "抢到资源处理业务逻辑,最后释放资源完成";
}else {
System.out.println("*********资源已被占用,稍后再试***********");
return "*********资源已被占用,稍后再试***********";
}
}
}
SpringBootThymeleafApplication:
package com.cxb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.HttpMessageConverter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
@SpringBootApplication
//没有连接数据库的时候报错 需要加上这一句
//@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class SpringBootThymeleafApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootThymeleafApplication.class, args);
}
/**
* 这里是为了使用阿里的fastjson 方式一
* @return
*/
@Bean
public HttpMessageConverters fastJsonConverters() {
FastJsonHttpMessageConverter fastConverter=new FastJsonHttpMessageConverter();
FastJsonConfig fastConfig=new FastJsonConfig();
fastConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
fastConverter.setFastJsonConfig(fastConfig);
HttpMessageConverter<?> converter=fastConverter;
return new HttpMessageConverters(converter);
}
}
application.yml:
spring:
thymeleaf:
#缓冲的配置
cache: false
check-template: true
check-template-location: true
#开启MVC thymeleaf 视图解析
enabled: true
encoding: utf-8
mode: HTML5
prefix: classpath:/templates/
suffix: .html
#配置数据源
datasource:
url: jdbc:mysql://127.0.0.1:3306/sp?useUnicode=true&characterEncoding=utf8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
#指定mybatis映射文件的地址
mybatis:
#配置文件的路径
#config-location: classpath:mybatis-config.xml
mapper-locations: classpath:mapper/*.xml
# mybatis自动扫描包中的实体类,自动定义别名,别名是类名(首字母大写或小写都可以,一般用小写)
type-aliases-package: com.cxb.model
#pagehelper分页插件配置
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: countSql
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>com.cxb</groupId>
<artifactId>SpringBoot-Thymeleaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>SpringBoot-Thymeleaf</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- mybatis的分页插件 -->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>io.fabric8.devops.apps</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.2.335</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>securesm</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>net.sf.jopt-simple</groupId>
<artifactId>jopt-simple</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>jna</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.6</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
<version>4.4.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.github.spullara.mustache.java</groupId>
<artifactId>compiler</artifactId>
<version>0.8.13</version>
</dependency>
<dependency>
<groupId>org.locationtech.spatial4j</groupId>
<artifactId>spatial4j</artifactId>
<version>0.7</version>
</dependency>
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.12</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>5.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queries</artifactId>
<version>5.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-sandbox</artifactId>
<version>6.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-spatial</artifactId>
<version>5.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-spatial-extras</artifactId>
<version>6.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-spatial3d</artifactId>
<version>7.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-suggest</artifactId>
<version>6.2.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-smile</artifactId>
<version>2.4.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.8.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-cbor</artifactId>
<version>2.8.1</version>
</dependency> -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
这里的测试可以用并发测试工具访问下面的链接:
链接:http://localhost:8080/book/reduce
SpringBoot--简单处理高并发demo相关推荐
- SpringBoot实现Java高并发秒杀系统之DAO层开发(一)
SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...
- SpringBoot实现Java高并发秒杀系统之Service层开发(二)
继上一篇文章:SpringBoot实现Java高并发秒杀系统之DAO层开发 我们创建了SpringBoot项目并熟悉了秒杀系统的表设计,下面我们将讲解一下秒杀系统的核心部分:Service业务层的开发 ...
- 一个简单的高并发的回应服务器(5万并发)
一个简单的高并发的回应服务器,主要是使用boost的库! 自己测试过可以达到5万个并发! 程序的下载地址:http://download.csdn.net/detail/guanyijun123/83 ...
- php redis下单,redis 队列简单实现高并发抢购/秒杀
redis 队列简单实现高并发抢购/秒杀 2019-03-21 14:34 阅读数 82 前提为每人限购1件 <>开抢前 把秒杀商品库存存进 Redis 队列中 $redis = new ...
- SpringBoot+Netty构建高并发稳健的部标JT808网关
应很多朋友的要求,今天分享一下如何使用SpringBoot和Netty构建高并发稳健的JT808网关,并且是兼容JT808-2011和JT808-2019的网关,此网关已经有多个客户在商用. JT80 ...
- 从简单到高并发服务器(一)
一个单线程的回声服务器 (Echo Server) 我们从一个简单的服务器开始说起. 它可以接受一个客户的连接,接收消息,然后把这个消息发送回去,关闭连接--完工.我们用 Linux 和 iOS / ...
- 彻夜怒肝!SpringBoot+Sentinel+Nacos高并发已撸完,快要裂开了!
都说程序员工资高.待遇好,改变无数程序员职业生涯的金三银四已来,你的小目标是 30K.40K,还是 16 薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Of ...
- 彻夜怒肝!SpringBoot+Sentinel+Nacos高并发已撸完
又到了"金三银四"面试求职高峰期,在金三银四时也参与过不少面试,2021都说工作不好找,也是对开发人员的要求变高.前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成 ...
- springboot使用多线程处理高并发接口
1.同步转异步,单条转批量 2.异步线程获取数据 关于Future同步.异步获取线程执行结果分析_红鲤鱼与彩虹的博客-CSDN博客 多任务并行.利用CompletionService计算任务执行结果的 ...
最新文章
- 百度:YOLOX和NanoDet都没我优秀!轻量型实时目标检测模型PP-PicoDet开源
- Java 注解深入理解
- Yii 中Criteria常用方法
- Kubernetes-[6]-StatefulSet
- 大二上学期数据结构课程设计
- sql语句有没有怎么优化的空间,这条语句在我这里执行是死机
- linux字体使用教程,Ubuntu 字体设置:使用Windows 字体
- 大数据采集与处理期末复习题
- ELK---日志收集系统
- 搭建FTP站点(Windows)
- linux cpu 时间,【Linux】CPU时间与处理器耗时
- 华为手机助手上架流程_2019年各大安卓应用商店上架经验,含流程,物料,方法(建议收藏)...
- 苹果笔记本用户使用Mac版本微博软件Maipo,如何添加账户与高级授权?
- 我的世界服务器背景音乐修改,我的世界修改音乐方法
- python和java区别大吗-为什么入门大数据选择Python而不是Java?
- Eloquent JavaScript 笔记 九: Regular Expressions(下)
- C#编译基础知识(三)
- ThinkPHP5整合原生Swoole实现NBA比赛图文直播以及聊天室功能
- Maven的爱恨情仇
- Altium Designer新版本PCB电路板添加logo
热门文章
- Linux 下 find(文件查找)命令的用法总结
- Axure 交互学习1 基础页面跳转、鼠标悬停样式
- java工程师面试常见问题_JAVA软件工程师面试遇到的十个问题,这些你都知道吗?...
- 朋友可以分成三大类 对付虚伪的人3招
- 两线怎么接三线插座图_三孔插头怎么接线?两根线怎么接三孔插座?
- VS2017编译文件遇到fatal error C1010: 在查找预编译头时遇到意外的文件结尾的解决办法
- m利用SIMILINK仿真模块实现多径信道的动态仿真模拟
- 基于Java的飞机雷电射击游戏的设计实现(Eclipse开发)
- Redis的maven依赖
- 用latex排版LNCS模板的论文