JAVA集中学习第五周学习记录(二)

news2024/11/25 5:02:30

系列文章目录

第一章 JAVA集中学习第一周学习记录(一)
第二章 JAVA集中学习第一周项目实践
第三章 JAVA集中学习第一周学习记录(二)
第四章 JAVA集中学习第一周课后习题
第五章 JAVA集中学习第二周学习记录(一)
第六章 JAVA集中学习第二周项目实践
第七章 JAVA集中学习第二周学习记录(二)
第八章 JAVA集中学习第二周课后习题
第九章 JAVA集中学习第二周学习记录(三)
第十章 JAVA集中学习第二周学习记录(四)
第十一章 JAVA集中学习第三周学习记录(一)
第十二章 JAVA集中学习第三周小组项目开发
第十三章 JAVA集中学习第四周学习记录(一)
第十四章 JAVA集中学习第四周学习记录(二)
第十五章 JAVA集中学习第四周学习记录(三)
第十六章 JAVA集中学习第四周学习记录(四)
第十七章 JAVA集中学习第五周学习记录(一)
第十八章 JAVA集中学习第五周学习记录(二)


文章目录

  • 系列文章目录
  • 前言
  • 一、Servlet
    • 1. Servlet运行过程
    • 2. Servlet与url对应
      • 2.1 单个
      • 2.2 多个
    • 3. servlet的生命周期
      • 3.1 创建
      • 3.2 初始化
      • 3.3 服务执行
      • 3.4 销毁
    • 4. Servlet的单例模式
    • 5. Servlet简写
    • 6. 请求和响应分解
    • 7. 介绍请求对象HttpServletRequest
      • 7.1 获得请求行信息
      • 7.2 获取请求头信息
      • 7.3 获取请求主体信息
    • 8. 介绍响应对象HttpServletResponse
      • 8.1 设置响应行
      • 8.2 设置响应头
      • 8.3 设置响应主体
    • 9. 过滤器与监听器
      • 9.1 过滤器Filter
      • 9.1 监听器
  • 二、jsp
      • 2.1 jsp的运行过程
      • 2.2 转发和重定向
      • 2.2.1 转发
      • 2.2.2 重定向
      • 2.2.3 为什么会转发用request,重定向用response
      • 2.2.4 转发与重定向区别:
      • 2.3 作用域对象
        • 2.3.1 pageContext
        • 2.3.2 request
        • 2.3.3 session
        • 2.3.4 application
      • 2.4 路径问题:
      • 2.5 jsp语法
      • 2.6 jsp九大内置对象(重点要记)
  • 三、Cookie
    • 1. CookieServlet类
    • 2. empLogin.jsp文件
    • 3. emok.jsp文件
  • 四、Ajax
    • 1. 同步请求和异步请求
    • 2. Ajax优势劣势
    • 3. Ajax常用方法
      • 3.1 open(method, URL, async)
      • 3.2 send(content)
      • 3.3 setRequestHeader(header, value)
    • 4. Ajax常用属性
    • 5. Web与Ajax差异
    • 6. Ajax工作流程
    • 7. Ajax使用步骤
  • 五、同步请求、异步请求具体区别
    • 1. ajaxUser.jsp文件
    • 2. AjaxServlet文件
  • 总结


前言

本文我们将讲述:
Servlet:是在服务器端编程的技术
jsp:.jsp文件类似.html文件,里面都是前端页面代码,以后会用.jsp文件
Cookie:在客户端做数据存储
Ajax:异步请求
同步请求、异步请求具体区别:Ajax与Web对比
人类甄别计划完成了100%,但我觉得太没意思了就没执行,毕竟符合条件的就我一个外星移民,照理你们都得被毁灭光线“biubiu”死,但太没意思了嘛。我决定把这个杀手锏握在手里,让每个国家上交国家金库里的30%,不然我就针对性的把他们国家的人都“biubiu”死!呼哈哈哈哈哈哈哈哈!呼哈哈哈哈哈哈哈哈哈哈哈!


一、Servlet

服务器-Tomcat容器-web服务器-web容器-tomcat-servlet容器指的都是Servlet
Servlet是在服务器端编程的技术 哦,déjà-vu"
一个Servlet对象,负责一个或一组url
Servlet/jsp是一种在服务器端动态生成html/css/js页面的技术,可以在idea里动态生成页面的组件

1. Servlet运行过程

(发送)客户端浏览器发送请求到服务器(用到http协议)
(匹配)服务器根据请求信息的路径url,去调用响应的Servlet类(请求)
(处理)通过Servlet中的打印流对象将生成的html数据输出给服务器(响应)
(返回)服务器将servlet生成的数据在输出给客户端浏览器(用到http协议)
(查看)客户端接收到响应信息后,先解压,再交给浏览器解释执行,用户进行查看

2. Servlet与url对应

2.1 单个

一个Servlet对象,负责一个url
写法:
/aaa

2.2 多个

一个Servlet对象,负责一组url
写法有二:
/aaa/*

*.bbb

3. servlet的生命周期

3.1 创建

当客户端第一次发送请求到Servlet里,服务器才会创建该Servlet对象

3.2 初始化

创建时初始化
执行一次

3.3 服务执行

对请求进行分发,分发到对应的方法里进行处理
重复执行

3.4 销毁

关闭服务器时,当前服务器下所有Servlet对象都销毁

4. Servlet的单例模式

Servlet其实是伪单例:构造器可以共有
实现方式:
使用是map集合的方式,实现servlet对象单例
是key
是value

一般是懒汉式,饿汉式用1实现

5. Servlet简写

Servlet3.0版本支持注解方式来配置Servlet
一个注解@WebServlet替换两组对应标签
在这里插入图片描述
在Servlet类上写@WebServlet(“要链接的前端页面”)

6. 请求和响应分解

http协议:
单向性、长连接、无状态
规定的内容:
——请求的内容:
————1、一个请求行(请求方式,请求路径,协议名字,协议版本)
————2、多个请求头
————3、请求主体(请求的参数列表)
——响应的内容:
————1、一个响应行(协议名,协议版本,状态码,状态码描述)
————2、多个响应头
————3、响应主体

7. 介绍请求对象HttpServletRequest

7.1 获得请求行信息

请求方式:request.getMethod()
资源路径:request.getRequestURL()
资源路径:request.getRequestURI()
协议:request.getScheme()
协议版本号:request.getProtocol()
get方式的请求信息:request.getQueryString()
当前项目部署的名称:request.getContextPath()

7.2 获取请求头信息

单独获得:request.getHeader(“User-Agent”)
获得所有:
Enumeration 枚举的意思,getHeaderNames()返回枚举类型的数组

Enumeration<String> names=request.getHeaderNames();
while(names.hasMoreElements()) {
    String name = names.nextElement();
    System.out.println(name + ":" + request.getHeader(name));
    System.out.println();
}

7.3 获取请求主体信息

获得请求主题里的参数列表
String empno= request.getParameter(“empno”);//获得请求参数
String ename = request.getParameter(“ename”);
获得一组参数:
request.getParameterValues(“cait”);

8. 介绍响应对象HttpServletResponse

8.1 设置响应行

response.setStatus(Integer.parseInt(empno), ename);//设置一个状态,同时设置状态信息

8.2 设置响应头

//处理乱码
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        //简写response.setContentType("text/html;charset = utf-8");
        response.setHeader("contentType", "text/html;charset = utf-8");
        //完整版

8.3 设置响应主体

response.getWriter().println(ename + "登陆失败");

9. 过滤器与监听器

9.1 过滤器Filter

可以对web服务器管理的所有web资源进行拦截,在web返回servletservlet返回web 都会进行拦截。

9.1 监听器

监听器用于监听web应用中的某些对象、信息的创建、销毁、增加、修改、删除等动作的发生,然后做出相应的相应处理。当范围对象的状态发生变化时,服务器自动调用监听器对象中的方法。可以做统计在线人数。

二、jsp

jsp就是Servlet:继承HttpJspBase继承Servlet
Servlet擅长做逻辑处理,不擅长做数据展示;
jsp擅长做数据展示,不擅长做逻辑处理
jsp本质上是Servlet,所以jsp也是java类

2.1 jsp的运行过程

客户端第一次发送请求,要访问jsp页面,
服务器接收到请求,获得请求路径,
将对应的jsp页面,翻译成java类
然后编译成字节码文件,
再使用虚拟机,解释成机器码,运行机器码
根据请求信息进行逻辑处理后,给出响应,以流方式输出给服务器,再输出到客户端

2.2 转发和重定向

(相当于return,后面的代码不会执行)
jsp-jsp
jsp-Servlet
Servlet-jsp
Servlet-Servlet

2.2.1 转发

转发代码:

request.setAttribute("emps", emps);
request.getRequestDispatcher("show.jsp").forward(request, response);

转发时,将本方法的request参数和response参数传给转发后的页面,所以能做到共享相同的请求对象和上下文数据。
转发是服务器内部的操作,客户端不会察觉到转发的过程,URL地址不会发生改变

2.2.2 重定向

重定向代码:

request.setAttribute("emps", emps);//把键值对存在request对象中
response.sendRedirect("show.jsp");
//如果想

因为重定向没法传入request、response,所以重定向没法获取数据,如果想获取数据,可以将第二行改为如下,将数据传入,但如果需要传大量数据,本方法会显得非常臃肿。

response.sendRedirect("show.jsp?emps=", emps);

重定向的本质:服务器发送一个特殊的响应给客户端,告诉客户端它请求的资源在另一个URL上,客户端根据新的URL发起一个新的请求,服务器会处理该请求并返回相应。

2.2.3 为什么会转发用request,重定向用response

转发代表服务器内一个页面转到另一个页面,是把客户端传给服务器的request传给另一个页面,客户端没做任何操作。
重定向代表服务器返回给客户端一个response,客户端再自动重新发起另一个请求request,访问另一个页面。

2.2.4 转发与重定向区别:

1、跳转效率的不同
转发:效率高
重定向:效率低
2、是否共用一个request
转发:原来页面与新页面共有同一个request
重定向:原来页面与新页面不共有一个request(可以用session扩大重定向的作用域来共享数据)
3、浏览器URL地址不同
转发:URL地址保持不变
重定向:URL地址为重定向后地址
4、“/”路径的含义不同
转发:代表当前项目的根目录
重定向:代表当前服务器的根目录
5、跳转范围不同
转发:只能转发到同一应用的URL
重定向:可以重定向任何服务器、任何应用的URL
6、刷新是否导致重复提交
转发:会导致重复提交
重定向:不会导致重复提交
7、是否经过过滤器
转发:不经过过滤器
重定向:经过过滤器
8、实现语句不通
转发:request.getRequestDispatcher().forward(request, response);
重定向:response.sendRedirect();

2.3 作用域对象

2.3.1 pageContext

当前页面内

2.3.2 request

一次请求只要给出相应,请求就算结束
(转发算一次请求内,重定义不算一次请求内)
既是请求参数
又是作用域对象

2.3.3 session

一次会话(建立连接到断开连接)
会话对象:
生命周期:
创建:建立连接
销毁:断开连接分为
客户端销毁:用户关闭浏览器:session丢失(30分钟活动时间后销毁)
服务器关闭:session销毁(所有对象销毁)

2.3.4 application

一个应用内(只要服务器不管就不算结束)一般不用

2.4 路径问题:

1、一个url/一组url对应一个servlet
2、“/”路径的含义不同
3、在开发过程中,不要写相对路径,要写绝对路径
jsp绝对路径
动态获得base标签

<%
    String base = request.getContextPath() + "/";
    System.out.println(base);
    String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + base;
    System.out.println(url);
%>
<base href="<%=url%>">

2.5 jsp语法

声明全局变量<%! %>
表达式<%= %>
java脚本段<% %>
指令@

2.6 jsp九大内置对象(重点要记)

1、request请求对象,作用域对象
2、response响应对象
3、pageContext页面上下文对象,作用域对象
4、session会话对象,作用域对象
5、application应用程序对象,作用域对象
6、out输出对象
7、config配置对象
8、page页面对象
9、exception对象:隐藏对象,在当前jsp页面中添加<%@ page isErrorPage=“true”%>,重新刷新页面,在tomcat的work包里的servlet文件中,会自动出现exception对象

三、Cookie

Cookie在客户端做数据存储,和session在服务端做数据存储类似

Cookie类继承Object类
可以同时建立多个Cookie

1. CookieServlet类

@WebServlet("/cs")
public class CookieServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        try {
            request.setCharacterEncoding("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset = utf-8");

        String no = request.getParameter("empno");
        String name = request.getParameter("ename");
        if ("123".equals(no) && "admin".equals(name)){
            Cookie cookie = new Cookie("login", name);
            cookie.setMaxAge(60 * 60 * 24 * 7);//设置保存时间
            response.addCookie(cookie);
            response.sendRedirect(request.getContextPath() + "/empok.jsp");
        }else {
            response.getWriter().println("登录失败");
        }
    }
}

2. empLogin.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <%
        String base = request.getContextPath() + "/";
        System.out.println(base);
        String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + base;
        System.out.println(url);
    %>
    <base href="<%=url%>">
<%--    <%
        String base = request.getContextPath() + "/";
        String url = request.getScheme():
    %>--%>
</head>
<body>
    <%
        Cookie[] cookies = request.getCookies();
        if (cookies != null){
            for (Cookie cookie :cookies) {
                if (cookie.getName().equals("login")){
                    response.sendRedirect(request.getContextPath() + "/empok.jsp");
                }
            }
        }
    %>
    <form action="cs" method="get">
        员工编号<input type="text" name="empno"><br/>
        员工姓名<input type="text" name="ename"><br/>
        <input type="submit" name="提交">
    </form>
<a href="emp/reg">点击跳转注册</a>
</body>
</html>

3. emok.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>登录成功!!</h1>
</body>
</html>

四、Ajax

Ajax = Asychronous + Javascript + And + Xml(JSON)
JSON(javascript的原生对象)JavaScript Object Notation

1. 同步请求和异步请求

同步请求(Web):页面跟着请求一起走,到服务器端需要对当前页面的所有数据集合,重新查询,在返回。
异步请求(Ajax):页面不跟请求走,只有局部区域的内容发生变化。

2. Ajax优势劣势

Ajax优势:异步请求、局部刷新
不刷新整个页面,只刷新局部;
页面不需要刷新,提供连续的用户体验;
“按需请求”,减少带宽的占用,响应速度快;
把一部分服务器的压力,转交给前端。

Ajax劣势:
如果一个页面大量使用ajax的话,那么该页面的搜索性能查
破坏了history历史记录的机制

3. Ajax常用方法

3.1 open(method, URL, async)

建立与服务器的连接
method指定请求的HTTP方法,一般为get或post
URL指定请求的地址
async指定是否使用异步请求,值为true或false,一般不写或写true

3.2 send(content)

发送请求
content指定请求的参数

3.3 setRequestHeader(header, value)

设置请求的头信息

4. Ajax常用属性

XMLHttpRequest的状态信息:readystate

就绪状态码说明
0XMLHttpRequest对象未完成初始化
1XMLHttpRequest对象开始发送请求
2XMLHttpRequest对象的请求发送完成
3XMLHttpRequest对象开始读取响应
4XMLHttpRequest对象读取响应结束

监听事件变化:Onreadystatechange

5. Web与Ajax差异

发送请求方式不同
Web:提交表单方式发送请求
Ajax:异步引擎对象发送请求
服务器响应不同
Web:相应内容是一个完整页面
Ajax:相应内容知识需要的数据
客户端处理方式不同
Web:需等待服务器响应完成并重新加载整个页面后用户才能进行操作
Ajax:可以动态更新页面中的部分内容,用户不需要等待请求的响应

6. Ajax工作流程

在这里插入图片描述

7. Ajax使用步骤

1、创建异步引擎对象XMLHttpRequest
2、设置一个请求:请求方式、请求路径、参数
3、发送请求
4、接收响应

五、同步请求、异步请求具体区别

1. ajaxUser.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-1.8.3 .js"></script>
    <script type="text/javascript">
        function demo1() {
            //1、创建异步请求对象
            var obj = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            var str = document.myform.ename.value;
            obj.open("get", "ajaxs?ename=" + str);
            //3、发送请求
            obj.send(null);//null请求的主体
            //4、接收响应
            obj.onreadystatechange = function () {
                if (obj.readyState == 4 && obj.status == 200) {
                    document.getElementById("sid").innerText = obj.responseText;
                }
            }
        }

        function demo2() {
            //1、创建异步请求对象
            var req = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            req.open("post", "ajaxs");
            //3、发送请求
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
            req.send("ename=" + document.myform2.ename2.value);
            //4、接收响应
            req.onreadystatechange = function () {
                if (req.status == 200 && req.readyState == 4) {
                    document.getElementById("sid2").innerText = req.responseText;
                }
            }
        }

        function demo3() {
            //1、创建异步请求对象
            var obj = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            var str = document.myform3.ename3.value;
            obj.open("get", "ajaxs?ename=" + str);
            //3、发送请求
            obj.send(null);//null请求的主体
            //4、接收响应
            obj.onreadystatechange = function () {
                if (obj.readyState == 4 && obj.status == 200) {
                    eval("var emp=" + obj.responseText);
                    document.getElementById("sid3").innerText = emp.empno + ";" + emp.ename + ";" + emp.job;
                }
            }
        }

        function demo4() {
            //1、创建异步请求对象
            var obj = new XMLHttpRequest();
            //2、设置一个请求:请求方式、请求路径、参数
            var str = document.myform4.ename4.value;
            obj.open("get", "ajaxs?ename=" + str);
            //3、发送请求
            obj.send(null);//null请求的主体
            //4、接收响应
            obj.onreadystatechange = function () {
                if (obj.readyState == 4 && obj.status == 200) {
                    eval("var emps=" + obj.responseText);
                    $("select").empty();
                    for (var i = 0; i < emps.length; i++) {
                        $("<option value='" +
                            emps[i].empno + "'>" +
                            emps[i].ename + "_" +
                            emps[i].job + "</option>").appendTo("[id='sel']");
                    }
                }
            }
        }

        //5、为txt5添加异步请求
        $(document).ready(function () {
            //为txt5文本框添加异步请求
            $("[name='txt5']").blur(function () {
                $.ajax({
                    type: "get",
                    url: "ajaxs?ename=" + $(this).val(),
                    success: function (str) {
                        JSON.stringify(str);
                        $("[name='txt5']").next().text(str.empno + ";" + str.ename + ";" + str.job);
                    }
                });
            });
            
            //6、为txt6添加异步请求
            $("[name='txt6']").blur(function () {
                var ename = $("[name='txt6']").val();
                alert(ename);
                $.get("ajaxs", "ename=" + ename, function (emps) {
                    JSON.stringify(emps);
                    alert(emps);
                    $("#sel6").empty();
                    for (var i = 0; i < emps.length; i++) {
                        $("<option value='" +
                            emps[i].empno + "'>" +
                            emps[i].ename +
                            "</option>").appendTo("#sel6");
                    }
                });
            });
        });
    </script>
</head>
<body>
    <table border="1px">
        <tr>
            <td style="height: 200px;width: 300px">
                <form name="myform">
                    <input type="text" name="ename" onblur="demo1()"/><span id="sid"></span>
                </form>
            </td>
            <td style="height: 200px;width: 300px">
                <form name="myform2">
                    <input type="text" name="ename2" onblur="demo2()"/><span id="sid2"></span>
                </form>
            </td>
            <td style="height: 200px;width: 300px">
    
                <form name="myform3">
                    <input type="text" name="ename3" onblur="demo3()"/><span id="sid3"></span>
                </form>
            </td>
            <td style="height: 200px;width: 300px">
                <form name="myform4">
                    <input type="text" name="ename4" onblur="demo4()"/>
                    <select id="sel"></select>
                </form>
            </td>
        </tr>
        <tr>
            <td style="height: 200px;width: 300px">
                <input type="text" name="txt5"><span></span>
            </td>
            <td style="height: 200px;width: 300px">
                <input type="text" name="txt6">
                <select id="sel6"></select>
            </td>
            <td style="height: 200px;width: 300px"></td>
            <td style="height: 200px;width: 300px"></td>
        </tr>
    </table>
</body>
</html>

2. AjaxServlet文件

package com.controller;

import com.google.gson.Gson;
import entry.Emp;

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;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

@WebServlet("/ajaxs")
public class AjaxServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        try {
            request.setCharacterEncoding("utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json; charset = utf-8");
        String ename = request.getParameter("ename");
        if ("admin".equals(ename)){
            response.getWriter().println("[]");

        }else{
            ArrayList<Emp> list = new ArrayList<>();
            list.add(new Emp(1234, "alen", "job"));
            list.add(new Emp(1214, "ellen", "jobes"));
            Gson gson = new Gson();
            response.getWriter().println(gson.toJson(list));
        }
    }
}

总结

本文我们讲述了:
Servlet和jsp是一对一、一对多的关系,一对多时,可以用反射简单实现
Cookie用来在客户端做数据存储,做了如何实现7天用户免登录
Ajax与Web对比:Ajax是局部刷新,而Web是全屏刷新

好没意思哦…地球人能不能搞出点新鲜玩应儿啊…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打开Office(word、excel、ppt)显示操作系统当前的配置不能运行此应用程序最全解决方案!

我以前用过分区助手把office从c盘挪到d盘了&#xff0c;从那以后office就用不了了&#xff0c;然后我就删了&#xff08;貌似没删干净&#xff09;。 最近由于有使用word的需求&#xff0c;所以我从学校官网找到正版软件的安装包&#xff0c;按照步骤重新卸载电脑中office残留…

基于Java的民宿管理系统

TOC springboot306基于Java的民宿管理系统 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛…

【Mac】Downie 打开提示试用的解决办法?

前情 我们在使用 Downie 的时候&#xff0c;可能遇到提示试用的问题&#xff0c;如下图所示。 原因 旧版本的 Downie 没有卸载干净导致的。 解决办法 先使用 AppCleaner 卸载掉电脑上的 Downie 旧版本软件&#xff0c;必须使用 AppCleaner 卸载。重新安装 Downie 即可。

DNN代码实战

DNN的原理 神经网络通过学习大量样本的输入与输出特征之间的关系&#xff0c;以拟合出输入与输出之间的方程&#xff0c;学习完成后&#xff0c;只给它输入特征&#xff0c;它便会可以给出输出特征。神经网络可以分为这么几步&#xff1a;划分数据集、训练网络、测试网络、使用…

C++_2_nullptr关键字(3/3)

本节内容有C的NULL在前面打头阵&#xff0c;学起来犹如探囊取物。 先来分析一段代码&#xff0c;本段代码恰好也结合了上节的宏。 #include<iostream> using namespace std; void f(int x) { cout << "f(int x)" << endl; } void f(int* ptr) { …

Android Settings 跳转流程

我们知道在Settings中&#xff0c;各模块之间的Fragment基本都继承了DashboardFragment&#xff0c;当有点击事件时&#xff0c;就会回调DashboardFragment中的onPerferenceTreeClick()方法。 在onPreferenceTreeClick()方法中可以根据preference的key做事件拦截&#xff0c;如…

Linux线程实用场景

文章目录 前言生产者消费者模型1.基于阻塞队列特点实现使用 2.基于环形队列和信号量实现使用 读者写者模型实现思想 线程池实现 前言 生产者消费者模型和读者写者模型这些模型是用于在线程间协调和管理资源访问的模式, 我们在之前已经理解了线程的概念以及同步与互斥, 现在我们…

无人机之消费级和工业级,两者区别分析

消费级无人机和工业级无人机在多个方面存在显著差异&#xff0c;这些差异主要体现在搭载设备、应用领域、针对用户、使用条件、性能要求、营销模式以及价格等方面。以下是对两者区别的详细分析&#xff1a; 1. 搭载设备 消费级无人机&#xff1a;主要搭载相机&#xff0c;并配…

C++ | Leetcode C++题解之第337题打家劫舍III

题目&#xff1a; 题解&#xff1a; struct SubtreeStatus {int selected;int notSelected; };class Solution { public:SubtreeStatus dfs(TreeNode* node) {if (!node) {return {0, 0};}auto l dfs(node->left);auto r dfs(node->right);int selected node->val…

Windows禁止应用联网

转自两种方法阻止电脑上的软件彻底联网&#xff01; - 知乎 (zhihu.com) 但为了稳妥&#xff0c;自己还是稍微记录一下 1、创建bat脚本文件 创建文本-将下面的代码填入-保存为.bat文件 Echo Off SetLocal:beginecho: echo ****** 禁止文件夹联网 ****** echo:set /p folder…

Qt报“libpng warning: iCCP: known incorrect sRGB profile”问题解决方法

Qt开发应用程序&#xff0c;界面加载图片或按钮加载图标时&#xff0c;会遇到编译器报“libpng warning: iCCP: known incorrect sRGB profile”问题&#xff0c;原因为色彩配置问题&#xff0c;需要修正图像的ICC配置文件&#xff0c;将其转换成sRGB类型。不同操作系统解决方法…

停车场拓扑(parking lot topology)中的 bbr 与 aimd

bbr 讨论组有个有趣的问题&#xff1a;[bbr-dev] Parking lot topology 我此前也意识到这个问题(参见 pacing 之对错)&#xff0c;但几乎所有 cc 的建模都基于 dumbbell topology&#xff0c;parking lot topology 因其太 “不理想”&#xff0c;“不规则” 而无人讨论&#x…

11.2.软件系统分析与设计-数据库分析与设计

文章目录 数据库分析与设计步骤ER图和关系模型 需求分析阶段概念结构设计逻辑结构设计物理结构设计数据库实施与运维 数据库分析与设计 数据库设计属于系统设计的范畴。通常把使用数据库系统的系统统称为数据库应用系统&#xff0c;把对数据库应用系统的设计简称为数据库设计。…

轻松拿捏自动添加好友

释放双手&#xff0c;一键导入数据&#xff01; 通过好友后可以自动备注 轻松自动添加好友&#xff0c;更可以个性化设置验证信息 手动点击“开始”&#xff0c;后台可以看到数据使用情况和添加情况&#xff0c;频繁了会自动停止

【STM32】ADC模拟数字转换(规则组多通道)+ DMA数据转运(外设到存储器)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 ADC规则组扫描模式DMA 定义变量 规则组配置 ADC初始化 连续模式 扫描模式 规则组通道个数 ADC初始化框架 DMA初始化 ADC和DMA使能 软件触发转运 代码框架 ADC扫描转换与DM…

一眼心动的HAProxy高级功能配置

目录 一.haproxy-基于cookie的会话保持 二.七层IP透传 三.四层IP透传 四.访问控制列表ACL 五.acl做动静分离访问控制 六.基于自定义的错误页面文件 七.HAProxy 四层负载 八.HAProxy https 实现 九.让文件编写更简单的方法 一.haproxy-基于cookie的会话保持 cookie va…

C语言程序设计(初识C语言后部分)

1024M1GB&#xff0c;1GB1级棒。关爱一级棒的程序员们&#xff0c;宠TA没商量&#xff01; 5&#xff09;函数的嵌套调用和链式访问 函数和函数之间可以根据实际的需求进行组合的&#xff0c;也就是相互调用的。 1.嵌套调用 函数可以嵌套调用&#xff0c;但不可以嵌套定义&a…

【网络】UDP和TCP之间的差别和回显服务器

文章目录 UDP 和 TCP 之间的差别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP API 的使用UDP APIDatagramSocket构造方法方法 DatagramPacket构造方法方法 回显服务器&#xff08;Echo Server&#xff09;1. 接收请求2. 根据请求计算响应3. 将…

html+css+js网页制作 纳尔多珠宝40个页面

htmlcssjs网页制作 纳尔多珠宝40个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

用python制作88键赛博钢琴(能用鼠标键盘进行弹奏)

用python制作88键赛博钢琴 前言 恭喜这位博主终于想起了自己的账号密码&#xff01; 时光荏苒&#xff0c;转眼间已逾一年未曾在此留下墨香。尽管这一年间&#xff0c;博主投身于无尽的忙碌与挑战之中&#xff0c;但令人欣慰的是&#xff0c;那份初心与热情似乎并未因岁月的流…