【JavaWeb】后端(Maven+SpringBoot+HTTP+Tomcat)
目录
- 一、Maven
- 1.什么是Maven?
- 2.Maven的作用?
- 3.介绍
- 4.安装
- 5.IDEA集成Maven
- 6.IDEA创建Maven项目
- 7.IDEA导入Maven项目
- 8.依赖配置
- 9.依赖传递
- 10.依赖范围
- 11.生命周期
- 二、SpringBoot
- 1.Spring
- 2.SpringBoot
- 3.SpringBootWeb快速入门
- 二、HTTP
- 1.HTTP-概述
- 2.HTTP-请求协议
- 3.HTTP-响应协议
- 4.HTTP-协议解析
- 三、Tomcat
- 1.Web服务器
- 2.Tomcat
- 3.Tomcat-基本使用
- 4.SpringBootWeb-入门程序解析
- 四、请求响应
- 1.请求响应:
- 2.Postman
- 3.简单参数
- 4.实体参数
- 5.数组集合参数
- 6.日期参数
- 7.Json参数
- 8.路径参数
- 9.响应数据
- 五、分层解耦
- 1.三层架构
- 2.分层解耦
- 3.IOC& DI入门
- 4.IOC详解
- 5.Dl详解
一、Maven
1.什么是Maven?

- Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。
Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性组织。
开源项目:https://www.apache.org/index.html#projects-list
2.Maven的作用?
-
依赖管理
- 方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题

- 方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
-
统一的项目结构
- 提供标准、统一的项目结构

- 提供标准、统一的项目结构
-
项目构建
- 标准跨平台( Linux、Windows、MacOS)的自动化项目构建方式

- 标准跨平台( Linux、Windows、MacOS)的自动化项目构建方式
3.介绍
- Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM,Project object model)的概念通过一小段描述信息来管理项目的构建。

- 作用:
- 方便的依赖管理
- 统一的项目结构
- 标准的项目构建流程
- 官网:http://maven.apache.org/

- 仓库:用于存储资源,管理各种jar包。
- 本地仓库:自己计算机上的一个目录。
- 中央仓库:由Maven团队维护的全球唯一的。仓库地址: https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库。
4.安装
- 解压apache-maven-3.6.1-bin.zip 。
- 配置本地仓库:修改conf/settings.xml中的为一个指定目录。
<localRepository>E:\develop\apache-maven-3.6.1\mvn_repo</localRepository>
- 配置阿里云私服:修改conf/settings.xml中的标签,为其添加如下子标签:
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
- 配置环境变量:MAVEN_HOME为maven的解压目录,并将其bin目录加入PATH环境变量。
5.IDEA集成Maven
- 选择IDEA中 File --> Settings --> Build,Execution,Deployment --> Build Tools --> Maven
- 设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径




全局配置需要关闭所有项目,在如下界面打开设置,设置内容和上面一致

6.IDEA创建Maven项目
- 创建模块,选择Maven,点击Next

- 填写模块名称,坐标信息,点击finish,创建完成

- 编写HelloWorld,并运行
- Maven坐标
- Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资源位置。
- 使用坐标来定义项目或引入项目中需要的依赖。
- Maven坐标主要组成
- groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
- artifactld:定义当前Maven项目名称(通常是模块名称,例如order-service、goods-service)
- version:定义当前项目版本号

7.IDEA导入Maven项目
- 方式一:打开IDEA,选择右侧Maven面板,点击+号,选中对应项目的pom.xm文件,双击即可。

- 方式二︰打开IDEA,选择右侧Maven面板,点击+号,选中对应项目的pom.xml文件,双击即可。

8.依赖配置
- 依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。
- 配置:
- 在pom.xml中编写
<dependencies>标签 - 在
<dependencies>标签中使用<dependency>引入坐标 - 定义坐标的groupld, artifactld,version
- 点击刷新按钮,引入最新加入的坐标
- 在pom.xml中编写

- 如果引入的依赖,在本地仓库不存在,将会连接远程仓库/中央仓库,然后下载依赖。(这个过程会比较耗时,耐心等待)
- 如果不知道依赖的坐标信息,可以到https://mvnrepository.com/中搜索。
9.依赖传递
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系(绿色部分)
- 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源(黄色部分)

- 排除依赖
- 排除依赖指主动断开依赖的资源,被排除的资源无需指定版本。

<dependency><groupld>com.itheima</groupld><artifactld>maven-projectB</artifactld><version>1.O-SNAPSHOT</version><exclusions><exclusion><groupld>junit</groupld><artifactld>junit</artifactld></exclusion></exclusions>
</dependency>
10.依赖范围
-
依赖的jar包,默认情况下,可以在任何地方使用。可以通过
<scope>...</scope>设置其作用范围。

-
作用范围:
- 主程序范围有效。(main文件夹范围内)
- 测试程序范围有效。( test文件夹范围内)
- 是否参与打包运行。(package指令范围内)
<dependency><groupld>junit</groupld><artifactld>junit<lartifactld><version>4.10</version><scope>test</scope>
</dependency>

11.生命周期
- Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。

- Maven中有3套相互独立的生命周期:
- clean:清理工作。
- default:核心工作,如:编译、测试、打包、安装、部署等。
- site:生成报告、发布站点等。

- 常见生命周期:
- clean:移除上一次构建生成的文件
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit)
- package:将编译后的文件打包,如:jar、war等
- install:安装项目到本地仓库
- 在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行。
- 执行指定生命周期的两种方式:
- 在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行。
- 在命令行中,通过命令执行(在项目目录下cmd)。
- mvn clean
- mvn compile
- mvn package
- mvn test
二、SpringBoot
1.Spring
- 官网:spring.io
- Spring发展到今天已经形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于完成特定的功能。

2.SpringBoot
- Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率。
3.SpringBootWeb快速入门
- 创建springboot工程,并勾选web开发相关依赖。
- 定义HelloController类,添加方法 hello,并添加注解。
- 运行测试
- 浏览器访问:localhost:8080/hello


@RestController
public class HelloController {@RequestMapping ("/hello")public string hello() {system.out.println ( "Hello world ~");return "Hello world ~";}
}
二、HTTP
1.HTTP-概述
- 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

- 特点:
- 基于TCP协议:面向连接,安全
- 基于请求-响应模型的:一次请求对应一次响应
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
- 缺点:多次请求间不能共享数据。
- 优点:速度快
2.HTTP-请求协议
- HTTP-请求数据格式

- 请求行(红色部分):请求数据第一行(请求方式、资源路径、协议)
- 请求头(黄色部分):第二行开始,格式key: value
- 请求体(绿色部分):POST请求,存放请求参数(和请求头之间有一行空行)
- 请求方式-GET:请求参数在请求行中,没有请求体,如:/brand/findAll?name=OPPO&status=1。GET请求大小是有限制的
- 请求方式-POST:请求参数在请求体中,POST请求大小是没有限制的。
| HTTP-请求数据格式名 | |
|---|---|
| Host | 请求的主机名 |
| User-Agent | 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 … Chrome/79,IE浏览器的标识类似Mozilla/5.0 (windows NT …) like Gecko |
| Accept | 表示浏览器能接收的资源类型,如text/* , image/*或者*/*表示所有; |
| Accept-Language | 表示浏览器偏好的语言,服务器可以据此返回不同语言的网页; |
| Accept-Encoding | 表示浏览器可以支持的压缩类型,例如gzip, deflate等。 |
| content-Type | 请求主体的数据类型。 |
| Content-Length | 请求主体的大小(单位:字节)。 |
3.HTTP-响应协议

- 响应行:响应数据第一行(协议、状态码、描述)
- 响应头:第二行开始,格式key: value
- 响应体:最后一部分,存放响应数据

- 常见状态响应码

- 状态码大全: https://cloud.tencent.com/developer/chapter/13553

4.HTTP-协议解析
- 浏览器自带解析
- 服务端(ServerSocket)Web服务器

三、Tomcat
1.Web服务器

Web服务器是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷
- 主要功能是"提供网上信息浏览服务"。
2.Tomcat

- 概念:Tomcat是Apache软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量JavaEE规范。
- JavaEE:JavaEnterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java lDL、JTS、JTA、JavaMail、JAF
- Tomcat也被称为Web容器、Servlet容器。Servlet程序需要依赖于Tomcat才能运行
- 官网:https://tomcat.apache.org/
- JavasE:java标准版
- JavaME:java小型版
- JavaE:java企业版
3.Tomcat-基本使用
- 下载:官网下载,地址https://tomcat.apache.org/download-90.cgi
- 安装:绿色版,直接解压即可

- 卸载:直接删除目录即可
- 启动:双击:
bin\startup.bat- 控制台中文乱码:修改
conf/ logging.properties
- 控制台中文乱码:修改
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatterorg.apache.juli.oneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK
- 关闭:
- 直接×掉运行窗口:强制关闭
bin\shutdown.bat:正常关闭- Ctrl+C:正常关闭
- 常见问题
- 启动窗口一闪而过:检查JAVA_HOME环境变量是否正确配置
- 端口号冲突:找到对应程序,将其关闭掉

- 配置Tomcat端口号(conf/server.xml)

- HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不用输入端口号。
- Tomcat部署项目:
- 将项目放置到webapps目录下,即部署完成
4.SpringBootWeb-入门程序解析


- 起步依赖(Starters):
- spring-boot-starter-web:包含了web应用开发所需要的常见依赖。
- spring-boot-starter-test:包含了单元测试所需要的常见依赖。
- 官方提供的starter:https://docs.spring.io/spring-boot/docs/2.7.4/reference/htmlsingle/#using.build-systems.starters
- AOP:spring-boot-starter-aop
- Redis:spring-boot-starter-data-redis
- 内嵌Tomcat(红色部分):

四、请求响应
1.请求响应:

- 请求(HttpServletRequest):获取请求数据。
- 响应(HttpServletResponse):设置响应数据
- BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端(维护方便;体验一般)。
- CS架构:Client/Server,客户端/服务器架构模式(开发、维护麻烦;体验不错)。
2.Postman

- Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。
- 作用:常用于进行接口测试
- 官网:https://www.postman.com/
3.简单参数
- 原始方式(繁琐,需要手动类型转换)
- 在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取。

- SpringBoot方式
- 简单参数:参数名与形参变量名相同,定义形参即可接收参数。

- 简单参数:如果方法形参名称与请求参数名称不匹配,可以使用@RequestParam完成映射。

- 简单参数:参数名与形参变量名相同,定义形参即可接收参数。
@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。
如果该参数是可选的,可以将required属性设置为false。
4.实体参数
-
简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可

-
复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。

5.数组集合参数
- 数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

- 集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系

6.日期参数
- 日期参数:使用@DateTimeFormat注解完成日期参数格式转换

7.Json参数
- JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识

8.路径参数
- 路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用@PathVariable获取路径参数

9.响应数据

- @ResponseBody
- 类型:方法注解、类注解
- 位置:Controller方法上/类上
- 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
- 说明:@RestController = @Controller + @ResponseBody ;

- 统一的响应结果

package com.example.springproject01.pojo;public class Result {private Integer code;//操作结果代码。一般统一规定成功是1.失败是0private String msg;//提示信息private Object data;//结果数据public Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public int getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}// 当接受到错误时进行errorpublic static Result error(String msg) {return new Result(0, msg, null);}//当接受到正确是进行successpublic static Result success(Object data) {return new Result(1, "sucess", data);}public static Result success() {return new Result(1, "sucess", null);}}
五、分层解耦
1.三层架构

- controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据。
- service:业务逻辑层,处理具体的业务逻辑。
- dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增、删、改、查。

2.分层解耦
- 内聚:软件中各个功能模块内部的功能联系。
- 耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
- 软件设计原则:高内聚低耦合。


- 控制反转:Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
- 依赖注入:Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源
称之为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean。
3.IOC& DI入门
-
Service层及Dao层的实现类,交给IOC容器管理。

-
为Controller及Service注入运行时,依赖的对象。

-
运行测试。
4.IOC详解
-
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一:

-
声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
Repository (value = "daoA")或者Repository ("daoA") -
使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
元注解:
- @Target 描述注解的使用范围(即:被修饰的注解可以用在什么地方) 。
- @Retention 描述注解保留的时间范围(即:被描述的注解在它所修饰的类中可以被保留到何时) 。
- @Documented 描述在使用 javadoc 工具为类生成帮助文档时是否要保留其注解信息。
- @Inherited 使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。
- Bean组件扫描
- 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
- @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。
5.Dl详解
-
@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误:

-
通过以下几种方案来解决:
-
@Primary

-
@Qualifier

-
@Resource

-
- @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。
- @Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。
相关文章:
【JavaWeb】后端(Maven+SpringBoot+HTTP+Tomcat)
目录一、Maven1.什么是Maven?2.Maven的作用?3.介绍4.安装5.IDEA集成Maven6.IDEA创建Maven项目7.IDEA导入Maven项目8.依赖配置9.依赖传递10.依赖范围11.生命周期二、SpringBoot1.Spring2.SpringBoot3.SpringBootWeb快速入门二、HTTP1.HTTP-概述2.HTTP-请求协议3.HTTP-响应协议…...
面试官:准备了一些springboot相关的面试题,快来看看吧
文章目录摘要Spring Boot 中的注解 RestController 和 Controller 有什么区别?Spring Boot 中如何处理异常?使用 ExceptionHandler 注解处理特定类型的异常:使用 ExceptionHandler 注解可以将特定类型的异常映射到一个处理方法上,…...
原子的波尔模型、能量量子化、光电效应、光谱实验、量子态、角动量
一. 卢瑟福模型 1908年,卢瑟福用α粒子继续轰击金箔,发现有极少数粒子,发生了非常大的偏移。而这对于当时主流的葡萄干面包模型理论分析是相悖的。 原子可看成由带正电的原子核和围绕核运动的一些电子组成,原子中心的原子核带正…...
【如何使用Arduino控制WS2812B可单独寻址的LED】
【如何使用Arduino控制WS2812B可单独寻址的LED】 1. 概述2. WS2812B 发光二极管的工作原理3. Arduino 和 WS2812B LED 示例3.1 例 13.2 例 24. 使用 WS2812B LED 的交互式 LED 咖啡桌4.1 原理图4.2 源代码在本教程中,我们将学习如何使用 Arduino 控制可单独寻址的 RGB LED 或 …...
计算机基本知识扫盲(持续更)
计算机基本知识扫盲Q:硬盘和磁盘有什么区别?A:硬盘和磁盘都是存储数据的设备。磁盘指的是存储数据的圆形或者是方形的光盘,但是硬盘则是指机械式硬盘和固态硬盘。磁盘一般用于存储少量数据,例如软件安装文件、音乐和电…...
学习大数据需要什么语言基础
Python易学,人人都可以掌握,如果零基础入门数据开发行业的小伙伴,可以从Python语言入手。 Python语言简单易懂,适合零基础入门,在编程语言排名上升最快,能完成数据挖掘、机器学习、实时计算在内的各种大数…...
ElasticSearch——详细看看ES集群的启动流程
参考:一起看看ES集群的启动流程 本文主要从流程上介绍整个集群是如何启动的,集群状态如何从Red变成Green,然后分析其他模块的流程。 这里的集群启动过程指集群完全重启时的启动过程,期间要经历选举主节点、主分片、数据恢复等重…...
【教学类-30-01】5以内加法题不重复(一页两份)(包含1以内、2以内、3以内、4以内、5以内加法,抽取最大不重复数量)
作品样式: 背景需求: 虽然学前阶段就对幼儿训练加减法列式题遭到诟病,但是从不少幼儿(特别是二胎)在家中已经开始适应加减法题型了。 结合中班年龄特点,我从5以内的不重复加法题开始实验(雪花…...
写博客8年与人生第一个502万
题记:我们并非生来强大,但依然可以不负青春。 原本想好好写一下如何制定一个目标并通过一点一滴的努力去实现,这三年反思发现其实写自己的经历并不重要。 很多人都听过一句话:榜样的力量是无穷的。 更现实和实际的情况是&#x…...
【华为OD机试真题】日志采集系统(javapython)
日志采集系统 时间限制:1s空间限制:256MB限定语言:不限 题目描述: 日志采集是运维系统的的核心组件。日志是按行生成,每行记做一条,由采集系统分 批上报。 如果上报太频繁,会对服务端造成压力;如果上报太晚,会降低用户的体验;如果一 次上报的条数太多,会导致超时…...
epoll源码剖析
文章目录1.前言2.应用层的体现3.两个重要结构(1)eventpoll(2)epitem4.四个函数(1)epoll_create源码(2)epoll_ctl源码(3)epoll_wait的源码(4)epoll_event_callback()5.水平触发和边缘触发1.状态变化2.LT模式3.ET模式1.前言 好久好久没有更新博客了,最近一直在实习&a…...
Linux驱动开发——高级I/O操作(一)
一个设备除了能通过读写操作来收发数据或返回、保存数据,还应该有很多其他的操作。比如一个串口设备还应该具备波特率获取和设置、帧格式获取和设置的操作;一个LED设备甚至不应该有读写操作,而应该具备点灯和灭灯的操作。硬件设备是如此众多,…...
适配器模式:C++设计模式中的瑞士军刀
适配器模式揭秘:C设计模式中的瑞士军刀引言设计模式的重要性适配器模式简介与应用场景适配器模式在现代软件设计中的地位与价值适配器模式基本概念适配器模式的定义与核心思想类适配器与对象适配器的比较设计原则与适配器模式的关系类适配器实现类适配器模式的UML图…...
【三十天精通Vue 3】 第三天 Vue 3的组件详解
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 组件的概述1. Vue 3 的组件系统2. Vue 3 组件的特点…...
SqlServer实用系统视图,你了解多少?
SqlServer实用系统视图,你了解多少?前言master..spt_valuessysdatabasessysprocesses一套组合拳sysobjectssys.all_objectssyscolumnssystypessyscommentssysindexes结束语前言 在使用任何数据库软件的时候,该软件都会提供一些可能不是那么公…...
NodeJS Cluster模块基础教程
Cluster简介 默认情况下,Node.js不会利用所有的CPU,即使机器有多个CPU。一旦这个进程崩掉,那么整个 web 服务就崩掉了。 应用部署到多核服务器时,为了充分利用多核 CPU 资源一般启动多个 NodeJS 进程提供服务,这时就…...
[C++笔记]vector
vector vector的说明文档 vector是表示可变大小数组的序列容器(动态顺序表)。就像数组一样,vector也采用连续的存储空间来储存元素。这就意味着可以用下标对vector的元素进行访问,和数组一样高效。与数组不同的是,它的大小可以动态改变——…...
Python 迁移学习实用指南:1~5
原文:Hands-On Transfer Learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如…...
【CSS重点知识】属性计算的过程
✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 标题什么是计算机属性确定声明值层叠冲突继承使用默认值总结什么是计算机属性 CSS属性值的计算…...
Java避免死锁的几个常见方法(有测试代码和分析过程)
目录 Java避免死锁的几个常见方法 死锁产生的条件 上死锁代码 然后 :jstack 14320 >> jstack.text Java避免死锁的几个常见方法 Java避免死锁的几个常见方法 避免一个线程同时获取多个锁。避免一个线程在锁内同时占用多个资源,尽量保证每个锁…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
