Tomcat+Http+Servlet
文章目录
- 1.HTTP
- 1.1 请求和响应
- HTTP请求:请求行+请求头+请求体
- HTTP响应:响应行(状态行)+响应头+响应体
- 2. Apache Tomcat
- 2.1 基本使用
- 2.2 IDEA中创建 Maven Web项目
- 2.3 IDEA中使用Tomcat
- 3. Servlet
- 3.1 Servlet快速入门
- 3.2 Servlet执行流程
- 3.3 Servlet 生命周期
- 3.4 Servlet体系结构
- 3.4.1 自定义Servlet类
- 3.5 Servlet urlPattern配置
- 3.6 XML配置方式编写Servlet
JAVAWeb技术栈
BS架构:
B/S架构(Browser/Server架构)是一种常见的软件架构模式,用于构建Web应用程序。在B/S架构中,浏览器(Browser)作为客户端,通过网络协议(通常是HTTP)与服务器(Server)进行通信,而服务器负责处理客户端的请求并生成响应。
- 客户端(浏览器):客户端通常是用户使用的Web浏览器,如Chrome、Firefox或Safari。客户端负责向服务器发送请求,并将服务器返回的响应显示给用户。
- 服务器:服务器是Web应用程序的核心组件,负责接收客户端的请求并生成响应。服务器通常运行在专用的硬件设备或计算机上,并提供处理请求的软件环境
通信
- 网络通信:B/S架构依赖于网络通信来实现客户端和服务器之间的数据传输。通常使用HTTP协议进行通信,客户端发送HTTP请求到服务器,服务器处理请求并生成HTTP响应返回给客户端。
数据交互(动态资源)- 数据交互:客户端通过发送请求参数(如表单数据、URL参数等)向服务器发送数据。服务器可以使用不同的技术(如JavaServlet、JSP、ASP.NET等)来处理这些数据,并对其进行验证、处理和存储。
界面(静态资源)- 前端界面:B/S架构中的前端界面通常由HTML、CSS和JavaScript等技术来构建和呈现。
1.HTTP
HTTP(超文本传输协议)是一种用于在Web上进行通信的协议。
- 它定义了客户端和服务器之间进行请求和响应的规范。
- HTTP是基于TCP/IP协议栈的应用层协议,使用在Web浏览器和Web服务器之间。
- HTTP基于请求和响应模型的,一次请求对应一次响应
- HTTP是无状态的协议,即:每一次请求响应都是独立的
- 缺点:多次请求不能共享数据
- 优点: 速度快
1.1 请求和响应
url格式
http://www.itcast.cn:8080/news/index.html?uid=123&page=1
- 协议:“http”,常见的协议有HTTP,HTTPS、FTP等
- ip地址或域名:“www.itcast.cn”,也可以使用IP地址作为域名使用
- 端口:“8080”,端口可以省略,默认端口(HTTP:80,HTTPS:443,FTP:21)
- 资源路径:“/news/index.html”
- 查询参数:“uid=123&page=1”,可以允许有多个参数,多个之间用“&”作为分隔符
http协议特点
- 简单快速
- 无连接
- 无状态;
- 灵活;
- 支持C/S模式
HTTP请求:请求行+请求头+请求体
请求行:
说明请求方法、要访问的资源以及所使用的协议版本;
- 请求方法:
GET:从服务器获取资源(一项或多项)
POST:在服务器新建一个资源
PUT:在服务器更新资源(客户端提供改变后的完整资源)
DELETE:从服务器删除资源
请求头:
紧接着请求行,请求头部由键值对组成,每行一对。 请求头部通知服务器有关于客户端请求的信息,典型 的请求头有:
- Host:表示请求的主机名称
- User-Agent:产生请求的浏览器类型
- Accept:客户端(浏览器)可接受的资源类型
- Content-Type:请求体数据的类型
- Authorization:用于发送身份验证凭据。
- Cookie:用于发送服务器分配的Cookie信息。
请求体
请求体不在GET方法中使用,经常在POST、PUT方法中使用
- 请求体的数据可以是:表单数据、文本、XML、JSON
- 与请求数据相关的最常使用的请求头是Content-Type和Content-Length
- - 注意事项:- -
请求行中的请求方法指定了对资源的操作类型,如获取、创建、更新或删除。
请求头提供了关于请求的附加信息,如客户端特性、所接受的响应类型等。
请求体用于传输实际数据,通常在POST、PUT等方法中使用。Q1: GET和POST请求的区别
- 语义方面:
GET方法用于从服务器获取资源。GET请求不应该对服务器产生副作用,即不应该修改服务器状态。
POST方法用于向服务器提交数据,通常用于创建新资源或发送更新请求。POST请求可以对服务器产生副作用,即可以修改服务器状态。
- 数据传输方面:
GET请求将数据附加在URL的查询参数中,以键值对的形式发送。
POST请求将数据放在请求体中进行传输,而不是作为URL的一部分。
这使得POST请求更适合传输大量数据或敏感数据,因为请求体中的数据不会直接暴露在URL中。
- 数据长度方面:
GET请求的数据传输长度通常受到URL长度的限制。
POST请求的数据传输长度没有特定的限制,但服务器和网络基础设施可能会设置其自己的限制。
- 缓存方面:
GET请求通常可以被浏览器缓存,浏览器可以缓存GET请求的响应并在下次请求相同资源时重用缓存的响应,以提高性能。
POST请求通常不被浏览器缓存,因为它们可能具有副作用,且每个POST请求可能会产生不同的结果。
HTTP响应:响应行(状态行)+响应头+响应体
HTTP响应也由三个部分组成,分别是:状态行、响应头、响应体
状态行
状态行由协议版本号、状态码、状态消息三部分组成
状态码有三位数字组成,第一个数字定义了响应的类别:
1xx:响应中--表示请求已接收,正常处理中或需要进一步操作;
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--客户发送的请求存在问题有语法错误或请求无法实现
5xx:服务器端错误--服务器在处理请求时出现了问题,服务器未能实现合法的请求
请求码 | 说明 |
---|---|
100 Continue(继续): | 表示服务器已经接收到了请求的头部,并且客户端应该继续发送请求的主体部分。 |
101 Switching Protocols(切换协议): | 表示服务器正在根据客户端的请求切换协议。例如,客户端可以发送Upgrade请求头,请求将连接从HTTP协议切换到WebSocket协议。 |
102 Processing(处理中): | 表示服务器正在处理请求,但尚未完成处理。 |
200 OK(成功): | 表示请求已成功处理,并且服务器返回了请求的内容。 |
201 Created(已创建): | 表示服务器成功创建了新的资源。通常在使用POST请求创建资源时返回. |
300 Multiple Choices(多种选择): | 表示请求有多个可供选择的资源,需要客户端进行进一步的选择。 |
301 Moved Permanently(永久重定向): | 表示请求的资源已永久移动到新的URL。客户端应该使用新的URL进行后续的请求。 |
302 Found(临时重定向): | 表示请求的资源暂时移动到了新的URL。客户端应该继续使用原始的URL进行后续的请求。 |
400 Bad Request(错误请求): | 表示服务器无法理解客户端发送的请求,通常是由于请求语法错误或参数验证失败导致的。 |
401 Unauthorized(未授权): | 表示客户端需要进行身份验证才能访问请求的资源。需要在请求中提供有效的身份验证凭据。 |
404 Not Found(未找到): | 表示请求的资源在服务器上不存在,无法找到。这是最常见的客户端错误响应码。 |
500 Internal Server Error(服务器内部错误): | 表示服务器在处理请求时遇到了未知的内部错误,导致无法完成请求。 |
501 Not Implemented(未实现): | 表示服务器不支持或未实现请求的功能。通常用于指示服务器无法满足请求的特定功能 |
\
响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理响应数据
常见的响应头
Content-Type:响应内容的类型,例如"text/html"表示HTML文档,"application/json"表示JSON数据等。
Content-Length:指定响应体的字节长度,用于表示响应内容的大小。
Location:用于重定向响应中,指定重定向的目标URL。
Cache-Control:用于控制响应的缓存行为,例如设置缓存的有效期、是否可缓存等。
Set-Cookie:设置响应中的Cookie,用于在客户端存储数据或维持会话状态。
Server:指定服务器软件的名称和版本号。
响应体
响应体就是响应的消息体,数据可以是普通文本、XML、JSON、HTML源码
2. Apache Tomcat
Web服务器
Web服务器是一种软件或计算机程序,用于接收HTTP请求并返回HTTP响应。它在Web应用程序和客户端之间充当中间层,负责处理和传递网络请求,并提供所请求的资源或执行特定的操作。
//通俗的讲:Web服务器就是把我们自己本地写的html网页放到一个平台,这个平台其他用户通过输入你的IP地址和端口号等也可以访问到。
功能
- 接收和解析HTTP请求:Web服务器监听指定的端口,接收来自客户端的HTTP请求,并解析请求中的方法、URL、请求头、请求体等信息。
- 处理请求、生成和发送HTTP响应
- 将web项目部署到服务器中,对外提供网上浏览服务
常见的Web服务器
- Nginx:Nginx是一个高性能的开源Web服务器和反向代理服务器。它以轻量级和高并发性能著称,适用于处理大量并发连接
- Apache HTTP Server:Apache是最流行的开源Web服务器软件之一。它具有稳定性、可靠性和灵活性,广泛用于各种Web应用和网站。
Tomcat是一个轻量级的Web服务器,支持Servlet/JSP少量JavaEE规范,也称为Web容器,Servlet容器。
注意:
Tomcat的启动与Java Development Kit (JDK) 的位置是相关的。Tomcat是一个Java Web应用服务器,它需要Java运行时环境来执行。当你启动Tomcat时,它会查找并使用Java命令来启动。
Tomcat在启动时会按照以下顺序查找JDK:
检查JAVA_HOME环境变量:Tomcat会首先查找JAVA_HOME环境变量,该变量指向JDK的安装目录。如果JAVA_HOME已经设置,并且指向有效的JDK路径,Tomcat将使用该JDK来启动。
检查系统路径:如果JAVA_HOME未设置,Tomcat会查找系统路径(PATH环境变量)中的可执行文件java来启动。它将使用找到的第一个java命令执行。
2.1 基本使用
下载:
配置环境变量
启动:双击bin\startup.bat
(控制台中文乱码解决:修改conf/logging.properties
java.util.logging.ConsoleHandler.encoding = GBK (utf-8改为GBK)
验证:在浏览器输入localhost:8080
修改配置:
1.修改启动端口号:conf/server.xml
部署项目
将项目放到webapps目录下,即部署完成。
2.2 IDEA中创建 Maven Web项目
项目结构
- 编译后的Java字节码文件和resources的资源文件,放到WEB-INF下的classes目录下
- pomxml中依赖坐标对应的jar包,放入WEB-INF下的lib目录下
IDEA创建Maven Web项目步骤
视频地址: https://www.bilibili.com/video/BV1Qf4y1T7Hx/
2.3 IDEA中使用Tomcat
视频地址:https://www.bilibili.com/video/BV1Qf4y1T7Hxf
方法1:将本地的tomcat集成到IDEA中,然后进行项目部署;
方法2:在pom文件里添加插件
<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.imooc</groupId><artifactId>web-demo</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency></dependencies><build><plugins><!-- tomcat 插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>81</port><path>/</path></configuration></plugin></plugins></build></project>
3. Servlet
Servlet是一种Java语言编写的服务器端程序,用于处理客户端发起的请求并返回响应。
- Servlet 是javaEE规范之一,其实就是一个接口,将来我们需要定义Servlet实现类,并由web服务器运行。
- Servlet运行在支持Java Servlet规范的Web服务器中,可以接收HTTP请求、处理请求参数、生成动态内容、访问数据库等等。
- Servlet是Java Web开发的核心技术之一,它可以与JSP、JavaBean等技术结合使用,构建出功能强大的Web应用程序。
3.1 Servlet快速入门
步骤:
- 创建web项目,导入Servlet依赖坐标;
- 定义一个类,实现Servlet接口,并重写里边的所有方法,并在service方法里输入一句话;
- 配置:在类上使用@WebServlet注解,配置该Servlet访问路径;
- 访问:启动Tomcat,浏览器输入url访问该Servlet;
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>
//2. 定义一个类,实现Servlet接口,并重写里边的所有方法,并在service方法里输入一句话;
package com.itheima;import javax.servlet.*;
import java.io.IOException;public class web implements Servlet {public void init(ServletConfig servletConfig) throws ServletException {}public ServletConfig getServletConfig() {return null;}public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("servlet hello world");}public String getServletInfo() {return null;}public void destroy() {}
}
3.2 Servlet执行流程
Q1: Servlet 由谁创建? Servlet方法由谁调用?
- Servlet由web服务器创建,Servlet方法由web服务器调用。
Q2:服务器怎么知道Servlet中一定有service方法?
- 因为我们自定义的Servlet,必须实现Servlet接口并复写其方法,而Servlet接口中有service方法
3.3 Servlet 生命周期
//方法
1.service() 方法:
- Servlet接口中最重要的方法是service()方法。
- 该方法用于处理HTTP请求,并根据请求的方法(GET、POST、PUT、DELETE等)调用对应的doGet()、doPost()、doPut()、doDelete()等方法进行处理。
- 在service()方法中,开发人员可以根据具体的需求编写自己的处理逻辑。2.init() 和 destroy() 方法:
- init()方法在Servlet被初始化时调用,可以在该方法中进行一些初始化操作,例如加载配置文件、建立数据库连接等。
- - destroy()方法在Servlet被销毁时调用,可以在该方法中进行一些资源释放操作,例如关闭数据库连接、释放内存等。3.doGet() 和 doPost() 方法:
- 这两个方法是service()方法中被调用的具体处理HTTP请求的方法。
- doGet()方法用于处理GET请求,doPost()方法用于处理POST请求。4.getServletConfig() 和 getServletInfo() 方法:
- 这两个方法用于获取Servlet的配置信息和信息描述。
- getServletConfig()方法返回一个ServletConfig对象,该对象包含了Servlet的配置参数。- getServletInfo()方法返回一个描述性字符串,用于描述Servlet的信息。
3.4 Servlet体系结构
Aim:简化开发
HttpServlet类
HttpServlet类是Java Servlet规范中的一个抽象类,它扩展自GenericServlet类,并提供了用于处理HTTP请求和响应的方法。
//通俗来说,我们开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet都会继承HttpServlet
HttpServlet抽象类的方法及说明
方法 | 说明 |
---|---|
doGet() 和 doPost(): | 这两个方法用于处理GET和POST请求。 |
service(): | 根据请求的HTTP方法(GET、POST、PUT、DELETE等)自动调用对应的doGet()、doPost()、doPut()、doDelete()等方法。如果业务逻辑不依赖HTTP方法,可以直接重写service()方法。 |
init() 和 destroy(): | 这两个方法用于Servlet的初始化和销毁。 |
getServletContext(): | 该方法返回一个ServletContext对象,用于访问Servlet上下文。 |
//get和post
package com.itheima.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/demo")
public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);System.out.println("get...");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);System.out.println("post...");}
}
post
编写测试网页
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>test</title>
</head>
<body>
<form action="/web-demo/demo" method="post"><input name="username"><input type="submit">
</form>
</body>
</html>
3.4.1 自定义Servlet类
在service方法中,根据请求的不同方式(GET或POST),分别调用了doGet和doPost方法。这意味着你可以在这两个方法中编写处理GET请求和POST请求的逻辑
package com.itheima.web;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;public class MyHttpServlet implements Servlet {@Overridepublic void init(ServletConfig config) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// 根据请求方式的不同,进行分别的处理HttpServletRequest request = (HttpServletRequest) req;//1. 获取请求方式String method = request.getMethod();//2. 判断if("GET".equals(method)){// get方式的处理逻辑doGet(req,res);}else if("POST".equals(method)){// post方式的处理逻辑doPost(req,res);}}protected void doPost(ServletRequest req, ServletResponse res) {}protected void doGet(ServletRequest req, ServletResponse res) {}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}
继承MyServlet
package com.itheima.web;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;@WebServlet("/demo1")
public class ServletDemo1 extends MyHttpServlet{@Overrideprotected void doPost(ServletRequest req, ServletResponse res) {System.out.println("post...!");}@Overrideprotected void doGet(ServletRequest req, ServletResponse res) {System.out.println("get.....!");}
}
3.5 Servlet urlPattern配置
servlet urlpattern是指在web.xml文件中配置servlet时,用于指定servlet的访问路径的一种方式。
- 它可以通过正则表达式来匹配不同的URL路径,从而将请求分发给不同的servlet处理。
// 例如,可以将urlpattern设置为“/hello”,这样当用户访问“http://localhost:8080/hello”时,就会调用对应的servlet来处理请求。- 一个Servlet可以配置多个urlPattern
//例如:@WebServlet(urlPattern = {“/demo1”,“/demo2”})
URL Pattern配置规则:1.精确匹配:使用具体的URL路径来匹配。
例如,/hello表示只匹配路径为/hello的请求。2.前缀匹配:使用通配符*来匹配路径的前缀。
例如,/api/*表示匹配以/api/开头的所有请求,如/api/users、/api/products等。3.后缀匹配:使用通配符*来匹配路径的后缀。(注意不要写斜杠)
例如,*.html表示匹配以.html结尾的请求,如index.html、about.html等。4.扩展名匹配:使用通配符*来匹配指定扩展名的请求。(注意不要加斜杠)
例如,*.do表示匹配以.do结尾的请求,如/login.do、/register.do等。5.路径匹配:使用通配符**来匹配多级路径。
例如,/api/**表示匹配以/api/开头的所有请求,无论后面还有多少级路径
如/api/users/getAll、/api/products/getById等。6.正则表达式匹配:使用正则表达式来匹配路径。
例如,/user/[0-9]+表示匹配以/user/后面跟着一个或多个数字的请求,如/user/123、/user/456等。
3.6 XML配置方式编写Servlet
步骤:
- 编写Servlet类
- 在web.xml中配置该类
package com.itheima.web;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;public class ServletDemo13 extends MyHttpServlet {@Overrideprotected void doGet(ServletRequest req, ServletResponse res) {System.out.println("demo13 get...");}@Overrideprotected void doPost(ServletRequest req, ServletResponse res) {}
}
在web.xml中配置该Servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- Servlet 全类名--><servlet><!-- servlet的名称,名字任意--><servlet-name>demo13</servlet-name><!--servlet的类全名--><servlet-class>com.itheima.web.ServletDemo13</servlet-class></servlet><!-- Servlet 访问路径--><servlet-mapping><!-- servlet的名称,要和上面的名称一致--><servlet-name>demo13</servlet-name><!-- servlet的访问路径--><url-pattern>/demo13</url-pattern></servlet-mapping>
</web-app>
相关文章:

Tomcat+Http+Servlet
文章目录 1.HTTP1.1 请求和响应HTTP请求:请求行请求头请求体HTTP响应:响应行(状态行)响应头响应体 2. Apache Tomcat2.1 基本使用2.2 IDEA中创建 Maven Web项目2.3 IDEA中使用Tomcat 3. Servlet3.1 Servlet快速入门3.2 Servlet执行…...

Leaflet入门,Leaflet如何实现vue双向绑定数据添加到图片标记物到地图上,动态根据vue数据更新到地图上以及鼠标经过标记物显示提示框
前言 本章使用Leaflet的vue2-leaflet或者vue-leaflet插件方式实现vue数据绑定地图数据,实现地图标记物与vue数据的双向联动更新,以及鼠标经过标记物显示提示框功能。 实现效果演示 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定…...
C++设计模式结构型之代理模式
一、概述 代理模式是一种结构型模式,在很多不同的场合具有广泛的分类和应用。其主要实现的思想是在客户端和真正要访问的对象之间引入一个 代理对象(间接层),于是,以往客户端对真正对象的访问现在变成了通过代理对…...
使用PHP实现实时聊天功能的匿名聊天与加密传输
使用PHP实现实时聊天功能的匿名聊天与加密传输 随着互联网的发展,人与人之间的交流方式也发生了天翻地覆的变化。其中,实时聊天功能成为了一种越来越受欢迎的交流方式。对于很多网站来说,提供匿名聊天功能能够吸引更多的用户参与,…...

Maven 基础之依赖管理、范围、传递、冲突
文章目录 关于依赖管理坐标和 mvnrepository 网站pom.xml 中"引"包 依赖范围依赖传递依赖冲突 关于依赖管理 坐标和 mvnrepository 网站 在 maven 中通过『坐标』概念来确定一个唯一确定的 jar 包。坐标的组成部分有: 元素说明<groupId>定义当前…...
Python jupyter lab 设置
在下载好jupyter lab 后,需要对其进行设置,尤其是远程服务器的时候,因为根本就是没有屏幕,也没有浏览器。 新建设置文件 jupyter lab --generate-config设置文件内部参数 vim ~/.jupyter/jupyter_lab_config.py进去一通改&#…...

水库大坝安全监测系统实施方案
一、方案概述 水库大坝作为特殊的建筑,其安全性质与房屋等建筑物完全不同,并且建造在地质构造复杂、岩土特性不均匀的地基上,目前对于大坝监测多采用人工巡查的方法,存在一定的系统误差,其工作性态和安全状况随时都在变…...

GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会)
GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会) Glove子词嵌入上游、下游任务监督学习、无监督学习BERTGlove 子词嵌入 上游、下游任务 监督学习、无监督学习 BERT...

Debian10:安装PHPVirtualBox
PHPVirtualBox 是一个用 PHP 编写,用于管理 VirtualBox 的 Web 前端(由AJAX实现)。 参考文章:VirtualBoxPHPVirtualBox部署_骡子先生的博客-CSDN博客php virualbox,浏览器远程控制VBox 虚拟机phpVirtualBox_weixin_39815879的博客…...
RANSAC算法
RANSAC简介 RANSAC(RAndom SAmple Consensus,随机采样一致)算法是从一组含有“外点”(outliers)的数据中正确估计数学模型参数的迭代算法。 “外点”一般指的的数据中的噪声,比如说匹配中的误匹配和估计曲线中的离群点。所以,RANSAC也是一种“外点”检…...

考研408 | 【计算机网络】 传输层
导图 传输层的功能 传输层的两个协议 传输层的寻址与端口 UDP协议 UDP的主要特点 UDP首部格式: UDP校验: TCP协议 TCP协议的特点 TCP报文段首部格式 TCP连接管理 TCP的连接建立 SYN洪泛攻击 TCP的连接释放 TCP可靠传输 序号: 确认࿱…...
Redis_缓存3_缓存异常(数据不一致、雪崩、击穿、穿透)
14.6缓存异常 四个方面 缓存中数据和数据库不一致缓存雪崩缓存击穿缓存穿透 14.6.1数据不一致: 一致性包括两种情况 缓存中有数据,需要和数据库值相同缓存中没有数据,数据库中的数据是最新值 如果不符合以上两种情况,则出现…...
谁能讲清楚Spark之与MapReduce的对比
我们已经知道Spark是如何设计和实现数据处理流程的,这里我们 再深入思考一下,为什么Spark能够替代MapReduce成为主流的大数据处理框架呢?对比MapReduce,Spark究竟有哪些优势? 一 优势 1 通用性: 基于函数式编程思想,MapReduce将数据类型抽象为,k,v格式,并将数据处理…...

Android自定义侧滑Item
源码地址:https://github.com/LanSeLianMa/CustomizeView/tree/master/cehuaitem 使用方式一:XML布局中直接使用 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com…...

c++11 标准模板(STL)(std::basic_stringbuf)(三)
定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbuf…...
Nodejs 第九章(模块化)
Nodejs 模块化规范遵循两套一 套CommonJS规范另一套esm规范 CommonJS 规范 引入模块(require)支持四种格式 支持引入内置模块例如 http os fs child_process 等nodejs内置模块支持引入第三方模块express md5 koa 等支持引入自己编写的模块 ./ …/ 等支…...

shell之正则表达式及三剑客grep命令
一、正则表达式概述 什么是正则表达式? 正则表达式是一种描述字符串匹配规则的重要工具 1、正则表达式定义: 正则表达式,又称正规表达式、常规表达式 使用字符串描述、匹配一系列符合某个规则的字符串 正则表达式 普通字符: 大小写字母…...
LeetCode 热题 100 JavaScript--33. 搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nums[1], …,…...

并发编程 - 线程池中的常见面试题
目录 1. 线程池相比于线程有什么优点 2. 线程池的参数有哪些 3. 线程工厂有什么用 4. 说一下线程的优先级 5. 说一下线程池的执行流程 6. 线程池的拒绝策略有哪些 7. 如何实现自定义拒绝策略 8. 如何判断线程池中的任务是否执行完成 1. 线程池相比于线程有什么优点 有…...
将多个单独的 Excel 文件合并成一个,并添加标题行
要将多个单独的 Excel 文件合并成一个,并添加标题行,可以使用 Python 的 pandas 库。以下是一个示例代码,假设要合并的 Excel 文件都在同一个文件夹中: import os import pandas as pd # 指定文件夹路径 folder_path path/to/fo…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...