【Linux Network】应用层协议——HTTP

目录

1. 认识URL

2. urlencode和urldecode

urlencode例子:

urldecode例子:

3. HTTP协议格式

3.1 HTTP请求:

3.2 HTTP响应:

3.3 HTTP的方法:

3.4 GET方法和POST方法的区别

3.5 HTTP的状态码:

3.6 HTTP常见Header:

3.7 短链接和长链接

3.8 cookie和session

3.9 https:

3.10 加密方式:

3.11 如何防止文本中的内容被篡改,以及识别到是否被篡改:

3.12 加密算法的选择:

3.13 中间人:

3.14 CA证书:

4. 最简单的HTTP服务器


本篇博客详解HTTP✨ 

应用层协议:客户端和服务器端定了一个约定。只要保证,一端发送时构造的数据,在另一

端能够正确的进行解析,这种协议就是应用层协议;

虽然我们说,应用层协议是我们程序员自己定的;但实际上,已经有大佬们定义了一些现成

的,又非常好用的应用层协议,供我们直接参考使用,HTTP(超文本传输协议)就是其中之

一。

1. 认识URL

当我们使用浏览器时,其实是一个客户端向服务端发送请求并获得响应的过程,并且我们知道服务器后台是用Linux做的(可以常年不关机一直服务,Windows的几天不关机就卡爆了)。

我们想要获取的图片、文本、视频、音频 ... ,这些都可以统称之为 “资源”。在之前的学习中,我们知道 IP+Port 可以确定唯一的一个进程,但现在却无法确定唯一的一个资源!

我们知道公网IP可以确定唯一的一台主机,我们所要请求的网络资源,都一定是存在于网络中的一台Linux服务器上,Linux或者传统的OS,都是以文件的方式保存资源的。在一个Linux机器上,我们可以通过路径找到唯一的一个资源;

所以:IP+Linux路径,就可以唯一的确认一个网络资源

(IP确定是哪台Linux服务器,Linux路径确定唯一的一个资源);

先来看一下URL的简单构成:

平时我们俗称的 " 网址 " 其实就是说的 URL

从在网络中找到唯一的资源来对URL进行一个分析;

协议方案名:请求该资源时,使用的协议的方法;

登录信息:一般不使用;

服务器地址:Linux服务器的IP地址(以域名的方式呈现);

服务器端口号:一个成熟的协议,一般对应一个固定的服务器端口号;

服务器端口号后面内容:Linux路径(确定唯一的一个网络资源);

2. urlencodeurldecode

/ ? : 等这样的字符, 已经被 url 当做特殊意义理解了 因此这些字符不能随意出现;
比如 某个参数中需要带有这些特殊字符 , 就必须先对特殊字符进行转义;
转义的规则如下 :
将需要转码的字符转为 16 进制,然后从右到左,取 4 ( 不足 4 位直接处理 ) ,每 2 位做一位,前面加
% ,编码成 %XY格式

用一个例子来进行更好的说明:

在这里我们会使用到一个工具: 

编码/解码工具

urlencode例子:

我们在搜索c++时,URL中出现了c%2B%2B;

我们使用编码/解码工具,对c++进行编码发现c++变成了c%2B%2B,这便是urlencode的一个过程;

urldecode例子:

urldecode就是urlencode的逆过程:

我们使用编码/解码工具,对c%2B%2B进行解码发现c%2B%2B变成了c++,这便是urldecode的一个过程;

3. HTTP协议格式

我们先来画一张图使大家对HTTP协议格式有一个大致的了解;

http协议不管是请求还是响应,基本上都是按照行(\n)为单位进行构建请求或者响应的!无论是请求还是响应,几乎都是由3或者4部分组成;

在网络传输时:不管是请求还是响应报文最后都会转化为一个字符串在网络中传输;

使用空行:将报头部分和正文部分进行分开;

3.1 HTTP请求:

  • 首行: [方法] + [url] + [版本]
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束;
  • Body:空行后面的内容都是Body; Body允许为空字符串,如果Body存在,,则在Header中会有一个 Content-Length属性来标识Body的长度;

3.2 HTTP响应:

  • 首行:[版本号] + [状态码] + [状态码解释];
  • Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束;
  • Body:空行后面的内容都是Body,Body允许为空字符串,如果Body存在,则在Header中会有一个 Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面内容就是在 body中;

总结:

不管是HTTP请求还是响应报文,在读取时:读到空行表示报头读取结束,header属性中有Content-Length 表示正文的长度,由此保证了读取HTTP的完整性(不会多读,也不会少读);

3.3 HTTP的方法:

方法说明支持的HTTP协议版本
GET获取资源1.0、1.1
POST传输实体主体1.0、1.1
PUT传输文件1.0、1.1
HEAD获得报头首部1.0、1.1
DELETE删除文件1.0、1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和资源之间的联系1.0
UNLINE断开连接关系1.0

上述方法中最常用的就是GET方法和POST方法;

3.4 GET方法和POST方法的区别

1. 从概念来说:
  • GET方法:是最常用的获取资源的方法,GET也可以用来提交参数,通过URL来进行参数拼接,从而提交给server端;
  • POST方法:是最常用的提交参数的方法,一般是通过正文部分提交参数的;
2. 提交参数的位置:
  • POST方法提交参数是比较私密的,不会回显到浏览器的 url 输入框;
  • GET方法提交参数是不私密的,会将重要信息回显到 url 的输入框中,增加了被盗取的风险;

在这里要注意的一点是:

  • 私密并不意味着安全,我们也可以使用抓包工具获取HTP请求,从而获取提交参数;
3. 提交参数的大小:
  • GET方法是通过 url 传参的,而 url 是由大小限制的,和具体的浏览器有关;
  • POST方法是由正文部分传参的,一般没有大小限制;

总结:

  • 如果我们要提交参数选择POST;如果获取资源选择GET;

GET方法提交参数: 

POST方法提交参数: 

web根目录:

http请求的 / 并不是Linux根目录,而是web根目录 (一个项目的根目录);

如果请求的是 / ,意味着我们要请求该网站的首页(一般所有的网站都要有默认首页的),也就是 /index.html  or  /index.htm

3.5 HTTP的状态码:

类别原因短语
1XXInformational(信息性状态码)接受的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求出错

最常见的状态码 ,:
比如 200(OK),404(Not Found),403(Forbidden),302(Redirect, 重定向 ),504(Bad Gateway);

应用层是人要参与的,人水平参差不齐,对http的状态码的使用掌握不够,游览器的种类又特别多(有些浏览器对状态码检查严格,有些对状态码检查不严格),导致大家可能对状态码的支持并不是特别好,类似于404的状态码(手动构建请求),对浏览器没有任何指导意义,浏览器还是正常显示网页;

如果404状态码出现,表示该资源找不见,是客户端输入有问题导致的;

在这里重点说明一下3XX的状态码:

3XX的状态码是有特殊含义的,表示重定向:

重定向是需要浏览器给我们提供支持的,浏览器必须识别301、302、307状态码;

server要告诉浏览器,我们要重定向去哪里,Location:表新的地址处;

301 永久重定向

永久重定向一般用于网站搬迁、域名更换;

现有新旧两个网站,一些用户知道新网站,可以直接访问新网站,但还有些老的用户不知道新网站,只知道旧网站,不能直接关闭旧网站(直接关闭会造成老用户找不到网站的情况),这时便可以使用301 ,当老用户访问老网站时,server会告诉浏览器去访问新网站,一般使用标签完成,此过程老用户是不知道的;

302 临时重定向

当我们访问某个网站的时候,会让我们跳转到另一个网址;

具体点说:当我们访问某种资源的时候,提示登录,跳转到了登录页面,输入账号及密码后,会自动跳转回来(美团下单);

3.6 HTTP常见Header:

  • Content-Type:数据类型(text/html等);
  • Content-Length:Body的长度;
  • Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上;
  • User-Agent:声明用户的操作系统和浏览器版本信息;
  • referer:当前页面是从哪个页面跳转过来的;
  • location:搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie:用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
  • Connection:属性字段为keep-alive表示长链接;

3.7 短链接和长链接

短链接: http/1.0 采用的网络请求的方案是短链接;经过如下三个阶段:

request -> response -> close;

当客户端向服务器发起一个建立链接请求,服务端对客户端进行响应,然后断开链接,在此过程中,客户端获得一个资源;

一般而言,一个大网页是由多个元素组成的!当问一个大网页的时候 http/1.0 就需要多次进行 http 请求,http 协议是基于 tcp 协议的,tcp 要通信每一次的 http request 都需要执行以下过程:建立连接 —> 传送数据 —> 断开连接,这种频繁的建立 tcp 链接是非常的耗时的!

长链接: http/1.1 支持长链接;

在 headler 属性中,Connection:keep-alive 表示长链接;

如下举了一个长短链接的例子:

当我们点开一个大型网页时,其实是浏览器向server发送请求,server将网页资源发送给客户,大型网页的资源不止一个。当我们使用短链接时,每传输一个资源便要建立一个链接,因此有多少资源便要建立多少次链接;但当我们使用长链接时,我们只需要建立一次链接,所有的资源都是通过这个链接传送的;

3.8 cookie和session

上网的经验告诉我们:在访问一个网站时,我们只需要在最开始的时候进行账号和密码的登录,在之后的页面跳转时(本质就是进行各种 http 请求),我们不必输入账号和密码,网站依旧认识我们。

我们知道 http 协议本身是一种无状态的协议,只帮助解决网络资源获取的问题,并不记录这个资源是从哪里来等状态,这样造成了 http 协议的简单特性;

上述功能也并不是 http 协议本身要解决的问题,http 协议提供了一些技术支持,来保证网站具有 “会话保持” 功能;

cookie和session 在其中起的便是会话管理作用,本质是为了提高用户访问网站或者平台的体验

cookie:

1. 浏览器:cookie 其实是浏览器中的一个文件,该文件保存的都是我们用户的一些私密信息;

2. http协议:一旦该网站对应有cookie,在向服务器发起任何请求的时候,都会自动在request中携带该cookie信息;

下面是一个http协议中,对cookie的一个基本理解图: 

我们在登录一个网站时,首先输入自己的账号及密码,向server发送 http resquest,在server端进行一个认证后,给浏览器返回一个登陆成功的 http response,并在浏览器中形成了一个cookie文件(里面存储的是自己的账号及密码),在后续浏览器向server端发送的每一个请求,都会在自己的请求报头属性中自动携带对应的cookie信息;

我们可以也使用 Set-Cookie: Key=value headler 属性中设置 Cookie 字段;

cookie的核心思路是:将用户的私密信息保存在客户端中,其实这种做法是很危险的;

cookie被盗:

1. 如果cookie文件中只保存我们浏览的一些痕迹的话,那么别人便可以以我的身份进行认证访问我们的之前的浏览痕迹;

2. 如果cookie文件中保存的是我们的用户名+密码的话,这种情况就非常的糟糕了(你的账号+密码失窃)!

因此单纯的使用cookie是具有一定的安全隐患的;

session:

session的核心思路是:将用户的私密信息保存在服务器端;

当用户在浏览器中输入自己的账号+密码后,浏览器向服务端发起 http request 登录请求,服务器对账号+密码进行一个认证,认证成功后形成一个session文件,里面保存的是用户的账号+密码信息,将这个session文件保存在磁盘中,并使用唯一的 session id 对其进行命名,完成后,服务器端构建 http 响应,发送一个http response响应(使用Set_Cookie设置cookie信息=session_id)给浏览器,浏览器这边便会形成一个cookie文件,里面保存的是session_id,在此后的http请求中,headler属性中都会有cookie字段,server依旧可以识别client,这也是一种会话保持的功能!

在服务器端保存用户的私密信息,是较为安全的,但也存在着cookie文件被盗的风险;

cookie文件被盗,虽然里面只有session_id,但是如果也去访问我们之前访问过的网址,server端也是可以识别client端的(有session_id便可以在磁盘中找到用户的私密信息);

由此http协议是不安全的,我们在此基础上实现了较为安全的https协议;

3.9 https:

https = http + TLS/SSL(http数据的加密解密层)

我们平常访问的网址都是使用https协议的;

3.10 加密方式:

加密方式分为两种:对称加密、非对称加密;

1. 对称加密:只有一个密钥(用该密钥加密,也用该密钥解密);

比如:密钥为X,发送端:将数据使用X进行加密后发送,接收端:收到数据后使用X进行解密得到发送端原本要发送的数据;

2. 非对称加密:有一对密钥(公钥和私钥);

可以用公钥进行加密,只能用私钥进行解密;

或者用私钥进行加密,只能用公钥进行解密;

一般而言,公钥是向全世界公开的,私钥是必须自己进行私有保存的;

3.11 如何防止文本中的内容被篡改,以及识别到是否被篡改:

我们在发送数据时,首先将文本内容 通过Hash散列形成一个固定长度,唯一的字符序列,称为数据摘要,之后将数据摘要经过加密算法后得到数字签名;

我们之后发送的数据:文本内容+数字签名;

在接收端,我们将收到的数据(文本内容+数据签名)进行分开;

将文本内容重新进行Hash散列,形成数据摘要; 

将数据签名根据解密算法进行解密,得到数据摘要;

然后对比两份数据摘要,如果相同则没被篡改,如果不同则被篡改了;

3.12 加密算法的选择:

1. 对称加密方法:

如果采用对称加密算法时,那便只有一个密钥;

这个密钥怎么被 client 和 server 知道呢?

采用预装吗?那么所有的客户端和服务器端都有这个密钥,都可以进行数据的加密和解密,相当于没有;

在通信前,采用密钥协商可以吗?client告诉server以后通信的密钥是X,如果是明文发送的话,很容易被旁听到密钥信息,是不可取的,那如果采用加密发送密钥,那么第一次的加密如何进行解密呢?进入死循环,这也是不可取的,因此采用对称加密方法是不行的;

2. 非对称加密方法:

先来看只有一对密钥的情况:

在server端:有公钥S和私钥S';

client和server通信前会有一个密钥协商阶段,在此阶段中,client向server发送一个消息,server端将自己的公钥S给了client端,client端以后发送数据时,都是将要发送的数据经过S加密后发送给server,只有server端有私钥S',因此只有server能对发来的数据进行解密,实现了client向server发送的数据的一个安全;

但是如果server向client发送数据时,server端使用自己的私钥S'对将要发送的数据进行加密,然后发送给client端,但是因为公钥S多个client都有,多个client都可以对发来的数据进行解密,因此server到client的数据发送是不安全的;

再来看有两对密钥的情况:

client 端和 server 端各自有一对公钥和私钥,在通信前,首先进行密钥协商,将双方的公钥进行交换, 在发送数据前,使用对方的公钥进行加密后发送,只有对方有私钥,因此双方的通信在现在看来都是安全的!其实依旧有被非法窃取的风险,下面再进行详谈;

非对称加密在现在看来虽然通信双方数据都是安全的,但是非对称加密算法特别费时间,对称加密是比较节省时间的!

实际方案:对称+非对称:

server端有一对公钥和私钥,client和server以后通信是使用对称密钥X;

在密钥协商阶段,采用非对称算法,client先向server发送一个信息,server将自己的公钥S给client,client端使用公钥S对以后双方进行通信的密钥X进行加密,然后将加密后的数据发送给server端,server端有唯一的私钥,对X+进行解密后,以安全的方式拿到了client发来的对称密钥X,此后client和server便可以使用对称密钥X进行双方数据安全通信!

3.13 中间人:

数据安全:所谓的数据安全并不是说,A向B发送数据,除了A和B外,没有C拿到数据,而是说就算C拿到了数据,也不知道如何破解加密算法从而拿到有效数据,又或者说解密对于该数据来说成本太大,没有人来对此解密,因此该数据便是安全的;

中间人:在网络环节中,随时都有可能存在中间人来偷窥、修改我们的数据; 

server端有自己的公钥S和私钥S';中间人有自己的公钥M和私钥M';对称密钥为X;

client首先向server发送了一个消息,然后server便将自己的公钥S发送给client,可发送过程中,中间人接受了这个公钥S,并将这个公钥S掉包为自己的公钥M后,发送给client端;client使用公钥M对对称密钥X进行加密后,将该数据发送给server,中间人又截取了该数据,并使用自己的私钥M'对该数据进行解密,得到对称密钥X,中间人又将对称密钥X利用刚才截取的公钥S进行加密,并将加密后的数据发送给server,server对数据进行解密得到对称密钥X,此后client、中间人、server都有对称密钥X,中间人便可以窃听client和server的通信数据;

造成中间人窃取通信数据的本质是:client无法判定发来的密钥协商报文是不是从合法的服务方发来的!!!

3.14 CA证书:

CA证书机构:

1. 只要一个服务商,经过权威机构认证,该机构就是合法的,不止一个,是颁发CA证书的机构;

2. 具有权威性;

3. 有自己的公钥A和私钥A';

CA证书:形成过程如下图

server首先向CA机构提交申请CA证书的材料(企业的基本信息、域名、公钥),CA机构将server提供的申请材料经过Hash散列,形成数据摘要,然后CA机构使用自己的私钥A'对数据摘要进行加密形成数据签名,然后将申请材料+数据签名组合在一起,形成CA证书后颁发给server;

在密钥协商阶段,client首先发起信息,server将CA证书传递给client;

就算有中间人窃听,中间人如果修改其中任意信息,client端对收到的证书进行检验,如果两份数据摘要比对不成功,client就会察觉到该信息被修改,不会生成对称密钥信息;

就算中间人是个合法的服务方,有自己的CA证书,client依旧可以查觉,因为CA证书中包含域名信息,该域名不是server的域名,也不会生成对称密钥信息;

使用CA证书来进行对称密钥的协商,是要求client必须知道CA机构的公钥信息的;

1. 这个公钥信息一般是内置的;

2. 访问网址的时候,浏览器也可能会提示用户进行安装公钥信息;

4. 最简单的HTTP服务器

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void Usage() 
{
    printf("usage: ./server [ip] [port]\n");
}

int main(int argc, char* argv[]) 
{
    if (argc != 3) 
    {
        Usage();
        return 1;
    }
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    if (fd < 0) 
    {
        perror("socket");
        return 1;
    }
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(argv[1]);
    addr.sin_port = htons(atoi(argv[2]));
    int ret = bind(fd, (struct sockaddr*)&addr, sizeof(addr));
    if (ret < 0) 
    {
        perror("bind");
        return 1;
    }
    ret = listen(fd, 10);
    if (ret < 0) 
    {
        perror("listen");
        return 1;
    } 
    for (;;) 
    {
        struct sockaddr_in client_addr;
        socklen_t len;
        int client_fd = accept(fd, (struct sockaddr*)&client_addr, &len);
        if (client_fd < 0) 
        {
            perror("accept");
            continue;
        }
        char input_buf[1024 * 10] = {0}; // 用一个足够大的缓冲区直接把数据读完.
        ssize_t read_size = read(client_fd, input_buf, sizeof(input_buf) - 1);
        if (read_size < 0) 
        {
            return 1;
        }
        printf("[Request] %s", input_buf);
        char buf[1024] = {0};
        const char* hello = "<h1>hello world</h1>";
        sprintf(buf, "HTTP/1.0 200 OK\nContent-Length:%lu\n\n%s", strlen(hello), hello);
        write(client_fd, buf, strlen(buf));
    }
 return 0;
}

编译 , 启动服务 . 在浏览器中输入 http://[ip]:[port], 就能看到显示的结果 "Hello World"

HTTP终于结束了🎈

如果本篇博客对您有所帮助的话,还请点赞、收藏并关注我✨

才疏学浅,如果有所疏漏的话,还请评论指出!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Buf 教程 - 使用 Protobuf 生成 Golang 代码和 Typescript 类型定义

简介 Buf 是一款更高效、开发者友好的 Protobuf API 管理工具&#xff0c;不仅支持代码生成&#xff0c;还支持插件和 Protobuf 格式化。 我们可以使用 Buf 替代原本基于 Protoc 的代码生成流程&#xff0c;一方面可以统一管理团队 Protoc 插件的版本、代码生成配置&#xff…

QT的qrc文件的创建和编辑

qrc文件&#xff0c;这个是Qt的资源文件&#xff0c;如果在pro文件中不包含的话&#xff0c;在编译的时候会提示找不到相应资源的错误&#xff1b;下面说一下手动修改pro和编写qrc文件的方法: 2.1 添加qrc文件&#xff1b; 2.2 编写qrc文件&#xff1b; 可以用 file…

Linux_证书_Openssl工具详解

文章目录 OpenSSLopenssl实现对称加密openssl生成密钥对、非对称加密、数字签名根据CA颁布证书生成ca私钥和ca证书根据ca生成证书 小结 OpenSSL OpenSSL 是一个开源项目&#xff0c;其组成主要包括一下三个组件&#xff1a; openssl&#xff1a;多用途的命令行工具 libcrypt…

AR VR 到底哪种技术可以改变未来?

随着科技的不断进步&#xff0c;虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术已经成为了当今科技领域的热门话题。VR和AR的出现&#xff0c;为人们带来了前所未有的体验和感受&#xff0c;也为各行各业的发展提供了新的机遇。但是&#xff0c;…

clang-format configurator - 交互式创建 clang-format 格式配置文件

clang-format configurator - 交互式创建 clang-format 格式配置文件 clang-format configurator https://zed0.co.uk/clang-format-configurator/ clang-format-configurator https://github.com/zed0/clang-format-configurator Interactively create a clang-format confi…

ANR基础篇 - Trace.txt文件分析

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、trace.txt文件示例二、日志分析2.1 CPU 负载2.2 内存信息2.3 堆栈信息schedst…

裸辞5个月,面试了37家公司,终于.....

上半年裁员&#xff0c;下半年裸辞&#xff0c;有不少人高呼裸辞后躺平真的好快乐&#xff01;但也有很多人&#xff0c;裸辞后的生活五味杂陈。 面试37次终于找到心仪工作 因为工作压力大、领导PUA等各种原因&#xff0c;今年2月下旬我从一家互联网小厂裸辞&#xff0c;没想…

学习Se-net和Sk-net 附网络简单代码(pytorch)

&#xff08;一&#xff09;Se-net的原理和思路     Se-net严格来说是一个小结构&#xff0c;它可以直接插入已有的网络结构中&#xff0c;帮助原有结构获得更好的效果&#xff0c;如插入Resnet网络中。 Se-net的整个流程如下&#xff1a;     &#xff08;1&#xf…

Cisco 产品下载链接汇总 2023 持续更新中

Cisco 产品链接汇总 2023 持续更新中 IOS-XE, IOS-XR, NX-OS & FXOS based on linux kernel 请访问原文链接&#xff1a;https://sysin.org/blog/cisco/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 本站 Cisco 产品汇…

Java是如何实现双亲委托机制的

Java 是一种面向对象的编程语言&#xff0c;它有一套独特的类加载机制。其中&#xff0c;双亲委托加载机制是 Java 类加载机制中的一个重要概念。本文将介绍 Java 的双亲委托加载机制是如何实现的&#xff0c;并解释其作用和优点。 Java 类加载机制 在 Java 中&#xff0c;类的…

ADAS/AD笔记之特斯拉Autopilot-HW3.0系统

摘要&#xff1a; 目前国内一般直接将高速NOA成为“L2”&#xff1b;因此&#xff0c;复杂度更高的城区NOA&#xff0c;就自然的映射到了“L2”。 一、概述&#xff1a; 特斯拉Autopilot系统首创了NOA这种淡化脱手/脱眼/脱脑&#xff08;驾驶自动化程度&#xff09;逻辑的功能…

基础知识(王爽老师书第一章)

文章目录 基础知识1.1 引言1.2 机器语言1.2 引言汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线小结检测点1.11.11 内存地址空间1.12 主板1.13 接口卡1.14 各类存储器芯片1.15 内存地址空间…

新版android studio gradle插件7.4.2.pom一直无法下载问题

android studio同步时候出现org.gradle.api.plugins.UnknownPluginException&#xff0c;Plugin [id: com.android.application, version: 7.4.2] was not found in any of the following sources: pom插件一直无法下载&#xff0c;搞了好几天&#xff0c;简直想砸电脑&#x…

java版企业电子招投标系统源代码之了解电子招标投标全流程

随着各级政府部门的大力推进&#xff0c;以及国内互联网的建设&#xff0c;电子招投标已经逐渐成为国内主流的招标投标方式&#xff0c;但是依然有很多人对电子招投标的流程不够了解&#xff0c;在具体操作上存在困难。虽然各个交易平台的招标投标在线操作会略有不同&#xff0…

【RabbitMQ】| Lion带你 (超详细) 从0到1使用SpringBoot操作RabbitMQ

目录 一. &#x1f981; 前言二. &#x1f981; SpringBoot操作RabbitMQⅠ. 前期准备工作1. 创建项目&#xff08;不细说&#xff09;2. 添加依赖3. 编写配置文件 Ⅱ. 创建队列和交换机Ⅲ. 创建生产者Ⅳ. 创建消费者 三. &#x1f981; 总结 一. &#x1f981; 前言 Spring Bo…

ChatGPT:使用Edge浏览器获取ChatGPT以及如何使用ChatGPT帮你制作PPT

一&#xff1a;前言 ChatGPT&#xff1a;智能AI助你畅聊天地 在现代人日益忙碌的生活中&#xff0c;难免需要一些轻松愉快的聊天来放松身心。而现在&#xff0c;有了 ChatGPT&#xff0c;轻松愉快的聊天变得更加智能、有趣且不受时间、地点限制&#xff01; 什么是 ChatGPT&…

Vue3 +TypeScript 引入 BabylonJs(Vue3实现3D)【一篇文章精通系列】

本文主要介绍如何使用Vue3和TypeScript引入BabylonJs技术实现3D效果。结合实际案例&#xff0c;详细讲解了如何在Vue3项目中引入BabylonJs&#xff0c;并了解其相关知识。通过本文的学习&#xff0c;相信读者可以轻松掌握Vue3实现3D效果以及BabylonJs的相关知识。 Vue3 TypeS…

实验10 人工神经网络(1)

1. 实验目的 ①理解并掌握误差反向传播算法&#xff1b; ②能够使用单层和多层神经网络&#xff0c;完成多分类任务&#xff1b; ③了解常用的激活函数。 2. 实验内容 ①设计单层和多层神经网络结构&#xff0c;并使用TensorFlow建立模型&#xff0c;完成多分类任务&#xf…

JavaWeb13-JavaScript 开发利器之 jQuery-01

1. 说明 1.1 现状 1、jquery 使用情况 2、Vue 使用情况 1.2 官方文档 学习地址: https://www.w3school.com.cn/jquery/index.asp API地址: https://jquery.cuishifeng.cn/ 1.3 JQuery 是什么? 1.3.1 基本介绍 jQuery 是一个快速的&#xff0c;简洁的 javaScript 库…

node笔记_koa框架是什么?

文章目录 ⭐前言⭐ koa框架是如何发展而来的&#xff1f;⭐ koa框架的基本使用&#x1f496; 安装 koa&#x1f496; koa的Middleware示例&#x1f496; 支持xml ⭐ 结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文介绍node的一个web框架koa。 往期文章 node_window…