
中興的軟件類筆試特別是這份“試卷A”在通信設備廠商里屬于比較典型的一套組合拳。它不像互聯網大廠那樣海量刷算法題而是更看重C語言功底、操作系統底層理解、網絡協議基礎以及嵌入式開發的基本素養。這套題覆蓋的知識面比較廣但深度屬于“夠用就行”核心目的是篩出那些真正寫過代碼、調過板子、對計算機系統有感覺的人而不是只會背八股文的選手。我拿到這份卷子復盤了一下發現它的題型分布和考察側重點其實很有規律。無論你是準備投中興的嵌入式軟件崗還是想進類似的通信設備廠商華為、烽火、大唐等這套試卷的復習思路都值得參考。下面我把整張卷子拆開揉碎從題型分析到考點精講再到避坑指南一次性說清楚。1. 試卷整體結構與考核定位分析1.1 題型分布與分值邏輯先說整體感受。中興軟件類筆試試卷A的題型結構大致可以分成四塊單選題/多選題、填空題、簡答題、編程題。如果還有一部分在線評測OJ形式的算法題那通常放在最后分值占比不高。從分值設置來看選擇題和填空題往往占據50%-60%的分數簡答題占20%左右編程題占20%-30%。這個比例和互聯網公司的筆試差異很大——互聯網大廠往往是一上來就是兩道hard級別的算法題而中興這類傳統通信設備商更愿意花選擇題去考基礎知識覆蓋面。注意通信設備廠商的軟件崗和互聯網應用軟件崗對人才的要求是兩條路線。前者的代碼要跑在資源受限的嵌入式環境里和硬件打交道多后者主要關注高并發、分布式、業務邏輯。因此需要針對性地準備。之所以這樣設計是因為嵌入式軟件尤其是通信設備里的軟件出bug的代價極高。基站設備如果軟件崩潰了那不是一個App閃退那么簡單而是整片區域的通信中斷。所以這類企業對基礎知識的扎實程度有很高的要求寧可招一個基礎扎實但不算特別聰明的人也不愿意招一個思維活躍但基礎不牢的人。1.2 核心能力模型拆解從試卷考察的內容反推中興軟件崗筆試對候選人的能力模型是清晰的第一是C語言基本功。指針、內存管理、結構體、位運算這些基礎到不能再基礎的東西卻恰恰是嵌入式開發的命根子。試卷里一定會有關于指針運算、數組越界、內存泄漏的題目。第二是操作系統原理。進程與線程的區別、同步互斥機制、死鎖條件、內存分頁分段這些是選擇題和簡答題的常客。很多自學編程的人在這里容易吃虧因為平時寫業務代碼根本接觸不到這些概念。第三是計算機網絡基礎。TCP三次握手、四次揮手、TCP與UDP的區別、IP地址分類、子網劃分這些幾乎是通信設備廠商必考的題目。中興本身就是做通信的如果連TCP/IP協議棧的原理都說不清楚那確實說不過去。第四是數據結構與基礎算法。鏈表操作反轉、合并、二叉樹遍歷、排序算法的時間復雜度對比這些屬于編程題的常考范圍。難度大致在leetcode easy到medium之間。此外試卷還會零星出現一些與通信相關的常識比如OSI七層模型、IP報文的格式、甚至可能有一道關于5G或4G網絡架構的選擇題。這類題目對通信專業的學生比較友好但對純計算機背景的同學來說可能需要額外補充一點行業常識。2. 選擇題與填空題高頻考點逐項拆解2.1 C語言考點指針與內存是永遠的主角選擇題里C語言相關的題目我個人復盤下來可以總結成一個不等式指針相關 內存管理 關鍵字細節 預處理。指針這塊最常見的考法是給一段代碼讓你判斷輸出結果或者程序是否出錯。比如#include stdio.h int main() { int a[5] {1, 2, 3, 4, 5}; int *p a; printf(%d\n, *(p)); // 輸出1p后移 printf(%d\n, *p); // 輸出2p后移 printf(%d\n, (*p)); // 輸出3但a[2]變成4 printf(%d\n, *p); // 輸出4因為上一步自增了 return 0; }這種題目考察的是p、*p、(*p)三者之間的區別。簡單來說*p相當于*(p)先取p指向的值再移動指針(*p)是先取p指向的值然后把這個值加1指針不動。另外一道經典的送命題是sizeof和strlen的區別char str[] hello; char *p str; sizeof(str) // 6包括末尾的\0 sizeof(p) // 8或4取決于平臺位數64位系統是8 strlen(str) // 5不含\0 strlen(p) // 5做題的時候一定要注意區分“數組名”和“指針變量”在sizeof運算符面前它們是兩碼事。內存管理方面堆內存和棧內存的區別是必考項。棧上的變量由系統自動分配和釋放堆上的內存需要手動malloc/free。筆試題常常會問以下哪段代碼存在內存泄漏其實核心思路就是一條檢查每個malloc是否都有對應的free以及是否有指針在被釋放后繼續使用懸空指針。還有一類必考題是const關鍵字的不同位置。我當年復習的時候自己總結了一張表這里分享給大家寫法含義const int *p指針指向的值不能通過p修改int *const p指針本身不能指向別處const int *const p指針和值都不能修改這類題目翻來覆去就是這個套路把上面三種情況搞清楚基本不會丟分。2.2 操作系統考點從進程線程到死鎖操作系統這塊選擇題比較愛考的是進程狀態轉換。就緒態、運行態、阻塞態三者之間的轉換關系很多人背了又忘。這里提供一個記憶技巧只有運行態可以主動進入阻塞態比如等待I/O也只有就緒態可以進入運行態被調度器選中。阻塞態不能直接進入運行態必須先變成就緒態再等待調度。進程間通信方式IPC也是高頻考點管道pipe、消息隊列、共享內存、信號量、信號、套接字。選擇題會問哪種方式效率最高——答案是共享內存因為它不需要內核拷貝數據。但共享內存沒有同步機制所以需要配合信號量使用。如果題目問“哪種方式最適合傳輸大量數據”優先選共享內存。死鎖產生的四個必要條件互斥、占有并等待、不可剝奪、循環等待這是老生常談但需要注意中興的卷子喜歡換個馬甲考不是直接問你四個條件是什么而是給一個場景問“以下哪種措施可以預防死鎖”或者“銀行家算法是為了解決什么問題”這種考法更貼近實際工程思維。線程和進程的對比也是選擇題里一定會出現的。核心區別就兩條進程是資源分配的基本單位線程是CPU調度的基本單位同一進程的線程共享地址空間進程之間地址空間相互隔離。提示中興的筆試題里偶爾會出現“協程”的概念。雖然C語言開發中用的不多但如果你了解協程是用戶態調度、切換成本比線程更低這個知識點就能拿分了。2.3 計算機網絡考點通信廠商的必答題網絡協議是中興筆試的重頭戲。選擇題里TCP和UDP的對比是雷打不動的主要圍繞以下幾點TCP面向連接UDP無連接TCP可靠傳輸UDP不可靠TCP有流量控制和擁塞控制UDP沒有TCP首部最小20字節UDP首部只有8字節TCP是流式協議UDP是報文協議關于TCP三次握手筆試題不太會紙上談兵更常見的是問“為什么需要三次握手而不是兩次”答案要點是防止已失效的連接請求報文突然又傳到服務器端從而產生錯誤連接。假設只有兩次握手客戶端發送的SYN報文在網絡中滯留超時后客戶端重發SYN并完成連接、傳輸數據、釋放連接。此時滯留的舊SYN報文到達服務器服務器會誤以為客戶端發起了新連接于是分配資源等待客戶端發送數據——這就是資源浪費。IP地址和子網劃分也會考一兩題。比如給一個IP地址和子網掩碼問網絡號和廣播地址。計算方法不復雜IP和掩碼做按位與得到網絡號掩碼按位取反再和IP做按位或得到廣播地址。最好熟練掌握這種方法考試時能省不少時間。2.4 數據結構和算法考點基礎但不容小覷選擇題里的數據結構題目難度不大以基礎概念為主。比如各種排序算法的時間復雜度對比二叉樹的先序/中序/后序遍歷推斷哈希表的沖突解決方法開放定址法、鏈地址法等。值得一提的是中興的卷子對“鏈表”有特別的偏好。選擇題、簡答題、編程題都可能出現鏈表相關的內容。比如如何判斷鏈表有環快慢指針法如何反轉鏈表迭代法如何找到鏈表的中間節點快慢指針法這些題目本身不難但如果你平時刷題只用Python寫列表突然改用C語言手寫鏈表節點結構體很容易在邊界條件上翻車。3. 簡答題考察表達能力和工程思維3.1 典型的簡答題類型簡答題是中興筆試里比較有區分度的一類題型。選擇題還能蒙簡答題是真要按照自己的理解把知識點寫清楚。根據對不同年份試卷的復盤簡答題常見的有以下幾類第一類是概念對比題比如“請簡述進程和線程的區別與聯系”、“請說明TCP與UDP的區別及應用場景”。這類題目考察的是知識的系統性和表達的條理性。第二類是原理說明題比如“請簡述TCP三次握手的過程”、“請說明死鎖產生的必要條件及預防方法”。這類題目考察的是對基礎原理的深度理解。第三類是實際問題分析題比如“如果系統出現CPU占用率過高如何排查定位”這類題目沒有標準答案考察的是項目經驗和解決問題的思路。我個人的體會是簡答題的答題策略不是“面面俱到”而是“結構清晰關鍵點完整”。不需要像寫論文一樣洋洋灑灑幾百字但需要把核心概念寫準確、分條羅列清楚、邏輯順暢。改卷人每天看幾百份卷子一份卷子停留時間不超過兩分鐘結構清晰、關鍵詞突出的回答更容易拿分。3.2 答題技巧與模板以“進程和線程的區別”為例一個容易拿高分的答題結構是這樣的定義先行進程是操作系統進行資源分配和調度的基本單位是程序的一次執行過程。線程是進程內的一個執行單元是CPU調度和分派的基本單位。區別列表進程擁有獨立的地址空間線程共享進程的地址空間進程是資源分配的基本單位線程是調度的基本單位進程間通信需要借助IPC機制線程間可以直接讀寫共享數據進程創建和銷毀的開銷大線程創建和銷毀的開銷小進程之間的隔離性更好一個進程崩潰不影響其他進程線程之間的隔離性較差一個線程崩潰可能導致整個進程退出聯系說明一個進程可以包含多個線程這些線程共享進程的資源。線程依賴于進程存在進程退出后其所有線程也隨之終止。這種“定義列表聯系/延伸”的結構對任何簡答題都適用。如果考試時遇到不會的題目也可以嘗試從這個模板出發寫出你知道的部分盡量不要留白。很多時候寫了就能拿到部分分數。4. 編程題C語言手寫代碼的實戰演練4.1 高頻編程題類型與解題框架編程題是整套試卷里含金量最高的部分也是很多人最容易失分的部分。中興軟件類筆試的編程題一般采用C語言完成題目類型主要集中在以下幾類鏈表操作類反轉鏈表、合并兩個有序鏈表、找鏈表中倒數第k個節點、判斷鏈表是否有環。如果時間緊張優先準備這類題目因為中興對鏈表的偏好非常明顯。字符串處理類實現字符串拷貝、字符串反轉、統計字符串中字符出現的次數、判斷回文字符串。這類題目看似簡單但考察的是對指針操作的熟練度和邊界條件的處理。數組處理類數組去重、求兩個數組的交集、尋找數組中的最大值/最小值、將數組中的0移動到末尾。這類題目算法本身不難但要求寫出健壯的代碼。排序與查找類手寫快速排序、二分查找。這類題目雖然算法思路比較清晰但細節容易出錯比如快速排序的邊界條件。以反轉鏈表為例我給出一個可以直接當作模板使用的C語言實現#include stdio.h #include stdlib.h struct ListNode { int val; struct ListNode *next; }; struct ListNode* reverseList(struct ListNode* head) { struct ListNode *prev NULL; struct ListNode *curr head; while (curr ! NULL) { struct ListNode *nextTemp curr-next; // 先保存下一個節點 curr-next prev; // 反轉指針 prev curr; // prev前移 curr nextTemp; // curr前移 } return prev; }解題的關鍵就卡在這句話上在修改節點的next指針之前必須先把下一個節點保存下來。很多人在面試現場寫這道題時因為忘了保存下一個節點指針一旦丟失就全亂了。再來一道二分查找的模板這套題考的頻率也很高int binarySearch(int arr[], int size, int target) { int left 0; int right size - 1; while (left right) { int mid left (right - left) / 2; // 防止leftright溢出 if (arr[mid] target) { return mid; } else if (arr[mid] target) { left mid 1; } else { right mid - 1; } } return -1; }注意一個細節mid的計算推薦使用left (right - left) / 2而不是(left right) / 2。雖然兩者在數學上等價但后者在left right極大時存在整數溢出風險。這種細節往往是面試官和評卷人判斷你是否真正理解代碼的加分項。4.2 手寫代碼時的注意事項實際考試是在牛客網或者賽碼網這類在線評測系統上進行的。雖然編譯器會幫你檢查語法錯誤但你依然需要做到以下幾點一定要先理清思路再動手寫。好多同學看到題目很興奮上來就寫寫到一半發現思路有問題推倒重來時間全浪費了。建議先花兩分鐘在草稿紙上畫一畫流程圖哪怕只能寫出偽代碼也能大大提高一次通過率。注意邊界條件。空鏈表、單個節點、數組為空、目標值在數組首尾這些邊界情況最容易出錯。寫完代碼后不要急著提交先自己手動跑幾個極端用例。變量命名要有意義。雖然在線評測系統不檢查命名規范但萬一你的代碼需要人工復查部分崗位會有這個環節清爽的命名風格一定能加分。如果沒有C語言環境選自己最熟悉的語言。雖然C語言在嵌入式領域更貼合但如果題目沒有強制要求用Python或Java完成算法題也比寫不出來強。關鍵是AC不是語言。4.3 編程題實戰案例數組去重最后分享一道我當年實際遇到的編程題給定一個已排序的數組請在不使用額外數組空間的條件下原地刪除重復出現的元素使每個元素只出現一次返回刪除后數組的新長度。int removeDuplicates(int* nums, int numsSize) { if (numsSize 0) { return 0; } int slow 0; for (int fast 1; fast numsSize; fast) { if (nums[fast] ! nums[slow]) { slow; nums[slow] nums[fast]; } } return slow 1; }這道題用到的“快慢指針”技巧在數據結構題目里很常見。快指針負責遍歷慢指針負責記錄不重復元素的位置。它的精妙之處在于當你有兩個指針配合工作時總能找到一種讓空間復雜度降到O(1)的解法。類似的題目還包括移動零、最長連續遞增序列等建議備考時把這類“雙指針”題目集中刷一遍。5. 通信與嵌入式常識容易被忽略的附加分5.1 通信基礎常識的考察方式中興作為通信設備廠商軟件類筆試偶爾會夾帶一些通信領域的通識題。這類題目不深但如果完全沒有接觸過確實會措手不及。常見的有OSI七層模型和TCP/IP四層模型的對應關系。這個考點與其說是通信知識不如說是網絡基礎。物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層中文名要能默寫出來。TCP/IP的四層模型把它簡化成了網絡接口層、網際層、傳輸層、應用層。TCP報文段的首部格式尤其是源端口、目的端口、序號、確認號這幾個字段的作用。如果之前沒看過TCP報文格式建議花十分鐘看一下因為筆試選擇題可以直接考。還有一個容易被忽視的點是IPv4和IPv6的區別。IPv6地址長度從32位擴展到128位解決了IPv4地址枯竭的問題。如果題目問IPv6的地址位數答案是128位這個屬于送分題。5.2 嵌入式開發的常規考察軟件類崗位如果偏向嵌入式方向還會涉及一些硬件相關的知識。比如大端和小端的區別。大端模式是數據的高字節保存在內存的低地址中小端模式是數據的低字節保存在內存的低地址中。可以通過一個union來檢測本機是大端還是小端。中斷和輪詢的區別。中斷是外設主動通知CPU輪詢是CPU不斷查詢外設狀態。中斷的實時性好但需要處理上下文切換輪詢簡單但浪費CPU資源。volatile關鍵字的作用。告訴編譯器該變量可能被意外修改每次使用時都必須重新從內存中讀取不能優化到寄存器中。典型場景是硬件寄存器、中斷服務程序中修改的全局變量。棧的生長方向。在x86平臺上棧是從高地址向低地址生長的。棧溢出攻擊的原理就和這個有關。這些知識點在簡歷上如果寫了“嵌入式開發經驗”那筆試考到的概率會大大增加。如果沒寫過嵌入式也不用太擔心這類題占分不多。5.3 Linux基礎命令與工具通信設備里的軟件大部分跑在Linux系統上所以Linux命令也可能出現在選擇題里。比如查看進程的命令ps -ef或top查看端口的命令netstat -anp或ss -lntp修改文件權限的命令chmod查找文件的命令find / -name xxx這些命令不復雜但如果你平時開發用的Windows系統最好在虛擬機或云服務器上裝個Linux環境上手敲一遍。筆試考命令題往往不考具體參數而是考“用什么命令完成什么操作”這種級別。特別提醒如果你是純Java/Python后端方向建議花時間把C語言的基礎重新撿起來尤其是結構體、指針、動態內存分配這三塊。中興軟件崗筆試的編程題和填空題基本都是圍繞這三塊展開的。6. 備考策略與實戰心得6.1 時間規劃與復習優先級如果你離筆試還有兩周以上可以參考下面的復習節奏第一周重點放在C語言和數據結構上。具體來說把指針、結構體、內存分配、鏈表、棧、隊列、二叉樹這些基礎知識過一遍。每天花1小時刷與鏈表和數組相關的編程題目標是能把反轉鏈表、合并有序鏈表、數組去重這類題目默寫出來。第二周重點放在操作系統和網絡上。進程線程、死鎖、TCP/IP、OSI模型這些內容偏理論通過做題來記憶是最有效的。可以去找“軟考軟件設計師”的歷年真題做尤其是上午的選擇題部分很多考點是重合的。中興的筆試難度和軟考中級上午題比較接近但更偏實戰一些。考試前一天不要再做新題了把之前做錯的題翻出來重新看一遍。特別是那些以為自己會做、結果做錯的題說明存在知識盲區考前過一遍印象最深刻。6.2 還需要準備什么除了題目本身還有幾項軟技能也會影響你的筆試結果時間分配。筆試總時長一般在90分鐘到120分鐘之間。建議按分數占比分配時間選擇題和填空題最多花一半時間簡答題控制在20分鐘內剩下的時間全部留給編程題。不要在一道選擇題上糾結超過3分鐘可以先標記跳過最后有時間再回來想。在線編程環境提前適應。中興筆試一般使用牛客網或賽碼網你需要提前熟悉它們在線編譯器的操作方式。特別是輸入輸出的格式牛客網要求你寫完整可運行的代碼和leetcode只需要寫函數體不一樣。字跡工整。如果筆試是紙質試卷有些線下宣講會會用紙質試卷簡答題的字跡一定要工整。改卷人一天要批閱大量試卷字跡潦草的內容很容易被誤判。6.3 面試官視角的幾點忠告我在和一些參與過校園招聘的工程師朋友聊過他們說中興這一類通信廠商看筆試其實最看重的不是你能不能做出所有題目而是基礎是否扎實、是否值得培養。三道編程題你哪怕只做出來一道但是思路清晰、代碼規范、邊界條件處理得當面試官對你的評價可能比三道題全AC但代碼寫得一團糟的選手還要高。因為實際工程開發中代碼的可讀性和健壯性往往比炫技更重要。相反如果選擇題靠蒙、簡答題全在扯淡、編程題編譯不通過那印象分會大打折扣。尤其是簡答題千萬不要抄題目當作答案來湊字數寧可只寫三行核心結論也不要寫一大段正確的廢話。另外如果你有Linux使用經驗、嵌入式項目經驗或者熟悉某種RTOS在簡歷里要明確寫出來。筆試題是統一成卷的但面試官在拿到你的筆試成績后會結合你的簡歷背景做綜合評估。中興的軟件崗分很多方向有些偏通信協議有些偏驅動開發有些偏上層應用你需要在簡歷中突出和意向方向匹配的技術積累。6.4 常見失分點與考場表現細節這是我自己參加過多次類似筆試之后總結出的常見問題清單建議考試時貼在旁邊選擇題沒看清“不正確”還是“正確”就下手這題白白丟分特別可惜。題目問“下列說法不正確的是”往往很多人只看了前半段就開始選。C語言程序題沒有在草稿紙上推演直接盯著屏幕選答案。如果試卷允許在題目旁做標記推薦把指針變化的過程畫出來正確率會明顯提升。編程題定義變量后在循環里忘記初始化導致程序運行結果不確定。這個問題在筆試環境沒有調試器的情況下很容易被忽略所以寫完代碼后建議在腦中逐行走一遍。簡答題只寫關鍵詞不寫完整句子如果改卷人看不懂你的表達邏輯很難給分。在不會的編程題上死磕太久導致后面的簡答題沒有時間寫。編程題可以只寫思路偽代碼簡答題留白才是真正的零分行為。考場上的策略是“先易后難、先分高后分低”。先把有把握的分數全部拿到手再回來啃硬骨頭。編程題如果遇到完全沒思路的把時間花在檢查前面的選擇題和簡答題上性價比要高得多。這套試卷的核心價值其實并不在于題目的難易程度而在于它清晰地告訴了你一個通信設備軟件工程師需要哪些底層能力。與其焦慮地到處找“原題”不如按照上面梳理的知識地圖老老實實把每個知識點弄明白。基礎扎實的人無論試卷怎么換都能從容應對。