華為機(jī)考筆試范圍是什么?
華為校招機(jī)考的題型:
編程:軟件測試工程師,算法,OD崗,三道編程題不限語言【C++,Python,Java】
校招:600分 120分鐘,100/200/300
社招:400分 150分鐘, 100/100/200
華為的校招和社招編程考試通常覆蓋了以下主要領(lǐng)域和知識(shí)點(diǎn):
數(shù)據(jù)結(jié)構(gòu)與算法:
基本數(shù)據(jù)結(jié)構(gòu):數(shù)組、鏈表、棧、隊(duì)列、哈希表、集合、樹、圖等。
常見算法:排序(冒泡、選擇、插入、快速、歸并等)、查找(二分查找、廣度優(yōu)先搜索、深度優(yōu)先搜索等)、動(dòng)態(tài)規(guī)劃、貪心算法、回溯法等。
常見問題:字符串操作、鏈表操作、二叉樹遍歷、圖遍歷、最短路徑問題、最大子序列問題、最長公共子序列問題、背包問題等。
計(jì)算機(jī)基礎(chǔ)知識(shí):
操作系統(tǒng):進(jìn)程、線程、內(nèi)存管理、文件系統(tǒng)、進(jìn)程間通信、死鎖等。
計(jì)算機(jī)網(wǎng)絡(luò):OSI 七層模型、TCP/IP 協(xié)議棧、IP 地址、子網(wǎng)劃分、路由協(xié)議、HTTP 協(xié)議、DNS、網(wǎng)絡(luò)安全等。
計(jì)算機(jī)組成原理:數(shù)據(jù)表示、運(yùn)算器、控制器、存儲(chǔ)器、輸入輸出設(shè)備、指令系統(tǒng)、總線、中斷等。
編程語言及編程技巧:
掌握至少一門主流編程語言(如 C、C++、Java、Python 等),了解語言的基本語法、數(shù)據(jù)類型、控制結(jié)構(gòu)、函數(shù)、類等概念。
熟悉常用庫和API的使用,例如:STL(C++)、Java 標(biāo)準(zhǔn)庫、Python 標(biāo)準(zhǔn)庫等。
熟悉編程的基本技巧,例如:調(diào)試、代碼優(yōu)化、內(nèi)存管理、時(shí)間復(fù)雜度和空間復(fù)雜度分析等。
軟件工程及項(xiàng)目管理:
軟件開發(fā)過程、軟件開發(fā)方法論(如敏捷開發(fā))、需求分析、設(shè)計(jì)、編碼、測試、維護(hù)等階段的知識(shí)。
熟悉軟件質(zhì)量保證、軟件測試方法、軟件配置管理等概念。
了解項(xiàng)目管理的基本原理,如項(xiàng)目規(guī)劃、進(jìn)度管理、風(fēng)險(xiǎn)管理、成本管理等。
數(shù)據(jù)庫原理及應(yīng)用:
熟悉關(guān)系型數(shù)據(jù)庫原理,如 MySQL、Oracle、SQL Server 等,了解數(shù)據(jù)庫設(shè)計(jì)、范式、SQL 語言、事務(wù)處理、并發(fā)控制等。
了解 NoSQL 數(shù)據(jù)庫(如 MongoDB、Redis 等)的基本概念和應(yīng)用。
在準(zhǔn)備華為編程考試時(shí),可以針對(duì)以上知識(shí)點(diǎn)進(jìn)行復(fù)習(xí),并通過在線編程平臺(tái)練習(xí)
點(diǎn)主頁可以看更多文章,每天一道編程題,分析思路以及解題代碼。
下面給大家分享一個(gè)題的案例:
給定一個(gè)整數(shù)數(shù)組arr,將這個(gè)數(shù)組中的值進(jìn)行解碼。
解碼規(guī)則:將數(shù)組中的元素轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼,解碼后能拼出“csdnn”就視為解碼成功(每個(gè)元素只能用一次)。解碼成功返回1,否則返回0。
說明:數(shù)組中的數(shù)值均在小寫字母之間(97-122),小寫’a’的ASCII碼是97,小寫‘z’的ASCII碼值是122。
示例1:
輸入:[99,100,101,110,115]
輸出:0
示例2:
輸入:[99,100,110,101,115,110]
輸出:1
二、C代碼實(shí)現(xiàn)
代碼如下:
#include<stdio.h>int decoding(int* arr, int arrLen) {
? ?int a = 0, b = 0, c = 0, d = 0, e=0;
int i=0;
for(;i<arrLen;i++){
? ? ? ?if (arr[i] == 99)
? ? ? ? ? ?a = 1;
? ? ? ?if (arr[i] == 115)
? ? ? ? ? ?b = 1;
? ? ? ?if (arr[i] == 100)
? ? ? ? ? ?c = 1;
? ? ? ?if (arr[i] == 110 && d == 1)
? ? ? ? ? ?e = 1;
? ? ? ?if (arr[i] == 110)
? ? ? ? ? ?d = 1;
? ?}
? ?if (a&&b&&c&&d&&e) {
? ? ? ?return 1;
? ?}
? ?else {
? ? ? ?return 0;
? ?}}
測試示例1:
int main() {
? ?int arr[5] = {99,100,101,110,115};
? ?int arrLen = 5;
? ?int x=decoding(arr, arrLen);
printf("%d",x);
getchar();
return 0;
}
運(yùn)行結(jié)果:
0
測試示例2:
int main() {
? ?int arr[6] = {99,100,110,101,115,110};
? ?int arrLen = 6;
? ?int x=decoding(arr, arrLen);
printf("%d",x);
getchar();
return 0;
}
運(yùn)行結(jié)果:
1
三、C++代碼實(shí)現(xiàn)
代碼如下:
#include<iostream>
using namespace std;
int decoding(int *arr, int arrLen)
{
? ?int a = 0, b = 0, c = 0, d = 0, e = 0;
? ?for (int i = 0; i < arrLen; ++i)
? ?{
? ? ? ?if (arr[i] == 99)
? ? ? ? ? ?a = 1;
? ? ? ?if (arr[i] == 115)
? ? ? ? ? ?b = 1;
? ? ? ?if (arr[i] == 100)
? ? ? ? ? ?c = 1;
? ? ? ?if (arr[i] == 110 && d == 1)
? ? ? ? ? ?e = 1;
? ? ? ?if (arr[i] == 110)
? ? ? ? ? ?d = 1;
? ?}
? ?if (a && b && c && d && e)
? ? ? ?cout << 1 << endl;
? ?else
? ? ? ?cout << 0 << endl;
? ?return 0;
}
測試示例2:
int main() {
? ?int arr[6] = { 99,100,110,101,115,110 };
? ?int arrLen = 6;
? ?decoding(arr, arrLen);
? ?return 0;
}
運(yùn)行結(jié)果:
1
四、Python代碼實(shí)現(xiàn):
def decode(arr):
? ?# 計(jì)算數(shù)組中每個(gè)元素的出現(xiàn)次數(shù)
? ?count = {}
? ?for num in arr:
? ? ? ?if num in count:
? ? ? ? ? ?count[num] += 1
? ? ? ?else:
? ? ? ? ? ?count[num] = 1
? ?# 檢查“csdnn”中的每個(gè)字符的ASCII碼是否在哈希表中,并且出現(xiàn)次數(shù)正確
? ?target = "csdnn"
? ?for ch in target:
? ? ? ?ascii_code = ord(ch)
? ? ? ?if ascii_code not in count or count[ascii_code] == 0:
? ? ? ? ? ?return 0
? ? ? ?count[ascii_code] -= 1
? ?return 1# 測試示例arr1 = [99, 100, 101, 110, 115]arr2 = [99, 100, 110, 101, 115, 110]print(decode(arr1)) ?# 輸出:0print(decode(arr2)) ?# 輸出:1
這個(gè)解決方案的時(shí)間復(fù)雜度是 O(n),其中 n 是數(shù)組的長度。
這個(gè)問題用到的知識(shí)點(diǎn)有:
哈希表:用來存儲(chǔ)數(shù)組中每個(gè)元素的出現(xiàn)次數(shù)。
字符串:我們需要檢查目標(biāo)字符串 "csdnn" 中的每個(gè)字符。
ASCII 碼:我們需要將目標(biāo)字符串中的每個(gè)字符轉(zhuǎn)換為它們對(duì)應(yīng)的 ASCII 碼,以便在哈希表中查找。
解題思路:
遍歷輸入數(shù)組,使用哈希表(Python中的字典)計(jì)算每個(gè)元素的出現(xiàn)次數(shù)。
遍歷目標(biāo)字符串 "csdnn",將每個(gè)字符轉(zhuǎn)換為對(duì)應(yīng)的 ASCII 碼。
檢查當(dāng)前字符的 ASCII 碼是否在哈希表中,并且出現(xiàn)次數(shù)大于 0。如果不滿足這個(gè)條件,則返回 0。
如果當(dāng)前字符的 ASCII 碼在哈希表中,將其出現(xiàn)次數(shù)減 1。
如果所有字符的檢查都通過,返回 1。
以下是我們邀請(qǐng)的華為導(dǎo)師MR.Zhangyu給大家的一些建議:
建立良好的編程基礎(chǔ):掌握至少一門主流編程語言,熟悉基本語法、數(shù)據(jù)類型、控制結(jié)構(gòu)、函數(shù)和類等概念。同時(shí)熟悉常用的庫和API,提高編程效率。
系統(tǒng)地學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法:學(xué)習(xí)常見的數(shù)據(jù)結(jié)構(gòu)(如數(shù)組、鏈表、棧、隊(duì)列、哈希表等)和算法(如排序、查找、動(dòng)態(tài)規(guī)劃、貪心算法等),并掌握它們的應(yīng)用場景。理解時(shí)間復(fù)雜度和空間復(fù)雜度分析,優(yōu)化代碼性能。
多做練習(xí):通過在線編程平臺(tái)(如 LeetCode、??途W(wǎng)等)做題,提高解題速度和技巧。針對(duì)華為的題目特點(diǎn),關(guān)注一些典型問題和模式。
熟悉面試題庫:參考華為歷年編程題,了解題目類型和難度,找到自己的薄弱環(huán)節(jié)進(jìn)行針對(duì)性的學(xué)習(xí)。
學(xué)會(huì)調(diào)試和優(yōu)化:掌握使用調(diào)試工具排查問題的方法,學(xué)會(huì)分析代碼性能,優(yōu)化算法和內(nèi)存管理。
加強(qiáng)計(jì)算機(jī)基礎(chǔ)知識(shí):復(fù)習(xí)操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、計(jì)算機(jī)組成原理等課程,強(qiáng)化對(duì)基本概念的理解。
模擬考試環(huán)境:在實(shí)際考試前,模擬考試環(huán)境,限時(shí)完成編程題,提高自己在壓力下的應(yīng)變能力。
保持良好的心態(tài):面對(duì)編程考試,保持積極的心態(tài),相信自己的實(shí)力,克服緊張情緒,發(fā)揮自己的最佳水平。
合理安排時(shí)間:在準(zhǔn)備過程中,合理安排學(xué)習(xí)時(shí)間,避免臨時(shí)抱佛腳,確保充足的復(fù)習(xí)時(shí)間。
交流與分享:和同學(xué)、朋友一起學(xué)習(xí)和討論問題,分享解題經(jīng)驗(yàn),共同進(jìn)步。