当前位置: 首页 > news >正文

MyBatis的使用、Spring AOP、Spring事务

一、MyBatis 的使用

1、环境配置

1.1、建库建表

-- 创建数据库
drop database if exists mycnblog;
create database mycnblog DEFAULT CHARACTER SET utf8mb4;-- 使⽤数据数据
use mycnblog;-- 创建表[⽤户表]
drop table if exists userinfo;
create table userinfo(id int primary key auto_increment,username varchar(100) not null,password varchar(32) not null,photo varchar(500) default '',createtime datetime default now(),updatetime datetime default now(),`state` int default 1
) default charset 'utf8mb4';--添加一个用户信息
INSERT INTO `mycnblog`.`userinfo` (`id`, `username`, `password`, `photo`,
`createtime`, `updatetime`, `state`) VALUES
(1, 'admin', 'admin', '', '2021-12-06 17:10:48', '2021-12-06 17:10:48', 1)
;

1.2、安装插件

 1.3、插件的使用

1.3.1、已存在的项目中使用

右键点击出现 Generate

在 SQL中选择相应的依赖:

 创建好后会显示:

1.3.2、新项目中使用

创建 Spring项目时要注意添加的依赖

 创建好后会显示:

 1.4、数据库的配置

PS:注意:如果使⽤ mysql-connector-java 是 5.x 之前的使⽤的是“ com.mysql.jdbc.Driver ” ,如果是⼤于 5.x 使⽤的是“ com.mysql.cj.jdbc.Driver ” 。

1.5、mybatis xml的配置

# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件
mybatis:mapper-locations: classpath:mapper/**Mapper.xml

1.6、写 Mapper 文件

PS: UserInfoMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.spring_mybatis_demo.model.UserInfo"></mapper>

1.6.1、接口

1.6.2、实现

1.7、添加 service

1.8、添加  controller

2、使用

2.1、传参

eg 1:

eg 2:

2.2、参数的重命名

 2.3、增

(1)

 (2)

 PS:使用对象传参,在 xml 文件中可以注解用属性名字接收参数。

(3)

 PS:若对参数进行了重命名,在 xml 中接收参数必须要用重命名后的名称,对象使用:参数名(重命名后的).属性名

2.4、改

2.5、删

2.6、 参数占位符 # 和 $:

#{ }:预编译处理(MyBatis在处理 #{ }时,会将SQL中的 #{ } 替换为 ?,使⽤ PreparedStatement的 set()来赋值。)。可以解决程序中不安全(越权处理)的问题

${ }:字符直接替换(MyBatis在处理 ${ }时,会将SQL中的 ${ }替换为 变量的值。)。可能会带来越权查询和操作数据等问题。

PS:区别:

(1) #{}

预编译处理,MyBatis在处理 #{ }时,会将SQL中的 #{ } 替换为 ?,是安全的占位符,可以解决程序中的不安全的问题,如越权处理。

(2)${}

字符的直接替换,MyBatis在处理 #{ }时,会将SQL中的 ${ } 替换为变量的值,会带来越权查询和操作数据等问题。使用时,字符串的参数会需加上引号。会存在SQL注入问题。

一般在编写SQL语句时,优先选择#来保证SQL查询的安全性。

在排序是一般会使用$。

在模糊查询时会使用#。

2.6.1、#{ }

表示安全的占位符,可以放置SQL注入攻击。在执行SQL时,MyBatis 会将传入的参数值以安全的方式绑定到编译语句中,自动进行字符串转义等处理。例如:

 这里的 #{} 就是使用了 # 占位符,MyBatis 会自动将参数 username 和 password 转换成 PreparedStatement 中的变量,并进行数据类型转换和字符串转义等处理,保证 SQL 查询的安全性。

2.6.2、${ }

$表示简单的字符串替换,不会进行 SQL 注入攻击防范。在执行 SQL 时,MyBatis 会根据传入的值直接进行字符串替换,不做任何处理。例如:

 这里的 ${} 就是使用了 $ 占位符,MyBatis 会将传入的参数 username 和 password 直接替换为相应的字符串值,并拼接到 SQL 语句中,这种方式可能会带来安全风险,因此应该尽量避免使用。

2.6.3、SQL注入

(1)概念:

SQL注入是指攻击者通过在Web应用程序中注入恶意的SQL代码,来对数据库进行非法操作的一种安全漏洞。这种攻击方式通常利用了没有经过充分验证和过滤的输入参数,将恶意脚本注入到执行SQL语句的应用程序中,从而导致数据库执行恶意代码而受到攻击。

例如,攻击者可以通过在输入框中注入恶意的SQL代码,并让应用程序把该数据提交给数据库。如果应用程序没有进行严格的校验和过滤,那么数据库就可能执行这些恶意代码,并执行带有恶意目的的SQL语句,比如删除、修改、插入、查询等操作。

(2)$会存在SQL注入问题

使用$时:

 使用#时:

(3)注意:

在编写 MyBatis SQL 语句时,优先使用 # 占位符来保证 SQL 查询的安全性,尽量避免使用 $ 占位符。同时,也需要注意 SQL 注入攻击等安全问题,并采取相应的防范措施。

使⽤ ${sort} 可以实现排序查询,⽽使⽤ #{sort} 就不能实现排序查询了,因为当使⽤ #{sort} 查询时, 如果传递的值为 String 则会加单引号,就会导致 sql 错误。
进行模糊查询时,只能使用#,不能使用$。(虽然$也可以查询出结果,但 $ 存在SQL注入问题,所以不能使用)。

 PS:模糊查询需要使用内置函数 concat

2.7、多表查询

2.7.1、相关配置

PS:当Java字段名和属性名不同时可以使用 resultMap :

 2.7.2、多表查询

 2.8、动态SQL

 2.8.1、<if>标签:出现必填字段和非必填字段时

填了必填时
没填必填字段时

2.8.2、<trim>标签:一般和 if 标签一起使用(对多个字段采取动态生成)

2.8.3、<where>标签:生成where 关键字;去掉多余的 and  (传入的对象根据属性做where条件查询,用户对象中属性不为null的都为查询条件)

生成where关键字前
生成where关键字后

2.8.4、<set>标签:生成set关键字;去除掉多余的逗号  (根据传入的用户对象属性来更新用户数据,可用set标签来指定动态内容)

 

 2.8.4、<foreach>标签:循环(对集合进行遍历)

二、Spring  AOP

 1、基础

1.1、认知

1.1.1、

OOP:面向对象编程

AOP:面向切面编程。是一种思想,是对某一类事情的处理。Spring AOP 是AOP的一个实现。

IOC:控制反转

1.1.2、用处

(1)使用AOP可以扩充多个对象的某种能力(因此AOP可以说是OOP的补充和完善)

(2)对于功能统一且使用地方较多的功能,可以考虑AOP来统一处理。例如:

统一的用户登录判断;统一的日志记录(每个方法都记录操作用户、时间);统一方法执行时间统计(记录每个方法的执行时间);统一的返回格式设置;统一的异常处理(如后端代码的空指针异常、数据越界异常、内存溢出等);事务的开启和提交等。

1.2、AOP的组成

切面:切点+通知。

切点:描述某些方法会有一个规则,这个规则就是切点,根据切点可以获取到连接点。

连接点:对一些具体的方法进行统一事情的处理,这些具体的方法就是规则,根据规则可以指定哪些方法。

通知:具体要做的事。

通知分为前置通知(使用@Before,通知方法会在目标方法调用前执行)、后置通知(使用@After,会在目标方法返回或抛出异常后调用)、返回通知(使用@AfterReturning,会在目标方法返回后调用)、异常通知(使用@AfterThrowing,在目标方法抛出异常后调用)和环绕通知(使用@Around,通知包裹了被通知的方法,在被通知的方法通知之前与调用之后执行自定义)等几种类型。

eg:某班同学要考试,该班有50人:

其中,(某班同学要考试)是切面,(某班同学)是切点,(要考试)是通知,这(50人)是连接点。

eg:多个页面访问用户登录:

 

2、 Spring  AOP 的实现原理

2.1、

Spring  AOP 是构建在动态代理基础上,因此 Spring  对 AOP的支持局限于方法级别的拦截。

Spring  AOP支持 JDK Proxy 和CGLIB 方式实现动态代理。默认情况下,实现了接口的类用AOP会基于JDK生成代理类,没有实现接口的类会基于CGLIB 生成代理类。

2.2、JDK 和 CGLIB 实现的区别:

JDK 实现,要求被代理类必须实现接⼝,之后是通过 InvocationHandler 及 Proxy,在运⾏
时动态的在内存中⽣成了代理类对象,该代理对象是通过实现同样的接⼝实现(类似静态代
理接⼝实现的⽅式),只是该代理类是在运⾏期时,动态的织⼊统⼀的业务逻辑字节码来完
成。

CGLIB 实现,被代理类可以不实现接⼝,是通过继承被代理类,在运⾏时动态的⽣成代理类
对象。

 

3、Spring   AOP 的代码实现

 3.1、添加 Spring AOP框架支持

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

3.2、定义切面和切点

3.3、定义通知

PS: 

AfterReturning 与After 同时存在时会先执行AfterReturning。

AfterThrowing 与After 同时存在时会先执行AfterThrowing。

 

 PS:

 4、拦截器

基于AOP实现的。要对一部分方法进行拦截,另一部分方法不进行拦截。

4.1、实现:

4.1.1、创建自定义拦截器

@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//判断用户是否登录log.info("执行拦截方法...");HttpSession session = request.getSession();if (session!=null && session.getAttribute("userinfo")!=null){return true;}response.setStatus(401);return false;}
}

4.1.2、将自定义拦截器加入到系统配置中

@Configuration
public class AppConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**")//拦截哪些路径.excludePathPatterns("/reg")//排除哪些路径.excludePathPatterns("/login");}
}

PS:以上拦截规则可以拦截该项目中的所有URL,包括静态文件(图片文件、JS、CSS等)

PS:排除所有静态资源

// 拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") // 拦截所有接⼝.excludePathPatterns("/**/*.js").excludePathPatterns("/**/*.css").excludePathPatterns("/**/*.jpg").excludePathPatterns("/login.html").excludePathPatterns("/**/login"); // 排除接⼝}

4.2、实现原理

 5、统一处理功能

5.1、统一异常处理

 

 

 

5.2、统一数据返回

5.2.1、统一数据格式返回

接口内容:返回所有的用户

PS:会存在一个情况,返回的结果为 null 。原因可能为:系统发生了异常;没有用户

5.2.2、统一数据返回

 

 

 三、Spring事务

1、概念

1.1、定义

把一组操作封装成一个执行单元(即封装到一起),要么全部成功,要么全部失败。

1.2、Spring 事务的实现

(1)编程式:通过写代码的方式。

(2)声明式:通过注释的方式。

2、实现

2.1、编程式

步骤:开启事务;提交事务;回滚事务

@RestController
//@Controller
@ResponseBody
public class TransactionController {@Resourceprivate UserInfoService userInfoService;//JDBC事务管理器@Resourceprivate DataSourceTransactionManager transactionManager;//spring内置的对象    数据库事务管理器//定义事务属性@Resourceprivate TransactionDefinition transactionDefinition;@RequestMapping("/addUser")public Object add(){TransactionStatus transactionStatus=transactionManager.getTransaction(transactionDefinition);//开启事务Integer result=userInfoService.insert("transaction","transaction");//插入数据System.out.println("添加数据条数:"+result);transactionManager.commit(transactionStatus);//提交事务transactionManager.rollback(transactionStatus);//回滚事务return  result;}
}

2.2、声明式

(1) @Transactional

只需要在协议的方法上添加 @Transactional 注解就可以了,无需手动开启和提交事务。进入方法时自动开启事务,方法执行完后会自动提交事务。如果程序没有发生异常,则事务提交;若方式异常,则事务回滚。

PS:可以捕获所有的异常

@Transactional(rollbackFor = Exception.class)

 (2)作用范围

@Transactional 可以用来修饰方法和类:

修饰方法时:只能应用到 public 方法上,否则不生效。

修饰类时:表明该注解对该类中所有的 public 方法都生效。

3、事务隔离级别

3.1、事务的四大特性(ACID)

(1)原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成。事务在执行过程中若发生错误,就会被回滚到事务开始前的状态,就像这个事务出来没有执行过一样。

(2)一致性(Consistency):在事务开始前和结束后,数据库的完整性没有被破坏,这表示写入的资料必须完全符合所有的预设规则。

(3)持久性(Isolation):事务处理结束后,对数据的修改是永久性的,及时系统故障也不会丢失。

(4)隔离性(Durability):数据库允许多个并发事务同时对其数据进行读写和修改的能力,可以防止多个事务并发执行时由于交叉执行导致的数据的不一致。事务隔离可以分为读未提交、读提交、可重复读和串行化四个级别。

PS:在这四种特性中,只有隔离性(隔离级别)是可以设置的。

PS:事务隔离级别解决的是多个事务同时调用数据库的问题。

3.2、MySQL中的四种事务隔离级别

(1)读未提交

该隔离级别的事务可以看到其他事务中未提交的数据。该隔离级别因为可以读取到其他事务中未提交的数据,⽽未提交的数据可能会发⽣回 滚,因此我们把该级别读取到的数据称之为脏数据,把这个问题称之为脏读(也就是一个事务读取到了另一个事务修改后的数据,但后一个事务又进行了回滚,从而导致第一个事务读取到的数据是错的。)

(2)读已提交 

该隔离级别的事务可以读到其他事务中已提交的数据。不会有脏读的问题。但由于在事务的执⾏中可以读取到其他事务提交的结果,所以在不同时间的相同 SQL 查询中,可能会得到不同的结果,这种现象叫做不可重复读(一个事务在两次查询得到的结果是不同的,是因为两次查询中有另一个事务把数据修改了)

(3)可重复读

是 MySQL 中的默认事务隔离级别。它能确保同⼀事务多次查询的结果⼀致。但也会有新的问题,⽐如此级别的事务正在执⾏时,另⼀个事务成功的插⼊了某条数据,但因为它每次查询的结果都是⼀样的,所以会导致查询不到这条数据,⾃⼰重复插⼊时⼜失败 (因为唯⼀约束的原因)。明明在事务中查询不到这条信息,但⾃⼰就是插⼊不进去,这就叫幻读(一个事务两次查询到的结果集是不同的,是因为在两次查询中另一个事务又新增了一部分数据)

(4)串行化

事务隔离的最高级别。它会强制事务排序,使之不会发⽣冲突,从⽽解决 了脏读、不可重复读和幻读问题,但执行效率较低。

3.3、Spring 中的五种事务隔离级别

(1)Isolation.DEFAULT:以连接的数据库的事务隔离级别为主。

(2)Isolation.READ_UNCOMMITTED:读未提交,可以读取到未提交的事务,存在脏读。

(3)Isolation.READ_COMMITTED:读已提交,只能读取到已经提交的事务,解决了脏读,存在不可重复读。

(4)Isolation.REPEATABLE_READ:可重复读,解决了不可重复读,但存在幻读(MySQL默认级别)。

(5)Isolation.SERIALIZABLE:串⾏化,可以解决所有并发问题,但性能太低。

PS:Spring 中事务隔离级别只需要设置 @Transactional ⾥的 isolation 属性即可:如:

4、Spring 事务传播机制

4.1、定义

Spring 事务传播机制定义了多个包含了事务的⽅法,相互调⽤时,事务是如何在这些⽅法间进⾏传递的。

4.2、Spring 事务传播机制

(1)Propagation.REQUIRED:默认,若当前存在事务则加入该事务,若不存在则新建一个。

(2)Propagation.SUPPORTS:若存在则加入,若不存在则以非事务方式继续运行。

(3)Propagation.MANDATORY:若存在则加入,若不存在则抛出异常。

(4)Propagation.REQUIRES_NEW:新建一个新事务,若存在当前事务则挂起它

(5)Propagation.NOT_SUPPORTED:以非事务方式运行,若当前存在事务则把当前事务挂起。

(6)Propagation.NEVER:以非事务方式运行,若当前存在事务则抛出异常。

(7)Propagation.NESTED:若当前存在事务则新建一个事务来作为当前事务的嵌套事务运行,若当前没事务则该取值等价于 PROPAGATION_REQUIRED。

 

相关文章:

MyBatis的使用、Spring AOP、Spring事务

一、MyBatis 的使用 1、环境配置 1.1、建库建表 -- 创建数据库 drop database if exists mycnblog; create database mycnblog DEFAULT CHARACTER SET utf8mb4;-- 使⽤数据数据 use mycnblog;-- 创建表[⽤户表] drop table if exists userinfo; create table userinfo(id in…...

Apache Doris 冷热分层技术如何实现存储成本降低 70%?

在数据分析的实际场景中&#xff0c;冷热数据往往面临着不同的查询频次及响应速度要求。例如在电商订单场景中&#xff0c;用户经常访问近 6 个月的订单&#xff0c;时间较久远的订单访问次数非常少&#xff1b;在行为分析场景中&#xff0c;需支持近期流量数据的高频查询且时效…...

MySQL 两个备机同时挂掉故障分析

来源&#xff1a; 接报线上出现两个5.7.38的备库同时crash&#xff0c;crash堆栈相同&#xff0c;内容如下&#xff1a; stack_bottom 7fd7700b0d30 thread_stack 0x40000 /home/service/app/mysql33066/bin/mysqld(my_print_stacktrace0x2c)[0xf1062c] /home/service/app/m…...

序列化与反序列化深入理解

序列化与反序列化深入理解 1 介绍1.1 概述1.2 序列化实现的需求 2 常用序列化实现函数序列化语言内置开源序列化实现 3 各序列化实现比较4 各序列化实现概述XMLJSONProtobufJava 内置TLVVLE&#xff08;Variable Length Encoding&#xff09; 5 flex & bison5.1 介绍应用解…...

hudi系列-小文件优化

hudi使用mvcc来实现数据的读写一致性和并发控制,基于timeline实现对事务和表服务的管理,会产生大量比较小的数据文件和元数据文件。大量小文件会对存储和查询性能产生不利影响,包括增加文件系统的开销、文件管理的复杂性以及查询性能的下降。对于namenode而言,当整个集群中…...

mysql 是否包含 返回索引 截取字符串

是否包含返回索引 原文链接&#xff1a;https://www.cnblogs.com/shoshana-kong/p/16474175.html 方法1&#xff1a;使用通配符%。 通配符也就是模糊匹配&#xff0c;可以分为前导模糊查询、后导模糊查询和全导匹配查询&#xff0c;适用于查询某个字符串中是否包含另一个模糊…...

【LeetCode】74. 搜索二维矩阵

74. 搜索二维矩阵&#xff08;中等&#xff09; 方法一&#xff1a;二分查找 思路 总体思路 由于二维矩阵固定列的「从上到下」或者固定行的「从左到右」都是升序的 因此我们可以使用两次二分来定位到目标位置。 第一次二分&#xff1a; 从第 0 列中的「所有行」开始找&#x…...

Nginx rewrite

一.location 大致可以分为三类&#xff1a; 精准匹配&#xff1a;location / {…}一般匹配&#xff1a;location / {…}正则匹配&#xff1a;location ~ / {…} 1.location 常用的匹配规则&#xff1a; &#xff1a;进行普通字符精确匹配&#xff0c;也就是完全匹配。^~ &am…...

【数据分享】1929-2022年全球站点的逐日降水量(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2022年全…...

【论文阅读】(2013)Exact algorithms for the bin packing problem with fragile objects

文章目录 一、摘要二、介绍三、之前在这个问题上的工作四、易碎物品背包问题的求解4.1 ILP模型4.2 基于KP01的方法4.3 动态规划 五、二元分支方案5.1 分支方案1&#xff08;基于决策变量的分支&#xff09;5.2 分支方案2&#xff08;基于yj和xji的分支&#xff09;5.3 将L2嵌入…...

K8S YAML 部署XXLJOB 集群

apiVersion: apps/v1 kind: Deployment metadata: labels: app: xxl-job-admin name: xxl-job-admin namespace: ccetest #根据情况修改namespace spec: replicas: 3 #根据情况修改副本数 selector: matchLabels: app: xxl-job-admin strat…...

Linux防火墙学习笔记3

iptables链的概念&#xff1a; 当客户端访问服务器端的Web服务的时候&#xff0c;客户端发送请求报文到网卡&#xff0c;而TCP/IP协议栈是属于内核的一部分。客户端的请求报文会通过内核的TCP协议传输到用户空间的Web服务&#xff0c;而客户端报文的目的地址为Web服务器所监听的…...

数仓用户行为数据分析

分层优点&#xff1a;复杂的东西可以简单化、解耦&#xff08;屏蔽层作用&#xff09;、提高复用、方便管理 SA 贴源 数据组织结构与源系统保持一致 shm 历史层 针对不同特征的数据做不同算法&#xff0c;目的都是为了得到一份完整的数据 PDM 明细层 做最细粒度的数据明细…...

RK3288 Android5.1添加WiFiBT模块AP6212

CPU&#xff1a;RK3288 系统&#xff1a;Android 5.1 注&#xff1a;RK3288系统&#xff0c;目前 Android 5.0 Kernel 3.10 SDK 支持 Braodcom,Realtek 等 WiFi BT 模块 各个 WiFi BT 模块已经做到动态兼容&#xff0c;Android 上层不再需要像以前一样进 行特定宏的配置 此…...

使用 YApi 管理 API 文档,测试, mock

随着互联网的发展&#xff0c;API变的至关重要。根据统计&#xff0c;目前市面上有上千万的开发者&#xff0c;互联网项目超过10亿&#xff0c;保守统计涉及的 API 数量大约有 100 亿。这么大基数的API&#xff0c;只要解决某些共有的痛点&#xff0c;将会是非常有意义的事情。…...

chatgpt生成【2023高考作文】北京卷二 - 亮相

舞台上&#xff0c;戏曲演员有登场亮相的瞬间。生活中也有许多亮相时刻&#xff1a;国旗下的讲话&#xff0c;研学成果的汇报&#xff0c;新产品的发布……每一次亮相&#xff0c;都受到众人关注&#xff1b;每一次亮相&#xff0c;也会有一段故事。 请以“亮相”为题目&#x…...

实验四、shell编程

一、实验目的 1.了解shell的特点和主要种类。 2.掌握 shel1 脚本的建立和执行方式。 3.掌握bash的基本语法。 4.学会编写shell 脚本。 二、实验内容 shell 脚本的建立和执行。历史命令和别名定义。shell变量和位置参数、环境变量。bash的特殊字符。一般控制结构。算术运算及…...

【代码随想录】刷题Day51

1.最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 1.dp数组的含义&#xff1a;dp[i][0]为第i天卖出股票的最大价值&#xff1b;dp[i][1]为第i天持有股票的最大价值 2.dp数组的条件&#xff1a;由于有冷冻期&#xff0c;所以dp数组的条件就变了。第i天卖出股票的最大…...

centos7下svnserve方式部署subversion/SVN服务端(实操)

一般来说&#xff0c;subversion服务器可以用两种方式架设&#xff1a; 一种是基于svnserve&#xff0c;svnserve作为服务端&#xff1b; 一种是基于Apache&#xff0c;用apache作为服务端。 这里采用第一种方式部署。 执行如下命令&#xff0c;安装SVN。 yum install sub…...

一款红队批量脆弱点搜集工具

功能 指纹识别:调用“三米前有香蕉皮“前辈工具&#xff0c;他的工具比finger好用 寻找资产中404&#xff0c;403&#xff0c;以及网页中存在的其他薄弱点&#xff0c;以及需要特定路径访问的资产 后续会把nuclei加进来 目前只有windows可以用 使用 第一次使用脚本请运行p…...

Docker 基本管理

一、Docker 概述 Docker是一个开源的应用容器引擎&#xff0c;基于go语言开发并遵守了apache2.0协议开源。 Docker是在Linux容器里运行应用的开源工具&#xff0c;是一种轻量级的“虚拟机”。 Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自…...

Debezium系列之:把多张表的数据分发到同一个Kafka Topic,同一张表的数据始终进入Topic相同分区

Debezium系列之:把多张表的数据分发到同一个Kafka Topic,同一张表的数据始终进入Topic相同分区 一、需求背景二、实现思路三、核心参数和参数详解四、创建相关表五、提交Debezium Connector六、插入数据七、消费Kafka Topic八、总结和延展一、需求背景 debezium采集数据库的多…...

雪崩 - 如何重试 - sla和重试风暴的双保证

父文章 异常导致级联雪崩的例子 - 不应该有立即重试._个人渣记录仅为自己搜索用的博客-CSDN博客 一个系统处于稳态临界点 如果立即重试3次, 会导致流量瞬间增大, 哪怕后来系统10s内自愈了, 这个时候, 流量本质上增加了3倍. 如果rpc框架不是fastFail ( 超过 调用方失败timeout上…...

[网鼎杯 2018]Fakebook1

拿到题目后是一个博客的界面&#xff0c;这里可以登录和注册 点入登录界面&#xff0c;猜测可能是sql注入 试了很多次&#xff0c;都不是&#xff0c;也没有回显报错&#xff0c;所以把目光放到了注册上面 注册的其他行数据&#xff0c;差不多都可以乱填&#xff0c;只有一个bl…...

Oracle-第一章-多表查询和其他

4多表关联查询 4.1表的别名 ①在多表关联查询时&#xff0c;如果多个表之间存在同名的列&#xff0c;则必须用表名限定列的引用如dept.deptno,emp.deptno ②为使语句简洁&#xff0c;使用表别名&#xff0c;表别名在from子句中定义如 emp e ③表别名一经定义&#xff0c;在整…...

Office Visio 2016安装

哈喽&#xff0c;大家好。今天一起学习的是Visio 2016的安装&#xff0c;这是一个绘制流程图的软件&#xff0c;用有效的绘图表达信息&#xff0c;比任何文字都更加形象和直观。Office Visio 是office软件系列中负责绘制流程图和示意图的软件&#xff0c;便于IT和商务人员就复杂…...

GPT从入门到精通之 GPT 模型入门及原理介绍

GPT 模型入门及原理介绍 如果你关心人工智能&#xff0c;并关注最新的自然语言处理技术&#xff0c;那么你可能听说过 GPT 模型。GPT&#xff08;Generative Pre-trained Transformer&#xff09;是 OpenAI [1] 研究团队开发的一种基于 Transformer 架构的模型&#xff0c;能够…...

USB数据线上的“疙瘩”

在不少键盘、鼠标或是游戏外设的数据线末端我们都能见到一小段金属圆环。虽然这算得上是习以为常的一个设计&#xff0c;但如果说到其具体作用的话很多人一下子还真回答不上来。反正笔者在这里先可以告诉大家&#xff0c;这货肯定不是简简单单的配重块或是装饰品&#xff0c;要…...

公司新来了个00后测开,上来一顿操作给我秀麻了.....

开年公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司实习半年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍!给公司…...

深度学习架构-Tensorflow

深度学习基本概念 人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能的目的 就是让计算机能够像人一样思考。 强人工智能&#xff1a;就是要使机器学习人的理解、学习和执行任务的能力。 弱人工智能&#xff1a;指用…...

网站加速工具/设计公司取名字大全集

截止到编辑本文时&#xff0c;GitHub 上统计到的下载量为&#xff1a;5,498次。GitHub 上的 Star 数为157&#xff0c;码云上的 Star 数为89。Jenkins CLI 增加对了对插件机制的支持&#xff0c;用户可以通过编写插件的方式增强 jcli 的功能。第一个插件可以以 git 仓库的形式&…...

禁止搜索引擎抓取wordpress的目录/怎么下载app到手机上

Graphviz是一个可以对图进行自动布局的绘图工具&#xff0c;由贝尔实验室开源。我们在上次 Python 快速绘制画出漂亮的系统架构图 提到的diagrams&#xff0c;其内部的编排逻辑就用到了这个开源工具包。而今天我们要介绍的项目&#xff0c;就是基于Python和Graphviz开发的&…...

营销型网站和展示型网站的区别/app注册接单平台

1、生成器就是对象2、每次调用next()方法时就返回一个值&#xff0c;直到抛出StopIteration异常3、如何创建生成器&#xff1f;很简单&#xff0c;只需写一个普通的函数并包含yield语句&#xff0c;而不是return语句&#xff0c;因此&#xff0c;python会自动将这个函数标记为生…...

page文件转换wordpress/拼多多seo搜索优化

boost库的简单应用很容易&#xff0c;网上有很多资料&#xff0c;但是&#xff0c;如果要json 和 boost 一起使用就会出现这样那样的问题&#xff0c; 有时候提示找不到 “libboost_coroutine-vc100-mt-sgd-1_55.lib”&#xff0c;对此&#xff0c;可以按照如下方式进行安装&am…...

怎么在国外网站做推广/百度推广登录手机版

下面是一个运行时加载nvcuda.dll&#xff0c;并检测当前驱动版本最大支持的CUDA版本的例子。 #include "cuda.h" #include <stdio.h> #include <Windows.h>typedef CUresult (__cdecl *CU_DriverGetVersion)(int *);int main() {HINSTANCE nvcudalib;nvc…...

wordpress中文注册插件/负面口碑营销案例

冒号课堂 第四课 重温范式(2) 4.2逻辑范式——当算法失去了控制 道常无为而无不为 ——《老子道经》 关键词&#xff1a; 编程范式,逻辑式编程,Prolog,算法,逻辑,控制 摘要&#xff1a; 再谈逻辑式编程 &…...