網絡原理 —— HTTP

通過網絡初識,我們認識了網絡的協議棧,TCP/IP 分為五層:應用層,傳輸層,網絡層,數據鏈路層,物理層。也介紹了其中的關鍵協議。而這些協議的理解,是我們寫網絡代碼的基礎。

應用層,是程序員打交道最多的層次。
與應用程序直接相關,程序員寫的代碼,只要是涉及到網絡通信的,都可以視為是應用層的一部分~~
應用層這里的東西是和程序員直接相關的,而且應用層中設計到的網絡通信協議,很多也都是程序員自定制的。(也就是你自己寫代碼的時候,發明創造出來的協議。)

那具體如何自定義協議呢?
自定義協議,分為兩個階段:
1.根據需求,明確傳輸哪些信息。
就拿外賣平臺舉例:
首先,會顯示一個商家列表。
客戶端 - 服務器 傳遞的信息(根據需求來的)

請求:
用戶的位置信息(經緯度,用戶的id)
響應:
商家的id,商家的名字,商家的圖片,評分,配送費,種類[…]

2.約定好信息組織的格式
有很多種方式:
1)行文本的方式
在這里插入圖片描述

上述給出的方案,只是隨便寫的,實際約定的時候,可以有很多變數的。
列和列之間,不一定使用“,”,也可以使用“;”,也可以使用“.”也可以使用 “\t”
多個數據之間,也不一定使用 “\n”,也可以隨心所欲使用任何你喜歡的分隔符。

自定義協議,你就是說了算的那個,只要客戶端和he服務器都按照這同一套規則來進行構造/解析數據就行了。
(如果客戶端和服務器是你一個人搞定,隨便怎么約定都行,如果客戶端和服務器是兩個人搞,需要你兩商量好,達成一致。)

2)通過 xml 格式來約定請求和響應的數據。
說起 xml 可能不太熟悉,但說起 html ,就不那么陌生了,最起碼聽過。
html 和 xml 都是成對的標簽構成的鍵值對結構,而 html 標簽內容都是固定的,大佬們約定好的,你不能亂寫,也不能創建新的標簽。(現在 html5 允許自定義標簽了)但 xml 標簽內容是自定義的。
在這里插入圖片描述

xml 是用來網絡傳輸的,和瀏覽器怎么顯示無關,html 是約定瀏覽器是怎么顯示的。
xml 可以用于很多場景,組織一段格式化數據用來網絡傳輸,作為配置文件等…

對于 xml 方案,放到十年前,用的還是挺多的,但是現在,已經很少用 xml 進行網絡傳輸了。
xml 的優點:可讀性好。
缺點:冗余信息太多了,網絡傳輸中,消耗更多的帶寬。(對于服務器來說,帶寬是最貴的)

3)使用 json (json 當下最流行的網絡數據格式組織的方案)
在這里插入圖片描述

json 的優點:可讀性也是很好的,消耗的帶寬,也比剛才談到的 xml 更節省
缺點:還是存在冗余信息。

4)protobuf
基于二進制的格式,對數據進行壓縮,不涉及到 json/xml 冗余信息了。帶寬消耗最少,可讀性就變差了。
在這里插入圖片描述

對于 protobuf 在性能要求高的場景就需要使用,如果性能要求不高,還是建議使用 json。
它是用開發效率換執行效率(比較少)

總結一下:
數據組織格式:
1.文本行(最原始)
2.xml (比較原始,可讀性好,冗余較多)
3.json(主流的方式,可讀性好,冗余一般)
4.protobuf(高性能場景下使用的方式,可讀性差,冗余最小)

但凡實現一個具體的程序,寫代碼之前,一定是要先約定應用層協議的格式的,應用層這里,除了自定義協議之外,也有一些大佬們現成搞好的協議了。
(FTP 文件傳輸, SSH 遠程操作主機, telnet 網絡調試工具, HTTP 協議[重點]…)。
HTTP 協議是當前 web 開發中最核心的協議,使用網站,都會用到 http,并且 Spring,也是圍繞 http轉。
我們打開一個網站我們會看見 https 。 https = http 基礎上 + 安全層(S 表示安全層 SSL)

HTTP
HTTP是什么
HTTP(全稱為“超文本傳輸協議”)是一種應用非常廣泛的 應用層協議。
“超文本”的含義,就是傳輸的內容不僅僅是文本(比如 html,css這個就是文本),還可以是一些其他的資源,比如圖片,視頻,音頻等二進制的數據。
HTTP誕生于1991年,目前已經發展為最主流使用的一種應用層協議。
在這里插入圖片描述

HTTP 往往是基于傳輸層的 TCP 協議實現的。(HTTP1.0 , HTTP 1.1 , HTTP 2.0 均為 TCP,HTTP 3基于 UDP 實現)目前我們主要使用的還是 HTTP 1.1 和 HTTP 2.0。這里以 HTTP 1.1 版本為主。

HTTP 是一問一答 模式的協議。客戶端發一個請求,服務器就返回一個響應,請求和響應一一對應。
(網絡通信中也有其他的模型:多問一答(上傳大文件),一問多答(下載大文件),多問多答(遠程控制(todesk)),由于瀏覽器打開網頁的場景/手機app加載數據的場景,就是典型的一問一答場景,所以使用 HTTP 就非常合適。)

抓包工具的使用
理解 HTTP 報文格式時,需要搭配一個重要的工具,進行學習,抓包工具。
抓包工具就相當一個”代理“,它能夠獲取到網絡的數據包,詳細的格式都解析出來了。

代理就可以簡單理解為一個跑腿小弟,你想買瓶可樂,但是又不想自己買,所以你就把錢給你的跑腿小弟,跑腿小弟來到超市把錢給老板,老板再把可樂拿過來交到你的手上,在這個過程中,這個跑腿小弟對"你"和"老板"之間的交易細節,是非常清楚的。這個跑腿小弟就被稱為正向代理(代表客戶端干活),當然也有反向代理(代表服務器干活)
在這里插入圖片描述

電腦上所有的網絡通信,都會先發給這個抓包程序,抓包程序再把數據轉發給服務器。
還有,在我們使用抓包的時候,一定要關閉梯子/梯子類的瀏覽器插件,可能會和抓包工具沖突。

抓包工具就以 fiddler 為例(fiddler 是專門抓 http 的,功能更簡單也夠用,使用更簡單)。
在這里插入圖片描述

在這里插入圖片描述

安裝完后一路next就好了。

在這里插入圖片描述

電腦上很多程序,不安分,都在后臺偷偷的做一些事情。
左側窗口為當前的請求/響應的列表(fiddler 只抓 http)
在這里插入圖片描述

字體的顏色:
紅色表示報錯 藍色表示這個請求得到了這個網頁 綠色的表示得到了一個 js 灰色的表示這個響應的數據已經被緩存了

隨便雙擊一個 http ,隨后點擊右邊窗口
在這里插入圖片描述
在這里插入圖片描述

  • 左側窗?顯?了所有的 HTTP請求/響應, 可以選中某個請求查看詳情。
  • 右側上?顯?了 HTTP 請求的報?內容. (切換到 Raw 標簽?可以看到詳細的數據格式)。
  • 右側下?顯?了 HTTP 響應的報?內容. (切換到 Raw 標簽?可以看到詳細的數據格式)。
  • 請求和響應的詳細數據, 可以通過右下?的 View in Notepad 通過記事本打開。
  • 可以使? ctrl + a 全選左側的抓包結果, delete 鍵清除所有被選中的結果.

抓包結果
HTTP請求的結果:
在這里插入圖片描述

HTTP響應的結果:
在這里插入圖片描述

協議格式總結:
在這里插入圖片描述
在這里插入圖片描述

HTTP請求
URL
平時我們俗稱的 “?址” 其實就是說的 URL (Uniform Resource Locator 統?資源定位符)。互聯?上的每個?件都有?個唯?的URL,它包含的信息指出?件的位置以及瀏覽器應該怎么處理它。(描述網絡上的唯一資源的位置)
url的格式:
在這里插入圖片描述

具體的url:
在這里插入圖片描述

URL 中的可省略部分

  • 協議名: 可以省略, 省略后默認為 http://
  • ip 地址 / 域名: 在 HTML 中可以省略(?如 img, link, script, a 標簽的 src 或者 href 屬性). 省略后表?服務器的 ip / 域名與當前 HTML 所屬的 ip / 域名?致.
  • 端?號: 可以省略. 省略后如果是 http 協議, 端?號?動設為 80; 如果是 https 協議, 端?號?動設為443.
  • 帶層次的?件路徑: 可以省略. 省略后相當于 / . 有些服務器會在發現 / 路徑的時候?動訪問/index.html
  • 查詢字符串: 可以省略
  • ?段標識: 可以省略

關于URL的encode
URL 中本身就有一些特殊符號,代表不同的特殊含義 “: / ? # & = …”。
由于query string的內容,是程序員自定義的,萬一 query string 里也包含了特殊含義的符號咋辦??
因此,某個參數中需要帶有這些特殊的字符,就必須先對這些特殊字符進行轉義。
一個中文字符由UTF-8或者GBK這樣的編碼方式構成,雖然在URL 中沒有特殊的含義,但是任然需要進行轉義,否則瀏覽器可能把UTF-8/GBK編碼中的某個字節當作URL中的特殊符號。只不過很多瀏覽器為了用戶看起來方便,顯示的時候顯示轉義之前的,實際上,抓包中就能看到,是已經轉義的數據。
轉義的規則如下:將需要轉碼的字符轉為16進制,然后從右到左,取四位(不足四位直接處理),每兩位做一位,前面加上%,編碼成%XY格式。
在這里插入圖片描述

這里面“+”被轉義成“%2B”。
urldecode就是urlencode的逆過程。

認識“方法”

這里面最重要的就是 GET 和 POST方法,其次就是PUT和DELETE 方法。其他了解就行。
在這里插入圖片描述

  • GET方法
    GET 是最常?的 HTTP ?法. 常?于獲取服務器上的某個資源。
    在瀏覽器中直接輸? URL, 此時瀏覽器就會發送出?個 GET 請求。
    另外, HTML 中的 link, img, script 等標簽,獲取CSS,獲取JS等操作也會觸發 GET 請求。
    在這里插入圖片描述

在上面的結果中可以看到:
最上面的
在這里插入圖片描述

是通過瀏覽器地址欄發送的GET請求。
也可以觀察請求的詳細結果。
在這里插入圖片描述

GET請求一般都是沒有 body 的,如果需要通過 GET 給服務器發送一些數據,通過 query string 傳遞過去的。

  • POST方法
    兩個典型的場景:
    1、登錄
    2、上傳 => 請求帶有正文的。正文就是保存了當前上傳的數據的內容。
    上述請求中,圖片本身是二進制的,通過特殊方式進行轉碼(base64編碼,把二進制轉成文本),其實body 也是可以直接填二進制數據。
    在這里插入圖片描述

POST 請求的特點:

  • ??的第?部分為 POST。
  • URL 的 query string ?般為空 (也可以不為空)。
  • header 部分有若?個鍵值對結構。
  • body 部分?般不為空。 body 內的數據格式通過 header 中的 Content-Type 指定.。body 的?度,由 header 中的 Content-Length 指定。

談談GET和POST區別:

  • 1、語義不同:GET一般用于獲取數據,POST一般用于提交數據。(語義上可以混著用)
  • 2、攜帶數據的方式:GET的body一般為空,需要傳遞的數據通過 query string傳遞,POST的 query string 一般為空,需要傳遞的數據通過 body 傳遞。(POST也是可以帶有query string(還是有一些的),GET理論上也是可以帶 body(更少見))
  • 3、GET 請求一般是冪等的(HTTP標準文檔給的建議,但只是建議,不是強制要求),POST請求一般是不冪等的。(如果多次請求得到的結果一樣,就視為請求是冪等的)
  • 4、GET設計成冪等了,就可以允許 GET 請求的結果被緩存,POST 由于不要求冪等,經常是不冪等的,就認為不能被緩存。

對于PUT和DELETE,實現restful風格的 api 的時候,會用到。
設計服務器接口的一種”習慣“
新增:POST
刪除:DELETE
修改:PUT
查詢:GET
這四個操作的任何一個,都可以進行增刪查改,完全取決于你代碼咋寫。

認識請求報頭(header)
header 的整體的格式也是“鍵值對”結構,每個鍵值對占一行。鍵和值之間使用“: 空格”分割。
報頭的種類有很多, 此處僅介紹?個常?的

  • Host:表示服務器主機的地址和端口
    在這里插入圖片描述

有的人可能會想到在 url 里面不是就有 IP地址(域名):端口號嗎?為什么還要用Host再記錄一下?
由于在絕大部分情況下,這兩屬性也是一致的,但是也是有一些特殊場景下是不一致的。那就是使用了 代理 ,使用代理之后,url 里的IP:端口號會改變,因此,即使使用了代理,也是可以通過 Host 來獲取到最原始的目標是什么。

  • Content—Length:表示 body 中的數據長度,單位是字節
    HTTP 協議,傳輸層這里基于 TCP 實現的(版本號 <= 2.0),所謂的HTTP協議,就是把字符串構造成HTTP約定的格式。
    在這里插入圖片描述

把這一串字符串,寫入到 tcp socket中,對于TCP 來說,一個連接上可以發多個請求,那服務器這邊收到數據的時候就得區分一下,從哪里到哪里是一個完整的http請求數據。
沒有body的 http 請求,讀到空行,就可以認為是結束了。
有body 的 http 請求呢?先讀取首行和 header ,讀到空行,解析 header中的 Content—Length 根據這里的值,接下來再讀取固定字節的長度。

  • Content—Type:表示請求的 body 中的數據格式
    提示了接收方如何解析 body 中的數據。
    在這里插入圖片描述

再 fiddler里我們可以直接看出 Content—Type
在這里插入圖片描述

小知識:
我們來看一個Content-Type為js的body
在這里插入圖片描述

這些東西都是合法的 js 的語句,只是看起來和咱們學的 js 是不一樣的,本質語法都是同一套。像C++/Java這樣的代碼,會編譯成二進制,發布給用戶,用戶拿到的是二進制代碼,用戶想根據二進制還原出源代碼是什么樣子的,是非常麻煩的。
由于 js 這樣的代碼則是把原始代碼直接由用戶瀏覽器下載到,用戶就能看到 js 的原始的樣子,因此,為了防止別人基于你的代碼,搭建出一樣的網頁,我們會用專門的工具,把 js 做出變換,使得代碼混淆(也就是在代碼邏輯不變的情況下,把js 代碼給改亂,讓別人讀起來的成本更高)。

對于 Content-Length 和 Content-Type ,如果請求有 body,并且沒有這兩個屬性(哪怕只有一個)都認為是非法的/錯誤的http報文。

  • User-Agent(簡稱UA):表示用戶使用的設備的瀏覽器/操作系統的屬性情況。
    在這里插入圖片描述

為什么要有UA?
隨著互聯網的快速發展,瀏覽器的版本也在不斷更新,同一個時間段內,有些用戶的瀏覽器,版本是比較舊的,支持的功能少,有些用戶瀏覽器版本更新,支持的功能多,如果要是支持的功能少,可能就打不過競爭對手,要是支持的功能多,舊版本瀏覽器設備的用戶,可能就展示不了。所以,要根據用戶使用的設備進行區分,通過 UA 中的瀏覽器版本/操作系統版本,區分出當前用戶的設備,最多支持哪些特性~因此程序員就需要維護多套代碼,對于老的瀏覽器,返回功能少的網頁,正確顯示,對于新的瀏覽器,返回功能多的網頁,體驗豐富。此外 UA 還有另外一個用途:可以用來區分用戶的設備。
windows/mac => PC 根據用戶的設備,返回不同版本的頁面
ios/android => 手機
User-Agent 之所以是這個樣?是因為歷史遺留問題.感興趣的可以去搜一搜UA的故事。

  • Referer:描述了當前頁面的來源(這個頁面是從哪個頁面跳轉過來的)
    如果直接在瀏覽器中輸?URL, 或者直接通過收藏夾訪問??時是沒有 Referer 的.
    在這里插入圖片描述

意思是這個頁面是從www.sougou.com 跳轉過來的。

  • Cookie
    瀏覽器展示頁面的過程中,頁面里雖然可以通過 js 來實現一些邏輯,但是 js 代碼無法訪問你的硬盤(文件系統),瀏覽器給 js 帶上的緊箍咒。但是在實際開發中,有的時候還是希望把某些數據能夠保存到本地硬盤的。因此,瀏覽器引入了 cookie 機制。
    cookie 就是瀏覽器允許網頁在本地硬盤存儲數據的一種機制,不是讓網頁代碼直接訪問文件系統,而是做了一層抽象,而是瀏覽器的 cookie 提供了鍵值對存儲機制。

Cookie 這里是按照鍵值對的方式來存儲數據的~

講到現在,細心的小伙伴會發現我們已經提了很多遍 “鍵值對”了。
在這里插入圖片描述

瀏覽器中可以直接看到當前頁面保存的cookie有哪些。
在這里插入圖片描述

cookie 按照域名維度來組織的,每個不同的域名下都可以有不同的 Cookie, 不同?站之間的 Cookie 并不沖突

在這里插入圖片描述

這些都是程序員自定的。
瀏覽器保存了這些 cookie 之后,就會在后續給服務器發送請求的時候,把這些 cookie 鍵值對放到請求 cookie header 中傳輸給服務器。
cookie 到哪里去:最終發回給服務器。
cookie 從哪里來:也是從服務器這邊來的.(后端開發程序員決定的)

在這里插入圖片描述

Cookie 里的數據都是程序員自定義內容,業務相關的,但是有一個典型的場景,屬于“通用業務”,登陸和用戶認證。

在這里插入圖片描述
在這里插入圖片描述

會話:描述了客戶端和服務器之間的一種交互關系
數據庫,也是服務器。對應的客戶端,就是你的應用程序 /Workbench…
你的這個客戶端訪問一次數據庫服務器,這個中間的過程也可以稱為是一次會話。

Cookie是可能會過期的(有的網站,對于安全性要求不高,過期時間就長,有的網站,對于安全性要求很高,過期時間就短),服務器返回 Cookie 的時候,是可以設置有效時間。有的 Cookie 中的 sessionId 過期了,此時就需要用戶重新登錄了。但用戶重新登錄的時候,是否需要重新手動輸入一遍密碼,就是瀏覽器的記住密碼功能解決的問題了。

這個過程和去醫院看病很相似.

  1. 到了醫院先掛號. 掛號時候需要提供?份證, 同時得到了?張 “就診卡”, 這個就診卡就相當于患者的"令牌(token)".
  2. 后續去各個科室進?檢查, 診斷, 開藥等操作, 都不必再出??份證了, 只要憑就診卡即可識別出當前患者的?份.
  3. 看完病了之后, 不想要就診卡了, 就可以注銷這個卡. 此時患者的?份和就診卡的關聯就銷毀了. (類似于?站的注銷操作)
  4. ?來看病, 可以辦?張新的就診卡, 此時就得到了?個新的 ”令牌“

請求”正文“(body)
正文中的內容格式和 header 中的 Content-Type 密切相關。
我們都是可以通過 fiddler 觀察的。這里就不多于講了。就展開比較常見的json。
application/json
在這里插入圖片描述

這里都是自定義的。

HTTP響應
狀態碼(status code)
狀態碼表示訪問頁面的結果,是訪問成功,還是出錯,出錯是什么原因。
以下是常見的狀態碼。

  • 200 OK : 這是一個最常見的狀態碼,表示訪問成功。
  • 404 Not Found : 訪問的資源沒找到。(瀏覽器輸入一個URL,目的就是為了訪問對方服務器的一個資源,而URL中,ip定位到主機,port定位到程序,path定位到程序管理的資源,如果 path 訪問的資源,在服務器上沒有,就會 404)
  • 403 Forbidden : 表示訪問被拒絕(沒有權限),有的頁面通常需要用戶具有一定的權限才能訪問,如果用戶沒有登錄直接訪問,就容易見到403。
  • 405 Method Not Allowed : 方法不被允許,請求的方法和服務器這邊聲明的注解不匹配,就會出現405。(網上找別人的網站出現 405,比較難找的,但自己開發過程中,很容易出現405 )
  • 500 Internal Server Error : 服務器出現錯誤,一般是服務器的代碼執行過程中遇到了一些特殊情況(服務器異常崩潰)會產生這個狀態碼。也就是服務器處理邏輯的代碼中拋出異常,但是你沒有catch到。
  • 504 Gateway Timeout : 當服務器負載比較大的時候,服務器處理單條請求的時候消耗的時間就會很長,就可能會導致出現超時的情況。(Gateway:網關,也就是網絡的入口,一般來說,入口服務器就認為是網關,可能是一個軟件,也可能是一個專門的機器)
  • 302 Move temporarily : 臨時重定向。
  • 301 Moved Permanently :永久重定向,當瀏覽器收到這種響應時,后續的請求都會被自動改成新的地址。
    理解”重定向“
    相當于訪問A服務器,服務器A告訴你去找 B。例如遷移域名。如果直接遷移了l,就會使所有保存舊域名的人無法訪問了,于是就把服務器架設在新域名上,給舊域名設置重定向,可以重定向到新域名,因此如果訪問新域名就能直接進,訪問舊域名就會自動跳轉到新域名上。
    在登錄頁面中經常會見到302,用于實現登錄成功后自動跳轉到主頁,響應報文的header部分會包含一個location字段,表示要跳轉到哪個頁面。
    在這里插入圖片描述

可以看到header中的 Location:http://gitee.com/ ,接下來瀏覽器就會自動發送GET請求,獲取Location:http://gitee.com/。

狀態碼整體有很多:
2XX 都可以視為是成功,3XX 都是重定向, 4XX 客戶端出錯,用戶構造的請求有問題, 5XX 服務器出錯(Java程序員主要關注這個,一定是服務器出問題了大概率就是你的代碼有bug)
在這里插入圖片描述

認識響應“報頭”(header)
響應報頭的基本格式和請求報頭的格式基本一致,類似于 Content -Type,Content-Length等屬性的含義也和請求中的含義一致。
Content-Type
響應中的 Content-Type 常見取值有以下幾種:

  • text/html:body數據格式是 HTML
  • text/css:body數據格式是CSS
  • application/javascript:body數據格式是 JavaScript。
  • application/json:body數據格式是JSON。
    在這里插入圖片描述

響應“正文”(body)
正文的具體格式取決于 Content-Type。可以觀察上面幾個抓包結果中的響應部分。
1、text/html
在這里插入圖片描述

2、text/css
在這里插入圖片描述

3、application/javascript
在這里插入圖片描述

4.application/json
在這里插入圖片描述

通過 Java socket 構造 HTTP 請求
所謂的“發送 HTTP 請求”,本質上就是按照 HTTP 的格式往 TCP Socket 中寫入一個字符串。
所謂的“接受 HTTP 響應”,本質上就是從 TCP Socket 中讀取一個字符串,再按照 HTTP 的格式來解析。
在這里插入圖片描述

此外呢,我們還可以使用 Postman,apifox 這樣的工具來構造 HTTP 請求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89309.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89309.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker--安裝--原理

安裝 鏈接 啟動之后&#xff0c;docker狀態查看&#xff1a; sudo systemctl status docker 添加普通用戶到docker用戶組&#xff1a; sudo usermod -aG docker $USER# 重啟或者使用以下命令刷新組權限&#xff1a;newgrp docker 原理

Java并發第一篇(從零開始:一文讀懂Java并發編程核心基礎)

從零開始&#xff1a;一文讀懂Java并發編程核心基礎一. 為什么需要并發編程&#xff1f;二. 并發編程的“另一面”&#xff1a;挑戰與代價2.1 頻繁的上下文切換2.2 線程安全問題&#xff08;如&#xff1a;死鎖&#xff09;三. 夯實基礎&#xff1a;必須掌握的核心概念與操作3.…

【刪庫跑路】一次刪除pip的所有第三方庫

進入命令行&#xff0c;先list看下庫存pip list導出所有的第三方庫至一文件列表pip freeze >requirements.txt按照列表卸載所有庫pip uninstall -r requirements.txt -y再list看下&#xff0c;可見庫存已清空

python 【技術面試題和HR面試題】?列表操作、條件判斷、循環、函數定義編程題

1.技術面試題 &#xff08;1&#xff09;解釋Linux中的進程、線程和守護進程的概念&#xff0c;以及如何管理它們&#xff1f; 答&#xff1a; 進程 概念&#xff1a;程序運行的實例&#xff0c;有獨立資源&#xff08;如內存&#xff09;&#xff0c;是系統調度的基本單位。 管…

Debian 12中利用dpkg命令安裝MariaDB 11.8.2

MariaDB 11.8解決了2038問題&#xff0c;即在32位系統中將timestamp從2038-01-19 03:14:07 UTC擴展到2106-02-07 06:28:15 UTC&#xff0c;向后延長了68年。由于寫此文時Debian 12的源中還沒有MariaDB 11.8,采用源碼編譯又太費時&#xff0c;可用二進制碼或dpkg安裝 .下面簡要記…

Go語言高并發聊天室(三):性能優化與壓力測試

Go語言高并發聊天室&#xff08;三&#xff09;&#xff1a;性能優化與壓力測試 &#x1f3af; 本篇目標 在前兩篇文章中&#xff0c;我們完成了聊天室的基礎功能。本篇將深入性能優化&#xff0c;實現真正的高并發&#xff1a; &#x1f50d; 性能瓶頸分析? 關鍵優化技術&…

【leetcode】852. 山脈數組的封頂索引

文章目錄題目題解1. 遍歷2. 二分查找題目 852. 山脈數組的封頂索引 給定一個長度為 n 的整數 山脈 數組 arr &#xff0c;其中的值遞增到一個 峰值元素 然后遞減。 返回峰值元素的下標。 你必須設計并實現時間復雜度為 O(log(n)) 的解決方案。 示例 1&#xff1a; 輸入&a…

Java期末考試準備

文章目錄Java期末考試準備一、Java的輸入.next()輸入.nextLine()輸入區別補充二、Java的輸出三、類中常寫方法toString()equals()其他四、容器/數組五、繼承六、靜態屬性、方法.七、抽象類八、接口九、初始化模塊十、泛型考完結束語Java學習歷程注:這篇文章本來是寫給同學的&am…

飛算JavaAI進階:重塑Java開發范式的AI革命

引言&#xff1a;當代碼生成進入"自動駕駛"時代 在2025年的Java開發領域&#xff0c;一場由AI驅動的革命正在重塑傳統開發范式。當GitHub Copilot還在通過代碼補全提升效率時&#xff0c;飛算JavaAI已實現從需求分析到完整工程代碼生成的"端到端"閉環。這款…

如何在銀河麒麟桌面系統中啟用 sudo 密碼的星號反饋

引文 我們在銀河麒麟桌面操作系統上使用 sudo 命令時&#xff0c;都遇到過這樣的困擾&#xff1a;輸入密碼時光標一動不動&#xff0c;屏幕上沒有任何提示&#xff08;沒有星號 *&#xff0c;也沒有任何字符&#xff09;&#xff1f;就像在黑暗中摸索鑰匙孔一樣&#xff0c;心里…

二刷 黑馬點評 秒殺優化

優化邏輯 把耗時較短的邏輯判斷放入redsi中&#xff0c;比如庫存是否足夠以及是否一人一單&#xff0c;只要這樣的邏輯完成&#xff0c;就代表一定能下單成功&#xff0c;我們就將結果返回給用戶&#xff0c;然后我們再開一個線程慢慢執行隊列中的信息 問題&#xff1a; 如何快…

HANA SQLScript中的變量類型匯總

在 SAP HANA SQLScript 中&#xff0c;可以使用多種變量類型&#xff0c;包括標量&#xff08;Scalar&#xff09;類型、表類型和結構化類型。以下是各種變量類型的詳細說明和示例。1. 標量變量&#xff08;Scalar Variables&#xff09; 標量變量是用于存儲單個值&#xff08;…

基于 Amazon Nova Sonic 和 MCP 構建語音交互 Agent

1、引言 隨著人工智能技術的飛速發展&#xff0c;自然語言處理和語音交互技術正在深刻改變人機交互的方式。語音交互正從簡單的“機械應答”向更自然的“類人對話”演進 。傳統的語音系統通常采用模塊化架構&#xff0c;將語音處理流程割裂為 ASR&#xff08;自動語音識別&…

項目的存量接口怎么低成本接入MCP?

項目的存量接口怎么低成本接入MCP&#xff1f; 老項目里的一些接口&#xff0c;如何低成本的接入MCP&#xff08;0成本不可能&#xff09;&#xff0c;變成MCP server 的tools&#xff1f; 先拋出這個問題&#xff1f;評論區的xdm如果有懂的&#xff0c;可以打在評論區&#xf…

用圖片生成高保真3D模型!Hi3DGen以法線為橋,為高清三維幾何生成另辟蹊徑

主頁&#xff1a;http://qingkeai.online/ 原文&#xff1a;用圖片生成高保真3D模型&#xff01;Hi3DGen以法線為橋&#xff0c;為高清三維幾何生成另辟蹊徑 隨著從二維圖像構建高保真三維模型的需求日益增長&#xff0c;現有方法由于域間隙的限制以及 RGB 圖像固有的模糊性&a…

Charles抓包工具中文安裝和使用詳解,快速掌握API調試與網絡優化

Charles抓包工具中文安裝和使用詳解 在軟件開發中&#xff0c;調試API請求、捕獲網絡流量以及優化應用性能是開發者日常工作中不可或缺的環節。Charles抓包工具作為業內領先的網絡調試工具&#xff0c;以其功能強大、易用性高、支持HTTPS流量解密等特點&#xff0c;廣泛應用于A…

Java :List,LinkedList,ArrayList

文章目錄List常用方法List集合的遍歷方式ArrayList底層的原理LinkedList底層原理常用方法List常用方法 //1.創建一個ArrayList集合對象&#xff08;有序、有索引、可以重復&#xff09; List<String> list new ArrayList<>(); list.add("蜘蛛精"); list…

LLM面試題及講解 4

LLM面試題及講解 4 目錄 LLM面試題及講解 4 題目講解 一、基礎概念與理論 二、模型訓練與優化 三、應用與實踐 四、前沿研究與趨勢 大型語言模型(LLM)的核心特征是什么? LLM與傳統NLP技術的本質區別是什么? Transformer架構的基本組成部分有哪些?其在LLM中為何重要? BERT…

Harmony-Next鴻蒙實戰開發項目-仿小米商城App----V2

1.、簡介 本項目是Harmony-Next原生開發&#xff0c;真實網絡請求。采用V2等狀態管理裝飾器。包含&#xff08;首頁、分類、發現、購物車、我的、登錄、搜索&#xff0c;搜索結果&#xff0c;商品詳情等&#xff09;.包含V2對接口返回數據的深度監聽。 2、頁面展示&#xff1…

python閉包和裝飾器(超詳解)

目錄 一、閉包的概念 1.概念 2.閉包的特征 3.閉包的作用 二、裝飾器 1.什么是裝飾器 2.裝飾器的作用 1.統計代碼耗時 2.對代碼進行權限檢查 3.記錄日志 3.閉包和裝飾器的關系 4.注意事項&#xff1a; 一、閉包的概念 1.概念 閉包&#xff08;Closure&#xff09;指…