17 套來自 BAT等著名大廠的面試筆試真題「附答案」

面試筆試經驗技巧篇

想找到一份程序員的工作,沒有技術顯然是不行的,但只有技術也是不夠的。

面試筆試經驗技巧篇主要針對程序員面試筆試中遇到的 13 個常見問題進行深度

解析,並且結合實際情景,給出了一個較為合理的參考答案供讀者學習與應用。

掌握這 13 個問題的應答技巧,對於求職者大有裨益。

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

真 題 篇

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

真題詳解篇

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

對於求職者而言,求職季堪比個“趕場季”,一天少則幾家、十幾家企業入校招聘,多則幾

十家、上百家企業招兵買馬,企業多,選擇自然也多,這固然是一件好事情,但由於招聘企

業實在是太多了,自然會導致另外一個問題的發生——同一天企業扎堆,且都是自己心儀或

欣賞的知名企業。如果不能夠提前掌握企業的宣講時間、地點,則很容易遲到或錯過。但有

時候即使掌握了宣講時間、筆試時間、面試時間,還是有可能錯過,為什麼呢?時間衝突,

人不是神仙,不可能具有分身術,也不可能同一時間做兩件不同的事情,所以,就必須有所

取捨。

到底該如何取捨呢?到底該如何應對這種時間衝突的問題呢?在此,編者將自己的一些

想法經驗與分享出來,以供讀者參考。

1)如果多家心儀企業的校園宣講時間發生衝突(前提是隻宣講、不筆試),此時最好的解決

方法是和同學或朋友商量好,各去一家,然後大家進行信息共享。2)如果多家心儀企業的筆試時間發生衝突,此時只能選擇其一,畢竟企業的筆試時間都是

考慮到了成百上千人的安排,需要提前安排考場、考務人員、閱卷人員等,不可能為了一個

人而輕易改變。所以,最好選擇自己更有興趣的企業參加筆試。

3)如果多家自己心儀企業的面試時間發生衝突,求職者不要輕易放棄。對於面試官而言,

面試任何人都是一樣的,因為面試官誰都不認識。而面試時間也是比較靈活的,一般可以通

過電話協商。求職者可以與相關工作人員(一般是企業的人力資源師)進行溝通,給出不能

參加面試的原因,讓其調整時間。但一般要接到面試通知後的第一時間聯繫相關工作人員變

更時間。

那如果多家企業的校園宣講時間、筆試時間、面試時間發生衝突,到底是去宣講會,還是去

筆試,或是去面試呢?大原則是選擇自己最有興趣的企業。但也要靈活處理,如果僅僅只是

宣講而不涉及筆試,則完全可以不去,可尋求同學或是朋友的幫忙,回來後信息共享即可。

如果可以協調面試時間,那就打電話給相關工作人員,換個不衝突的時間去面試,筆試一般

時間比較固定,需要協調的事情很多,所以調整時間的可能性也不大,此時如果協調得當,

基本能夠保證不放棄任何一個機會。

正如世界上沒有能夠包治百病的藥物一樣,以上這些建議在應用時,很多情況下也做不到全

盤兼顧,當必須進行多選一時,求職者就要對此進行評估了,評估的項目可以包括對企業的

中意程度、獲得錄用通知的概率、去工作的可能性等。評估的結果往往具有很強的參考性,

求職者依據評估結果做出的選擇一般也會比較合理。

真 題 篇

真題篇主要列舉了 17 套來自於著名 IT 企業的面試筆試真題,這些企業是行

業的標杆,代表了行業的最高水準,而它們所出的面試筆試真題不但難易適中,

覆蓋面廣(包括語言基礎、鏈表、算法、海量數據處理等內容),而且具有非常

好的區分度,代表性非常強,是歷年來程序員面試筆試中的必考項或者常考項。

越來越多的中小企業開始從中選取或者加以借鑑,以此作為面試筆試題。

某知名互聯網下載服務提供商軟件工程師

筆試題 一、單選題

1.定義有變量 int i=0; int a=i++; int b=++a; int c=a+b,那麼表達式 a?b:c 的值為( )。

A.0 B.1 C.2 D.3

2.在 32 位計算環境下,定義有語句 int *p=new int[10],那麼 sizeof(p)的值為( )。

A.4 B.10 C.40 D.8

3.在 32 位計算環境下,定義有語句 char str[] = "abcde",那麼 sizeof(str)的值為( )。

A.1 B.4 C.5 D.6

4.定義有函數 int func(int i),它的實現如下:

<code>int func(int i) 
{

if(i > 1)
return i*func(i-1);
else
return 1;
} /<code>

那麼調用 f(5)方法的返回值為( )階乘計算。

A.5 B.15 C.20 D.120

5.以下關於類的描述中,正確的是( )。

A.每個類都有一個無參數的構造函數 B.每個類都有一個拷貝構造函數

C.每個類能有多個構造函數 D.每個類能有多個析構函數

6.用關鍵字 class 定義的類,其成員默認的訪問屬性為( )。

A.private B.protected C.public D.無定義

7.類的成員有三種訪問屬性,分別是 public、protected 和 private,子類能夠訪問的成員是

( )。

A.都能訪問 B.public 和 protected

C.public 和 private D.protected 和 private

8.對一個已經排好序的數組進行查找,時間複雜度為( )。

A.O(n) B.O(logn) C.O(nlogn) D.O(1)

9.有以下二叉樹:

對其進行後序遍歷的結果是( )。

A.丙乙丁甲戊己 B.甲乙丙丁戊己

C.丙丁乙己戊甲 D.丙丁己乙戊甲

10.有以下代碼:A *pa = new A[10];

delete pa;

則類 A 的構造函數和析構函數分別執行了( )次。

A.1,1 B.10,10 C.1,10 D.10,1

11.有以下代碼:

class A { public: ~A(); }; A::~A() { printf("delete A "); }

class B :public A { public: ~B(); }; B::~B() { printf("delete B "); }

那麼執行以下代碼:

A *pa = new B();

delete pa;

程序的輸出結果是( )。

A.delete A B.delete B C.delete B delete A D.delete A delete B

12.文件長度是一個大於 0 的整數,用變量 unsigned file_length 來表示,把文件分成塊,每

塊的長度也是一個大於 0 的整數,用變量 unsigned block_length 來表示,則文件被分成的塊

數為( )。

A.file_length/block_length

B.file_length/block_length+1

C.(file_length+block_length-1)/block_length

D.((file_length-1)/block_length+1

13.定義有整數 int i = 0xFE78DA45,int k = 0xAC3189B2,則 i^k 的值為( )。

A.0x524953f7 B.0xAC308800

C.0xFE79DBF7 D.0X0000001

14.有以下代碼:

<code>class parent 
{
public:
virtual void output();
};
void parent::output()
{
printf("parent");
}
class son : public parent
{
public:
virtual void output();
};
void son::output()
{
printf("son");
}
則以下程序段:
son s;
::memset(&s , 0 , sizeof(s));parent& p = s;
p.output(); /<code>

其執行結果是( )。

A.parent B.son

C.sonparent D.沒有輸出結果,程序運行出錯

15.函數的局部變量所需的存儲空間是在( )分配的。

A.進程的數據段 B.進程的棧上

C.進程的堆上 D.以上都可以

16.以下 STL 的容器存放的數據中,肯定是排好序的是( )。

A.vector B.deque C.list D.map

17.有定義語句:int a[][3]={{1},{3,2},{6,7,8},{9}},那麼 a[2][1]的值是( )。

A.3 B.6 C.2 D.7

18.以下關於頭文件的描述中,正確的是( )。

A.#include,編譯器尋找頭文件時,會從當前編譯的源文件所在的目錄中

B.#include"filename.h",編譯器尋找頭文件時,會從通過編譯選項指定的目錄中找

C.多個源文件同時用到的全局整數變量,它的聲明和定義都放在頭文件中,是好的編

程習慣

D.在大型項目開發中,把所有自定義的數據類型、全局變量、函數聲明都放在一個頭

文件中,各個源文件都只需要包含這個頭文件即可,省去了要寫很多#include 語句的麻煩,

是好的編程習慣

19.某棵完全二叉樹上有 699 個結點,則該二叉樹的葉子結點數為( )。

A.349 B.350 C.188 D.187

20.一個指向字符串的指針 char *p_str,要把字符串中第四個字符的值改為'a',正確的做法

是( )。

A.p_str[3]='a' B.*(ptr+3)= 'a' C.p_str[4]= 'a' D.*(ptr+4)= 'a'

21.下列關於內聯函數的描述中,正確的是( )。

A.類的私有成員函數不能作為內聯函數

B.在所有類說明中,內部定義的成員函數都是內聯函數

C.類的保護成員函數不能作為內聯函數

D.使用內聯函數的地方會在運行階段用內聯函數體進行替換

二、多選題

1.已知一段文本有 1382 個字符,使用了 1382 個字節進行存儲,這段文本全部是由 a、b、

c、d、e 這 5 個字符組成,其中,字符 a 出現了 354 次,字符 b 出現了 483 次,字符 c 出現

了 227 次,字符 d 出現了 96 次,字符 e 出現了 232 次,如果對這 5 個字符使用赫夫曼

(Huffman)算法進行編碼,則以下說法中,正確的是( )。

A.使用赫夫曼算法編碼後,用編碼值來存儲這段文本將花費最少的存儲空間

B.使用赫夫曼算法進行編碼,a、b、c、d、e 這 5 個字符對應的編碼值是唯一確定的

C.使用赫夫曼算法進行編碼,a、b、c、d、e 這 5 個字符對應的編碼值可以有多套,但

每個字符編碼的位(bit)數是確定的

D.字符 b 的赫夫曼編碼值位數應該最短,字符 d 的赫夫曼編碼值位數應該最長

2.已知 double d = 3.2,int n = 3,那麼下列表達式中,不合法的是( )。

A.d 2 B.d/n C.!d && (n-3) D.(d-0.2)|n

3.下列對於循環知識的描述中,正確的是( )。 A.while 循環語句的循環體至少執行一次

B.do-while 循環可以寫成 while 循環的格式

C.continue 語句可以出現在各種循環體中

D.break 語句不可以出現在循環體內

4.下列模板聲明中,非法的是( )。

A.templateclass C1;

B.templateclass C2;

C.templateclass C3{};

D.templateclass C4{};

5.在使用瀏覽器打開一個網頁的過程中,瀏覽器會使用的網絡協議包括( )。

A.DNS B.TCP C.HTTP D.Telnet

6.下列選項中,屬於構造散列函數的方法是( )。

A.直接定址法 B.數字分析法 C.除留餘數法 D.平方取中法

7.拷貝構造函數的特點是( )。

A.該函數名同類名,也是一種構造函數,該函數返回自身引用

B.該函數只有一個參數,必須是對某個對象的引用

C.每個類都必須有一個拷貝初始化構造函數,如果類中沒有說明拷貝構造函數,那麼編

譯器系統會自動生成一個默認的拷貝構造函數,作為該類的保護成員

D.拷貝初始化構造函數的作用是將一個已知對象的數據成員值複製給正在創建的另一

個同類的對象

8.下列關於虛函數的描述中,正確的是( )。

A.在構造函數中調用類自己的虛函數,虛函數的動態綁定機制還會生效

B.在析構函數中調用類自己的虛函數,虛函數的動態綁定機制還會生效

C.靜態函數不可以是虛函數

9.下列對函數 double add(int a , int b)進行重載的描述中,正確的是( )。

A.int add(int a ,int b ,int c) B.int add(double a , double b)

C.double add(double a , double b) D.int add(int a , int b)

三、填空題

1.以下代碼用於計算 100 以內的素數的個數,請把相應的空填上(空 1~空 4)。

<code>struct prime_number_node 
{

int prime_number;
prime_number_node* next;
};
int calc_prime_number()
{
prime_number_node* list_head = new prime_number_node();
list_head->next = NULL;
list_head->prime_number = 2;
prime_number_node* list_tail = list_head;
for (int number = 3; number < 100; number++)
{
int remainder;prime_number_node* cur_node_ptr = list_head;
while (cur_node_ptr != NULL)
{
remainder = number%cur_node_ptr->prime_number;
if (remainder == 0)
{
//1
}
else
{
//2
}
}
if (remainder != 0)
{
prime_number_node* new_node_ptr = new prime_number_node();
new_node_ptr->prime_number = number;
new_node_ptr->next = NULL;
list_tail->next = new_node_ptr;
//3
}
}
int result = 0;
while (list_head != NULL)
{
result++;
prime_number_node* temp_ptr = list_head;
list_head = list_head->next;
//4
}
return result;
} /<code>

2.已知集合 A 和集合 B 的元素分別用不含頭結點的單鏈表存儲,函數 difference()用於求解

集合 A 與集合 B 的差集,運算結果保存在集合 A 的單鏈表中。例如,若集合

A={5,10,20,15,25,30},集合 B={5,15,35,25},完成計算後 A={10,20,30}。

鏈表結點的結構類型定義如下:

<code>struct node 
{
int elem;
node* next;
};
void difference(node** LA, node* LB)
{
node *pa, *pb, *pre, *q;pre = NULL;
; //1
while (pa)
{
pb = LB;
while () //2
pb = pb->next;
if () //3
{
if (!pre)
*LA = ; //4
else
= pa->next; //5
q = pa;
pa = pa->next;
free(q);
}
else
{
; //6
pa = pa->next;
}
}
} /<code>

1、2、3、4、5、6 這六行代碼依次為( )。

真題 2 某知名監控產品供應商和解決方案服務商

軟件工程師筆試題

一、單選題

1.靜態局部變量存儲在進程的( )。

A.棧區 B.寄存器區 C.代碼區 D.全局區

2.在 C 語言中,有數組定義如下:char array[]="China",則數組 array[]所佔用的空間為( )。

A.4 個字節 B.5 個字節 C.6 個字節 D.7 個字節

3.執行 C 語言代碼“int a=1; int b=0; int c=0; int d=(++a)*(c=1);”後,變量 a、b、c、d 的值分

別為( )。

A.2,0,1,2 B.1,0,1,1 C.2,0,1,1 D.2,0,0,2

4.有一個變量 int a=0,兩個線程同時對其進行+1 操作,每個線程加 100 次,不加鎖,最後

變量 a 的值是( )。

A.200 B.≤200 C.≥200 D.都有可能

5.HTTPS 採用( )實現安全網站訪問。

A.SSL B.IPsec C.PGP D.SET

6.某主機的 IP 地址為 202.117.131.12/20,其子網掩碼是( )。

A.255.255.248.0 B.255.255.240.0

C.255.255.252.0 D.255.255.255.4

7.下列選項中,不屬於網絡安全控制技術的是( )。 A.防火牆技術 B.訪問控制技術

C.入侵檢測技術 D.差錯控制技術

8.多媒體技術是指以計算機為平臺綜合處理多種媒體信息,其中“媒體”主要指的是( )。

A.文字和圖像 B.各種信息的編碼

C.音頻和視頻 D.承載信息的載體

9.一幅彩色圖像(RGB),分辨率為 256×512,每一種顏色用 8 bit 表示,則該彩色圖像為

( )bit。

A.256×512×8 B.256×512×3×8 C.256×512×3/8 D.256×512×3

10. 計算機通過傳聲器接口(MIC)收到的信號是( )。

A.音頻數字信號 B.音頻模擬信號

C.量化信號 D.採樣信號

11.當在 CPU 內存之間進行地址轉換時,( )將地址從虛擬(邏輯)地址空間映射到物

理地址空間。

A.TCB B.MMU C.CACHE D.DMA

12.RS485 最少有( )根數據信息號。

A.2 B.6 C.8 D.16

13.程序開發中,編譯器的主要作用是( )。

A.代碼編輯功能 B.檢查代碼規範性

C.分析代碼中的問題 D.完成源語言與目標語言的轉換

14.下列關於實時操作系統(RTOS)的任務調度器描述中,正確的是( )。

A.任務之間的公平性是最重要的調度目標

B.大多數 RTOS 調度算法都是可搶佔式(可剝奪式)的

C.RTOS 調度器都採用了基於時間片輪轉的調度算法

D.RTOS 調度算法只是一種靜態優先級調度算法

二、填空題

1.當 C++語言調用 C 語言庫時,需要添加( )。

2.sprintf 函數和 snprintf 函數的區別是( )。

3.定義有 a=1, b=2, c=3, d=4,那麼表達式 a的值是( )。

4.有如下代碼:

<code>#include 
int main()
{
unsigned int a = 6;
int b = -20;
(a + b > 6) ? printf(">6") : printf("<=6");
return 0;
} /<code>

則這段代碼的輸出結果是( )。

真題 3 某知名搜索引擎提供商軟件工程師筆試題

一、簡答題

1.進程和線程的區別是什麼?

2.存儲過程是什麼?它有哪些優點?

3.static 關鍵字的作用是什麼?static 全局變量與普通全局變量的區別是什麼?static 局部變

量與普通變量的區別是什麼?static 函數與普通函數的區別是什麼?

二、算法與程序設計題

1.實現內存拷貝函數 memcpy。

2.在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞

增的順序排序。請實現一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含

有該整數。

例如,下面的二維數組就是符合這種約束條件的。如果在這個數組中查找數字 7,則返回

true;如果查找數字 5,由於數組中不含有該數字,則返回 false。

1 2 8 9

2 4 9 12

4 7 10 13

6 8 11 15

3.定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數。在該棧

中,調用 min、push 及 pop 的時間複雜度都是 O(1)。

三、系統設計題

微博中的 url 往往很長,發送前要轉化為 tinyurl。

1)url 如何轉為 tinyurl 編碼?

2)如果用戶輸入一個已經轉換過的 url,如何快速定位到已經生成了的 tinyurl?

3)如果數據為 10 億條,需要 10 個 tinyurl 服務器,那麼如何設計?

真題詳解篇

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

17 套來自 BAT等著名大廠的面試筆試真題「附答案」

需要這份面試筆試電子書的朋友們可以幫忙轉發一下本文,然後關注我,私信回覆我“電子書”即可獲取到以上“書籍資料電子版”的領取方式!“資料”立即獲取


分享到:


相關文章: