Android开发知识学习——HTTP基础

文章目录

  • 学习资源来自:扔物线
  • HTTP
    • HTTP到底是什么
    • HTTP的工作方式
    • URL ->HTTP报文
    • List item
    • HTTP的工作方式
    • 请求报文格式:Request
    • 响应报文格式:Response
    • HTTP的请求方法
    • 状态码
  • Header
    • Host
    • Content-Type
    • Content-Length
    • Transfer: chunked (分块传输编码 ChunkedTransfer Encoding)
    • Location
    • User-Agent
    • Range / Accept-Range
    • 其他 Headers
    • Cache
    • REST
  • 课后题

学习资源来自:扔物线

HTTP

HTTP到底是什么

  • 两种直观印象
    • 浏览器地址输入地址,打开网页
    • Android中发送网络请求,返回对应内容
  • Hyper Text Transfer Protocol超文本传输协议
    • 超文本:在电脑中显示的、含有可以指向其他文本的链接的文本 ——HTML

HTTP的工作方式

发送请求
响应
浏览器
服务器

URL ->HTTP报文

  • List item

HTTP的工作方式

发送请求
响应
APP
服务器

请求报文格式:Request

在这里插入图片描述

响应报文格式:Response

在这里插入图片描述

HTTP的请求方法

  • GET
    • 获取资源,没有body
GET /users/1 HTTP/1.1
Host: api.github.com

对应Retrofit的代码:

@GET{"/users/{id}"}
Call<User>getUser(@Path("id")String id)
  • POST
    • 增加或修改资源,有body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13name=rengwuxian&gender=male

对应Retrofit的代码:

@FormUrlEncoded  //请求的编码方式为表单编码
@POST("/users")
Call<User> addUser(@Field("name") String name,
@Field("gender") String gender);
  • PUT
    • 修改资源,有body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male

对应Retrofit的代码:

@FormUrlEncoded
@PUT("/users/{id}")
Call<User> updateGender(@Path("id") String id,
@Field("gender") String gender);
  • DELETE
    • 删除资源,没有body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male

对应Retrofit的代码:

@DELETE("/users/{id}")
Call<User> getUser(@Path("id") String id,
@Query("gender") String gender);
  • HEAD
    • 和 GET 使用方法完全相同
    • 和 GET 唯一区别在于,返回的响应中没有 Body

状态码

  • 作用:对结果做出类型化描述
    • 1xx:临时性消息。如:100 (继续发送)、101(正在切换协议)
    • 2xx:成功。最典型的是 200(OK)、201(创建成功)。
    • 3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变)。
    • 4xx:客户端错误。如 400(客户端请求错误)、401(认证失败)、403(被禁止)、404(找不到内容)。
    • 5xx:服务器错误。如 500(服务器内部错误)

Header

  • 作用:HTTP消息的元数据(metadata)

Host

目标主机地址

Content-Type

指定 Body 的类型。主要有四类:

  1. text/html
    HTML文本,用于浏览器页面响应

请求 Web ⻚面是返回响应的类型,Body 中返回 html 文本。格式如下:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 853
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
......
  1. x-www-form-urlencoded
    普通表单。encodeed URL格式
    Web ⻚面纯文本表单的提交方式。
    在这里插入图片描述
    格式如下:
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27name=rengwuxian&gender=male

对应Retrofit的代码:

@FormUrlEncoded  //请求的编码方式为表单编码
@POST("/users")
Call<User> addUser(@Field("name") String name,
@Field("gender") String gender);
  1. multipart/form-data
    多部分形式,一般用于传输包含二进制内容的多项内容
    Web ⻚面含有二进制文件时的提交方式。
    在这里插入图片描述
    格式如下:
POST /users HTTP/1.1
Host: hencoder.com
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 2382------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name"rengwuxian
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="avatar";
filename="avatar.jpg"
Content-Type: image/jpegJFIFHHvOwX9jximQrWa......
------WebKitFormBoundary7MA4YWxkTrZu0gW--

对应Retrofit的代码:

@Multipart
@POST("/users")
Call<User> addUser(@Part("name") RequestBody name,
@Part("avatar") RequestBody avatar);
...
RequestBody namePart =
RequestBody.create(MediaType.parse("text/plain"),
nameStr);
RequestBody avatarPart =
RequestBody.create(MediaType.parse("image/jpeg"),
avatarFile);
api.addUser(namePart, avatarPart);
  1. application/json , image/jpeg , application/zip …
    JSON形式,用于Web Api的响应或POST/PUT的请求
    单项内容(文本或非文本都可以),用于 Web Api 的响应或者 POST / PUT 的请求

请求中提交 JSON

POST /users HTTP/1.1
Host: hencoder.com
Content-Type: application/json; charset=utf-8
Content-Length: 38{"name":"rengwuxian","gender":"male"}

对应Retrofit的代码:

@POST("/users")
Call<User> addUser(@Body("user") User user);
...
// 需要使用 JSON 相关的 Converter
api.addUser(user);

响应中返回JSON

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 234
[{"login":"mojombo","id":1,"node_id":"MDQ6VXNl
cjE=","avatar_url":"https://avatars0.githubuse
rcontent.com/u/1?v=4","gravat......

请求中提交二进制内容

POST /user/1/avatar HTTP/1.1
Host: hencoder.com
Content-Type: image/jpeg
Content-Length: 1575JFIFHH9......

对应Retrofit的代码:

@POST("users/{id}/avatar")
Call<User> updateAvatar(@Path("id") String id, @Body
RequestBody avatar);
...
RequestBody avatarBody =
RequestBody.create(MediaType.parse("image/jpeg"),
avatarFile);
api.updateAvatar(id, avatarBody)

响应中返回二进制的内容

HTTP/1.1 200 OK
content-type: image/jpeg
content-length: 1575JFIFHH9......
  1. image/jpeg/application/zip
    单文件,用于Web Api响应或POST/PUT请求

Content-Length

指定 Body 的⻓度(字节)。

Transfer: chunked (分块传输编码 ChunkedTransfer Encoding)

用于当响应发起时,内容⻓度还没能确定的情况下。和 Content-Length 不同时使用。用途是尽早给出响应,减少用户等待。
格式

HTTP/1.1 200 OK
Content-Type: text/html
Transfer-Encoding: chunked4
Chun
9
ked Trans
12
fer Encoding
0

Location

指定重定向的目标 URL

User-Agent

用户代理(客户端),即是谁实际发送请求、接受响应的,例如手机浏览器、某款手机 App。

Range / Accept-Range

指定body的内容范围
按范围取数据
Accept-Range: bytes 响应报文中出现,表示服务器支持按字节来取范围数据
Range: bytes=<start>-<end> 请求报文中出现,表示要取哪段数据
Content-Range:<start>-<end>/total 响应报文中出现,表示发送的是哪段
数据
作用:断点续传、多线程下载。

其他 Headers

  • Accept: 客户端能接受的数据类型。如 text/html
  • Accept-Charset: 客户端接受的字符集。如 utf-8
  • Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
  • Content-Encoding:压缩类型。如 gzip

Cache

作用:在客户端或中间网络节点缓存数据,降低从服务器取数据的频率,以提高网络性能。

REST

REST 的定义众说纷纭,没有统一答案。
扔物线的观点:REST HTTP 即正确使用 HTTP。包括:

  • 使用资源的格式来定义 URL
  • 规范地使用 method 来定义网络请求操作
  • 规范地使用 status code 来表示响应状态
  • 其他符合 HTTP 规范的设计准则

课后题

  1. 【单选题】用户在浏览器地址栏输入地址后回车,一段时间后浏览器显示出页面,这背后发生了什么?
    A. 浏览器拼装 HTTP 报文并向服务器请求 -> 服务器处理请求并返回响应报文 -> 浏览器接收到响应报文后处理并使用渲染引擎来渲染出界面
    B. 浏览器把地址栏的 URL 发送给服务器 -> 服务器把 URL 对对应的页面图片文件发回给浏览器 -> 浏览器接收到图片后显示出来

答案: A
答案解析:当用户在地址栏输入地址并回车时,浏览器会通过 DNS 解析找到相应的服务器 IP 地址,然后通过 TCP/IP 协议建立连接。一旦连接建立,浏览器会根据地址栏中的 URL 拼装 HTTP 请求报文,并向服务器发送请求。服务器接收到请求后会进行处理,并返回 HTTP 响应报文。浏览器接收到响应报文后,会进行解析和处理,然后使用渲染引擎(如 HTML、CSS 和 JavaScript)来渲染出页面界面,最终将页面显示在用户的屏幕上

  1. 【单选题】一个 URL 如 http://api.qq.com/user/1 中,对于「HTTP 组装报文」来说可以拆成哪几部分
    A. ① 【http:】-> 协议类型 ② 【//api.qq.com/user/1】-> 路径
    B. ① 【http:】-> 协议类型 ② 【//api.qq.com】-> 服务器地址 ③ 【/user/1】-> 路径
    C. ① 【http:】-> 协议类型 ② 【//api.qq.com/user/】-> 路径 ③ 【1】-> 文件名

答案: B
答案解析:在HTTP组装报文中,URL可以拆分成以下几部分:

  1. 协议类型:URL中的"http:"表示使用的协议类型,这里是HTTP。
  2. 服务器地址:URL中的"//api.qq.com"表示请求的目标服务器地址。
  3. 路径:URL中的"/user/1"表示请求的路径。它通常指示了请求的资源位置或者资源的特定状态。
  4. 文件名:如果路径中包含文件名,例如"/user/1",那么文件名就是路径的最后部分。但在给定的URL中,并没有包含文件名。
    所以,根据这个URL “http://api.qq.com/user/1”,我们可以拆分成以下部分:
    协议类型:http:
    服务器地址://api.qq.com
    路径:/user/1
    因此,答案是B
  1. 【单选题】HTTP 的请求报文分为哪几部分?
    A. 请求行、path、Headers、Body
    B. 请求行、Headers、Body
    C. 请求行、方法、Host、Body

答案: B
答案解析:HTTP 请求报文通常分为以下几个部分:

  1. 请求行(Request Line):包含请求方法(如 GET、POST 等)、请求的资源路径和 HTTP 协议的版本。
  2. Headers(头部):包含与请求相关的各种元数据,例如请求的上下文、客户端的信息、服务器的信息等。
  3. Body(主体):包含请求的主体内容,例如在 POST 或 PUT 请求中发送的数据。 所以正确答案是 B
  1. 【单选题】请求行由哪三部分组成?
    A. method、path、HTTP 版本
    B. method、path、Host
    C. method、服务器地址、path

答案: A
答案解析:请求行由请求方法、请求的资源路径和HTTP协议版本三部分组成。所以答案是A

  1. 【单选题】HTTP 的响应报文分为哪几部分?
    A. 响应头、响应码、响应信息
    B. 状态行、响应头、Headers、Body
    C. 状态行、Headers、Body

答案: B
答案解析:HTTP 的响应报文通常分为以下几个部分:

  1. 状态行(Status Line):包含HTTP协议的版本、请求的状态码和相应的文字描述。
  2. Headers(头部):包含与响应相关的各种元数据,例如响应的内容类型、响应的上下文、服务器的信息等。
  3. Body(主体):包含响应的主体内容,即浏览器应该接收的数据。 所以正确答案是 B
  1. 【单选题】响应报文的状态行由哪三部分组成?
    A. HTTP 版本、API 版本、状态码
    B. HTTP 版本、状态码、状态信息
    C. HTTP 版本、Body 类型、状态码

答案: B
答案解析:响应报文的状态行由HTTP版本、状态码和状态信息三部分组成。因此,答案为B

  1. 【多选题】以下哪几项符合 GET 方法?
    A. 用于获取资源
    B. 用于增加或修改资源
    C. 仅用于修改资源
    D. 用于删除资源
    E. 幂等(即反复调用多次时会得到相同的结果)
    F. 请求报文中包含 Body

答案:
答案解析:

  1. 【多选题】以下哪几项符合 POST 方法?
    A. 用于获取资源
    B. 用于增加或修改资源
    C. 仅用于修改资源
    D. 用于删除资源
    E. 幂等(即反复调用多次时会得到相同的结果)
    F. 请求报文中包含 Body

答案: A、E
答案解析:GET 方法用于从服务器获取资源,即请求指定的数据。它不可以用于增加、修改或删除资源。GET 方法是幂等的,即反复调用多次时会得到相同的结果。另外,GET 方法在请求报文中不包含 Body。因此,符合 GET 方法的选项有:A、E。

  1. 【多选题】以下哪几项符合 PUT 方法?
    A. 用于获取资源
    B. 用于增加或修改资源
    C. 仅用于修改资源
    D. 用于删除资源
    E. 幂等(即反复调用多次时会得到相同的结果)
    F. 请求报文中包含 Body

答案: B、F
答案解析:POST 方法用于向服务器增加或修改资源,它可以在请求报文中包含 Body,以发送数据给服务器。POST 方法不是幂等的,即反复调用多次时可能得到不同的结果。因此,符合 POST 方法的选项有:B、F

  1. 【多选题】以下哪几项符合 DELETE 方法?
    A. 用于获取资源
    B. 用于增加或修改资源
    C. 仅用于修改资源
    D. 用于删除资源
    E. 幂等(即反复调用多次时会得到相同的结果)
    F. 请求报文中包含 Body

答案: D、E
答案解析:DELETE 方法用于从服务器删除资源,它不用于获取、增加或修改资源。DELETE 方法是幂等的,即反复调用多次时会得到相同的结果。另外,DELETE 方法在请求报文中不包含 Body。因此,符合 DELETE 方法的选项有:D、E。

  1. 【单选题】Host 这个 Header 的作用是?
    A. 在网络上寻址目标主机的 IP,并在找到目标主机后确认主机域名和端口
    B. 仅用于寻址目标主机的 IP
    C. 仅用于找到目标主机后确认主机域名和端口

答案: A
答案解析:Host是HTTP协议中的一个请求头字段,它用于指定请求的主机名和端口号。在网络通信中,需要通过IP地址来寻址目标主机,而Host头字段的作用就是在找到目标主机后确认主机域名和端口。因此,答案为A

  1. 【单选题】Content-Type 为 x-www-form-urlencoded 时,请求报文中 Body 的格式为以下哪种形式?
    A. Encoded URL,即 name1=value1&name2=value2 的形式
    B. 分多个部分传输每部分内容的形式,使用 boundary 对它们进行分隔
    C. JSON 形式,如 {“name1”:value1,“name2”:value2}

答案: A
答案解析:在HTTP请求中,当Content-Type为x-www-form-urlencoded时,请求报文中的Body采用name1=value1&name2=value2的形式,即编码URL的形式,以“&”分隔不同的参数。因此,答案为A

  1. 【单选题】Content-Type 为 multipart/form-data 时,请求报文中 Body 的格式为以下哪种形式?
    A. Encoded URL,即 name1=value1&name2=value2 的形式
    B. 分多个部分传输每部分内容的形式,使用 boundary 对它们进行分隔
    C. JSON 形式,如 {“name1”:value1,“name2”:value2}

答案: B
答案解析:在HTTP请求中,当Content-Type为multipart/form-data时,请求报文中的Body采用分多个部分传输每部分内容的形式,使用boundary对它们进行分隔。每个部分都有自己的Content-Type和Content-Disposition头字段,用于描述该部分的内容类型和用途。因此,答案为B

  1. 【单选题】Content-Type 为 application/json 时,请求报文中 Body 的格式为以下哪种形式?
    A. Encoded URL,即 name1=value1&name2=value2 的形式
    B. 分多个部分传输每部分内容的形式,使用 boundary 对它们进行分隔
    C. JSON 形式,如 {“name1”:value1,“name2”:value2}

答案: C
答案解析:当Content-Type为application/json时,请求报文中的Body采用JSON格式,即以大括号{}包裹一个对象,对象由多个键值对组成,每个键值对之间使用冒号:分隔,不同的键值对之间使用逗号,分隔。因此,答案为C

  1. 【单选题】Android 开发者写的 HTTP 代码是怎么工作的?
    A. Android 系统把开发者写入的 URL 发送给服务器,服务器处理后把开发者需要的数据直接返回给客户端,然后开发者的的回调代码对数据进行处理
    B. Android 代码把开发者写入的 URL 和其他请求信息拼装成 HTTP 报文,以报文形式给服务器发送 HTTP 请求,服务器处理请求后返回标准 HTTP 报文,客户端处理报文后得到真正的数据,然后开发者的回调代码对输出进行处理

答案: B
答案解析:Android 开发者写的 HTTP 代码主要是通过使用HttpURLConnection、HttpClient、OkHttp 等类库,将开发者写入的 URL 和其他请求信息拼装成 HTTP 报文,以报文形式给服务器发送 HTTP 请求。服务器处理请求后返回标准的 HTTP 报文,客户端接收到报文后需要对其进行解析和处理,以得到真正的数据。最后,开发者的回调代码对输出进行处理。因此,选项 B 是正确的

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[微信小程序踩坑]微信小程序editor富文本组件渲染字符串时,内部图片超出大小导致无法正常渲染或回显(数据传输长度为 3458 KB,存在有性能问题!)

坑一&#xff1a;回显问题 富文本组件&#xff1a; <editor id"editor" name"{{name}}" style"font-size: 28rpx;color: #C9CDD4" read-only"{{true}}" placeholder"{{placeholder}}" bind:input"onChange11"…

kaggle新赛:AI Village夺旗赛挑战

赛题名称&#xff1a;AI Village Capture the Flag DEFCON31 赛题链接&#xff1a;https://www.kaggle.com/competitions/ai-village-capture-the-flag-defcon31 赛题背景 夺旗赛这款广受欢迎的竞技游戏&#xff0c;不仅可以在户外进行。数字夺旗赛指的是一系列需要参赛者利…

Django 全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置&#xff1a;settings.py2.1 注册 APP&#xff1a;INSTALLED_APPS2.2 模板路径&#xff1a;TEMPLATES2.3 静态文件&#xff1a;STATICFILES_DIRS2.4 数据库&#xff1a;DATABASES2.5 允许访问的主机&#xff1a;ALLOWED_HOSTS 1 …

AI与Prompt:解锁软件开发团队的魔法咒语,在复杂任务上生成正确率更高的代码

AI与Prompt&#xff1a;解锁软件开发团队的魔法咒语 写在最前面论文&#xff1a;基于ChatGPT的自协作代码生成将团队协作理论应用于代码生成的研究自协作框架原理1、DOL任务分配2、共享黑板协作3、Instance实例化 案例说明简单任务&#xff1a;基本操作&#xff0c;生成的结果1…

Linux系统下DHCP服务安装部署和使用实例详解(蜜罐)

目录 一、概述 二、具体配置如下&#xff1a; 一、概述 DHCP &#xff1a;动态主机设置协议&#xff08;英语&#xff1a;Dynamic Host Configuration Protocol&#xff0c;DHCP&#xff09;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;主要有两个用途&…

sql-50练习题0-5

sql练习题0-5题 前言数据库表结构介绍学生表课程表成绩表教师表 0-1 查询"01"课程比"02"课程成绩高的学生的信息及课程分数0-2查询"01"课程比"02"课程成绩小的学生的信息及课程分数0-3查询平均成绩大于等于60分的同学的学生编号和学生…

父子项目打包发布至私仓库

父子项目打包发布至私仓库 1、方法一 在不需要发布至私仓的模块上添加如下代码&#xff1a; <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><configuration><skip>true</s…

基于OFDM的通信系统模拟实现

文章目录 前言一、OFDM 基本知识1、OFDM 理论知识及仿真2、OFDM 调制3、OFDM 解调 二、2ASK&#xff08;二进制振幅键控&#xff09;1、2ASK 基本原理①、OOK②、2ASK 2、2ASK/OOK 信号产生方法3、2ASK/OOK 信号解调方法 三、基于 OFDM 的通信系统模拟实现1、整体流程2、MATLAB…

基于nodejs+vue食力派网上订餐系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

行情分析——加密货币市场大盘走势(10.27)

目前大饼开始了震荡盘整&#xff0c;目前远离EMA21均线&#xff0c;预计会有大的回调动作。而MACD日线来看&#xff0c;昨日和今日开始呈现绿色空心柱&#xff0c;也在说明大饼在做震荡盘整。不排除大跌的可能性&#xff0c;大饼可以开始布局中长线空单&#xff0c;可以再35000…

【NLP】word复制指定内容到新的word文档

目录 1.python代码 2.结果 需求&#xff1a; 复制word文档里的两个关键字&#xff08;例如“起始位置”到“结束位置”&#xff09;之间的内容到新的word文档。 前提&#xff1a;安装win32包&#xff0c;通过pip install pywin32命令直接安装。话不多说&#xff0c;直接上代码…

苹果cms模板MXone V10.7魔改版源码 全开源

苹果cms模板MXone V10.7魔改版源码 全开源 苹果cms模板MXone魔改版短视大气海报样式 安装模板教程说明&#xff1a; 1、将模板压缩包上传到苹果CMS程序/template下解压 2、网站模板选择mxone 模板目录填写html 3、网站模板选择好之后一定要先访问前台&#xff0c;然后再进…

面试准备中........

一、Linux 计算机网络相关&#xff1a; 1.OSI七层模型 应用层 &#xff1a;给用户提供操作界面 表示层&#xff1a;数据的表示&#xff1a;将字符转化为2进制或将2进制转化为字符。加密&#xff1a;对称加密和非对称加密&#xff0c;ssh协议。压缩&#xff1a;将文件压缩。…

No authorization token was found

今天遇到了一个问题&#xff0c;我把前后端逻辑都理了一遍&#xff0c;开始怀疑后端&#xff0c;后端肯定没错了&#xff0c;把前端理了一遍&#xff0c;ok前后端没错&#xff0c;我错。登录哪里需要的token&#xff1f;&#xff1f;&#xff1f;&#xff1f;把我搞懵逼了。 测…

代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间

LeetCode T435 无重叠区间 题目链接:435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 这题思路和昨天的打气球类似,我们需要按照左区间或者右区间进行排序,然后哦判断第i个区间的左端点和第i-1个区间的右端点的大小关系,,如果大于等于,那么就无需操作,一旦…

Fabric.js 复制粘贴元素

本文简介 点赞 关注 收藏 学会了 当你要复制一个 fabric 的元素时&#xff0c;你考虑到的是什么&#xff1f;是深拷贝当前选中对象再添加到画布中&#xff1f; 其实&#xff0c;fabric.js 提供了一个克隆方法&#xff0c;在 fabric.js 官网的案例里也有这个demo&#xff1a…

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线,可以进入轻松学编程

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线&#xff0c;可以进入轻松学编程 学习编程捷径&#xff1a;&#xff08;不论是正在学习编程的大学生&#xff0c;还是IT人士或者是编程爱好者&#xff0c;在学习编程的过程中用正确的学习方法 可以达到事半…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(上)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart语言吉祥物Dash&#xff08;上&#xff09; 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://…

python opencv之图像分割、计算面积

以下代码是一个基于K-means聚类算法进行图像分割的实现。通过读取一个彩色图像&#xff0c;将其转化为二维数组形式。然后使用K-means算法对像素点进行聚类&#xff0c;聚类个数为7。根据聚类后的标签值对像素点进行着色&#xff0c;并创建掩膜图像。接着使用形态学开运算和闭运…

Web项目如何做单元测试

你可能会用单元测试框架&#xff0c;python的unittest、pytest&#xff0c;Java的Junit、testNG等。 那么你会做单元测试么&#xff01;当然了&#xff0c;这有什么难的&#xff1f; test_demo.py def inc(x):return x 1def test_answer():assert inc(3) 4 inc() 是定义的…