阿里筆試題記錄(Android客戶端部分)
選擇題
結果應該是選擇 80,8
思路:
- 指針的值都是一個個地址,而地址是用無符號整型值來表示的,也就是unsigned int
。因此一個指針類型變量的大小就是unsigned int
類型的大小。
- 64位系統,一個地址佔用的二進制位數爲64(8字節),32位系統,地址的二進制位數32(4字節)。參考64位操作系統的指針不都是64位嗎
32位cpu和64位cpu,這個位數指的是數據字長,而不是地址字長。兩者沒有必然的數值上的聯繫。處理器字長是指處理器能同時處理的位數。 而處理器的尋址範圍是要看處理器的地址總線的位數,32位地址總線能夠訪問0~2^32-1,也就是2^32個存儲單元(4GB),因此32位cpu的指針大小就是4個字節(32bit)。64位處理器的數據總線爲64位,而地址總線大都是32位(當然也有的64位處理器的數據總線和地址總線都是64位的)。參考文章32位機指針爲什麼是4個字節 64位與32位的區別
char*p[10]
表示聲明一個能夠盛放10個char指針元素的數組,命名爲p;char(*p)[10]
表示聲明一個指針,指向一個長度爲10的char數組。sizeof()
函數,以字節的形式返回其操作數的存儲大小。當操作數是指針時,該函數依賴於編譯器…當操作數是數組類型時候,返回值是數組的總字節數。所以,sizeof(p)
是計算的元素類型爲char指針,元素數量爲10的數組的大小,計算方式爲元素類型佔用內存的字節數*數組元素個數,sizeof(p1)
是計算一個指針的大小。參考文章解析c語言的sizeof- 在編譯器爲
GNU GCC Compiler
下,結果爲40,4。 - 由於題幹說是在64位系統下,所以地址長度應該是8字節。
我的結果是 1111110
思路:
- 數字組合,看題可得出每位數字的選擇應該是0~9,10個數字。
- 從合法的口令的最低位數開始算起,當口令爲1位時,有10種(10^1);口令爲2位,有100種(10^2)…口令爲6位時,有1000000(10^6)種。加起來爲1111110種。
我的答案 以上都不是最優解
思路:
- 路人先選擇袋子,每個袋子的被選中的機率是1/2。
- 在選擇完袋子之後(假設選擇了袋A,裏面有紅球r個,藍球b個),拿到紅球的概率是 r/(r+b)。
- 那麼選擇紅球的概率是 1/2 * (50-r)/(100-r-b) + 1/2 * r/(r+b)
- 當r=49,b=50時,上式爲 1/2 + 49/99 結果都大於選項的結果。
…這個誰會?沒思路看不懂
同樣沒思路啊啊啊,想必不是用窮舉…
我的答案是瞎蒙的..
分析:
- 由題幹知道,可以構建一個有向圖。每個人都抽象爲圖的一個頂點,方向指向爲紙條上的人名。不允許指向自己;圖的每個頂點擁有兩條邊(一條指向自己,一條指向別的頂點)。
強聯通
:在有向圖G中,如果任意兩個不同的頂點相互可達,則稱該有向圖是強連通的。有向圖G的極大強連通子圖稱爲G的強連通分支
。
在圖論中,連通圖
基於連通
的概念。在一個無向圖 G 中,若從頂點vi到頂點vj有路徑相連(當然從vj到vi也一定有路徑),則稱vi和vj是連通的
。如果 G 是有向圖,那麼連接vi和vj的路徑中所有的邊都必須同向
。如果圖中任意兩點都是連通的,那麼圖被稱作連通圖
。
連通分量
:無向圖 G的一個極大連通子圖稱爲 G的一個連通分量
(或連通分支
)。連通圖只有一個連通分量,即其自身;非連通的無向圖有多個連通分量。
- 這麼一判斷,紙上畫個圖,對於選項
可以用雙向鏈表存儲其結構
,感覺應該是錯的,應該是可以用循環單向鏈表存儲其結構。 - 感覺
遍歷的複雜度是O(n)
好像是對的。。
我的答案是 31
思路:
- 就是算最少多少位二進制數可以容納20億。2^10 約做10^3,那麼2^30約爲10^9(10億,當然2^30比10億大,比20億小)。於是31是最小值。
我的答案:FTP
思路(剛好最近在複習計算機網絡,大概看了下5層模型裏面常用的協議):
- DNS
:域名系統,用於域名和ip地址之間的相互映射。在地址欄內輸入天貓的域名,通過dns將域名轉換爲ip地址,屬於應用層協議。
- TCP
:傳輸控制協議,應用層的http
、https
協議都是基於傳輸層的TCP
協議的,屬於運輸層協議。
- IP
:網際協議,通過IP
進行網絡之間設備的互聯,相當於快遞的地址,屬於網絡層協議。
- ARP
:地址解析協議,根據ip地址獲取物理地址(Mac地址
),位於五層模型的數據鏈路層。
- ICMP
:英特網控制報文協議,用於在ip主機、路由器之間傳送控制消息,不用於傳輸數據,但對於用戶數據傳輸有着重要的作用。屬於網絡層協議。
- FTP
:文件傳輸協議,屬於應用層協議,也是一個應用程序。
我的答案是 6
思路:
笨辦法,算… 7-3+4-2+3-3+4-4+7-7=6
求個聰明的辦法。。
我的答案:第三個
對c++不太熟,更別說相關的庫了。
STL = Standard Template Library
:標準模板庫,是一些“容器”的集合。
std:sort
不是穩定排序算法,std:stable_sort
來保證這一點。
…於是出現了對數函數,我還能說什麼?
思路:
- 於是g(x) = ax^2-8x+a-6,包含所有正數。
- 當a=0,-8x-6 可以取得所有正數。
- 當a<0,二次函數圖象開口向下,取不到所有正數。
- 當a>0,二次函數圖象開口向上,當a=8時,有一個零點(x=1/2),當a取10時,沒有零點,區不到所有正數。
- 因此答案爲[0,8]
概率題,這個不大會…
我的答案:a=10,x=2
- 很簡單的三元運算符操作
當時筆試的時候我沒做出來。。不過第一道題琢磨懂了之後再看這個還是不難的。。只不過不知道特地支出在Linux系統下是什麼梗..
- 如果
sizeof
操作數是函數中的數組形參火函數類型的形參,sizeof
給出其指針的大小。參考文章解析c語言的sizeof - 在頭文件
stdint.h
中有如下聲明typedef int int32_t;
在int爲4字節的系統typedef int int32_t
不用變,使用int32_t則爲4字節;在int爲2字節的系統typedef long int32_t
改變int
爲long
,使用int32_t
還是4字節。總的來說,移植到2字系統只改變typedef long int32_t
中的int
,而不需要全部改變int32_t
。 - 所以上面的
64位Linux系統
應該是煙霧彈,答案應該是40,4。
當時學數據結構的時候,哈希表那塊老師沒細講,再加上也沒認真聽(現在回想起來,之前上的課幾乎都後悔沒有認真聽講了…),現在的瞭解都是零零碎碎的…
- 題目不會
- 附上一篇文章哈希表及處理衝突的方法
正好前一段時間複習排序算法的時候,特意重點看了快排。
- 根據分析,一輪排序後,主元的所在位置前的所有元素應該小於主元的值,主元之後的所有元素應該大於主元的值,因此14、17、24都有可能是主元(劃分基數).
- 附上我之前寫的關於快排的博客 快速排序的學習中遇到的問題(java)
當時記錄下來的選擇題就是這些了…附加題是Android相關的主觀題,一共三道。花了四個小時重新看了一遍這些題,感覺收穫還是挺大的。
我一同學是報前端的…參加十場前端的筆試,把筆試中不懂的題都搞懂了,也應該就差不多了hahaha