SpringBoot
SpringBoot简介
- SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
SpringBoot快速入门
- 新建maven工程,导入SpringBoot父工程以及依赖
<?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.itheima</groupId><artifactId>day37-01-spring-boot-demo</artifactId><version>1.0-SNAPSHOT</version><!--配置父模块推荐版本:2.6.22.5.02.3.9.RELEASE--><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.5.0</version></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- 导入SpringBoot的Web启动器:SpringMVC环境依赖的所有Jar包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>
- 创建SpringBoot启动类
//springboot启动引导类注解,里面有@ComponentScan
//@ComponentScan 开启IOC注解扫描,没有配置包名,默认当前包及其子包所有类
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {//启动springboot程序运行当前引导类SpringApplication.run(DemoApplication.class, args);}
}
- 开发控制器类
@RestController
@RequestMapping("/book")
public class BookController {@GetMappingpublic String hello() {return "hello spring boot";}
}
- 测试
运行DemoApplication
的main
方法,浏览器访问http://localhost:8080/book
,浏览器显示hello spring boot
就为SpringBoot工程搭建成功
打包SpringBoot工程为jar包
如果需要将SpringBoot工程打包为jar,并使用命令行运行,则需要配置一个maven插件
- 配置maven插件
<!-- 配置插件,独立运行 -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>
- 执行maven打包命令
运行以下命令,如打包成功,将会在工程模块的target目录下生成jar包,在改目录下进行终端命令行,使用java -jar xx.jar
即可启动
mvn package
SpringBoot项目配置
SpringBoot提供了多种属性配置方式,properties、yml、yaml,一共3种方式
以修改服务器端口为例,修改端口从8080修改为80
- application.properties
server.port=80
- application.yml
server:port: 81
- application.yaml
server:port: 82
SpringBoot配置文件加载顺序
综上所述,3种配置文件如果都同时存在,那么配置文件加载顺序是怎样呢?
- application.properties > application.yml > application.yaml
yaml介绍
什么是yaml,和properties有什么区别?
- YAML(YAML Ain't Markup Language),一种数据序列化格式
- 优点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
- YAML文件扩展名
- .yml(主流)
- .yaml
yaml语法规则
- 大小写敏感
- 属性层级关系使用多行描述,每行结尾使用冒号结束
- 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
- 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
-
表示注释
- 核心规则:数据前面要加空格与冒号隔开
yaml数组数据
- 数组数据在数据书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
lesson: SpringBootserver:port: 8080enterprise:name: itheimaage: 16tel: 4006184000subject:- Java- 前端- 大数据
yaml数据读取
一共有3种获取yaml数据的方式
- 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
注:这种方式只能注入单个数值
@RestController
@RequestMapping("/book")
public class BookController {@Value("${lesson}")private String lesson;@Value("${server.port}")private Integer port;/*** 注解 @Value,这个注解不能读取整个数组,只能获取数组中的其中一个元素* 使用注意:读取配置文件的数据,配置文件配置这个数据,并且要正确,否则就会报错*/@Value("${enterprise.subject[0]}")private String subject;@GetMapping("hello")public String hello() {System.out.println("lesson = " + lesson);System.out.println("server.port = " + port);System.out.println("enterprise.subject = " + subject);return "hello spring boot";}
}
- 封装全部数据到Environment对象
注:数组元素也只能一个个取出来
@RestController
@RequestMapping("/book")
public class BookController {/*** 环境对象,最灵活,但是可读性差*/@Autowiredprivate Environment environment;@GetMapping("/hello2")public String hello2() {System.out.println("lesson = " + environment.getProperty("lesson"));System.out.println("server.port = " + environment.getProperty("server.port"));System.out.println("enterprise.subject[0] = " + environment.getProperty("enterprise.subject[0]"));System.out.println("enterprise.subject[1] = " + environment.getProperty("enterprise.subject[1]"));System.out.println("enterprise.subject[2] = " + environment.getProperty("enterprise.subject[2]"));return "hello spring boot";}
}
- 自定义对象封装指定数据【常用】
- 将对象添加Spring容器中,在类上添加@Component注解
- 在类上添加@ConfigurationProperties(prefix="指定前缀")
- 添加get和set方法,toString方法
- 在控制器中注入下面Enterprise对象
注:使用lombok需要在pom.xml中导入坐标
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
- 编写实体类
//封装yml数据到一个实体类中
//lombok生成getter、setter、toString方法
@Data
//将该类创建对象,并加入IOC容器
@Component
//指定封装的数据的前缀
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {private String name;private Integer age;private List<String> subject;
}
- 使用实体类获取数据
@RestController
@RequestMapping("/book")
public class BookController {/*** 读取到的配置会封装到这个对象*/@Autowiredprivate Enterprise enterprise;@GetMapping("/hello3")public String hello3() {System.out.println("name = " + enterprise.getName());System.out.println("age = " + enterprise.getAge());System.out.println("enterprise.subject[0] = " + enterprise.getSubject().get(0));return "hello spring boot";}
}
- 当输入@ConfigurationProperties注解的时候,自定义对象封装数据警告解决方案,添加一个依赖即可
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
多环境开发配置
项目的开发环境、测试环境、生产环境的配置信息一般都不一致,SpringBoot提供了多环境配置满足该需求
多环境配置分类yaml文件多环境配置
以及properties文件多环境配置
- yaml文件多环境配置
yaml文件多环境配置,是将多个环境的配置写到同一个yaml文件中
application.yml中,添加如下配置,每种配置以---
分割,通过active
激活(使用)指定的环境
spring:profiles:active: pro---
spring:config:activate:on-profile: pro
server:port: 80---
spring:config:activate:on-profile: test
server:port: 81---
spring:config:activate:on-profile: dev
server:port: 82
- properties文件多环境配置
properties多环境配置,是将多个环境的配置单独配置在一个properties文件中,配置文件都以application-
开头,-
后加上环境的名称,以properties
作为文件拓展名
#主启动配置文件 application.properties
spring.profiles.active=pro
#环境分类配置文件 application-pro.properties
server.port=80
#环境分类配置文件 application-dev.properties
server.port=81
#环境分类配置文件application-test.properties
server.port=82
多环境启动
通过mvn package
命令打包后,就可以通过java -jar springboot.jar
的方式启动,在该命令后面添加环境参数,即可切换对应的环境以及端口号
# 指定哪个配置名
java –jar springboot.jar --spring.profiles.active=test
# 指定具体的参数
java –jar springboot.jar --server.port=88
# 同时指定配置名 端口号
java –jar springboot.jar --server.port=88 --spring.profiles.active=test
SpringBoot多环境与Maven多环境兼容
本身maven就提供了多环境切换的功能,它提供了idea的GUI页面进行切换,而SpringBoot的多环境配置切换只能使用命令行
但SpringBoot也提供了与Maven多环境的兼容,使得在IDEA的maven多环境切换页面中,切换SpringBoot的多环境配置
- Maven中设置多环境属性
<!-- 多环境配置,在这里配置SpringBoot的环境名字,用户通过勾选界面,获取指定的SpringBoot名字 -->
<profiles><profile><!-- maven环境的名字 --><id>dev_env</id><!-- SpringBoot的环境名字 --><properties><profile.active>dev</profile.active></properties><!-- 默认激活 --><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>pro_env</id><properties><profile.active>pro</profile.active></properties></profile><profile><id>test_env</id><properties><profile.active>test</profile.active></properties></profile>
</profiles>
- SpringBoot中引用Maven属性
注:Maven的多环境配置,需要配合propertis
配置文件,所以需要将该配置文件中的多环境配置先注释,再加上配置占位符
# 配合maven进行多环境配置
spring.profiles.active=${profile.active}
- 配置maven插件,对资源文件开启默认占位符的解析
注:如果不配置,propertis
配置文件中的${profile.active}
将不会生效!!!
<build><plugins><!-- 配置maven去 resource 目录下,解析里面的 ${profile.active} 替换为上面用户在勾选页面对应的配置值 --><plugin><artifactId>maven-resources-plugin</artifactId><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin></plugins>
</build>
SpringBoot集成第三方技术
SpringBoot集成JUnit
- 添加SpringBoot的test启动器依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
- 编写启动类(引导类)
@SpringBootApplication
public class JunitApplication {public static void main(String[] args) {SpringApplication.run(JunitApplication.class, args);}
}
- 编写业务层接口以及实现类
/*** 业务层接口*/
public interface BookService {void save();
}/*** 业务层实现类*/
//创建对象,并加入IOC容器
@Service
public class BookServiceImpl implements BookService {@Overridepublic void save() {System.out.println("book service success...");}
}
- 编写测试类
/*** 注解 @SpringBootTest,会去找引导类 JunitApplication ,并且运行引导类(里面有创建IOC容器对象,并扫描IOC注解)* <p>* 第一种用法:@SpringBootTest 测试的类必须放在与引导类同包名及其子包下,就不用手动指定引导类,会自动查找运行* 第二种用法:@SpringBootTest(classes = JunitApplication.class)* - 当测试类不在引导类所在包及其子包下时,都需要手动指定引导类* 注意:只用这个注解的前提是,必须Junit5* 如果是Junit4,必须再加一个 @RunWith(SpringJUnit4ClassRunner.class) 注解,并把 @Test 注解的导包换成 org.junit.Test 才可以* Junit5,导包是 org.junit.jupiter.api.Test* 即是:* - @RunWith(SpringJUnit4ClassRunner.class)* - @SpringBootTest*/
@SpringBootTest
public class BookServiceTest {@Autowiredprivate BookService bookService;@Testpublic void testSave() {bookService.save();}
}
SpringBoot集成SSM
SpringBoot的web启动器,已经将Spring与SpringMVC进行了整合,我们只需要将MyBatis在进行整合即可!
- SpringBoot整合Spring(不存在)
- SpringBoot整合SpringMVC(不存在)
- SpringBoot整合MyBatis(主要)
- 配置依赖
<dependencies><!-- mybatis启动器 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!-- web启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version></dependency><!-- 测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>
- yaml配置文件配置中,配置
Druid数据库连接池
以及MyBatis
注意:SpringBoot版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区,或在MySQL数据库端配置时区解决此问题
# 配置连接池
spring:datasource:# 配置MySQL驱动driver-class-name: com.mysql.cj.jdbc.Driver# 配置使用Druid连接池type: com.alibaba.druid.pool.DruidDataSource# 配置连接地址以及用户名和密码url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useUnicode=true&useSSL=falseusername: rootpassword: root# mybatis配置
mybatis:# 配置实体类别名的包扫描type-aliases-package: com.itheima.pojoconfiguration:# 开启小驼峰命名映射map-underscore-to-camel-case: true# 开启控制台sql语句日志打印log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 创建SpringBoot启动类(引导类)
@SpringBootApplication
//SpringBoot 扫描MyBatis接口,生成代理对象,加入IOC容器(推荐使用)
@MapperScan("com.itheima.mapper")
public class SSMApplication {public static void main(String[] args) {SpringApplication.run(SSMApplication.class, args);}
}
- 创建数据库表实体类
@Data //lombok的注解,可以给实体类生成set\get和重写toString()方法
@AllArgsConstructor //2.生成全参构造函数
@NoArgsConstructor //3.生成无参构造函数
public class Book {private Integer id;private String type;private String name;private String description;
}
- 创建Mapper接口类(数据持久层)
Mapper接口类,需要添加@Mapper接口
或在启动类上添加@MapperScan
注解,包扫描包下的Mapper接口
//注解 @Mapper,标识这是MyBatis接口,会自动创建对象,加入IOC容器
//不推荐,因为每个Mapper接口都需要设置,代码冗余,推荐在启动类中使用 @MapperScan("com.itheima.mapper") 进行包扫描
//@Mapper
public interface BookMapper {/*** 查询所有图书*/@Select("select * from tbl_book")List<Book> findAll();
}
- 创建业务层接口以及实现类
/*** 业务层接口*/
//开启事务,在SpringBoot中,不需要开启事务注解扫描,因为默认已经开启,所以该注解可以直接使用
@Transactional
public interface BookService {/*** 查询所有图书*/List<Book> findAll();
}/*** 业务层实现类*/
//创建对象,并加入IOC容器
@Service
public class BookServiceImpl implements BookService {@Autowired(required = false)private BookMapper bookMapper;@Overridepublic List<Book> findAll() {return bookMapper.findAll();}
}
- 创建Controller控制器(Web层)
运行SSMApplication
的main
方法,浏览器访问http://localhost:8080/book/findAll
,浏览器显示json数据即为成功
@RestController
@RequestMapping("/book")
public class BookController {@Autowiredprivate BookService bookService;@GetMapping("/findAll")public List<Book> findAll() {return bookService.findAll();}
}
- 测试
也可以使用SpringBoot集成Junit,进行Mapper(数据持久层)的单元测试
@SpringBootTest
class BookMapperTest {@Autowiredprivate BookMapper bookMapper;@Testpublic void testFindAll() {List<Book> bookList = bookMapper.findAll();for (Book book : bookList) {System.out.println(book);}}
}
SpringBoot静态资源处理
SpringBoot的默认的静态资源访问路径有四个,我们只需要将前端静态资源方法四个路径中的任意一个,都可以实现前端资源的访问(注:访问时,不需要添加具体存放的目录,直接访问资源即可)
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public
例如,在static目录中提供index.html页面,并通过浏览器访问该页面
- index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>index3</title>
</head>
<body>
static目录下的index.html
</body>
</html>
- 访问index.html页面
http://localhost:8080/index.html

喜欢的朋友记得点赞、收藏、关注哦!!!
相关文章:
SpringBoot
SpringBoot简介 SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程 SpringBoot快速入门 新建maven工程,导入SpringBoot父工程以及依赖 <?xml version"1.0" encoding"UTF-8"?>…...
2024第六届金盾信安杯Web 详细题解
比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP 分别是 fillllll_put hoverfly ssrf fillllll_put 涉及: 绕过exit() 死亡函数 php://filter 伪协议配合base64加解密 一句话木马 题目源码: $content参数在开头被…...
The selected directory is not a valid home for Go SDK
在idea里配置go语言的环境时,选择go语言的安装目录,一直提示这个 The selected directory is not a valid home for Go SDK后来查了一下,发现原来idea识别不出来 需要改一下配置文件,找到go环境的安装目录,我是默认安…...
《智能体雏形开发(高阶实操)》开发计划概述
智能体雏形开发计划 通过本计划,逐步完成一个可以真实运行的智能体雏形。 最终完成一个**“用户日志文件生成日报,日报再进一步汇总成周报”**的任务驱动型智能体雏形 第一阶段:基础准备与环境搭建 1. 学习基础知识 了解智能体的概念、类型和技术框架。学习大模型(如阿里…...
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
💥 .NET开源 ORM 框架 SqlSugar 系列 🎉🎉🎉 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…...
【Linux】设计文件系统(C实现)
要求: (1)可以实现下列几条命令 dir 列文件目录 create 创建文件 delete 删除文件 read 读文件 write 写文件 (2)列目录时要列出文件名、存取权限(八进制)、文件长度、时间(创建时间,修改时间以及…...
Redis+Caffeine 多级缓存数据一致性解决方案
RedisCaffeine 多级缓存数据一致性解决方案 背景 之前写过一篇文章RedisCaffeine 实现两级缓存实战,文章提到了两级缓存RedisCaffeine可以解决缓存雪等问题也可以提高接口的性能,但是可能会出现缓存一致性问题。如果数据频繁的变更,可能会导…...
SpringMVC(二)
Model 以Map方式进行存储,用于向作用域中存值。 注意:在Model中增加模型数据,若不指定key,则默认使用对象的类型作为key Controller //控制器类 public class IndexController {RequestMapping("/index3")public Strin…...
leetcode--螺旋矩阵
LCR 146.螺旋遍历二维数组 给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元…...
动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)
本节课程地址:多头注意力代码_哔哩哔哩_bilibili 本节教材地址:10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…...
Selenium3+Python如何操作键盘
selenium操作键盘,需要导入Keys类:“from selenium.webdriver.common.keys import Keys” 调用键盘操作的快捷键的方法 : 单键值:直接传入对应的键值“element.send_keys”(快捷键的键值) 组合键:键值之间由逗号分隔…...
数据仓库的概念
先用大白话讲一下,数据仓库的主要目的就是存储和分析大量结构化数据的。 > 那么它的核心目的是:支持商业智能(BI)和决策支持系统,也就是说,它不仅仅是为了存储,更重要的是为了分析提供便利。…...
初级数据结构——二叉搜索树
目录 前言一、定义二、基本操作三、时间复杂度分析四、变体五、动态图解六、代码模版七、经典例题[1.——700. 二叉搜索树中的搜索](https://leetcode.cn/problems/search-in-a-binary-search-tree/)代码题解 [2.——938. 二叉搜索树的范围和](https://leetcode.cn/problems/ra…...
配置宝塔php curl 支持http/2 发送苹果apns消息推送
由于宝塔面板默认的php编译的curl未加入http2的支持,如果服务需要使用apns推送等需要http2.0的访问就会失败,所以重新编译php让其支持http2.0 编译方法: 一、安装nghttp2 git clone https://github.com/tatsuhiro-t/nghttp2.git cd nghttp…...
ARP表、MAC表、路由表的区别和各自作用
文章目录 ARP表、MAC表、路由表的区别和各自作用同一网络内:ARP表request - 请求reply - 响应 MAC地址在同一网络内,交换机如何工作? 不同网络路由表不同网络通信流程PC1到路由器路由器到PC2流程图 简短总结 ARP表、MAC表、路由表的区别和各自作用 拓扑图如下: 同一网络内:…...
限定符使用
正则表达式的元字符一次一般只能匹配一个位置或一个字符,如果想要匹配零个、一个或多个字符时,则需要使用限定符。限定符用于指定允许特定字符或字符集自身重复出现的次数。常用限定符如下: <asp:TextBox [^>]> 正则表达式字符类[^>]匹配除过“>”之外的任何字…...
【k8s】创建基于sa的token的kubeconfig
需求 创建一个基于sa的token的kubeconfig文件,并用这个文件来访问集群。 具体创建sa 和sa的token请参考文章: 【k8s】给ServiceAccount 创建关联的 Secrets-CSDN博客 创建sa apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:namespace: jtkjdevnam…...
计算机网络——不同版本的 HTTP 协议
介绍 HTTP,即超文本传输协议(HyperText Transfer Protocol),是应用层的一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。 HTTP/1.0 HTTP/1…...
【Linux】vim编辑器练习
1.在/tmp目录下建立一个名为mytest的目录,进入mytest目录 (1)进入/tmp目录 cd /tmp (2)创建mytest目录 mkdir mytest (3)查看是否创建成功 ls 或 ls -l (4)进入mytest目录 cd mytest …...
StarRocks关于ConcurrentModificationException 问题的解决
背景 本文基于 StarRocks 3.1.7 目前在基于Starrocks做一些数据分析的操作(主要是做一些简单的查询),同事遇到了一些并发的问题: ontent:2024-11-27 07:04:34,048 WARN (starrocks-mysql-nio-pool-214933|3593819) [StmtExecutor.execute():643] execute Exceptio…...
MySQL MVCC 介绍
MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于在多个并发事务同时读写数据库时保持数据的一致性和隔离性。MVCC通过在每个数据行上维护多个版本的数据来实现。当一个事务要对数据库中的数据进行修改时,MVCC不会…...
HTML 快速上手
目录 一. HTML概念 二. HTML标签 1. 标题标签 2. 段落标签 3. 换行标签 4. 图片标签 5. 超链接标签 6. 表格标签 7. 表单标签 7.1 form 标签 7.2 input 标签 (1) 文本框 (2) 单选框 (3) 密码框 (4) 复选框 (5) 普通按钮 (6) 提交按钮 8. select标签 9. 无语义…...
【树莓派5】移动热点获取树莓派IP并初次登录SSH
本篇文章包含的内容 1 打开系统热点2 烧录系统设置3 配置 MobaXterm4 初次启动树莓派配置选项4.1 换源4.2 更新软件包4.3 安装vim编辑器4.4 更改CPU FAN温度转速 Windows版本:Windows11 24H2树莓派:树莓派5,Raspberry Pi 5SSH软件:…...
用html+jq实现元素的拖动效果——js基础积累
用htmljq实现元素的拖动效果 效果图如下: 将【item10】拖动到【item1】前面 直接上代码: html部分 <ul id"sortableList"><li id"item1" class"w1" draggable"true">Item 1</li><li …...
Zookeeper的通知机制是什么?
大家好,我是锋哥。今天分享关于【Zookeeper的通知机制是什么?】面试题。希望对大家有帮助; Zookeeper的通知机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper的通知机制主要通过Watcher实现,它是Zookeeper客…...
VSCode如何关闭Vite项目本地自启动
某些情况下VSCode打开Vite项目不需要自动启动,那么如何关闭该功能 文件>首选项>设置 搜索vite 将Vite:Auto Start 勾选取消即可...
微软表示不会使用你的 Word、Excel 数据进行 AI 训练
微软否认使用 Microsoft 365 应用程序(包括 Word、Excel 和 PowerPoint)收集数据来训练公司人工智能 (AI) 模型的说法。 此前,Tumblr 的一篇博文声称,雷德蒙德使用“互联体验”功能抓取客户的 Word 和 Excel 数据,用…...
Redis缓存设计与性能优化
多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,通常出于容错的考虑,如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了…...
前端图像处理(三)
目录 一、大文件分片 二、图片添加防篡改水印 2.1、主图水印图(vue2) 2.2、主图文字(vue3) 一、大文件分片 并行传输:多个数据块可以同时并行传输,利用多线程或多路复用技术提高传输效率;减…...
JAVA设计模式,动态代理模式
动态代理(Dynamic Proxy)是Java中一种非常有用的设计模式。它允许在运行时创建一个实现了一组给定接口的新类。这种模式主要用于当需要为某个对象提供一个代理以控制对该对象的访问时。通过这种方式,可以添加额外的功能,如事务管理…...
谈论 PHP与XSS
本文将讨论一些脚本攻击问题,以及如何解决XSS脚本攻击问题 美好的周末就用来学点知识吧!!! ———————————————————————————————————— 文章目录 XSS跨站脚本攻击XSS是什么XSS类型:反…...
基于Java Springboot武汉市公交路线查询APP且微信小程序
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…...
106.【C语言】数据结构之二叉树的三种递归遍历方式
目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…...
解决WebView写入localstorage但首次加载取不到值的问题
本文是解决Android写localstorage的问题。 在android中,native经常需要和h5页面进行交互,比如将本地token写入h5,然后h5中的js获取token进行api请求。 写入localstorage的方法很标准,即在webview的onPageFinished中注入并调用一…...
CTF-PWN glibc源码阅读[1]: 寻找libc中堆结构的定义(2.31-0ubuntu9.16)
源代码在这里下载 来到malloc/malloc.c 在980行发现这段代码 // 定义最大 mmap 值为 -4 #define M_MMAP_MAX -4// 如果没有定义 DEFAULT_MMAP_MAX,则将其定义为 65536 #ifndef DEFAULT_MMAP_MAX #define DEFAULT_MMAP_MAX (65536) #endif// 引…...
Node.js 实战: 爬取百度新闻并序列化 - 完整教程
很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候,大家会用到python ,因为实现起来很方便。但是其实Node.js 用来爬取网络内容,也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫,可…...
C++知识整理day3类与对象(下)——赋值运算符重载、取地址重载、列表初始化、友元、匿名对象、static
文章目录 1.赋值运算符重载1.1 运算符重载1.2 赋值运算符重载 2.取地址重载2.1 const成员函数2.2 取地址运算符重载 3.类与对象的补充3.1 再探构造函数---初始化列表3.2 类型转换3.3 static成员3.4 友元3.5 内部类3.6 匿名对象3.7 对象拷贝时的编译器优化 1.赋值运算符重载 赋…...
【计算机网络】实验6:IPV4地址的构造超网及IP数据报
实验 6:IPV4地址的构造超网及IP数据报 一、 实验目的 加深对IPV4地址的构造超网(无分类编制)的了解。 加深对IP数据包的发送和转发流程的了解。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、了解IPV4地址的构造超网…...
【服务器问题】xshell 登录远程服务器卡住( 而 vscode 直接登录不上)
打开 xshell ssh 登录远程服务器:卡在下面这里,迟迟不继续 当 SSH 连接卡在 Connection established. 之后,但没有显示远程终端提示符时,这通常意味着连接已经成功建立,说明不是网络连接和服务器连接问题,…...
node.js基础学习-querystring模块-查询字符串处理(三)
一、前言 querystring是 Node.js 中的一个内置模块,主要用于处理 URL 查询字符串。它提供了一些实用的方法来解析和格式化查询字符串,使得在处理 HTTP 请求中的查询参数等场景时非常方便。 还可以防止sql注入 二、解析查询字符串(parse方法&a…...
【C++】深入优化计算题目分析与实现
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯第一题:圆的计算我的代码实现代码分析改进建议改进代码 老师的代码实现代码分析可以改进的地方改进代码 💯第二题:对齐输出我的代码实现…...
【一起学习三维GIS】Cesium基础功能和项目讲解
一、Cesium整体介绍 Cesium正式发布于 2014 年,是一个完全开源的基于 WebGL 的 JavaScript框架,无需安装插件即可创建具有最佳性能、精度、视觉质量和易用性的世界级三维地球影像和地图,并且具有丰富的开源社区内容。 Cesium 作为一个较为…...
【docker】Overlay网络
什么是 Overlay 网络? Overlay 网络是一种 Docker 网络驱动,允许容器在不同主机间通信。 它依赖分布式存储(如 Swarm、Etcd 或 Consul)来管理网络配置和路由。 Overlay 网络的核心特点 跨主机通信:容器可以跨物理主…...
澎峰科技助力中国移动 重磅发布智算“芯合”算力原生基础软件栈2.0
11月30日 ,由中国通信学会主办、中国移动研究院承办的2024中国信息通信大会“算力网络算网一体创新发展论坛 ”在成都召开。中国移动研究院携手澎峰科技等产业合作伙伴在本次论坛重磅发布了智算“芯合”算力原生基础软件栈2.0。 芯片是智算生态的基石,基…...
电脑提示报错“Directx error”怎么解决?是什么原因导致的?游戏软件提示“Directx error”错误的解决方案
DirectX Error(DX错误)通常指的是在使用基于DirectX技术的应用程序(尤其是游戏)时遇到的问题。这个问题可能由多种因素导致,以下是一些可能的原因及相应的解决方案: 可能的原因 DirectX版本不匹配&#x…...
jmeter 压测常用静默参数解释应用
简介: JMeter静默压测(即无界面压测)是一种常用的性能测试方法,用于模拟多个用户同时访问系统并测量系统的响应时间和吞吐量等关键性能指标。在JMeter静默压测中,常用的压测参数及其解释如下: 一、基本…...
动态规划-----路径问题
动态规划-----路径问题 下降最小路径和1:状态表示2:状态转移方程3 初始化4 填表顺序5 返回值6 代码实现 总结: 下降最小路径和 1:状态表示 假设:用dp[i][j]表示:到达[i,j]的最小路径 2:状态转…...
LeetCode 438.找到字符串中所有字母异位词
LeetCode 438.找到字符串中所有字母异位词 思路🧐: 需要找到子串异位词,也就是只看该子串是否有相同字母而不管位置是否相同。分析题目发现只需要单调向前找异位词,则可以使用滑动窗口求解,注意这里每当左右边框长度大…...
[C++设计模式] 为什么需要设计模式?
文章目录 什么是设计模式?为什么需要设计模式?GOF 设计模式再次理解面向对象软件设计固有的复杂性软件设计复杂性的根本原因如何解决复杂性?分解抽象 结构化 VS 面向对象(封装)结构化设计代码示例:面向对象设计代码示例࿱…...
【ArkTS】使用AVRecorder录制音频 --内附录音机开发详细代码
系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…...