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

Servlet执行流程生命周期方法介绍体系结构、Request和Response的功能详解


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


Servlet

  • 一、 Servlet执行流程
  • 二、Servlet生命周期
  • 三、 Servlet方法介绍
  • 四、 Servlet体系结构
  • 五、 urlPattern配置
  • 六、 XML配置Servlet(老版本)
  • 七、Request
    • 7.1 Request继承体系
    • 7.2 Request获取请求数据
    • 7.3 Request通用方式获取请求参数
    • 7.4 请求参数中文乱码处理
      • 7.4.1 POST 解决方案
      • 7.4.1 GET 解决方案
    • 7.5 Request请求转发
  • 八、Response
    • 8.1 设置相应数据功能
    • 8.2 完成重定向
    • 8.3资源路径问题
    • 8.4 Response响应字符数据
    • 8.5 Response响应字节数据

一、 Servlet执行流程

  • Servlet由Tomcat服务器创建,,web项目发布到Tomcat服务器后,Tomcat服务器会自动调用web项目中的service()方法,但是在调用service()方法之前,会先创建一个Servlet对象,这个Servlet对象也是由Tomcat服务器创建的,Servlet执行流程就是由浏览器向Servlet发送请求,根据url路径找到要执行的方法,也就是service()方法,这个service()方法也是Tomcat调用的,这个service()方法一被调用,就会返回对应的响应给客户端浏览器。

在这里插入图片描述


二、Servlet生命周期

  • 对象的生命周期指一个对象从被创建到被销毁的整个过程
  • Servleti运行在Servlet:容器(web服务器)中,其生命周期由容器来管理,分为4个阶段:
    • 1.加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
    • 2.初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载配置文件、创建连接等初始化的工作,该方法只调用一次
    • 3.请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理。
    • 4.服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法完成资源的释放,在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收
@WebServlet("/demo")
public class ServletDemo implements Servlet {/*** 初始化方法* 1.调用时机:默认情况下,Servlet被第一次访问时调用* 2.调用次数:1次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("init...");}@Overridepublic ServletConfig getServletConfig() {return null;}/*** 提供服务* 1.调用时机:每次Servlet被访问时调用* 2.调用次数:多次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("hello service~");}@Overridepublic String getServletInfo() {return null;}/*** 销毁方法* 1.调用时机:内存释放或服务器关闭时* 2.调用次数:1次*/@Overridepublic void destroy() {System.out.println("destroy...");}
}

在这里插入图片描述


三、 Servlet方法介绍

  • 初始化方法,在Servleti被创建时执行,只执行一次
void init(ServletConfig servletConfig)
  • 提供服务方法,每次Servleti被访问,都会调用该方法
void service(ServletRequest servletRequest, ServletResponse servletResponse)
  • 销毁方法,当Servlet被销毁时,调用该方法。在内存释放或服务器关闭时销毁Servlet
void destroy()
  • 获取ServletConfig对象
ServletConfig getServletConfig()
  • 获取Servlet信息
String getServletInfo()

@WebServlet("/demo")
public class ServletDemo implements Servlet {private ServletConfig servletConfig;/*** 初始化方法* 1.调用时机:默认情况下,Servlet被第一次访问时调用* 2.调用次数:1次* @param servletConfig* @throws ServletException*/@Overridepublic void init(ServletConfig servletConfig) throws ServletException {this.servletConfig = servletConfig;System.out.println("init...");}@Overridepublic ServletConfig getServletConfig() {return this.servletConfig;}/*** 提供服务* 1.调用时机:每次Servlet被访问时调用* 2.调用次数:多次* @param servletRequest* @param servletResponse* @throws ServletException* @throws IOException*/@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("hello service~");}@Overridepublic String getServletInfo() {return "";}/*** 销毁方法* 1.调用时机:内存释放或服务器关闭时* 2.调用次数:1次*/@Overridepublic void destroy() {System.out.println("destroy...");}
}

四、 Servlet体系结构


在这里插入图片描述


  • 我们将来开发B/S架构的web项目,都是针对HTTP协议所以我们自定义Servlet,会继承HttpServlet
  • 自定义Servlet,重写doGetdoPost方法:
@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("get...");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("post...");}
}

  • 默认执行doGet方法:

在这里插入图片描述


  • 执行doPost方法:
    • 创建一个html文件,定义一个表单,设置url路径,方法为post请求,发送post请求:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>doPost</title>
</head>
<body>
<form action="/BBS/demo1" method="post"><input name="username"><input type="submit">
</form>
</body>
</html>

在这里插入图片描述


五、 urlPattern配置

  • Servlet要想被访问,必须配置其访间路径(urlPattern)
  • 一个Servlet,可以配置多个urlPattern
 String[] urlPatterns() default {};
@WebServlet(urlPatterns = {"/demo1","/demo2"})
  • urlPattern配置规则
    • 精确匹配
      • 配置路径:@WebServlet(urlPatterns = "/user/select")
      • 访问路径:http://localhost:8080/BBS/user/select
    • 目录匹配
      • 配置路径:@WebServlet(urlPatterns = "/user/*")
      • 访问路径:http://localhost:8080/BBS/user/aaa(aaa可以使任意字符)
    • 扩展名匹配
      • 配置路径:@WebServlet(urlPatterns = "*.do")注意:此处没有/,这里的*表示任意以.do的路径均可
      • 访问路径:http://localhost:8080/BBS/demo1.do
    • 任意匹配
      • 配置路径:@WebServlet(urlPatterns = "/")@WebServlet(urlPatterns = "/*")后者优先级更高
      • 访问路径:http://localhost:8080/BBS/ /后可为任意内容
    • //*的区别:
      • 当我们的项目中的Servlet配置了"/”,会覆盖掉tomcat中的DefaultServlet,当其他的url-patterni都匹配不上时都会走这个Servlet
      • 当我们的项目中配置了“*”,意味着匹配任意访问路径
  • 优先级:
    • 精确路径 > 目录路径 > 扩展名路径 > /* > /

六、 XML配置Servlet(老版本)

  • 1.编写Servlet类
  • 2.在web.xml中配置该Servlet类
<web-app><display-name>Archetype Created Web Application</display-name><!--Servlet全类名--><servlet><servlet-name>demo2</servlet-name><servlet-class>test.ServletDemo2</servlet-class></servlet><!--Servlet访问路径--><servlet-mapping><servlet-name>demo2</servlet-name><url-pattern>/demo2</url-pattern></servlet-mapping>
</web-app>

七、Request

  • Request:获取请求数据
  • Response:设置响应数据

7.1 Request继承体系


在这里插入图片描述


  • Tomcati需要解析请求数据,封装为request对象并且创建request对象传递到service方法中
  • 使用request对象,查阅JavaEE API文档的HttpServletRequest接口

7.2 Request获取请求数据

  • 请求行:
  • GET /request-demo/req1?username=zhangsan HTTP/1.1
    • String getMethod():获取请求方式:GET
    • String getContextPath():获取虚拟目录(项目访问路径):/request-demo
    • String Buffer getRequestURL():获取URL(统一资源定位符):http:/localhost:8080/request–demo/req1
    • String getRequestURI():获取URI(统一资源标识符):/request-demo/req1
    • String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//String getMethod()String method = req.getMethod();System.out.println(method);//String getContextPath()String contextPath = req.getContextPath();System.out.println(contextPath);//String Buffer getRequestURL()StringBuffer requestURL = req.getRequestURL();System.out.println(requestURL.toString());//String getRequestURI()String requestURI = req.getRequestURI();System.out.println(requestURI);//String getQueryString()String queryString = req.getQueryString();System.out.println(queryString);}

在这里插入图片描述


  • 请求头:
  • User-Agent:Mozilla/5.0 Chrome/91.0.4472.106
  • String getHeader((String name); 根据请求头名称,获取值
//user-agent:浏览器版本信息
String agent = req.getHeader("user-agent");
System.out.println(agent);

在这里插入图片描述


  • 请求体:
  • username=superbaby&password=123
  • ServletInputStream getInputStream();获取字节输入流
  • BufferedReader getReader();获取字符输入流
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取字符输入流BufferedReader reader = req.getReader();//2.读取数据String s = reader.readLine();System.out.println(s);}

在这里插入图片描述


7.3 Request通用方式获取请求参数

  • Map<String,String[]>getParameterMap():获取所有参数Map集合

  • String[]getParameterValues(String name):根据名称获取参数值(数组)

  • String getParameter(String name):根据名称获取参数值(单个值)

  • get方式:

    • html代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>doPost</title>
</head>
<body>
<form action="/BBS/demo5" method="get"><input type="text" name="username"><br><input type="password" name="password"><br><input type="checkbox" name="hobby" value="1"> 游泳<input type="checkbox" name="hobby" value="2"> 跑步 <br><input type="submit">
</form>
</body>
</html>
  • Java代码:
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//Get请求System.out.println("get...");//1.获取所有参数的Map集合Map<String, String[]> parameterMap = req.getParameterMap();for (String key : parameterMap.keySet()) {System.out.print(key + ": ");//获取值String[] strings = parameterMap.get(key);for (String string : strings) {System.out.print(string + " ");}System.out.println();}System.out.println("----------------------");//2.根据key获取值String[] hobbies = req.getParameterValues("hobby");for (String hobby : hobbies) {System.out.println(hobby);}System.out.println("----------------------");//3.获取单个参数String username = req.getParameter("username");String password = req.getParameter("password");System.out.println(username);System.out.println(password);}
  • post方式:
    • html代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>doPost</title>
</head>
<body>
<form action="/BBS/demo5" method="post"><input type="text" name="username"><br><input type="password" name="password"><br><input type="checkbox" name="hobby" value="1"> 游泳<input type="checkbox" name="hobby" value="2"> 跑步 <br><input type="submit">
</form>
</body>
</html>
  • Java代码:
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//Post请求System.out.println("get...");//1.获取所有参数的Map集合Map<String, String[]> parameterMap = req.getParameterMap();for (String key : parameterMap.keySet()) {System.out.print(key + ": ");//获取值String[] strings = parameterMap.get(key);for (String string : strings) {System.out.print(string + " ");}System.out.println();}System.out.println("----------------------");//2.根据key获取值String[] hobbies = req.getParameterValues("hobby");for (String hobby : hobbies) {System.out.println(hobby);}System.out.println("----------------------");//3.获取单个参数String username = req.getParameter("username");String password = req.getParameter("password");System.out.println(username);System.out.println(password);}
  • 通用代码:
@WebServlet("/demo5")
public class ServletDemo5 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//Get请求System.out.println("get...");//1.获取所有参数的Map集合Map<String, String[]> parameterMap = req.getParameterMap();for (String key : parameterMap.keySet()) {System.out.print(key + ": ");//获取值String[] strings = parameterMap.get(key);for (String string : strings) {System.out.print(string + " ");}System.out.println();}System.out.println("----------------------");//2.根据key获取值String[] hobbies = req.getParameterValues("hobby");for (String hobby : hobbies) {System.out.println(hobby);}System.out.println("----------------------");//3.获取单个参数String username = req.getParameter("username");String password = req.getParameter("password");System.out.println(username);System.out.println(password);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}
}

7.4 请求参数中文乱码处理

7.4.1 POST 解决方案

@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码POST//设置字符输入流的编码req.setCharacterEncoding("utf-8");//获取数据String username = req.getParameter("username");System.out.println(username);}

7.4.1 GET 解决方案

  • GET获取参数方式:getQueryString
  • 产生乱码的原因:
    • 浏览器在解析中文字符时采用UTF-8的字符集通过URL进行编码,将中文转换成%+16进制数的格式,然后将转换后的字符发送给服务器进行解码,tomcat在进行解码时是通过ISO-8859-1的字符集进行URL解码,由于编码和解码时用的字符集不同,所以就会出现乱码。
  • URL编码:
    • 将字符串按照编码方式转为二进制
    • 每个字节转为2个16进制数并在前边加上%
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//解决乱码GETString username = req.getParameter("username");//转换为字节数据,编码byte[] bytes = username.getBytes(StandardCharsets.ISO_8859_1);//将字节数组转换为字符串,解码username = new String(bytes,"utf-8");System.out.println(username);}
  • Tomcat8.0之后,已将GET请求乱码问题解决,设置默认的解码方式为UTF-8

7.5 Request请求转发

  • 请求转发(forward):一种在服务器内部的资源跳转方式
req.getRequestDispatcher("资源B路径").forward(req,resp);
  • 请求转发资源间共享数据:使用Request对象
  • void setAttribute(String name,Object o):存储数据到request域中
  • Object getAttribute(String name):根据key,获取值
  • void removeAttribute(String name):根据key,删除该键值对
@WebServlet("/demo7")
public class ServletDemo7 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("demo7...");//存储数据req.setAttribute("msg","hello");//请求转发req.getRequestDispatcher("/demo8").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}
}
@WebServlet("/demo8")
public class ServletDemo8 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("demo8...");//获取数据Object msg = req.getAttribute("msg");System.out.println(msg);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req,resp);}
}
  • 请求转发特点:
    • 浏览器地址栏路径不发生变化
    • 只能转发到当前服务器的内部资源
    • 一次请求,可以在转发的资源间使用request共享数据

八、Response

8.1 设置相应数据功能

  • 响应数据分为3部分:
    • 响应行
      • 设置响应状态码:
void setStatus(int sc)
    • 响应头
      • 设置响应键值对
void setHeader(String name,String value)
    • 响应体
      • 获取字符输出流
PrintWriter getWriter();
      • 获取字节输出流
ServletOutputStream getOutputStream();

8.2 完成重定向

  • 重定向(Redirect):一种资源跳转方式
@WebServlet("/resp1")
public class ResponseDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("resp1...");//重定向//设置响应状态码302//resp.setStatus(302);//设置响应头//resp.setHeader("Location","/BBS/resp2");//简化方式resp.sendRedirect("/BBS/resp2");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
@WebServlet("/resp2")
public class ResponseDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("resp2...");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
  • 重定向特点:
    • 浏览器地址栏路径发生变化
    • 可以重定向到任意位置的资源(服务器内部、外部均可)
    • 两次请求,不能在多个资源使用request:共享数据

8.3资源路径问题

  • 明确路径谁使用?
    • 浏览器使用:需要加虚拟目录(项目访问路径)
    • 服务端使用:不需要加虚拟目录
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("resp1...");//简化方式//动态获取虚拟目录String contextPath = req.getContextPath();resp.sendRedirect(contextPath + "/resp2");}

8.4 Response响应字符数据

  • 使用:
    • 1.通过Response对象获取字符输出流
PrintWriter writer resp.getWriter();
  • 2.写数据
writer.write("hello~");

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter writer = resp.getWriter();resp.setHeader("content-type","text/html");writer.write("<h1>hello~</h1>");writer.write("<h1>你好~</h1>");}

注意:

  • 该流不需要关闭,随着响应结束,response对象销毁,由服务器关闭
  • 中文数据乱码:原因通过Response获取的字符输出流默认编码:ISO-8859-1

8.5 Response响应字节数据

  • 使用:
  • 通过Response对象获取字符输出流
ServletOutputStream outputStream resp.getOutputStream();
  • 写数据
outputStream.write("字节数据")

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//读取文件FileInputStream fis = new FileInputStream("d://head.jpg");//获取response字节输出流ServletOutputStream os = resp.getOutputStream();//完成流的copybyte[] buff = new byte[1024];int len = 0;while ((len = fis.read(buff)) != -1) {os.write(buff,0,len);}fis.close();}
  • IOUtils工具类使用:
    • 导入坐标:
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>
    • 使用:
IOUtils.copy(fis,os);

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//读取文件FileInputStream fis = new FileInputStream("d://head.jpg");//获取response字节输出流ServletOutputStream os = resp.getOutputStream();//完成流的copyIOUtils.copy(fis,os);fis.close();}

相关文章:

Servlet执行流程生命周期方法介绍体系结构、Request和Response的功能详解

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Servlet 一、 Servlet执行流程二、Servlet生…...

软件工程之总体设计

总体设计是软件工程中的一个重要阶段&#xff0c;它关注整个系统的结构和组织&#xff0c;旨在将系统需求转化为可执行的软件解决方案。总体设计决定了系统的架构、模块划分、功能组织以及数据流和控制流等关键方面。 可行性研究 具体方面&#xff1a;经济可行性、技术可行性…...

监控员工电脑文件拷贝记录:电脑怎么看员工复制文件的历史记录

在现代企业管理中&#xff0c;数据安全和保密是极其重要的一环。企业需要确保敏感信息不被泄露&#xff0c;以防止可能的法律纠纷和经济损失。为此&#xff0c;许多公司都采取了一些措施来监控员工的电脑使用行为。其中&#xff0c;监控文件拷贝记录是一种常见的方法。本文将详…...

vue中request.js中axios请求和(若依)文件通用下载方法封装

vue中request.js中axios请求和&#xff08;若依&#xff09;文件通用下载方法封装 1.request.js import axios from axios import { Message, Loading } from element-ui import { saveAs } from file-saver // 创建axios实例 const request axios.create({// 这里可以放一…...

【大数据存储与处理】1. hadoop单机伪分布安装和集群安装

0. 写在前面 0.1 软件版本 hadoop2.10.2 ubuntu20.04 openjdk-8-jdk 0.2 hadoop介绍 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个…...

linux通过time命令统计代码编译时间

首先编写一个编译脚本 build.sh 内容如下&#xff1a; 然后执行time sh build.sh 编译完成后输出三个时间 time sh xxx.sh # 会返回3个时间数据 (1) real&#xff1a;从进程 ls 开始执行到完成所耗费的 CPU 总时间。该时间包括 ls 进程执行时实际使用的 CPU 时间&#xff0c;…...

logback日志是怎么保证多线程输出日志线程安全的

logback中的单例模式 logback日志框架使用了单例设计模式来进行日志输出。在logback中&#xff0c;Logger类是一个关键的组件&#xff0c;它负责记录和输出日志消息。 Logger类使用了单例设计模式&#xff0c;确保在一个应用程序中只存在一个Logger实例。这样做的好处是可以确…...

2022年统计用区划代码表SQL 01

行政区划代码为国家公布的六位县级以上行政区划代码 行政区编码的用途&#xff1a; APP里做城市级联选择根据身份证前六位获取用户所在城市区县 370786 昌邑市 370800 济宁市 370811 任城区 370812 兖州区 百度高德等接口通常都会返回adcode字段 (行政区编码)根据 行政区编…...

EM@基本初等函数@幂和根式@指数函数

abstract 基本初等函数幂和根式指数函数 指数和幂 正整指数幂 a n a^{n} an a ⋯ a ⏟ n 个 \underbrace{a\cdots{a}}_{n个} n个 a⋯a​​, n ∈ N n\in\mathbb{N^{}} n∈N 其中 a n a^{n} an称为** a a a的 n n n次幂** a a a叫做幂的底数, n n n叫做幂的指数 正整指数…...

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测&#…...

element 二次确认框,内容自定义处理

上代码&#xff1a; async inspectionTypeOff(row) {console.log(row.id);let taskArray await this.getTaskList(row.id); // 查询关联的任务console.log("taskArray", taskArray);let messageTip taskArray.length > 0? <div><p>确认禁用巡检项&…...

【软件设计师-中级——刷题记录4(纯干货)】

目录 进度管理工具Grantt图&#xff1a;程序语言基础&#xff1a;高级语言源程序模式&#xff1a; 每日一言&#xff1a;持续更新中... 个人昵称&#xff1a;lxw-pro 个人主页&#xff1a;欢迎关注 我的主页 个人感悟&#xff1a; “失败乃成功之母”&#xff0c;这是不变的道理…...

9.24 校招 实习 内推 面经

绿泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表 1、自动驾驶一周资讯 - 小马智行在京开展“车内无人”出行服务商业化试点&#xff0c;余承东将升任车BU董事长 自动驾驶一周资讯 - 小马智行在京开展“车内无人”出行服务商业化试点&#xff0…...

第二章:25+ Python 数据操作教程(第二十五节用 PYTHON 和 R 制作祝福圣诞节)持续更新

这篇文章献给所有 Python 和 R 编程爱好者...通过以下程序在同行中炫耀您的知识。作为一名数据科学专业人士,您希望自己的愿望在圣诞节前夕变得特别。如果您观察代码,您还可以学到 1-2 个技巧,您可以在以后的日常任务中使用这些技巧。 方法 1:运行以下程序,看看我的意思 R…...

你是怎么理解自动化测试的?理解自动化测试的目的和本质

其实自动化测试很好理解&#xff0c;由两部分组成&#xff0c;“自动化”和“测试”&#xff0c;所以我们要理解自动化测试&#xff0c;就必须理解“自动化”和“测试”&#xff0c;只有理解了这些概念&#xff0c;才能更轻松的做好的自动化测试。其中“自动化”可以想象成通过…...

二十六、MySQL并发事务问题:脏读/不可重复读/幻读

1、事务的隔离级别 &#xff08;1&#xff09;隔离级别 Read uncommitted # 读&#xff0c;未提交 Read committed # 读&#xff0c;已提交 Repeatable Read(默认) # 可重复读 Serializable # 串读 &#xff08;2&#xff09;基础语法 set transaction isolation level 事…...

RK3588平台开发系列讲解(项目篇)视频监控之RTMP推流

文章目录 一、RTMP协议是什么二、RTMP 的原理三、Nginx 流媒体服务器四、FFmpeg 推流沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 目前常见的视频监控和视频直播都是使用了 RTMP、RTSP、HLS、MPEG-DASH、WebRTC流媒体传输协议等。 视频监控项目组成,分为三部分:…...

http基础教程(超详细)

HTTP HTTP 一 、基础概念 请求和响应报文URL 二、HTTP 方法 GETHEADPOSTPUTPATCHDELETEOPTIONSCONNECTTRACE 三、HTTP 状态码 1XX 信息2XX 成功3XX 重定向4XX 客户端错误5XX 服务器错误 四、HTTP 首部 通用首部字段请求首部字段响应首部字段实体首部字段 五、具体应用 连接管理…...

Vue3 <script setup> 单文件组件 组合式 API 相关语法

1.vue3使用vuex <script setup> import {ref} from "vue" import {useStore} from "vuex"//获取store const storeuseStore(); const count ref(0); //获取store状态 const type store.state.type //给count赋值 count.value1;</script>2.vue…...

为什么说网络安全是IT行业最后的红利?是风口行业?

前言 “没有网络安全就没有国家安全”。当前&#xff0c;网络安全已被提升到国家战略的高度&#xff0c;成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高&#xff0c;涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...