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

网络原理 - 11(HTTP/HTTPS - 2 - 请求)

目录

HTTP 请求(Request)

认识 URL

URL 基本格式

关于 URL encode

认识方法(method)

1. GET 方法

2. POST 方法

认识请求“报头”(header)

Host

Content-Length   Content-Type

User-Agent(简称 UA)

Referer

认识请求“正文”(body)

完!


HTTP 请求(Request)

认识 URL

URL 基本格式

URL 不仅仅是在 HTTP 中使用,回忆想想,我们之前在 JDBC 也使用过 URL:jdbc:mysql://127.0.0.1:3306/java110?characterEncoding=utf8&useSSL=false

平时我们俗称的“网址”,其实说的就是 URL(Uniform Resource Locator 统一资源定位符),描述一个互联网上的资源位置,即互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。(URL 的详细规则由因特网表述 RFC1738 进行约定~~)

我们上面的:https://www.baidu.com/ 

这是一个最简单的 URL,https 是协议的名称,www.baidu.com 是域名

我们如果抓一个百度里面的搜索内容请求如下:

此时的 URL 就不是上面那么简单了:在协议的名称,域名的后面,还跟了一长串字符~~ 称为查询字符串(query string),查询字符串中表达的意思,作为外人是无从得知的,这里面的内容就是写这个代码的程序员定义的~~

我们可以看到,在查询字符串中,也是键值对的格式。但此处的键值对,是使用 & 分割键值对,使用 = 来分割键和值~~

一个完整的 URL 结构如下:

http:协议方案名,常见的有 http 和 https,也有其他的类型(我们前面访问 mysql 的时候使用 jdbc:mysql)(可以省略,省略后默认为 http://)

user:pass:登录信息,之前是直接会把相关认证信息直接在 URL 中展示的,后来发现实在是不太安全~~ 现在都是通过单独的登陆页面来完成身份验证~~

www.example.jp:80:服务器地址,服务器端口号,这里的域名,也可以是 IP 地址,后面带有端口号,可以表示我们要访问服务器那个端口,如果 URL 中不带端口号,浏览器就会自动给一个默认的端口(这里的服务器端口,不是客户端中系统随机分配的那个),此处用什么端口作为默认值,取决于我们的协议是什么:http -- 80    https -- 443

dir/index.html:带有层次的文件路径

uid=1:查询字符串,是客户端给服务器传递信息的重要途径,这里的组织方式是按照键值对来组织的,这里面的键值对内容,是程序员自定义的~~

ch1:片段标识符,主要用于页面跳转,常用于通过不同的片段表示跳转到文档的不同章节

结合上述的 IP 地址,端口号,带层次的文件路径,查询字符串,就可以描述出一个网络资源了:

http://中北大学文韬餐厅:20/手抓饼/番茄手抓饼/?辣椒=少放&香菜=多放

关于 URL encode

在 query string 中都是程序员自定义的键值对,但在 URL 中,本身有些特殊符号具有特特定的含义: /   :   ?  @  .....

如果 URL 中的 query string 中也包含同样的符号,怎么办呢??? ==》 如果直接写进 query string 中,就可能会使服务器 / 浏览器解析失败!!

一个靠谱的办法,我们前面已经在代码中使用过了:对上述符号进行“转义”。包括中文字符或者是其他由 UTF-8 或者 GBK 这样的编码方式构成的字符,虽然在 URL 中没有特殊含义,但浏览器可能会把编码中的某个字节当作 URL 中的特殊符号,也需要进行转义~~

转义的规则如下:将需要转码的字符的转为 16 进制表示,前面加上 % 即可

比如我们搜索 C++:

可以看到,query string 中显示的是 C%2B%2B

我们可以通过 ASCII 码表发现,+ 的十六进度是 2B,则对应了 C++ ==》 C%2B%2B

我们也可以搜索一个女神

在上面虽然显示的 query string 直接是女神,是浏览器自动进行了解析,我们可以复制粘贴出来到文本文档就显示出来了:

我们“女神”进行 utf-8 编码:

结果相符~~

我们这里的 urlencode 编码是非常非常重要的~~ 在实际开发中,当我们要构造一个 URL 的时候,尤其是 URL 的 query string 中要包含中文的时候,务必要进行编码!!

认识方法(method)

请求的首行中,包括了 方法 URL 版本号

方法就描述了这次请求,想干啥(目的)

1. GET 方法

GET 是最常用的 HTTP 方法,常用于获取服务器上的某个资源(读操作)。在浏览器中直接输入 URL,此时浏览器就会发送出一个 GET 请求。另外,HTML 中的 link,img,script 等标签,也会触发 GET 请求。

使用 Fiddler 观察 GET 请求:

在浏览器访问百度主页,观察抓包结果:

我们可以看到,最上面蓝色的,是通过浏览器地址发送的 GET 请求,下面的

下面的一个写 baidu 域名相关的请求,有些是通过 HTML 中的 link/script/img 标签产生的。有些是通过 ajax 方式产生的。

我们选中第一条,观察请求的详细结果:

GET 请求的特点:

首行的第一部分为 GET

URL 的 query string 可以为空,也可以不为空

header 部分有若干个键值对结构

body 部分为空

2. POST 方法

POST 方法也是一种常见的方法,多用于提交用户输入的数据给服务器(例如登录页面)

我们可以登录 gitee 来进行一下抓包~

对第一个请求,点击查看详情

POST 请求的特点:

首行的第一部分为 POST

URL 的 query string 一般为空(可以不为空)

header 部分有若干个键值对结构

body 部分一般不为空,body 内的数据格式通过 header 中的 Content - Type 指定。body 的长度由 header 中的 Content - Length 指定~~

面试题:POST 和 GET 的区别

先盖棺定论:GET 和 POST 没有本质区别。使用 GET 的场景,也可以替换成 POST,使用 POST 的场景,也能替换成 GET(这里主要是取决于程序员代码是怎么写的,尤其是服务器和客户端都是同一个程序员实现的情况~~)(部分服务器 / 部分浏览器,在某些情况下 GET 和 POST 不能完美替换,但是大部分情况下,相互替换问题一般不大~~)

但是 GET 和 POST 还是在使用习惯上有一些区别的~~

1. GET 习惯于把数据放到 URL 的 query string 中。POST 习惯于把数据放到 body 中。

(GET 也可以把数据放到 body,POST 也可以把数据放到 query string -- 有些可能不支持,绝大部分都支持)

2. 语义上的区别。在标准文档中,GET 的语义是用来获取数据的,POST 的语义是给服务器传输数据的。(实际使用,当然还是程序员自己说了算~~)

3. 关于幂等性,在标准文档中,建议 GET 请求实现幂等的,POST 无要求。

(幂等:是一种数学术语,在计算机中也很常见~~ 即每次输入的内容一定,输出的结果也一定,就称为是幂等的,如果每次输入的内容一定,输出的结果不一定,就不是幂等的)

(GET 在实际开发中,也不一定非要实现幂等,标准是这么建议的,但我们可以不听标准的建议~~)

网上的一些不太准确的相关说法:

1. POST 比 GET 更加安全~~

论据:登录的时候,如果使用 GET,用户密码就会显示在 URL 中,此时会被别人看到,就不安全...

如今用户密码都会有一个单独的登录页面了,不会直接在 URL 中,即使是 POST ,即使没有显示子啊 URL 中,也是可以被黑客进行抓包获取的...真正保证安全性的关键在于加密!!

2. GET 传输的数据量小(存在上限),POST 传输的数据量更大

这句话描述的是以前的情况,以前是以前,现在是现在~~

实际上,HTTP 标准文档上明确说了,对于 GET,URL 的长度是不进行限制的,只不过是之前老版本的 IE 浏览器在实现的时候,URL 的长度有限制(现在已经没有了~~)

3. GET 只能携带文本数据,POST 可以携带二进制数据

这个说法,并不是完全错误,只是有一些局限性~~

URL 通过 query string 来携带数据

query string 是只能包含文本的,是对二进制数据进行 urlencode 了,自然就成为文本了。到了服务器再进行 urldecode,就能把数据还原成二进制。

POST 请求中,bodu 中虽然可以携带二进制数据,但也不是经常携带的,很多时候是对二进制数据进行 urlencode / base64 等等方式进行转码的~~

其他方法使用较少~~

认识请求“报头”(header)

header 的整体格式也是“键值对”结构

每个键值对占一行,键和值之间使用分号进行分割~

Host

表示服务器主机的地址和端口

(URL 中已经有 Host 了,这里的 Host 和 URL 中的 IP 地址 端口什么的,绝大部分情况下都是一样的~~)

Content-Length   Content-Type

Content-Length 表示 body 中的数据长度。

Content-Type 表示请求的 body 中的数据格式。

(和 body 密切相关,如果当前数据包没有 body,也就不会有这两个字段)

如果没有这两个字段,body 的请求/响应,就会直接使用空行作为分隔符了,如果有 body,空行就不是结束标志了,从空行开始来读取 body,body 要读多长就取决于 Content-Length,读完之后,这个包就结束了

Content - Type 中的常见选项:

请求中:

1) application/json:body 中的数据为 json 格式,形如:

{"username":"123456789","password":"xxx","code":"aaa","uuuid":"d110a05ccde65da13"}

2) application/x-www-form-urlencode:称为 form 表单,通过 HTML 中的 form 标签构造出来的一种格式,这种格式的特点是,把 query string 放到 body 中了

3) multipart/form-data:当需要在表单中上传文件,或者包含二进制数据的时候使用。在 HTML 的 form 标签中需要设置 enctype=“multipart/form=data“。

例如:

使用 boundary(边界标识符,如 ---------WebKitFormBoundaryrGKCBY7qhFd3TrwA)来分割不同表单数据部分。每个部分包含自身的元数据(如 Content-Disposition 指定数据类型和名称,Content-Type 指定具体的数据类型)。

响应中:

1) text/plain 纯文本

2) text/html   html 页面

3) text/css  css 页面

4) application/javascript js

5) application/json

6) image/png

7) image/jpg

.....................

补充:

我们后面自己写服务器程序返回网页,如果发现网页乱码,就可以检查一下是否是这里的编码方式没有设置或者是设置的不对~

User-Agent(简称 UA)

表示浏览器/操作系统的属性,描述了用户使用什么样的设备上网

Windows NT 10.0 Win64; x64 ==> 操作系统信息

Chrome/121.0.0.0 Safari/537.36 Edg/135.0.0.0 ==》 浏览器信息~~

上古时期,UA 是非常关键的内容,由于计算机发展迅速,不同用户使用的上网设备,差异很大,UA 就可以表明该用户上网的设备具体是什么信息,如何用户使用的是比较老的设备,返回的页面就不含新特性,确保这个页面可以正确的访问出来。如果用户使用的是新设备,返回的页面就包含新的特性,确保这个页面体验感足够好~~

随着时间推移,浏览器现在都差不多了~~ 但 UA 仍然很有用,很多网站在 PC 端和手机端,由于其设备的大小区别,返回的页面布局也会有所差异,这就是通过 UA 来进行控制的~~

Referer

表示这个页面是从那个页面跳转过来的。在浏览器中,直接输入 URL 或者点击收藏夹打开的网页,此时是没有 Refere 的

举例:

我有个朋友~~~当年做的是广告页面~~~搜索广告中,都是按照点击计费的,用户每次点击广告,负责的企业都能赚钱,所以必须要记录某个广告在某个时间段内被点击多少次。

比如说在百度中搜索“肾虚”,当我们用户点击一下,百度就能到账 money~~

这个点击次数,百度和广告主都要进行统计~~

百度中,用户点击就会把请求发送到百度的计费服务台,通过记录日志就知道了~~

广告主中,就在他的服务器上记录日志,但一个广告,一般不会仅仅就找一家平台,他会找 360,搜狗等等~他怎么知道那些请求是百度的广告引流过来的呢??? ==》借助 referer 即可~~

问题来了 referer 是否会被篡改呢??? ==》 很有可能!!

因此就有了 HTTPS 的出现~~ 这个 S 其实是 SSL(网络中用于加密的协议~~)

加密就能把 header 和 body 都进行加密,网络上传输的就是密文了~~

其他人要想修改,就得先进行破解,就算能破解,也无法篡改,一旦进行修改操作,用户的浏览器就能感知到了~~~

Cookie 本质上是一个浏览器这边本地持久化存储数据的机制。

浏览器作为电脑上的一个程序,是可以直接读写本地磁盘文件的,系统提供了一个 API 操作文件。注意的是,浏览器上运行的网页,理论上也是可以通过浏览器提供的 API 来读写本地的磁盘文件,但是浏览器禁止了这种做法(浏览器并没有给网页提供这样的 API) (不安全~~ 万一黑客通过网页,直接把我们 C 盘中的学习资料删了怎么办??? /哭 /哭 ~~)

但话又说回来,有些网站,是需要把一些信息保存到浏览器这边的,比如当前登录的用户身份信息~~ 浏览器退而求其次,给网页提供了 API,但这个 API 只能是有限度的存储数据,而不能随意的访问文件系统~~

HTTP 请求中的 Cookie 字段,就是把本地存储的 Cookie 信息发送到服务器这边。

HTTP 响应中会有一个 Set-Cookie 字段,就算服务器告诉浏览器你要在本地保存那些信息。

上述的请求和响应字段,都是以键值对的形式进行的(程序员可以自定义~~)

Cookie 中存储了一个字符串,这个数据可能是客户端(网页)自行通过 JavaScript 写入的,也可能是来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据)

一般可以通过这个字段来实现“身份标识”的功能。(每个不同的域名下都可以有不同的 Cookie,不同网站之间的 Cookie 并不冲突~)

举个例子:

Cookie 的作用,非常类似于超市买东西时候的购物卡流程~~

1. 注册会员(初始设置 Cookie)

当我们第一次去超市,注册称为会员之后,超市会给我们办一张会员卡,这就类比是服务器给客户端设置 Cookie。会员卡上记录了我们的信息,比如姓名,会员卡号,积分等等,这些信息就如同 Cookie 里面存储的用户标识等基础数据

2. 首次购物(第一次请求携带 Cookie)

当我们再收银台结账的时候,收银员会扫描我们的会员卡。这就类似于客户端向服务器发起请求的时候带上了 Cookie。收银员通过会员卡,就可以知道我们是会员,会根据会员的政策给我们积分或者相关的优惠,就像服务器根据 Cookie 里面的信息,来识别出用户,并作出响应的处理,比如提供个性化的页面展示或服务~~

3. 再次购物(后续请求携带 Cookie)

之后我们再去超市购物,结账的时候每次都出示会员卡。收银员每次都能够通过会员卡来了解到我们之前的购物记录,积分情况等,然后根据这些信息为我们提供服务~~比如提醒我们,积分快能兑换礼品了,或者根据我们的购物偏好,来推荐一些商品。这就如同客户端后续每次向服务器发送请求时,Cookie 持续发挥作用,让服务器可以基于之前的交互历史,持续为用户提供连贯,个性化的服务~~

流程图如下:

关于 Cookie 的几个重要结论:

1. Cookie 从哪里来???

服务器返回给浏览器的。通常都是首次访问/登录成功之后。

2. Cookie 到哪里去???

Cookie 会存储在浏览器本地主机的硬盘上。后续每次访问服务器都会带上 Cookie。不同的客户端,保存的 Cookie 是不同的,即使是同一个主机,使用不同的浏览器,Cookie 大概率也不同。

3. Cookie 中存储什么???

Cookie 以键值对的形式对数据进行存储。这里的内容都是程序员自定义的,和 query string 一样,外人无从理解~ 不同的网站的 Cookie 是不同的~

4. Cookie 在浏览器这边如何组织???

在硬盘本地保存,是按照不同的域名为维度,分别进行存储。

5. Cookie 的用途是什么???

用来在客户端保存数据,其中最主要的就是保存用户的身份标识,使得服务器可以通过标识来区分用户了,一般其他的业务不会存在 Cookie 中~~

我们可以通过抓包来观察一下页面登录的过程(以 gitee 为例):

1) 清除之前的 Cookie

2) 登录操作:

登录请求:

登录响应:

可以看到,响应中包含了 Set-Cookie 属性

其中我们重点看一下第二个,里面包含了一个 gitee-session-n 这样的属性,属性值是一串很长的加密之后的信息。这个信息就是用户当前登录的身份标识,也称为“令牌(token)”。

3) 访问其他页面

当我们登录成功之后,此时访问码云中的其他页面(比如个人主页),请求中就会带着刚刚获取到的 Cookie 信息。

我们的请求中的 Cookie 字段也包含了一个 gitee-session-n 属性,里面的值和刚才服务器返回的值相同,后续只要访问 gitee 这个网站,就会一直带着这个令牌,直到令牌过期/下次重新登录~~

比如我们此时再访问一个“我的星选集”,此时请求中的 Cookie 还是和之前一样的~~

理解登录过程:

这个过程再结合我们前面去超市买东西例子:

首次进入超市后,就是打开登录页面。当我们第一次结账提供手机号信息办会员卡的时候,就是输入用户名密码,点击登录,此时就得到了一张“会员卡”,这张会员卡就相当于是我们的“令牌”。

此后再去超市进行购物,积分兑换奖品等等操作,就不需要再提供手机号了,只需要凭会员卡就可以识别出我们的身份了。

当我们要搬家的时候,不想要会员卡了,就可以注销这个卡,此时我们的身份就和会员卡的关联就销毁了(类似于网站的退出登录操作)

当我们之后再搬回来,又想在超市买东西,就可以再办一张会员卡,此时就得到了一个新的令牌~~

认识请求“正文”(body)

正文中常见的就是我们上面 Content - Type 中的一些格式内容~~

完!

相关文章:

网络原理 - 11(HTTP/HTTPS - 2 - 请求)

目录 HTTP 请求(Request) 认识 URL URL 基本格式 关于 URL encode 认识方法(method) 1. GET 方法 2. POST 方法 认识请求“报头”(header) Host Content-Length Content-Type User-Agent&…...

百度CarLife实现手机车机无缝互联

百度CarLife是百度推出的智能车联网解决方案,通过手机与车机互联技术,为用户提供安全便捷的车载互联网服务体验。 CarLife 实现手机与车机屏幕的无缝互联,让应用内容同步至车载系统,减少驾驶过程中操作手机的频率,提升…...

初识Redis · 缓存

目录 前言: 引入缓存 缓存更新策略 定期生成 实时生成 缓存注意事项 缓存预热 缓存穿透 缓存雪崩 缓存击穿 前言: 我们在Redis的学习中,逐渐了解到了Redis的用途是可以用来当作内存数据库,缓存,消息队列等&…...

Redis性能优化终极指南:从原理到实战的深度调优策略

一、内存优化:构建高效存储体系 1.1 三级过期键管理机制 Redis通过组合策略实现精准的内存回收: 定时删除(主动淘汰) 创建定时器在键到期时立即删除 优点:及时释放内存 缺点:高CPU消耗(每个…...

哈希表笔记(一 )

设计思路 核心功能和 API 设计 (Core Functionality & API Design): 基本操作: 必须提供核心的 put(key, value)(添加或更新键值对)、get(key)(根据键获取值)、remove(key)(根据键删除键值对)、contain…...

c网络库libevent的http常用函数的使用(附带源码)

Libevent HTTP 核心函数详解与实战 核心概念HTTP 服务器端常用函数1. 初始化与绑定2. 设置请求处理回调3. 在回调函数中处理请求4. 发送响应5. 启动与停止6. 清理资源 HTTP 客户端常用函数1. 初始化2. 创建连接3. 创建并发送请求4. 在回调函数中处理响应5. 启动事件循环与清理 …...

java练习3

随机生成20个数字(随机种子) 分别使用冒泡排序、二叉树排序、插入排序进行排序 并输出最终结果以及三种排序使用的时间 package a01_第一次练习.a03_排序;import java.time.Duration; import java.time.LocalDateTime; import java.util.TreeSet;publi…...

当 AI 成为 “数字新物种”:人类职业的重构与进化

一、AI 的 “替代清单”:从流水线到办公室的全面侵袭 在深圳某智能工厂,机械臂正以 0.01 毫米的精度完成手机组装,100 台机器人 24 小时运转,替代了 3000 名工人。这种场景正在全球制造业蔓延 —— 麦肯锡预测,到 203…...

HarmonyOS ArkUI交互事件与手势处理全解析:从基础到高级实践

文章目录 一、交互事件1.1 通用事件1.1.1 事件分发1.1.1.1 触摸测试1. 触摸测试基本流程2. 触摸测试控制3. 自定义事件拦截4. 禁用控制5. 触摸热区设置6. 安全组件 1.1.1.2 事件响应链收集 1.1.2 触屏事件1.1.3 键鼠事件1.1.3.1 鼠标事件1.1.3.2 按键事件 1.1.4 焦点事件1.1.5 …...

【计算机网络】面试常考——GET 和 POST 的区别

GET 和 POST 的区别 GET 和 POST 是 HTTP 协议中最常用的两种请求方法,它们的主要区别体现在 用途、数据传输方式、安全性、缓存机制 等方面。以下是详细对比: 1. 用途 GET POST 主要用于 获取数据(如查询、搜索)。 主要用于 提…...

AI编程工具“幻觉”风险与飞算JavaAl的破局之道

近年来,AI编程辅助工具迅速崛起,极大地提升了开发者的工作效率。然而,这些工具普遍存在一个被称为“幻觉”(hallucination)的风险——AI可能会生成看似合理但实际错误、不安全或低效的代码。这种现象在复杂业务逻辑和特定领域开发中尤为明显&…...

【Python零基础入门系列】第1篇:Python 是什么?怎么装环境?推荐哪些 IDE?

各位网友们,欢迎来到我的 Python 学习专栏! 前两天看到新闻英伟达为 CUDA 添加原生 Python 支持,意味着开发者可直接用 Python 操作 GPU,加速 AI 和高性能计算,降低门槛,让 Python 的应用范围更广、能力更强。 一直想写一系列文章教知友们从零开始学会 Python 编程,目…...

VPN访问SAP组服务器报登陆负载均衡错误88:无法连接到消息服务器(RC=9)

用户反馈用SAPGUI接入SAP时报错:登陆负载均衡错误88:无法连接到消息服务器(RC9) 经了解是通过VPN访问,但VPN没有放行ICMP访问,导致不能PING通,不能确认是网络问题还是什么问题。 解决方案: 1、VPN由原&am…...

Linux查看程序端口占用情况

大家好,欢迎来到程序视点!我是你们的老朋友.小二! 核心问题: Tomcat 8080端口启动失败,提示端口被占用,但常规检查未发现Tomcat进程占用该端口。 关键排查步骤: 初步检查 使用 ps -aux | gre…...

[C]基础14.字符函数和字符串函数

博客主页:向不悔本篇专栏:[C]您的支持,是我的创作动力。 文章目录 0、总结1、字符分类、转换函数2、strlen的使用和模拟实现2.1 strlen的使用2.2 strlen的模拟实现 3、strcpy的使用和模拟实现3.1 strcpy的使用3.2 strcpy的模拟实现 4、strcat…...

三种机器学习类型

本文讲介绍三种机器学习类型:①监督学习,②无监督学习,③强化学习。我们主要了解监督学习和无监督学习即可。 下图介绍这三种机器学习类型的区别: 1 用来预测未来的监督学习 从有标签的训练数据中学习一个模型,用来…...

UE5 Set actor Location和 Set World Location 和 Set Relative Location 的区别

在 Unreal Engine 的蓝图里,SetRelativeLocation、SetWorldLocation 和 SetActorLocation 三个节点虽然都能改变物体位置,但作用对象和坐标空间(Coordinate Space)不同: 1. SetActorLocation 作用对象:整个…...

Glide 如何加载远程 Base64 图片

最近有个需求,后端给出的图片地址并不是正常的 URL,而且需要一个接口去请求,但是返回的是 base64 数据流。这里不关心为啥要这么多,原因有很多,可能是系统的问题,也可能是能力问题。当然作为我们 Android 程…...

JVM对象存储格式

引言 在Java虚拟机(JVM)中,对象的内存布局是一个重要的底层概念,它直接影响对象在内存中的存储方式和占用空间。了解对象存储格式不仅有助于优化程序性能,还能帮助我们更好地理解JVM的工作原理。本文将详细探讨对象存…...

3D Gaussian Splatting部分原理介绍和CUDA代码解读

本系列旨在帮助无CUDA代码经验的读者、以及3DGS的初学者理解代码逻辑。 3D GS论文原文链接:https://arxiv.org/abs/2308.04079 论文笔记链接:【论文笔记】3D Gaussian Splatting for Real-Time Radiance Field Rendering 【论文笔记】A Survey on 3D Ga…...

日本IT行业|salesforce开发语言占据的地位

在日本的IT行业中,Salesforce 开发语言处于一个较为专业但稳步增长的细分领域,并不是主流开发语言(如 Java、Python、PHP),但其在某些行业和场景中地位越来越重要。 本篇以下是详细分析: Salesforce开发语言…...

1.1 点云数据获取方式——引言

图1-1-1点云建筑场景图 点云数据是指能够描述外部场景、对象表面的三维空间位置,并具有相关属性的点集,其每个离散点通常包括三维空间位置(x,y,z)以及强度、颜色等属性信息。大量分布的离散点集能够清晰而直接地描绘场景、对象的3…...

接入层架构演变

1、单体架构 请求过程 浏览器的请求通过 DNS Server 解析到指定的 IP 地址,浏览器通过 IP 地址访问 Web Server 缺点 当到达 Web Server 的性能瓶颈时(瓶颈受到CPU,内存,io,带宽影响),无法进…...

python:sklearn 主成分分析(PCA)

参考书:《统计学习方法》第2版 第16章 主成分分析(PCA)示例 编写 test_pca_1.py 如下 # -*- coding: utf-8 -*- """ 主成分分析(PCA) """ import matplotlib.pyplot as plt from skl…...

力扣-数据结构-二叉树

94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2]示例 2: 输入:root [] 输出:[]示例 3: 输入&#x…...

嵌入式音视频实时通话EasyRTC打造设备安装与调试的高效远程解决方案

一、背景 在数字化浪潮席卷全球的今天,实时音视频通信技术已经成为众多领域不可或缺的重要组成部分。从智能家居到智能安防,从在线教育到远程医疗,人们对于高效、便捷、稳定且低延迟的音视频通信解决方案的需求日益迫切。而EasyRTC作为一款卓…...

AI 的未来是开源?DeepSeek 正在书写新篇章!

AI 的未来是开源?DeepSeek 正在书写新篇章! 随着人工智能(AI)技术的迅猛发展,越来越多的企业和研究机构开始关注 AI 的开放性和透明度。开源不仅能够促进技术创新,还能加速知识的传播和应用。在这个背景下…...

抢先体验全新极小大模型Qwen3:0.6B

全民都在期待DeepSeek-R2的发布,但是一不小心被阿里截胡了,2025 年 4 月 29 日,阿里巴巴发布并开源了通义千问 Qwen3 系列大模型。据 大模型镜像网站 上关于Qwen3的介绍: Qwen3 是 Qwen 系列中最新一代的大型语言模型,提供一整套密集模型和混合专家 (MoE) 模型。Qwen3 基…...

部署一个自己的Spring Ai 服务(deepseek/通义千问)

Spring Boot 无缝接入 DeepSeek 和通义千问请求日志记录及其ip黑白名单 SpringBoot版本 3.2.0 JDK 版本为17 redis 3.2.0 mybatis 3.0.3 依赖引入 关键依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-sp…...

第一讲 | 算法复杂度

算法复杂度 一、数据结构前言1、数据结构&#xff08;DS&#xff09;2、算法&#xff08;Algorithm&#xff09; 二、算法效率1、复杂度的概念 三、时间复杂度&#xff08;1&#xff09;、案例&#xff08;2&#xff09;、大O的渐进表示法&#xff08;3&#xff09;、时间复杂度…...

【运维】还原 Docker 启动命令的利器:runlike 与 docker-autocompose

&#x1f50d; 还原 Docker 启动命令的利器&#xff1a;runlike 与 docker-autocompose 实用教程 在日常使用 Docker 时&#xff0c;我们常常通过 docker run 启动容器&#xff0c;但有时候过了一段时间就忘记了当初使用的具体参数&#xff08;端口、挂载、环境变量等&#xf…...

IP属地是实时位置还是自己设置

刷微博、抖音时&#xff0c;评论区总能看到“IP属地”&#xff1f;这个突然冒出来的小标签&#xff0c;让不少网友摸不着头脑&#xff1a;‌IP属地是实时位置&#xff0c;还是可以自己设置&#xff1f;‌别急&#xff0c;今天咱们就来聊聊这个话题&#xff01; 1、什么是IP属地…...

Android WIFI体系

先说说WifiLock、MulticastLock 、IWificond WifiLock 允许应用强制保持 WiFi 活跃&#xff0c;即便设备处于休眠状态。如WIFI_MODE_FULL_HIGH_PERF&#xff1a;保持高性能 WiFi 活跃状态&#xff0c;适用于高带宽需求&#xff0c;如视频通话、流媒体。经测试有的场景能减少10…...

什么是静态住宅ip,跨境电商为什么要用静态住宅ip

在数字时代&#xff0c;IP地址不仅是设备联网的“ID”&#xff0c;更是跨境电商运营中的关键工具。尤其对于需要长期稳定、安全操作的场景&#xff0c;静态住宅IP逐渐成为行业首选。 一、什么是静态住宅IP&#xff1f; 静态住宅IP&#xff08;Static Residential IP&#xff0…...

常见位运算总结

目录 常见位运算总结 191:位1的个数 338&#xff1a;比特位计数 461:汉明距离 136&#xff1a;只出现一次的数字 260&#xff1a;只出现一次的数字III 常见位运算总结 191:位1的个数 链接&#xff1a;191. 位1的个数 - 力扣&#xff08;LeetCode&#xff09; class Sol…...

[密码学实战]SDF之对称运算类函数(四)

[密码学实战]SDF之对称运算类函数(四) 一、标准解读:GM/T 0018-2023核心要求 1.1 SDF接口定位 安全边界:硬件密码设备与应用系统间的标准交互层 功能范畴: #mermaid-svg-1jptduZFNFiRZ2lS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16…...

【C++编程入门】:基本语法

上一篇提到了C关键字和缺省参数以及命名空间域&#xff0c;这篇继续分享C入门语法&#xff0c;把基本语法掌握扎实后面学习更才能更轻松一些。 目录 引用 引用的特性 常引用 内联函数 auto关键字 引用 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&am…...

区块链最佳框架:Truffle vs Hardhat vs Brownie

区块链技术的快速发展使得智能合约开发成为主流&#xff0c;而选择合适的开发框架是提升效率的关键。目前&#xff0c;Truffle、Hardhat和Brownie是三大主流框架&#xff0c;它们各有特点&#xff0c;适用于不同的开发场景和开发者偏好。本文将从功能、生态系统、适用人群等角度…...

Apache Flink的架构设计与运行流程说明

在大数据领域&#xff0c;实时计算的重要性随着业务需求的爆发式增长愈发凸显。从电商的实时销量监控到金融的高频交易风控&#xff0c;从物联网设备的实时告警到社交平台的热点追踪&#xff0c;企业对“秒级甚至毫秒级”数据处理能力的需求已成为刚需。在众多实时计算框架中&a…...

AI+零售:智能推荐、无人店与供应链管理的未来

AI零售&#xff1a;智能推荐、无人店与供应链管理的未来 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 AI零售&#xff1a;智能推荐、无人店与供应链管理的未来摘要引言一、智能推荐系统&#xff1a;从流量收割到用…...

华为云IoT平台与MicroPython实战:从MQTT协议到物联网设备开发

目录 前言 1. 华为云 1.1. 创建实例 1.2. 创建产品 1.3. 编辑服务模型 1.4. 注册设备 1.4.1. 复制设备连接参数 1.5. 连接参考代码 2. micropython版-物联网 2.1. 环境搭建 2.2. 实现步骤 2.3. 示例代码 结语 前言 物联网&#xff08;IoT&#xff09;技术的快速发…...

【Linux】Linux内核模块开发

Linux内核模块开发 零、关于 1、概述 最近在学习Linux相关的东西&#xff0c;学习了U-Boot的编译&#xff0c;Linux的编译&#xff0c;能够在开发板上运行自己编译的U-Boot和Linux了&#xff0c;那么接下来就是在自己编译的Linux上做应用级或者系统级的开发了。本文以字符设…...

linux 下查看指定进程的内存CPU占用情况(用于程序崩溃类的排查)

在程序开发过程中&#xff0c;如果程序较为庞大&#xff0c;逻辑较为复杂时&#xff0c;容易出现运行时崩溃的问题。导致的原因有很多&#xff0c;我这里只对较为通用的内容占用情况作记录&#xff0c;如程序中对文件描述符打开未关闭&#xff08;导致fd积攒过多超过了系统的标…...

ASP.NET MVC​ 入门指南五

26. 响应式设计与移动开发 26.1 响应式视图设计 为了使 MVC 应用程序在不同设备上都能提供良好的用户体验&#xff0c;需要采用响应式设计。可以使用 CSS 框架如 Bootstrap 来实现响应式布局。 引入 Bootstrap&#xff1a;在项目中引入 Bootstrap 的 CSS 和 JavaScript 文件。…...

字节跳动社招面经 —— BSP驱动工程师(4)

接前一篇文章&#xff1a;字节跳动社招面经 —— BSP驱动工程师&#xff08;3&#xff09; 本文内容参考&#xff1a; 嵌入式硬件平台修改启动地址-CSDN博客 特此致谢&#xff01; 上一回开始针对于“嵌入式充电站”发的一篇文章字节跳动社招面经——BSP驱动工程师中的面试题…...

Spring MVC中自定义日期类型格式转换器

在Spring MVC中&#xff0c;自定义日期类型格式转换器可以通过实现Converter接口或使用DateTimeFormat注解。以下是两种方法的详细说明&#xff1a; 方法一&#xff1a;全局自定义转换器&#xff08;推荐&#xff09; 1. 创建日期转换器类 实现 org.springframework.core.con…...

【3D 地图】无人机测绘制作 3D 地图流程 ( 无人机采集数据 | 地图原始数据处理原理 | 数据处理软件 | 无人机测绘完整解决方案 )

文章目录 一、无人机采集数据1、多角度影像数据2、定位与姿态数据 二、无人机采集数据处理原理1、空三解算2、密集点云生成与三维重建3、地形与正射影像生成4、三维模型优化与瓦片化 三、无人机影像处理软件介绍 一、无人机采集数据 无人机原始数据采集 : 多角度影像数据 : 多…...

arduino Nano介绍

【仅供学习&#xff0c;具体参数参考官网或销售商】 Arduino Nano 是一款基于 ATmega328P 微控制器&#xff08;或 ATmega168 旧版&#xff09;的紧凑型开发板&#xff0c;专为嵌入式项目和原型设计而设计。 以下是Arduino Nano V3.0 328P详细介绍&#xff1a; 主要特性 微…...

解决 Flutter 在 iOS 真机上构建失败的问题

在开发 Flutter 应用时&#xff0c;有时会在尝试将应用部署到 iOS 真机时遇到构建失败的问题。错误信息通常类似于以下内容&#xff1a; Could not build the precompiled application for the device. Uncategorized (Xcode): Timed out waiting for all destinations matchi…...

【办公类-89-03】20250429AI写的研讨记录,清除格式,统一格式,名字替换。部分加粗,添加页眉

背景需求: 检查自即,需要AI一下院内的五次科研培训记录。 本次用了豆包 豆包写的不错,也是“水字数”的高手 把每次培训内容贴到WORD里 把AI资料贴到WORD里,发现问题: 1、字体、段落什么都是不统一的,需要统一改成宋体小四,1.5倍行距 2、十个研讨人也要改成真人。就找…...