20190807-阿里C++研發工程師-一面


1.自我介紹

2.介紹一下研究生的研究方向

3.一個智力問題

有無限多的水,如何用兩個分別為5L和3L的容器量出4L的水?

4.如何解決哈希沖突?

鏈表法(鏈地址法)

開放地址法

再哈希法

公共溢出區法

5.進程間的幾種通信方式?

進程間通信(IPCInterProcess Communication)是指在不同進程之間傳播或交換信息。

IPC的方式通常有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、SocketStreams等。其中 SocketStreams支持不同主機上的兩個進程IPC

6.進程和線程的區別?多線程如何進行同步?

7.對軟件測試方法有什么了解?如單元測試,集成測試,接口測試

8.大數據集的統計:

一個數據集有1000萬行數據,每行是一個字符串型的URL,每行的數據可能是重復的,讓查找出出現次數最多的1000條URL,top-k問題

思路:由於記錄是可重復的,所以可以用集合來存儲最終要保存的1000條數據; 

可以使用hash函數對每條記錄進行映射,用位向量來存儲哈希值,並在每個位置記錄一個計數器。邏輯上可行,但是復雜度太高,問如何用top-k算法實現?

top-k算法一般是用什么數據結構實現的?

9.編程題

給出一個單向鏈表,輸出該鏈表的倒數第k個結點(未知鏈表長度)

 

 黃婷-0808阿里一面

1、 自我介紹

2、 項目介紹(面試官沒太聽明白)

3、 線程與進程的區別?線程間如何實現共享內存?

4、 智力題

1) 一個桃一毛錢,三個桃核能換一個桃,最多能吃多少個桃?

2) 燃燒一根不均勻的繩子需要一小時,問如何度量出半個小時?

從兩頭同時開始燃燒,燃完即為半小時。

5、 算法題

25個數,找出top 3個數,有一個機器能對至多五個數進行排序,問至少需要排序多少次能找出top 3個數。

1)Top-k算法可用堆排序。

先選擇前三個數構建一個小頂堆,對全部元素遍歷一遍,對每個元素如果大於堆頂元素,則替換堆頂元素,並維護堆的性質,最后堆中的元素就是top3.

2)可用錦標賽法

思路:先把25個元素分成五組,分別排序,然后再對五個每組中的最大元素進行排序,最大值就是整個元素集的最大值,移除該元素然后繼續對五個組中的最大元素進行排序,找到第二大元素,繼續該方法找到第三大元素,這樣一共進行了5+1+1+1=8次排序。(是否六次就可以,剩下的每次只需要一次比較即可)

先把25個數分成ABCDE五組分別進行排序(5),得到:A1 A2 A3 A4 A5; B1 B2 B3 B4 B5; C1 C2 C3 C4 C5; D1 D2 D3 D4 D5; E1 E2 E3 E4 E5; 分別取出各組的最大元素進行排序(1),假設得到:A1 B1 C1 D1 E1,即A1為top 1;只需再對A2 A3 B1 B2 C1這五個數進行一次排序(1),即可得到top 2, top 3;一共需要排序5+1+1=7次。

6、 編程題

一個升序數組,找出給定數字在數組中出現的首末位置

思路:二分查找分別找到首尾出現的位置

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM