面試題30
01 cpu執(zhí)行指令過(guò)程 02 什么是內(nèi)存 03 為什么用二進(jìn)制表示 04 TCP/IP分別在模型的哪一層 05 socket長(zhǎng)連接 06 三次握手四次揮手 07 MySQL鎖有幾種 08 MySQL的char varchar text的區(qū)別 09 get和post的區(qū)別 10 狀態(tài)碼200/403/404/504
01 cpu執(zhí)行指令過(guò)程
CPU執(zhí)行指令的過(guò)程通常包括以下步驟,這些步驟組成了計(jì)算機(jī)的指令執(zhí)行周期: 取指令(Instruction Fetch):
CPU從內(nèi)存中的指令存儲(chǔ)位置(通常是程序計(jì)數(shù)器PC指示的位置)讀取下一條要執(zhí)行的指令。
PC的值遞增,以指向下一條指令。
解碼指令(Instruction Decode):
CPU解釋剛剛?cè)〉玫闹噶?,以確定它是什么類(lèi)型的操作以及需要哪些操作數(shù)。
CPU還會(huì)確定指令的操作碼(opcode)以及尋找操作數(shù)的位置。
讀取操作數(shù)(Operand Fetch):
根據(jù)解碼的結(jié)果,CPU從內(nèi)存中或寄存器中讀取所需的操作數(shù)。
操作數(shù)通常包括內(nèi)存地址、寄存器中的值或立即數(shù)(常數(shù)值)。
執(zhí)行操作(Execute):
CPU執(zhí)行指令中指定的操作,使用讀取的操作數(shù)。
這可能涉及算術(shù)運(yùn)算、邏輯運(yùn)算、分支操作等,具體操作根據(jù)指令的類(lèi)型而定。
存儲(chǔ)結(jié)果(Write Back):
如果指令產(chǎn)生了結(jié)果,CPU將結(jié)果寫(xiě)回到寄存器或內(nèi)存中。
結(jié)果可以是算術(shù)運(yùn)算的輸出,條件分支的結(jié)果,或其他需要保存的信息。
更新程序計(jì)數(shù)器(Update PC):
CPU根據(jù)指令的執(zhí)行情況更新程序計(jì)數(shù)器的值,以指向下一條要執(zhí)行的指令。
更新可以涉及順序執(zhí)行下一條指令,或者根據(jù)條件執(zhí)行分支到不同的指令位置。
這些步驟不斷循環(huán),CPU在每個(gè)時(shí)鐘周期內(nèi)執(zhí)行一條指令。計(jì)算機(jī)程序的執(zhí)行實(shí)際上是CPU按照這個(gè)指令執(zhí)行周期不斷地執(zhí)行一系列指令,以完成特定任務(wù)。 CPU根據(jù)不同的指令和操作類(lèi)型,可以在不同的功能單元中執(zhí)行,例如算術(shù)邏輯單元(ALU)、浮點(diǎn)運(yùn)算單元(FPU)和存儲(chǔ)單元。 CPU通過(guò)不斷重復(fù)上述過(guò)程來(lái)執(zhí)行計(jì)算機(jī)程序的指令序列,從而實(shí)現(xiàn)復(fù)雜的計(jì)算和數(shù)據(jù)處理任務(wù)。
02 什么是內(nèi)存
內(nèi)存(Memory),在計(jì)算機(jī)科學(xué)和信息技術(shù)領(lǐng)域,是指計(jì)算機(jī)用來(lái)存儲(chǔ)數(shù)據(jù)和程序的硬件設(shè)備或存儲(chǔ)器件。它充當(dāng)了計(jì)算機(jī)系統(tǒng)的臨時(shí)工作區(qū),用于保存正在運(yùn)行的程序、數(shù)據(jù)和中間結(jié)果,以便CPU(中央處理單元)能夠快速訪問(wèn)和處理這些信息。內(nèi)存是計(jì)算機(jī)的關(guān)鍵組成部分,與存儲(chǔ)設(shè)備(如硬盤(pán)驅(qū)動(dòng)器、固態(tài)硬盤(pán)等)有所不同,存儲(chǔ)設(shè)備主要用于永久性地存儲(chǔ)數(shù)據(jù),而內(nèi)存用于臨時(shí)存儲(chǔ)數(shù)據(jù)以供處理。 內(nèi)存通常分為以下幾種類(lèi)型: 主存儲(chǔ)器(Main Memory):也稱(chēng)為隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory),是計(jì)算機(jī)系統(tǒng)中的主要內(nèi)存組件。它用于存儲(chǔ)正在運(yùn)行的程序、操作系統(tǒng)和臨時(shí)數(shù)據(jù)。主存儲(chǔ)器的數(shù)據(jù)可隨時(shí)讀取和寫(xiě)入,但數(shù)據(jù)在斷電后會(huì)丟失。主存儲(chǔ)器的速度很快,可以直接由CPU訪問(wèn)。
緩存(Cache):緩存是位于CPU和主存儲(chǔ)器之間的高速存儲(chǔ)器,用于加速數(shù)據(jù)訪問(wèn)。緩存存儲(chǔ)了CPU最近訪問(wèn)的數(shù)據(jù)和指令,以便CPU更快地訪問(wèn)這些數(shù)據(jù),而不必每次都等待主存儲(chǔ)器的讀取。
虛擬內(nèi)存(Virtual Memory):虛擬內(nèi)存是一種技術(shù),允許計(jì)算機(jī)將部分?jǐn)?shù)據(jù)移出主存儲(chǔ)器,并將其存儲(chǔ)在硬盤(pán)上,以便容納更多數(shù)據(jù)。虛擬內(nèi)存使得計(jì)算機(jī)能夠運(yùn)行比主存儲(chǔ)器更大的程序,并且能夠更好地處理多任務(wù)。
內(nèi)存的容量通常以字節(jié)為單位進(jìn)行衡量,例如兆字節(jié)(MB)或千兆字節(jié)(GB)。不同類(lèi)型的內(nèi)存有不同的速度、成本和用途,而內(nèi)存管理是操作系統(tǒng)的一個(gè)關(guān)鍵部分,用于有效地分配和管理內(nèi)存資源,以確保系統(tǒng)的穩(wěn)定性和性能。
03 為什么用二進(jìn)制表示
計(jì)算機(jī)使用二進(jìn)制表示主要是因?yàn)橛布娮釉蛿?shù)字電路的性質(zhì)以及邏輯運(yùn)算的簡(jiǎn)單性。以下是為什么計(jì)算機(jī)使用二進(jìn)制表示的主要原因: 電子開(kāi)關(guān):計(jì)算機(jī)的內(nèi)部是由許多電子開(kāi)關(guān)組成的,這些開(kāi)關(guān)只有兩個(gè)狀態(tài):打開(kāi)(表示1)和關(guān)閉(表示0)。這種雙態(tài)性使得二進(jìn)制非常適合表示和處理信息,因?yàn)殡娮娱_(kāi)關(guān)可以輕松地表示二進(jìn)制位。
簡(jiǎn)單的邏輯運(yùn)算:數(shù)字電路中的邏輯運(yùn)算器(例如AND、OR、NOT等門(mén))對(duì)于處理二進(jìn)制數(shù)據(jù)非常有效。這些門(mén)可以輕松地執(zhí)行二進(jìn)制位的邏輯操作,使得計(jì)算機(jī)能夠進(jìn)行各種復(fù)雜的運(yùn)算和決策。
容易擴(kuò)展:二進(jìn)制表示可以輕松擴(kuò)展到更高位數(shù),只需增加更多的二進(jìn)制位。這種可擴(kuò)展性使得計(jì)算機(jī)可以表示和處理非常大的數(shù)字和數(shù)據(jù)集。
錯(cuò)誤檢測(cè)和校正:二進(jìn)制表示具有優(yōu)點(diǎn),可以用于檢測(cè)和糾正數(shù)據(jù)傳輸中的錯(cuò)誤,例如通過(guò)奇偶校驗(yàn)位或冗余校驗(yàn)位。這對(duì)于確保數(shù)據(jù)的可靠性非常重要。
硬件的簡(jiǎn)單性:使用二進(jìn)制表示的計(jì)算機(jī)硬件電路更簡(jiǎn)單,因?yàn)樗恍枰幚韮煞N狀態(tài)。這降低了電子元件的成本、能耗和復(fù)雜性。
標(biāo)準(zhǔn)化:二進(jìn)制表示是計(jì)算機(jī)系統(tǒng)的標(biāo)準(zhǔn),所有計(jì)算機(jī)系統(tǒng)都使用相同的二進(jìn)制編碼,這有助于確保不同計(jì)算機(jī)和設(shè)備之間的互操作性。
04 TCP/IP分別在模型的哪一層
CP/IP協(xié)議套件是計(jì)算機(jī)網(wǎng)絡(luò)通信的基礎(chǔ),并按照OSI(開(kāi)放系統(tǒng)互連)模型進(jìn)行了分層。它包含多個(gè)協(xié)議,每個(gè)協(xié)議都位于不同的層次上。下面是TCP/IP協(xié)議套件的主要協(xié)議及它們?cè)贠SI模型中的分層位置:
IP(Internet Protocol)
:IP位于OSI模型的第三層,即網(wǎng)絡(luò)層。它負(fù)責(zé)在網(wǎng)絡(luò)中路由數(shù)據(jù)包,確保數(shù)據(jù)包從源主機(jī)傳輸?shù)侥繕?biāo)主機(jī)。IPv4和IPv6是兩種常見(jiàn)的IP協(xié)議版本。
TCP(Transmission Control Protocol)
:TCP位于OSI模型的第四層,即傳輸層。它提供可靠的、面向連接的數(shù)據(jù)傳輸,用于確保數(shù)據(jù)在主機(jī)之間的可靠傳遞,以及按順序傳遞。TCP處理錯(cuò)誤檢測(cè)、重傳丟失的數(shù)據(jù)包等問(wèn)題。
UDP(User Datagram Protocol)
:UDP也位于OSI模型的第四層,傳輸層。與TCP不同,UDP是一種無(wú)連接協(xié)議,不提供可靠性或流控制。它主要用于快速數(shù)據(jù)傳輸,如音頻和視頻流,以及需要低延遲的應(yīng)用程序。
HTTP(Hypertext Transfer Protocol)
:HTTP位于應(yīng)用層,通常用于Web瀏覽器與Web服務(wù)器之間的通信,以獲取和傳輸網(wǎng)頁(yè)內(nèi)容。雖然HTTP不是TCP/IP協(xié)議的一部分,但它是TCP/IP網(wǎng)絡(luò)上常用的應(yīng)用層協(xié)議。
05 socket長(zhǎng)連接
Socket長(zhǎng)連接是指在網(wǎng)絡(luò)通信中,建立一次連接后,該連接可以被多次數(shù)據(jù)傳輸和通信而不立即關(guān)閉。通常,普通的Socket連接(短連接)在完成一次數(shù)據(jù)傳輸后就會(huì)關(guān)閉連接,而在Socket長(zhǎng)連接中,連接會(huì)保持打開(kāi),以便多次使用,從而減少連接建立和斷開(kāi)的開(kāi)銷(xiāo)。 Socket長(zhǎng)連接的主要優(yōu)點(diǎn)包括:
減少連接開(kāi)銷(xiāo)
:連接的建立和斷開(kāi)會(huì)消耗時(shí)間和資源。在Socket長(zhǎng)連接中,連接保持打開(kāi),減少了頻繁建立和關(guān)閉連接的開(kāi)銷(xiāo)。
減少延遲
:由于連接已建立,數(shù)據(jù)可以隨時(shí)發(fā)送和接收,不需要重新建立連接,因此可以減少通信的延遲。
降低系統(tǒng)負(fù)擔(dān)
:頻繁的連接建立和斷開(kāi)可能會(huì)導(dǎo)致系統(tǒng)負(fù)擔(dān)增加,而Socket長(zhǎng)連接可以減輕這一負(fù)擔(dān)。
Socket長(zhǎng)連接通常用于需要實(shí)時(shí)性、頻繁通信或交互性強(qiáng)的應(yīng)用,如在線聊天、實(shí)時(shí)游戲、實(shí)時(shí)數(shù)據(jù)傳輸?shù)?。HTTP/HTTPS協(xié)議中的WebSocket也是一種使用Socket長(zhǎng)連接的協(xié)議,它允許雙向通信,用于實(shí)現(xiàn)實(shí)時(shí)Web應(yīng)用程序。
06 三次握手四次揮手
TCP(Transmission Control Protocol)是一種面向連接的協(xié)議,它使用三次握手來(lái)建立連接,以及四次揮手來(lái)終止連接。以下是TCP連接的三次握手和四次揮手的詳細(xì)說(shuō)明: 三次握手(Three-Way Handshake)
第一步(第一個(gè)握手)
:客戶端向服務(wù)器發(fā)送一個(gè)SYN(同步)標(biāo)志的TCP數(shù)據(jù)包,請(qǐng)求建立連接。此時(shí),客戶端選擇一個(gè)隨機(jī)的初始序列號(hào)(ISN,Initial Sequence Number)。
第二步(第二個(gè)握手)
:服務(wù)器接收到客戶端的請(qǐng)求后,回應(yīng)一個(gè)ACK(確認(rèn))標(biāo)志和SYN標(biāo)志的TCP數(shù)據(jù)包,以確認(rèn)連接請(qǐng)求。服務(wù)器也會(huì)選擇一個(gè)隨機(jī)的初始序列號(hào)。
第三步(第三個(gè)握手)
:客戶端接收到服務(wù)器的確認(rèn)后,也會(huì)發(fā)送一個(gè)帶有ACK標(biāo)志的TCP數(shù)據(jù)包,以確認(rèn)連接建立。此時(shí),雙方的連接已建立,可以開(kāi)始進(jìn)行數(shù)據(jù)傳輸。
四次揮手(Four-Way Handshake)
第一步(第一個(gè)揮手)
:當(dāng)客戶端或服務(wù)器決定關(guān)閉連接時(shí),它發(fā)送一個(gè)帶有FIN(結(jié)束)標(biāo)志的TCP數(shù)據(jù)包,表示不再發(fā)送數(shù)據(jù),但仍愿意接收數(shù)據(jù)。
第二步(第二個(gè)揮手)
:接收到FIN的一方,暫時(shí)繼續(xù)發(fā)送數(shù)據(jù),以確保對(duì)方接收到已發(fā)送的數(shù)據(jù)。它回應(yīng)一個(gè)ACK標(biāo)志的數(shù)據(jù)包,表示已經(jīng)接收到了關(guān)閉請(qǐng)求。
第三步(第三個(gè)揮手)
:一方在完成數(shù)據(jù)傳輸后,也向?qū)Ψ桨l(fā)送一個(gè)帶有FIN標(biāo)志的數(shù)據(jù)包,表示自己已經(jīng)不再發(fā)送數(shù)據(jù)。同時(shí),繼續(xù)等待對(duì)方的數(shù)據(jù)確認(rèn)。
第四步(第四個(gè)揮手)
:對(duì)方接收到FIN后,發(fā)送一個(gè)ACK標(biāo)志的數(shù)據(jù)包以確認(rèn)關(guān)閉請(qǐng)求。此時(shí),連接被完全終止,不再傳輸數(shù)據(jù)。
07 MySQL鎖有幾種
MySQL中有多種類(lèi)型的鎖,這些鎖用于控制并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù),以確保數(shù)據(jù)的完整性和一致性。以下是MySQL中常見(jiàn)的鎖類(lèi)型:
共享鎖(Shared Locks)
:
共享鎖允許多個(gè)事務(wù)同時(shí)獲取鎖,這些事務(wù)可以同時(shí)讀取被鎖定的數(shù)據(jù)。
適用于讀取操作,因?yàn)槎鄠€(gè)事務(wù)可以同時(shí)共享對(duì)同一數(shù)據(jù)的只讀訪問(wèn)權(quán)。
排他鎖(Exclusive Locks)
:
排他鎖只允許一個(gè)事務(wù)獲取鎖,其他事務(wù)不能同時(shí)獲取共享鎖或排他鎖。
適用于寫(xiě)入操作,因?yàn)橹挥幸粋€(gè)事務(wù)可以修改數(shù)據(jù),以確保數(shù)據(jù)的一致性。
行級(jí)鎖(Row-Level Locks)
:
行級(jí)鎖是最細(xì)粒度的鎖,可以鎖定數(shù)據(jù)庫(kù)表中的單行數(shù)據(jù),而不是整個(gè)表或頁(yè)。
行級(jí)鎖允許多個(gè)事務(wù)同時(shí)處理不同行的數(shù)據(jù),以提高并發(fā)性能。
表級(jí)鎖(Table-Level Locks)
:
表級(jí)鎖鎖定整個(gè)數(shù)據(jù)表,阻止其他事務(wù)對(duì)表的訪問(wèn)。
表級(jí)鎖一般用于處理全表操作,如備份和優(yōu)化,但不適用于并發(fā)讀寫(xiě)操作。
頁(yè)級(jí)鎖(Page-Level Locks)
:
頁(yè)級(jí)鎖鎖定數(shù)據(jù)庫(kù)表的整個(gè)頁(yè),通常是一組相鄰的行。
頁(yè)級(jí)鎖的粒度介于行級(jí)鎖和表級(jí)鎖之間,適用于某些特定情況下。
意向共享鎖(Intention Shared Locks)和意向排他鎖(Intention Exclusive Locks)
:
意向鎖是用于指示事務(wù)打算在表、頁(yè)或行級(jí)別上使用共享鎖或排他鎖的鎖。
它們用于幫助MySQL優(yōu)化器了解其他事務(wù)的意圖,以協(xié)調(diào)鎖請(qǐng)求。
自動(dòng)鎖(Auto Locks)
:
MySQL可以自動(dòng)添加和管理鎖,例如,當(dāng)執(zhí)行UPDATE或DELETE語(yǔ)句時(shí),MySQL會(huì)自動(dòng)獲取適當(dāng)?shù)逆i,以確保數(shù)據(jù)的一致性和完整性。
08 MySQL的char varchar text的區(qū)別
在MySQL中,CHAR、VARCHAR和TEXT都是用于存儲(chǔ)文本數(shù)據(jù)的數(shù)據(jù)類(lèi)型,但它們?cè)诖鎯?chǔ)和使用文本數(shù)據(jù)時(shí)有一些重要的區(qū)別。
CHAR
:
CHAR是一種固定長(zhǎng)度的字符數(shù)據(jù)類(lèi)型,需要指定存儲(chǔ)的字符數(shù),無(wú)論實(shí)際數(shù)據(jù)是否占滿指定的長(zhǎng)度,都會(huì)占用完整的存儲(chǔ)空間。
例如,CHAR(10)表示存儲(chǔ)10個(gè)字符的固定長(zhǎng)度字符串。
由于是固定長(zhǎng)度,如果存儲(chǔ)的字符串長(zhǎng)度不足指定長(zhǎng)度,MySQL會(huì)用空格進(jìn)行填充,因此CHAR數(shù)據(jù)類(lèi)型在存儲(chǔ)空間上可能會(huì)浪費(fèi)。
VARCHAR
:
VARCHAR是一種可變長(zhǎng)度的字符數(shù)據(jù)類(lèi)型,它只占用實(shí)際數(shù)據(jù)長(zhǎng)度的存儲(chǔ)空間,而不會(huì)浪費(fèi)空間。
例如,VARCHAR(10)表示可以存儲(chǔ)最多10個(gè)字符的可變長(zhǎng)度字符串。
由于是可變長(zhǎng)度,VARCHAR通常更節(jié)省存儲(chǔ)空間,但需要額外的1或2個(gè)字節(jié)來(lái)存儲(chǔ)字符串的長(zhǎng)度。
TEXT
:
TEXT是一種用于存儲(chǔ)大段文本數(shù)據(jù)的數(shù)據(jù)類(lèi)型,不需要指定固定的長(zhǎng)度。
TEXT類(lèi)型可以存儲(chǔ)非常長(zhǎng)的文本數(shù)據(jù),適用于存儲(chǔ)大段文本、文章、備注等。
TEXT類(lèi)型沒(méi)有最大長(zhǎng)度限制,因此非常靈活,但可能占用更多的存儲(chǔ)空間。
使用CHAR當(dāng)您需要固定長(zhǎng)度的字符串,例如存儲(chǔ)電話號(hào)碼、郵政編碼等。
使用VARCHAR當(dāng)您需要可變長(zhǎng)度的字符串,以減少存儲(chǔ)空間的浪費(fèi),例如存儲(chǔ)用戶名、地址等。
使用TEXT當(dāng)您需要存儲(chǔ)大段文本數(shù)據(jù),如文章、評(píng)論、描述等,但需要注意TEXT類(lèi)型可能會(huì)占用更多的存儲(chǔ)空間。
09 get和post的區(qū)別
HTTP協(xié)議支持多種請(qǐng)求方法,其中最常見(jiàn)的兩種是GET和POST。它們?cè)赪eb開(kāi)發(fā)中具有不同的用途和特點(diǎn):
GET請(qǐng)求:
GET請(qǐng)求是一種用于從服務(wù)器獲取數(shù)據(jù)的HTTP請(qǐng)求方法。
GET請(qǐng)求將參數(shù)附加在URL的末尾,以查詢字符串的形式發(fā)送。例如,http://example.com/resource?param1=value1¶m2=value2。
GET請(qǐng)求對(duì)于傳輸小量數(shù)據(jù)非常合適,但不適用于敏感數(shù)據(jù),因?yàn)閰?shù)可見(jiàn)于URL中。
GET請(qǐng)求冪等,即多次發(fā)送相同的GET請(qǐng)求不會(huì)對(duì)服務(wù)器產(chǎn)生不同的影響。
瀏覽器通常使用GET請(qǐng)求來(lái)請(qǐng)求網(wǎng)頁(yè)、圖像、樣式表等資源。
POST請(qǐng)求:
POST請(qǐng)求用于向服務(wù)器提交數(shù)據(jù),通常用于提交表單數(shù)據(jù)、上傳文件等。
POST請(qǐng)求將數(shù)據(jù)放在請(qǐng)求的主體部分,而不是在URL中,因此適用于傳輸大量數(shù)據(jù)和敏感數(shù)據(jù)。
POST請(qǐng)求不是冪等的,即多次發(fā)送相同的POST請(qǐng)求可能會(huì)對(duì)服務(wù)器產(chǎn)生不同的影響。
POST請(qǐng)求支持多種數(shù)據(jù)類(lèi)型,包括表單數(shù)據(jù)、JSON、XML等,因此更靈活。
GET用于獲取數(shù)據(jù),而POST用于提交數(shù)據(jù)。
GET將參數(shù)附加到URL中,而POST將數(shù)據(jù)放在請(qǐng)求的主體中。
GET對(duì)于小型數(shù)據(jù)合適,POST對(duì)于大型、敏感數(shù)據(jù)合適。
GET是冪等的,POST不是。
GET請(qǐng)求通常用于資源獲取,POST請(qǐng)求通常用于表單提交、數(shù)據(jù)上傳等。
10 狀態(tài)碼200/403/404/504
HTTP狀態(tài)碼是服務(wù)器響應(yīng)HTTP請(qǐng)求時(shí)返回的三位數(shù)字代碼,用于表示請(qǐng)求的處理狀態(tài)。以下是幾個(gè)常見(jiàn)的HTTP狀態(tài)碼及其含義:
200 OK
:
表示服務(wù)器成功處理了客戶端的請(qǐng)求。
客戶端請(qǐng)求的網(wǎng)頁(yè)或資源已正確找到、生成,并返回給客戶端。
403 Forbidden
:
表示服務(wù)器理解請(qǐng)求,但拒絕執(zhí)行請(qǐng)求。
通常,這是因?yàn)榭蛻舳藳](méi)有訪問(wèn)請(qǐng)求資源的權(quán)限,或者服務(wù)器拒絕提供請(qǐng)求的服務(wù)。
404 Not Found
:
表示服務(wù)器無(wú)法找到客戶端請(qǐng)求的資源。
這可能是因?yàn)橘Y源不存在,或者服務(wù)器沒(méi)有配置相應(yīng)的路由或頁(yè)面。
504 Gateway Timeout
:
表示服務(wù)器作為網(wǎng)關(guān)或代理,但未能及時(shí)從上游服務(wù)器或其他代理服務(wù)器接收響應(yīng)。
通常,這是因?yàn)樯嫌畏?wù)器無(wú)法在合理的時(shí)間內(nèi)響應(yīng)請(qǐng)求,或者存在網(wǎng)絡(luò)問(wèn)題。