GraphQL基础知识与Spring for GraphQL使用教程
文章目录
- 1、数据类型
- 1.1、标量类型
- 1.2. 高级数据类型
- 基本操作
- 2、Spring for GraphQL实例
- 2.1、项目目录
- 2.2、数据库表
- 2.3、GraphQL的schema.graphql
- 2.4、Java代码
- 3、运行效果
- 3.1、添加用户
- 3.2、添加日志
- 3.3、查询所有日志
- 3.4、查询指定用户日志
- 3.5、数据订阅
- 4、总结
GraphQL是一种用于API开发的查询语言和运行时环境。它由Facebook开发并于2015年开源。GraphQL的主要目标是提供一种更高效、灵活和易于使用的方式来获取和操作数据。与传统的RESTful API相比,GraphQL允许客户端精确地指定需要的数据,并减少了不必要的网络传输和数据处理。
采用GraphQL,甚至不需要有任何的接口文档,在定义了Schema之后,服务端实现Schema,客户端可以查看Schema,然后构建出自己需要的查询请求来获得自己需要的数据。
1、数据类型
1.1、标量类型
- Int -32位整型数字;
- Float-双精度浮点型;
- String-UTF‐8 字符序列;
- Boolean-布尔型,true 或者 false;
- ID-标识类型,唯一标识符,注意此ID为字符,如果使用Mysql自增长id,也会自动转为对应的字符串;
1.2. 高级数据类型
- Object - 对象,用于描述层级或者树形数据结构。Object类型有一个类型名,以及类型包含的字段。
type Product {id: ID!info: String!price: Float
}
在此示例中,声明了Product对象类型,定义了3 个字段:
id:非空 ID 类型。
info:非空字符串类型。
price:浮点型。
- Interface-接口,用于描述多个类型的通用字;与 Object一样。
interface Product {id: ID!info: String!price: Float
}
- Union-联合类型,用于描述某个字段能够支持的所有返回类型以及具体请求真正的返回类型;
- Enum-枚举,用于表示可枚举数据结构的类型;
enum Status {YesNo
}
type Product {id: ID!info: String!price: Floatstat: Status
}
- Input-输入类型input本质上也是一个type类型,是作为Mutation接口的输入参数。换言之,想要定义一个修改接口(add,update,delete)的输入参数对象,就必须定义一个input输入类型。
input BookInput {isbn: ID!title: String!pages: IntauthorIdCardNo: String
}
- List -列表,任何用方括号 ([]) 括起来的类型都会成为 List 类型。
type Product {id: ID!info: Stringprice: Floatimages: [String]
}
- Non-Null-不能为 Null,类型后边加!表示非空类型。例如,String 是一个可为空的字符串,而String!是必需的字符串。
基本操作
- Query(只读操作)
#schema.graphqls定义操作
type Query {allBooks: [Book]!bookByIsbn(isbn: ID): Book
}# 接口查询语法
query{allBooks {titleauthor {nameage}}
}
- Mutation(可写操作)
#schema.graphqls定义操作
type Mutation {createBook(bookInput: BookInput): BookcreateAuthor(authorInput: AuthorInput): Author
}# mutation{
# createAuthor(authorInput:{
# idCardNo: "341234567891234567",
# name:"test1",
# age:38
# }
# ){
# name
# age
# }
# }
- Subscription(订阅操作)
type Subscription {greetings: String
}
2、Spring for GraphQL实例
GraphQL只是一种架构设计,具体的实现需要各个技术平台自己实现,目前主流的开发语言基本都已经有现成的类库可以使用,GraphQL Java就是Java平台的实现。
GraphQL Java虽然实现了GraphQL,但是只是一个执行GraphQL请求的引擎,用户在使用中需要创建自己的HTTP服务来提供服务。
Spring for GraphQL为基于GraphQL Java构建的Spring应用程序提供支持,来自 GraphQL Java 团队,它的目标是成为所有Spring、GraphQL应用程序的基础。
spring-graphql中定义的核心注解如下:
- @GraphQlController:申明该类是GraphQL应用中的控制器
- @QueryMapping:申明该类或方法使用GraphQL的query操作,等同于@SchemaMapping(typeName = “Query”),类似于@GetMapping
- @Argument:申明该参数是GraphQL应用的入参
- @MutationMapping:申明该类或方法使用GraphQL的mutation操作,等同于@SchemaMapping(typeName = “Mutation”)
- @SubscriptionMapping:申明该类或方法使用GraphQL的subscription操作,等同于@SchemaMapping(typeName = “Subscription”)
- @SchemaMapping:指定GraphQL操作类型的注解,类似@RequestMapping
2.1、项目目录
项目代码目录
2.2、数据库表
数据表结构,这里例子简单用了用户表和用户日志表
CREATE TABLE `admin_user` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4CREATE TABLE `admin_log` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`user_id` varchar(255) DEFAULT NULL,`visit_url` varchar(255) DEFAULT NULL,`create_date` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4
2.3、GraphQL的schema.graphql
GraphQL对应的schema.graphql定义文件,注意GraphQL默认只支持标量类型,DateTime自定义类型使用graphql-java-extended-scalars:https://github.com/graphql-java/graphql-java-extended-scalars提供
scalar DateTimetype AdminUser{id: ID!name: String!
}type AdminLog{id: ID!visitUrl: Stringuser: AdminUser!createDate: DateTime
}type Query {allLogs:[AdminLog]logByUser(userid: ID): [AdminLog]
}type Mutation {createUser(adminUserInput: AdminUserInput): AdminUsercreateLog(adminLogInput: AdminLogInput): AdminLog
}input AdminLogInput {userId: String!visitUrl: StringcreateDate: DateTime
}input AdminUserInput {name: String!
}type Subscription {greetings: String
}
2.4、Java代码
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.10</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.penngo.example</groupId><artifactId>graphql-app</artifactId><version>0.0.1-SNAPSHOT</version><name>graphql-app</name><description>graphql-app project for Spring Boot</description><properties><java.version>17</java.version><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-graphql</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><!-- https://mvnrepository.com/artifact/com.graphql-java/graphql-java-extended-scalars --><dependency><groupId>com.graphql-java</groupId><artifactId>graphql-java-extended-scalars</artifactId><version>19.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build><repositories><repository><id>alimaven</id><name>Maven Aliyun Mirror</name><url>https://maven.aliyun.com/repository/central</url></repository></repositories><pluginRepositories><pluginRepository><id>aliyun-plugin</id><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories></project>
对应的数据库实体类
package com.penngo.example.entity;import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.OffsetDateTime;@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdminLog {@Id@GeneratedValue(strategy= GenerationType.IDENTITY)private Long id;private String userId;private String visitUrl;private OffsetDateTime createDate;
}package com.penngo.example.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdminUser {@Id@GeneratedValue(strategy= GenerationType.IDENTITY)private Long id;private String name;
}
GraphQL对应的输入类
package com.penngo.example.entity;
import lombok.Data;
import java.time.OffsetDateTime;
@Data
public class AdminLogInput {private String userId;private String visitUrl;private OffsetDateTime createDate;}package com.penngo.example.entity;
import lombok.Data;
@Data
public class AdminUserInput {private String name;
}
对应的数据库操作类
package com.penngo.example.repository;
import com.penngo.example.entity.AdminUser;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AdminUserRepository extends JpaRepository<AdminUser,Long> {AdminUser findById(String userId);
}package com.penngo.example.repository;
import com.penngo.example.entity.AdminLog;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;public interface AdminLogRepository extends JpaRepository<AdminLog,Long> {List<AdminLog> findAllByUserId(String userId);
}
对外服务接口类
package com.penngo.example.controller;
import com.penngo.example.entity.*;
import com.penngo.example.repository.AdminLogRepository;
import com.penngo.example.repository.AdminUserRepository;
import org.springframework.beans.BeanUtils;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.graphql.data.method.annotation.SchemaMapping;
import org.springframework.stereotype.Controller;
import java.util.List;@Controller
public class AdminLogController {private final AdminUserRepository adminUserRepository;private final AdminLogRepository adminLogRepository;public AdminLogController(AdminUserRepository adminUserRepository, AdminLogRepository adminLogRepository){this.adminLogRepository = adminLogRepository;this.adminUserRepository = adminUserRepository;}@QueryMappingpublic List<AdminLog> allLogs(){List<AdminLog> logsList = adminLogRepository.findAll();return logsList;}@QueryMappingpublic List<AdminLog> logByUser(@Argument String userid){return adminLogRepository.findAllByUserId(userid);}@SchemaMapping(typeName = "AdminLog" ,field = "user")public AdminUser getAuthor(AdminLog adminLog){AdminUser adminUser = adminUserRepository.findById(adminLog.getUserId());return adminUser;}@MutationMappingpublic AdminLog createLog(@Argument AdminLogInput adminLogInput){AdminLog log = new AdminLog();BeanUtils.copyProperties(adminLogInput,log);return adminLogRepository.save(log);}
}package com.penngo.example.controller;
import com.penngo.example.entity.*;
import com.penngo.example.repository.AdminLogRepository;
import com.penngo.example.repository.AdminUserRepository;
import org.springframework.beans.BeanUtils;
import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;
import java.util.List;@Controller
public class AdminUserController {private final AdminUserRepository adminUserRepository;private final AdminLogRepository adminLogRepository;public AdminUserController(AdminUserRepository adminUserRepository, AdminLogRepository adminLogRepository){this.adminLogRepository = adminLogRepository;this.adminUserRepository = adminUserRepository;}@QueryMappingpublic List<AdminLog> userById(@Argument String userid){return adminLogRepository.findAllByUserId(userid);}@MutationMappingpublic AdminUser createUser(@Argument AdminUserInput adminUserInput){AdminUser user = new AdminUser();BeanUtils.copyProperties(adminUserInput,user);return adminUserRepository.save(user);}
}package com.penngo.example.controller;
import com.penngo.example.entity.AdminLog;
import com.penngo.example.repository.AdminLogRepository;
import com.penngo.example.repository.AdminUserRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.graphql.data.method.annotation.SubscriptionMapping;
import org.springframework.stereotype.Controller;
import reactor.core.publisher.Flux;
import java.time.Duration;@Controller
public class GreetingController {private final AdminUserRepository adminUserRepository;private final AdminLogRepository adminLogRepository;public GreetingController(AdminUserRepository adminUserRepository, AdminLogRepository adminLogRepository){this.adminLogRepository = adminLogRepository;this.adminUserRepository = adminUserRepository;}// 数据订阅,取最新的5条数据,每5秒发送一条给客户端,一共5次@SubscriptionMappingpublic Flux<AdminLog> greetings(){System.out.println("greetings====================");Page<AdminLog> logsList = adminLogRepository.findAll(PageRequest.of(0,5).withSort(Sort.Direction.DESC, "id"));return Flux.fromStream(logsList.stream()).delayElements(Duration.ofSeconds(5)).take(5);}
}
自定义日期数据类型DateTime
package com.penngo.example.component;
import graphql.scalars.ExtendedScalars;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.graphql.execution.RuntimeWiringConfigurer;@Configuration
public class CustomScalarType {@Beanpublic RuntimeWiringConfigurer runtimeWiringConfigurer() {return wiringBuilder -> wiringBuilder.scalar(ExtendedScalars.DateTime);}
}
服务启动类
package com.penngo.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class GraphqlAppApplication {public static void main(String[] args) {SpringApplication.run(GraphqlAppApplication.class, args);}
}
3、运行效果
3.1、添加用户
添加用户
mutation{ createUser(adminUserInput: { name: "test1", } ) { id name } }
3.2、添加日志
添加日志
mutation{createLog(adminLogInput: {userId: "1",visitUrl: "http://localhost:8080/method1"createDate: "2023-09-17T19:39:57+08:00"} ){idvisitUrlcreateDate} }
3.3、查询所有日志
查询所有日志
query{allLogs{idvisitUrluser{idname}createDate}
}
3.4、查询指定用户日志
查询指定用户日志
query{logByUser(userid:"1") {idvisitUrluser{idname}createDate}
}
3.5、数据订阅
数据订阅,订阅需要有websocket的支持。
subscription {greetings
}
4、总结
使用Spring for GraphQL试用了GraphQL后,它实现按需取数据的功能。服务器开发人员和前端开发人员可以通过schema.graphqls定义文件,协定好接口和数据,省掉写接口文档的工作。
缺点可能就是需要一点学习成本,虽然提供数据嵌套可以通过一个请求获取所有数据,但是嵌套复杂可能引起性能问题。
Spring for GraphQL官方参考:https://docs.spring.io/spring-graphql/docs/current/reference/html/#overview
相关文章:
GraphQL基础知识与Spring for GraphQL使用教程
文章目录 1、数据类型1.1、标量类型1.2. 高级数据类型 基本操作2、Spring for GraphQL实例2.1、项目目录2.2、数据库表2.3、GraphQL的schema.graphql2.4、Java代码 3、运行效果3.1、添加用户3.2、添加日志3.3、查询所有日志3.4、查询指定用户日志3.5、数据订阅 4、总结 GraphQL…...
【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析
【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…...
威胁的数量、复杂程度和扩散程度不断上升
Integrity360 宣布了针对所面临的网络安全威胁、数量以及事件响应挑战的独立研究结果。 数据盗窃、网络钓鱼、勒索软件和 APT 是最令人担忧的问题 这项调查于 2023 年 8 月 9 日至 14 日期间对 205 名 IT 安全决策者进行了调查,强调了他们的主要网络安全威胁和担忧…...
NSSCTF web 刷题记录2
文章目录 前言题目[广东强网杯 2021 团队组]love_Pokemon[NCTF 2018]Easy_Audit[安洵杯 2019]easy_web[NCTF 2018]全球最大交友网站prize_p2[羊城杯 2020]easyser[FBCTF 2019]rceservice方法一方法二 前言 今天是2023年9月13号,刷题记录2正式开始。时间来到九月十七…...
Linux驱动之INPUT子系统框架
目录 一、input 子系统简介 二、input 驱动编写流程 1、注册 input_dev 2、上报输入事件 三、input_event 结构体 按键、鼠标、键盘、触摸屏等都属于输入(input)设备, Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设…...
Long类型雪花算法ID返回前端后三位精度缺失问题解决
目录 一、问题描述二、问题复现1.Maven依赖2.application.yml 配置3.DemoController.java4.snowflakePage.html 页面5.DemoControllerAdvice.java 监听6.问题复现 三、原因分析四、问题解决方案一方案二 一、问题描述 Java 后端使用雪花算法生成 Long 类型的主键 ID࿰…...
6.8-SpringIoC之循环依赖底层源码解析
解决靠,三级缓存 创建Map,存不完整的Bean 存在问题:属性存在但没有值...
Springboot 实践(18)Nacos配置中心参数自动刷新测试
前文讲解了Nacos 2.2.3配置中心的服务端的下载安装,和springboot整合nacos的客户端。Springboot整合nacos关键在于使用的jar版本要匹配,文中使用版本如下: ☆ springboot版本: 2.1.5.RELEASE ☆ spring cloud版本 Greenwich.RELEASE ☆ sp…...
uniapp引入小程序原生插件
怎么在uniapp中使用微信小程序原生插件,以收钱吧支付插件为例 1、在manifest.json里的mp-weixin中增加插件配置 "mp-weixin" : {"appid" : "你的小程序appid","setting" : {"urlCheck" : false},"usingCom…...
自己记录微信小程序开发遇到的问题
在HBuilder X中【运行】--【小程序】--【运行设置】,小程序运行配置,将【微信开发者工具】的安装路径配置进去,首次运行会自动让你填写; 1、hbuildx运行到微信开发者工具报错 Error: Unbalanced delimiter found in string 错误…...
【leetcode 力扣刷题】栈—波兰式///逆波兰式相关知识和题目
波兰式、逆波兰式相关知识和题目 波兰式、逆波兰式介绍常规表达式转换成逆波兰式编程让常规表达式转换成逆波兰式逆波兰式运算过程常规表达式转换成波兰式编程让常规表达式转换成波兰式波兰式运算过程 150. 逆波兰式表达式求值224. 基本计算器227. 基本计算器Ⅱ282. 给表达式添…...
Web 第一步:HTTP 协议(基础)
这里是JavaWeb的开头部分!那么先解释一下吧: Web:全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 JavaWeb:是用Java技术来解决相关 Web 互联网领域的技术栈。 …...
【Vue】快速入门案例与工作流程的讲解
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue快速入门》。…...
LuatOS-SOC接口文档(air780E)--camera - codec - 多媒体-编解码
常量 常量 类型 解释 codec.MP3 number MP3格式 codec.WAV number WAV格式 codec.AMR number AMR-NB格式,一般意义上的AMR codec.AMR_WB number AMR-WB格式 codec.create(type, isDecoder) 创建编解码用的codec 参数 传入值类型 解释 int 多媒…...
《动手学深度学习 Pytorch版》 6.6 卷积神经网络
import torch from torch import nn from d2l import torch as d2l6.6.1 LeNet LetNet-5 由两个部分组成: - 卷积编码器:由两个卷积核组成。 - 全连接层稠密块:由三个全连接层组成。模型结构如下流程图(每个卷积块由一个卷积层、…...
【微信小程序】项目初始化
| var() CSS 函数可以插入一个自定义属性(有时也被称为“CSS 变量”)的值,用来代替非自定义 属性中值的任何部分。 1.初始化样式与颜色 view,text{box-sizing: border-box; } page{--themColor:#ad905c;--globalColor:#18191b;--focusColor…...
C#,《小白学程序》第二十六课:大数乘法(BigInteger Multiply)的Toom-Cook 3算法及源程序
凑数的,仅供参考。 1 文本格式 /// <summary> /// 《小白学程序》第二十六课:大数(BigInteger)的Toom-Cook 3乘法 /// Toom-Cook 3-Way Multiplication /// </summary> /// <param name"a"></par…...
destoon自定义一个archiver内容文档
在archiver目录建立以下代码: <?php define(DT_REWRITE, true); require ../common.inc.php; $EXT[archiver_enable] or dheader(DT_PATH); //$DT_BOT or dheader(DT_PATH); $N $M $T array(); $mid or $mid 5; $vmid $list 0; foreach($MODULE as $k>…...
5-1 Dataset和DataLoader
Pytorch通常使用Dataset和DataLoader这两个工具类来构建数据管道。 Dataset定义了数据集的内容,它相当于一个类似列表的数据结构,具有确定的长度,能够用索引获取数据集中的元素。 而DataLoader定义了按batch加载数据集的方法,它是…...
IDEA创建完Maven工程后,右下角一直显示正在下载Maven插件
原因: 这是由于新建的Maven工程,IDEA会用它内置的默认的Maven版本,使用国外的网站下载Maven所需的插件,速度很慢 。 解决方式: 每次创建 Project 后都需要设置 Maven 家目录位置(就是我们自己下载的Mav…...
最新清理删除Mac电脑内存空间方法教程
Mac电脑使用的时间越久,系统的运行就会变的越卡顿,这是Mac os会出现的正常现象,卡顿的原因主要是系统缓存文件占用了较多的磁盘空间,或者Mac的内存空间已满。如果你的Mac运行速度变慢,很有可能是因为磁盘内存被过度占用…...
【调试经验】MySQL - fatal error: mysql/mysql.h: 没有那个文件或目录
机器环境: Ubuntu 22.04.3 LTS 报错问题 在编译一个项目时出现了一段SQL报错: CGImysql/sql_connection_pool.cpp:1:10: fatal error: mysql/mysql.h: 没有那个文件或目录 1 | #include <mysql/mysql.h> | ^~~~~~~~~~~~~~~ c…...
腾讯mini项目-【指标监控服务重构】2023-08-12
今日已办 Watermill Handler 将 4 个阶段的逻辑处理定义为 Handler 测试发现,添加的 handler 会被覆盖掉,故考虑添加为 middleware 且 4 个阶段的处理逻辑针对不同 topic 是相同的。 参考https://watermill.io/docs/messages-router/实现不同topic&am…...
kubeadm部署k8sv1.24使用cri-docker做为CRI
目的 测试使用cri-docker做为containerd和docker的中间层垫片。 规划 IP系统主机名10.0.6.5ubuntu 22.04.3 jammymaster01.kktb.org10.0.6.6ubuntu 22.04.3 jammymaster02.kktb.org10.0.6.7ubuntu 22.04.3 jammymaster03.kktb.org 配置 步骤: 系统优化 禁用sw…...
在c#中使用CancellationToken取消任务
目录 🚀介绍: 🐤简单举例 🚀IsCancellationRequested 🚀ThrowIfCancellationRequested 🐤在控制器中使用 🚀通过异步方法的参数使用cancellationToken 🚀api结合ThrowIfCancel…...
【项目经验】:elementui多选表格默认选中
一.需求 在页面刚打开就默认选中指定项。 二.方法Table Methods toggleRowSelection用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)row, selected 详细…...
外星人入侵游戏-(创新版)
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
HTML 学习笔记(基础)
它是超文本标记语言,由一大堆约定俗成的标签组成,而其标签里一般又有一些属性值可以设置。 W3C标准:网页主要三大部分 结构:HTML表现:CSS行为:JavaScript <!DOCTYPE html> <html lang"zh-…...
最小二乘法
Least Square Method 1、相关的矩阵公式2、线性回归3、最小二乘法3.1、损失函数(Loss Function)3.2、多维空间的损失函数3.3、解析法求解3.4、梯度下降法求解 1、相关的矩阵公式 P r e c o n d i t i o n : ξ ∈ R n , A ∈ R n ∗ n i : σ A ξ σ ξ…...
使用stelnet进行安全的远程管理
1. telnet有哪些不足? 2.ssh如何保证数据传输安全? 需求:远程telnet管理设备 用户定义需要在AAA模式下: 开启远程登录的服务:定义vty接口 然后从R2登录:是可以登录的 同理R3登录: 在R1也可以查…...
郑州网站建设时一定需要注意的六点/网站出售
涉及到链表的面试题: 如果有链表编号的参数,先明确链表的编号是从0开始还是从1开始如果输入有编号、个数这样的参数时,使用unsigned int ,这样最多只需要判断其不等于0即可两个指针可以做很多事,例如先把他们间隔固定,最后一个到结尾时,第一个指针就指向倒数第n个结点了…...
国外购物网站系统/网站制作免费
https://www.zhihu.com/question/62277180/answer/196715976 从最高层看,G1的collector一侧其实就是两个大部分: * 全局并发标记(global concurrent marking) * 拷贝存活对象(evacuation) 而这两部分可以相…...
腾讯云 wordpress博客/山东网站seo
1)默认自带python2环境,自行安装pip yum -y install epel-release yum install python-pip 2)进行pip的更新,否则很多安装会报错 pip install --upgrade pip pip install --upgrade setuptools 3)安装开发库 yum install python-devel yum install libevent-devel yu…...
用织梦做网站有钱途吗/百度信息流广告推广
leetcode分数预测:https://lcpredictor.herokuapp.com/ https://zerotrac.github.io/leetcode_problem_rating/ 可以查看leetcode各道题目的分数,基于大数据统计 https://codeforces.com/ https://atcoder.jp/home oi数据库 https://bytew.net/OIer/ind…...
网站建设是设计师吗/武汉网站排名提升
git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是…...
flash做网站的论文/搜索热度查询
TMaMba 2014/01/13 17:010x00 前言在渗透测试和安全扫描工作中,发现越来越多站点部署了应用防护系统或异常流量监控系统,其中包括:WEB应用防火墙(软件WAF、硬件WAF、云WAF)、入侵检测系统、入侵防御系统、访问监控系统…...