偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

360嵌入式軟開(kāi)面經(jīng),純八股文

開(kāi)發(fā) 前端
ARP(Address Resolution Protocol,地址解析協(xié)議)是一種用于將IP地址轉(zhuǎn)換為物理MAC地址的協(xié)議。在網(wǎng)絡(luò)通信中,數(shù)據(jù)包需要知道目標(biāo)主機(jī)的MAC地址才能正確傳遞。

在程序員求職的賽道上,嵌入式開(kāi)發(fā)崗位憑借其獨(dú)特魅力與廣闊前景,吸引著無(wú)數(shù)開(kāi)發(fā)者投身其中。當(dāng)下,嵌入式技術(shù)深度融入智能硬件、物聯(lián)網(wǎng)、汽車電子等熱門(mén)領(lǐng)域,薪資待遇更是相當(dāng)誘人,對(duì)于那些不想深陷后端開(kāi)發(fā)激烈競(jìng)爭(zhēng)的小伙伴而言,無(wú)疑是個(gè)絕佳選擇。而 360,這家在互聯(lián)網(wǎng)安全領(lǐng)域聲名赫赫的企業(yè),如今也在嵌入式開(kāi)發(fā)領(lǐng)域持續(xù)發(fā)力,對(duì)相關(guān)人才求賢若渴。

其面試流程自然備受關(guān)注,尤其是一面,往往是決定能否順利通關(guān)的關(guān)鍵。今天,咱們就聚焦一場(chǎng)真實(shí)的 360 嵌入式軟開(kāi)一面,令人意外的是,此次面試幾乎全是 “八股文” 式題目。所謂 “八股文”,涵蓋了 C 語(yǔ)言基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、硬件通信等嵌入式開(kāi)發(fā)必備知識(shí)板塊,精準(zhǔn)考察候選人的知識(shí)儲(chǔ)備與專業(yè)素養(yǎng)。這些題目看似常規(guī),實(shí)則暗藏玄機(jī),要想完美作答,絕非易事。接下來(lái),就讓我們一同走進(jìn)這場(chǎng)面經(jīng),探尋嵌入式開(kāi)發(fā)面試的奧秘,為你的求職之路添磚加瓦 。

1.Wi-Fi關(guān)聯(lián)是怎么做的了解過(guò)嗎(看我有過(guò)Wi-Fi路由器開(kāi)發(fā)的項(xiàng)目)

Wi-Fi關(guān)聯(lián)是指無(wú)線設(shè)備(如手機(jī)、電腦)與Wi-Fi接入點(diǎn)之間建立連接的過(guò)程。了解一些基本概念可以幫助理解關(guān)聯(lián)的過(guò)程:

  • SSID(Service Set Identifier):也稱為Wi-Fi網(wǎng)絡(luò)名稱,是一個(gè)用于標(biāo)識(shí)無(wú)線網(wǎng)絡(luò)的字符串。
  • BSSID(Basic Service Set Identifier):唯一標(biāo)識(shí)一個(gè)Wi-Fi接入點(diǎn)的物理地址。
  • 信道(Channel):Wi-Fi使用不同的頻段和信道進(jìn)行通信。

當(dāng)設(shè)備要連接到某個(gè)Wi-Fi網(wǎng)絡(luò)時(shí),它會(huì)執(zhí)行以下步驟:

  • 掃描:設(shè)備會(huì)掃描附近可用的Wi-Fi網(wǎng)絡(luò),并獲取它們的SSID、BSSID和信號(hào)強(qiáng)度等信息。
  • 選擇網(wǎng)絡(luò):根據(jù)一定算法,設(shè)備選擇要連接的目標(biāo)網(wǎng)絡(luò)。
  • 關(guān)聯(lián)請(qǐng)求:設(shè)備向選定的目標(biāo)網(wǎng)絡(luò)發(fā)送關(guān)聯(lián)請(qǐng)求。該請(qǐng)求包含設(shè)備自身的MAC地址、認(rèn)證信息等。
  • 認(rèn)證與加密:接入點(diǎn)收到關(guān)聯(lián)請(qǐng)求后,根據(jù)預(yù)先設(shè)置好的安全機(jī)制(如WPA2密碼),進(jìn)行認(rèn)證和加密過(guò)程以驗(yàn)證設(shè)備身份。
  • 分配IP地址:認(rèn)證成功后,接入點(diǎn)將為設(shè)備分配一個(gè)IP地址,使其能夠在局域網(wǎng)中進(jìn)行通信。
  • 關(guān)聯(lián)確認(rèn):接入點(diǎn)向設(shè)備發(fā)送關(guān)聯(lián)確認(rèn)消息,表示連接已建立。

通過(guò)這些步驟,設(shè)備與Wi-Fi接入點(diǎn)成功關(guān)聯(lián),可以開(kāi)始進(jìn)行數(shù)據(jù)傳輸。整個(gè)過(guò)程的具體細(xì)節(jié)和實(shí)現(xiàn)方式可能會(huì)因不同的Wi-Fi標(biāo)準(zhǔn)(如802.11n、802.11ac)和設(shè)備操作系統(tǒng)而有所差異。

2. TCP保證可靠性有哪些措施

TCP(傳輸控制協(xié)議)通過(guò)以下幾種措施來(lái)保證可靠性:

  • 序列號(hào)和確認(rèn)應(yīng)答:每個(gè)TCP報(bào)文段都會(huì)分配一個(gè)唯一的序列號(hào),接收端通過(guò)發(fā)送確認(rèn)應(yīng)答來(lái)告知發(fā)送端已成功接收到數(shù)據(jù)。
  • 超時(shí)重傳:發(fā)送端在發(fā)送數(shù)據(jù)后會(huì)啟動(dòng)一個(gè)定時(shí)器,如果在規(guī)定時(shí)間內(nèi)沒(méi)有收到確認(rèn)應(yīng)答,就會(huì)重新發(fā)送該數(shù)據(jù)段。
  • 滑動(dòng)窗口:TCP使用滑動(dòng)窗口機(jī)制來(lái)實(shí)現(xiàn)流量控制和擁塞控制。接收端通過(guò)通告窗口大小來(lái)告訴發(fā)送端可以接收的數(shù)據(jù)量,從而避免過(guò)多的數(shù)據(jù)堆積。
  • 丟包重傳:如果發(fā)生丟包,接收方可以通過(guò)請(qǐng)求重傳丟失的數(shù)據(jù)段來(lái)實(shí)現(xiàn)可靠性。
  • 流量控制:TCP使用滑動(dòng)窗口機(jī)制來(lái)進(jìn)行流量控制,根據(jù)接收方的處理能力和網(wǎng)絡(luò)狀況調(diào)整發(fā)送速率,避免過(guò)載造成數(shù)據(jù)丟失或延遲。
  • 擁塞控制:TCP通過(guò)擁塞窗口、慢啟動(dòng)、擁塞避免等算法來(lái)感知并控制網(wǎng)絡(luò)擁塞情況,以避免過(guò)度擁塞導(dǎo)致網(wǎng)絡(luò)性能下降。

這些機(jī)制共同確保了TCP的可靠性,使得數(shù)據(jù)在傳輸過(guò)程中可以準(zhǔn)確無(wú)誤地被接收方接收到。

4. 如何用C語(yǔ)言實(shí)現(xiàn)大小端

在C語(yǔ)言中,可以使用聯(lián)合體(union)來(lái)實(shí)現(xiàn)大小端的轉(zhuǎn)換。

首先,定義一個(gè)32位無(wú)符號(hào)整型數(shù)(例如uint32_t),然后定義一個(gè)聯(lián)合體,該聯(lián)合體包含一個(gè)該類型的成員和一個(gè)4字節(jié)大小的字符數(shù)組。如下所示:

#include <stdio.h>
#include <stdint.h>

typedef union {
    uint32_t value;
    unsigned char bytes[4];
} EndianConverter;

接下來(lái),我們可以編寫(xiě)函數(shù)來(lái)判斷當(dāng)前系統(tǒng)是大端還是小端。在小端系統(tǒng)中,最低有效字節(jié)存儲(chǔ)在最低地址上;而在大端系統(tǒng)中,最高有效字節(jié)存儲(chǔ)在最低地址上。

int isLittleEndian() {
    EndianConverter converter;
    converter.value = 1;
    return converter.bytes[0] == 1; // 如果第一個(gè)字節(jié)為1,則為小端
}

你也可以編寫(xiě)函數(shù)來(lái)進(jìn)行大小端轉(zhuǎn)換:

uint32_t swapEndian(uint32_t value) {
    EndianConverter converter;
    converter.value = value;

    unsigned char temp = converter.bytes[0];
    converter.bytes[0] = converter.bytes[3];
    converter.bytes[3] = temp;

    temp = converter.bytes[1];
    converter.bytes[1] = converter.bytes[2];
    converter.bytes[2] = temp;

    return converter.value;
}

這樣就可以通過(guò)調(diào)用 isLittleEndian() 函數(shù)來(lái)判斷系統(tǒng)是否為小端,并且通過(guò)調(diào)用 swapEndian() 函數(shù)來(lái)實(shí)現(xiàn)大小端之間的轉(zhuǎn)換。

5. 802.11ax和802.11ac/n這些有什么區(qū)別

02.11ax(Wi-Fi 6)和802.11ac/n(Wi-Fi 5)都是無(wú)線局域網(wǎng)(WLAN)的標(biāo)準(zhǔn)。它們之間有以下區(qū)別:

  • 性能:802.11ax提供更高的數(shù)據(jù)傳輸速度和更大的容量,比802.11ac/n更快。它支持更多同時(shí)連接設(shè)備,并且可以在擁擠的網(wǎng)絡(luò)環(huán)境中提供更穩(wěn)定的性能。
  • 頻段利用率:802.11ax引入了一些新技術(shù),如OFDMA(正交頻分多址)和MU-MIMO(多用戶多輸入多輸出),可以將信道劃分為較小的子信道并同時(shí)傳輸給多個(gè)設(shè)備,以提高頻段利用率。
  • 網(wǎng)絡(luò)效率:802.11ax使用了一些優(yōu)化算法,如目標(biāo)喚醒時(shí)間(TWT)和空閑狀態(tài)電源管理,以降低功耗并延長(zhǎng)設(shè)備電池壽命。
  • 向后兼容性:雖然兩者不直接兼容,但大部分現(xiàn)有設(shè)備仍可通過(guò)向下兼容模式與802.11ax或802.11ac/n網(wǎng)絡(luò)通信。

6. 進(jìn)程和線程的區(qū)別

進(jìn)程和線程是操作系統(tǒng)中兩個(gè)重要的概念,它們都是并發(fā)執(zhí)行任務(wù)的方式,但有一些關(guān)鍵的區(qū)別:

  • 調(diào)度:進(jìn)程是操作系統(tǒng)分配資源和調(diào)度的基本單位,每個(gè)進(jìn)程都有獨(dú)立的地址空間、內(nèi)存和其他系統(tǒng)資源。而線程是在進(jìn)程內(nèi)部創(chuàng)建和調(diào)度的,多個(gè)線程共享同一個(gè)進(jìn)程的資源。
  • 資源開(kāi)銷:由于每個(gè)進(jìn)程都具有獨(dú)立的資源,因此創(chuàng)建和銷毀進(jìn)程時(shí)會(huì)產(chǎn)生較大的開(kāi)銷。而線程相對(duì)較輕量級(jí),在同一個(gè)進(jìn)程中創(chuàng)建和切換線程時(shí)開(kāi)銷較小。
  • 通信與同步:不同進(jìn)程之間通信比較復(fù)雜,需要使用特定機(jī)制(如管道、消息隊(duì)列等)。而在同一個(gè)進(jìn)程內(nèi)部,線程可以直接通過(guò)共享內(nèi)存進(jìn)行通信,并且可以使用鎖等機(jī)制實(shí)現(xiàn)線程間的同步。
  • 容錯(cuò)性:由于每個(gè)進(jìn)程有獨(dú)立的地址空間,所以一個(gè)進(jìn)程崩潰不會(huì)影響其他進(jìn)程。但在多線程情況下,一個(gè)線程崩潰可能會(huì)導(dǎo)致整個(gè)進(jìn)程崩潰。

7. 多進(jìn)程編程實(shí)現(xiàn)

在多進(jìn)程編程中,可以使用以下方法來(lái)實(shí)現(xiàn):

  • 使用操作系統(tǒng)提供的多進(jìn)程API,例如fork()函數(shù)。通過(guò)調(diào)用fork()函數(shù),父進(jìn)程創(chuàng)建一個(gè)子進(jìn)程,子進(jìn)程會(huì)完全復(fù)制父進(jìn)程的代碼和數(shù)據(jù),并從fork()函數(shù)處開(kāi)始執(zhí)行。這樣就可以實(shí)現(xiàn)多個(gè)并行運(yùn)行的進(jìn)程。
  • 使用Python中的multiprocessing模塊。該模塊提供了方便的接口來(lái)創(chuàng)建和管理多個(gè)子進(jìn)程。你可以使用Process類來(lái)創(chuàng)建新的進(jìn)程對(duì)象,并使用start()方法啟動(dòng)它們。
  • 使用線程池或進(jìn)程池。線程池或進(jìn)程池是一種管理并發(fā)任務(wù)的方式,通過(guò)預(yù)先創(chuàng)建一定數(shù)量的線程或進(jìn)程,在需要時(shí)將任務(wù)分配給它們執(zhí)行。這種方式可以避免頻繁地創(chuàng)建和銷毀線程或進(jìn)程帶來(lái)的開(kāi)銷。
  • 利用消息隊(duì)列進(jìn)行通信。不同的進(jìn)程之間可以通過(guò)共享消息隊(duì)列來(lái)進(jìn)行通信和協(xié)調(diào)工作。一個(gè)進(jìn)程可以將消息發(fā)送到隊(duì)列中,其他相關(guān)進(jìn)程則可以從隊(duì)列中讀取并處理這些消息。

8. MCS是什么(沒(méi)料到嵌入式還問(wèn)物理層)

MCS通常是指"Minecraft Coder Pack",是一個(gè)用于修改游戲《Minecraft》的工具包。它允許開(kāi)發(fā)者對(duì)游戲進(jìn)行自定義修改和編程。通過(guò)使用MCS,開(kāi)發(fā)者可以創(chuàng)建新的游戲內(nèi)容、添加新的功能和改變游戲的行為。這個(gè)工具包提供了一系列API和庫(kù),方便開(kāi)發(fā)者進(jìn)行修改和擴(kuò)展。

9. C語(yǔ)言中如何防止同一個(gè).h文件被重復(fù) #include

在C語(yǔ)言中,可以使用預(yù)處理指令 #ifndef、#define 和 #endif 來(lái)防止同一個(gè)頭文件被重復(fù)包含。具體步驟如下:

  • 1.在頭文件的開(kāi)頭加入以下代碼:
#ifndef HEADER_FILE_NAME_H
#define HEADER_FILE_NAME_H

// 頭文件的內(nèi)容

#endif
  • 2.替換其中的 HEADER_FILE_NAME_H 為你自定義的宏名,一般以頭文件名全大寫(xiě)并添加后綴 _H。
  • 3.這樣,在每次包含該頭文件之前,預(yù)處理器會(huì)先檢查是否已經(jīng)定義了該宏。如果沒(méi)有定義,則繼續(xù)執(zhí)行 #define 和后續(xù)代碼;如果已經(jīng)定義了該宏,則跳過(guò)整個(gè)頭文件的內(nèi)容。

通過(guò)這種方式,可以確保同一個(gè)頭文件在同一個(gè)源代碼中只被包含一次,避免了重復(fù)聲明和定義導(dǎo)致的編譯錯(cuò)誤。

10. 動(dòng)態(tài)鏈接和靜態(tài)鏈接分別是什么

動(dòng)態(tài)鏈接和靜態(tài)鏈接是軟件開(kāi)發(fā)中常用的兩種鏈接方式。

靜態(tài)鏈接是將程序所需的所有庫(kù)文件在編譯時(shí)直接嵌入到可執(zhí)行文件中。這意味著生成的可執(zhí)行文件獨(dú)立于外部庫(kù),可以單獨(dú)運(yùn)行。靜態(tài)鏈接的優(yōu)點(diǎn)是簡(jiǎn)單、方便,不需要額外的依賴,但缺點(diǎn)是可執(zhí)行文件較大。

動(dòng)態(tài)鏈接是在程序運(yùn)行時(shí),由操作系統(tǒng)加載所需的共享庫(kù)并進(jìn)行鏈接。相比于靜態(tài)鏈接,動(dòng)態(tài)鏈接生成的可執(zhí)行文件較小,并且多個(gè)程序可以共享同一個(gè)動(dòng)態(tài)庫(kù)實(shí)例,減少內(nèi)存占用。此外,如果共享庫(kù)更新了,只需要替換對(duì)應(yīng)的庫(kù)文件即可。

11. 對(duì)指針的理解

指針是C++中的一種數(shù)據(jù)類型,它存儲(chǔ)了一個(gè)變量的內(nèi)存地址。通過(guò)指針,可以直接訪問(wèn)或修改該內(nèi)存地址上的數(shù)據(jù)。

在C++中,通過(guò)使用取地址運(yùn)算符"&"可以獲取變量的內(nèi)存地址,并將其賦給相應(yīng)的指針變量。例如:

int num = 10;
int* ptr = # // 將num的地址賦給ptr

可以使用解引用運(yùn)算符"*"來(lái)訪問(wèn)指針?biāo)赶虻闹怠@纾?/span>

cout << *ptr; // 輸出ptr所指向的值(即num的值)

還可以進(jìn)行指針間的操作,如指針之間的賦值、比較等。

需要注意的是,在使用指針時(shí)要確保指針有效且不為空,避免空指針異常和未定義行為。

指針在C++中廣泛用于動(dòng)態(tài)內(nèi)存分配、數(shù)組操作、函數(shù)傳遞參數(shù)等場(chǎng)景,是C++中重要且強(qiáng)大的特性之一。

12. 函數(shù)指針怎么使用 有什么作用

函數(shù)指針是指向函數(shù)的指針變量。它可以用來(lái)存儲(chǔ)函數(shù)的地址,使得我們可以通過(guò)函數(shù)指針來(lái)調(diào)用對(duì)應(yīng)的函數(shù)。

要聲明一個(gè)函數(shù)指針,可以使用以下語(yǔ)法:

返回類型 (*指針變量名)(參數(shù)列表);

例如,假設(shè)有一個(gè)名為 add 的函數(shù),它接受兩個(gè)整數(shù)參數(shù)并返回它們的和。我們可以聲明一個(gè)與該函數(shù)匹配的函數(shù)指針如下:

int (*ptr)(int, int);

然后,我們可以將 add 函數(shù)的地址賦給這個(gè)函數(shù)指針:

ptr = &add;

或者簡(jiǎn)寫(xiě)為:

ptr = add;

現(xiàn)在,我們就可以通過(guò)函數(shù)指針來(lái)調(diào)用 add 函數(shù)了:

int result = ptr(3, 4); // 調(diào)用 add 函數(shù)

使用函數(shù)指針的好處之一是它允許動(dòng)態(tài)地選擇和調(diào)用不同的函數(shù)。這在編程中很有用,特別是當(dāng)需要根據(jù)運(yùn)行時(shí)條件決定執(zhí)行哪個(gè)具體的函數(shù)時(shí)。

此外,函數(shù)指針也常用于作為回調(diào)機(jī)制,在某些情況下允許將一個(gè)函數(shù)傳遞給另一個(gè)函數(shù)作為參數(shù),并在需要時(shí)進(jìn)行調(diào)用。

13. TCP/IP網(wǎng)絡(luò)模型一共幾層 哪幾層

TCP/IP網(wǎng)絡(luò)模型一共有四層,它們是:

  • 網(wǎng)絡(luò)接口層(Network Interface Layer):負(fù)責(zé)處理與物理網(wǎng)絡(luò)介質(zhì)的通信,如以太網(wǎng)、Wi-Fi等。
  • 網(wǎng)際層(Internet Layer):提供了數(shù)據(jù)在不同網(wǎng)絡(luò)之間的路由和轉(zhuǎn)發(fā)功能,使用IP協(xié)議進(jìn)行尋址和傳輸。
  • 傳輸層(Transport Layer):提供端到端的數(shù)據(jù)傳輸服務(wù),常用的協(xié)議有TCP (Transmission Control Protocol) 和UDP (User Datagram Protocol)。
  • 應(yīng)用層(Application Layer):提供各種應(yīng)用程序與網(wǎng)絡(luò)通信的接口,包括HTTP、FTP、SMTP等協(xié)議。

這些層級(jí)組成了TCP/IP網(wǎng)絡(luò)模型,用于實(shí)現(xiàn)互聯(lián)網(wǎng)中不同設(shè)備之間的通信。

14. ARP協(xié)議具體干什么的

ARP(Address Resolution Protocol,地址解析協(xié)議)是一種用于將IP地址轉(zhuǎn)換為物理MAC地址的協(xié)議。在網(wǎng)絡(luò)通信中,數(shù)據(jù)包需要知道目標(biāo)主機(jī)的MAC地址才能正確傳遞。而ARP協(xié)議就是用來(lái)通過(guò)發(fā)送廣播請(qǐng)求獲取一個(gè)目標(biāo)IP對(duì)應(yīng)的MAC地址。

具體來(lái)說(shuō),當(dāng)一個(gè)主機(jī)需要與另一個(gè)主機(jī)進(jìn)行通信時(shí),它會(huì)首先檢查自己的本地ARP緩存表,看是否已經(jīng)有了目標(biāo)IP對(duì)應(yīng)的MAC地址記錄。如果沒(méi)有,則會(huì)發(fā)送一個(gè)ARP請(qǐng)求廣播到局域網(wǎng)上的所有主機(jī),詢問(wèn)哪個(gè)主機(jī)擁有該IP地址對(duì)應(yīng)的MAC地址。收到這個(gè)請(qǐng)求的主機(jī)會(huì)檢查自己的IP地址,并向發(fā)出請(qǐng)求的主機(jī)發(fā)送一個(gè)ARP響應(yīng)包含其自己的MAC地址。

一旦發(fā)起方收到了目標(biāo)主機(jī)返回的ARP響應(yīng)包含目標(biāo)主機(jī)的MAC地址后,它就可以使用這個(gè)MAC地址將數(shù)據(jù)包直接發(fā)送給目標(biāo)主機(jī),從而建立起有效通信。

責(zé)任編輯:武曉燕 來(lái)源: 深度Linux
相關(guān)推薦

2021-10-26 14:40:03

MySQL SQL 語(yǔ)句數(shù)據(jù)庫(kù)

2021-11-04 14:32:17

Spring 面試作用域

2025-10-15 03:00:00

2021-10-21 14:43:23

Java 語(yǔ)言 Java 基礎(chǔ)

2021-07-26 14:59:23

面試Redis內(nèi)存數(shù)據(jù)庫(kù)

2021-09-07 14:46:42

面試網(wǎng)絡(luò)HTTP 協(xié)議

2021-10-26 17:05:55

Redis字符串復(fù)雜度

2023-11-28 18:09:49

Java多態(tài)

2022-09-03 11:36:11

Python文件網(wǎng)絡(luò)

2021-08-01 22:59:43

Object八股文quals

2021-04-14 10:02:59

網(wǎng)絡(luò)八股文協(xié)議

2024-02-23 19:17:12

構(gòu)造函數(shù)C++開(kāi)發(fā)

2021-08-12 09:28:24

Java多線程變量

2021-05-20 11:43:57

操作系統(tǒng)硬件軟件

2024-10-12 09:26:32

線程池系統(tǒng)核心線程

2021-05-06 07:27:57

面試任務(wù)調(diào)度器

2021-07-20 05:37:17

項(xiàng)目面試簡(jiǎn)歷

2023-11-29 17:28:07

2022-05-27 14:43:45

JVM字節(jié)碼指令

2022-05-19 08:41:09

JVM虛擬機(jī)架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)