2014 阿里巴巴系統工程師筆試題 北京

第一部分 單選題(前10題,每題2分;後10題,每題3分;共50分。選對得滿分,選錯倒扣一分,不選得0分。)
  字符串”alibaba”有 D 個不同的排列。
  A. 5040 B. 840 C. 14 D.420
420種 C73*C42*A22
  下列一段C++代碼的輸出是 A 。
  class Base
  {
  public:
  int Bar(char x) {return (int)(x);}
  virtual int Bar(int x) {return(2*x);}
  };
  class Derived :public Base
  {
  public:
  int Bar(char x) {return(int)(-x);}
  int Bar(int x) {return (x/2);}
  };
  void main(void)
  {
  Derived Obj;
  Base*pObj=&Obj;
  printf(“%d,”,pObj->Bar((char)(100)));
  printf(“%d,”,pObj->Bar(100));
  }
  A. 100,50 B. -100,200 C. -100,50 D. 100,200
  有一個二維數組A[10][5],每個數據元素佔1個字節,且A[0][0]的存儲地址是1000,則A[i][j]的地址是 C 。
  A. 1000+10i+j B. 1000+i+j C. 1000+5i+j D. 1000+10i+5j
  下列 C 不是線性表?
  A. 隊列 B. 棧 C. 關聯數組 D. 鏈表
  5. 下列有關在一個處理器(processor)上跑兩個線程(thread)的說法中,正確的是 B 。
  A. 一個線程可以改變另一個線程的程序計數器(program counter)
  B. 一個線程既不能讀也不能寫另一個線程的棧(stack)
  C. 一個線程可以讀寫另一個線程的寄存器(register)
  D. 以上都不對
  關於雙鏈表的搜索給定元素操作的說法正確的是 B 。
  A. 從兩個方向搜索雙鏈表,比從一個方向搜索雙鏈表的速度慢
  B. 從兩個方向搜索雙鏈表,比從一個方向搜索雙鏈表的方差要小
  C. 從兩個方向搜索雙鏈表,比從一個方向搜索雙鏈錶速度要快
  D. 以上說法都不正確
  對n個數字進行排序,期中兩兩不同的數字的個數爲k,n遠遠大於k,而n的取值區間長度超過了內存的大小,時間複雜度最小可以是 A  。
  A. O(nlogk) B. O(nk) C. O(n) D. O(nlogn)
  一臺指針式鐘錶的時鐘和分鐘的指向重合的時間間隔是 B 。
  A. 720/13分鐘 B. 720/11分鐘 C. 60分鐘 D. 以上都不正確
  兩個大小不同的杯子R和S,R中裝着一定量的小米,S中裝着一定量的沙子。一名兒童用勺子從S中取出一勺沙子放入R,與小米混合之後,再從R中取出等體積的一勺混合物放入S。假定兩勺物品的體積相等,且R和S都沒有發生溢出。則以下說法中正確的是 C。
  A. R中的沙子和S中的小米一樣多
  B. R中的沙子比S中的小米少
  C. R中的沙子比S中的小米多
  D. 無法判斷
  假定拋出的硬幣落地之後正反兩面出現的概率分別是1/2。那麼拋10次和100次硬幣(分別稱爲T10和T100)相比,以下說法正確的是 D 。
  A. T100出現一半的正面比T10出現一半正面的概率更大
  B. T100前3次都是正面的概率比T10前3次都是正面的可能性大
  C. T100正面次數的方差小於T10出現正面次數的方差
  D. T100出現正面的比例比T10出現正面的比例在(0.45,0.55)區間中的可能性更大。
  某福彩機構推出了一款簡單的猜謎遊戲:遊戲玩家只需交納n元,賭紅或者黑。如果開獎結果與遊戲玩家所賭的顏色相同,則玩家除得到交納的n元賭資外,還可以獲得n元作爲獎勵;否則該玩家失去交納的n元賭資。爲了遊戲公平,開獎是紅或者黑的概率均爲1/2。某遊戲玩家想出了一個玩法:開始出100元參與賭博,然後按照如下規則進行遊戲,如果輸掉,並且賭資充足,就把已經輸了的總錢數翻倍作爲賭資進行賭博;否則,就停止該遊戲。假定該機構賭資無限,而玩家的賭資比較有限,以下關於該玩家退出遊戲時的情形的評論中合理的是: D 。
  A. 該玩家的策略可以保證遊戲結束時贏錢數的期望爲正數
  B. 該福彩機構長期會賠錢
  C. 該玩家會有一定概率在遊戲結束時輸錢,但輸得不多
  D. 該玩家贏的可能性比輸的可能性大
  有16瓶水,其中只有一瓶水有毒,小白鼠喝一滴之後一小時會死。請問最少用  只小白鼠,在1小時內一定可以找出至少14瓶無毒的水?B
  A. 1只
  B. 3只
  C. 4只
  D. 16只
  有一臺4核CPU的服務器,上面運行着1種在線服務。如果該在線服務處理一個請求在非獨佔IO上的等待時間和CPU計算上消耗的時間比爲2:1,假定IO帶寬充足,那麼至少開 C 個線程能最大化性能地使用該服務器?
  A. 4 B. 8 C. 12 D. 線程越多越好
  有一種語言稱爲lua,裏面的數字只有一種類型(number),實際上是雙精度浮點數。沒有各種位數的整數,如32位、64位整數等。那麼關於該語言的說法錯誤的是 B 。
  A. 該語言可以用number類型的變量作爲數組下標
  B. 該語言可以表示任意32位數字整數的數字ID
  C. 該語言無法實現32位數字整數的按位與、或、異或運算
  D. 該語言可以正常進行雙精度浮點數運算
  一個在線服務通常需要讀取存儲着海量數據的數據庫。爲了提高服務的處理速度,通常需要加cache(緩存)。以下場景中不合適使用cache的是 A 。
  A. 數據庫中每條數據被訪問到的概率近似相等,且獨立
  B. 使用了多線程機制的服務
  C. 單條數據尺寸大小的數據
  D. 有着大量訪問的服務
  如下一段神奇的代碼實現的功能是 C 。
  int miracle(unsigned int n)
  {
  int m=n==0 ? 0:1;
  while (n=(n&(n-1)))
  {
  m++;
  }
  return m;
  }
  A. n的二進制表示中”0″的個數
  B. n的二進制表示的倒序值
  C. n的二進制表示中”1″的個數
  D. 一個均勻的哈希函數
  有1023個兩兩不同的整數,取值範圍是1到1024,其按位異或的結果的取值範圍是 B。
  A. 0到1024
  B. 0,1025到2047
  C. 1到1024
  D. 2到2048之前的全部偶數
  七夕節n戀人(n>=2)圍成一圈舉行篝火晚會。晚會的規則是:男女相同,且每對戀人處在相鄰的位置上。請問有多少種不同的圈子C
  A. (2n-1)!/2 B. 2(n-1)! C. 2n(n-1)! D. (2n)!
  星期天有10個朋友約好一起郊遊,在車站的集合時間是早晨9:50:00到10:00:00。已知每個人到達車站的時間是9:50:00到10:00:00內的均勻分佈,且彼此獨立。那麼最後一人最可能到達的時間是D  (精確到分鐘,向下取整)。
  A. 各個分鐘概率相等 B. 9:57 C. 9:58 D. 9:59
  已知某國家每年出生人口數每年遞增3%,且男女比例爲1:1。如果每個男性都希望找比自己小0.5到 3歲的女性結婚,且每個女性都希望找比自己大0.5到3歲的男性結婚,適婚年齡爲20到30歲,那麼對該國適婚男女婚配方面的說法正確的是 B 。
  A. 男女會比較均衡
  B. 會產生較多剩女
  C. 會產生較多剩男
  D. 信息不足,無法判斷
  第二部分 不定向選項(4題,每題5分。每題有1-5個正確選項,完全正確計5分,漏選計2分,不選計0分,多選、錯選計-2分)
  要提高多線程程序的效率,對鎖的控制策略非常重要。一種策略是在鎖的個數不太多、控制結構不太複雜的情況下,儘可能降低加鎖的粒度;另一種策略是在合適的條件下取消用鎖。以下情況中不可能取消鎖的是 BE 。
  A. 多線程寫一個共同的數據結構,且寫操作是原子操作
  B. 多線程寫一個共同的數據結構,且寫操作不是原子操作
  C. 多線程讀一個共同的數據結構,且讀操作不是原子操作
  D. 一個線程寫,多個線程讀一個共同的數據結構,寫操作是原子操作,讀操作不是原子操作
  E. 一個線程寫、多個線程讀一個共同的數據結構,寫操作不是原子操作,讀操作是原子操作
  一顆非空的二叉樹的先序遍歷序列與後序遍歷序列正好相反,則該二叉樹可能是 ABD 。
  A. 所有的結點均無右孩子
  B. 只有一個葉子結點
  C. 是一顆二叉樹索樹
  D. 所有的結點均無左孩子
  以下數字在表示爲double(8字節的雙精度浮點數)時存在舍入誤差的有 ABC 。
  A.B. 10的30次方 C. 0.1 D. 0.5 E. 100
  給定如下C程序:
  typedef struct node_s{
  int item;
  struct node_s* next;
  }node_t;
  void reverse_list(node_t* head)
  {
  node_t* n=head;
  head=NULL;
  while(n){
  }
  return head;
  }
  以下哪項能實現該函數的功能 B
  A. node_t* m=head; head=n; head->next=m; n=n->next;
  B. node_t* m=n; n=n->next; m->next=head; head=m;
  C. node_t* m=n->next; n->next=head; n=m; head=n;
  D. head=n->next; head->next=n; n=n->next
 第三部分 填空與問答(5題,共30分)
  (4分)某無聊的程序員在玩Windows上的記事本程序,不用鼠標,每次可以按以下鍵或組合之一:A、Ctrl+A(全選)、Ctrl+C(拷貝)、Ctrl+V(粘貼),那麼在10次按鍵只能可以製造的最長文本長度爲  。
  (4分)若初始序列爲gbfcdae,那麼只會少需要
  次兩兩交換,才能使該序列變爲abcdefg。任給一個自由a–g這7個字母組成的排列,最壞的情況下需要至少
  次兩兩交換,才能使序列變爲abcdefg。

  27. (5分)在某惡劣天氣,若地圖上S點到T點的交通網如下圖所示,其中每條邊表示一條雙向通道,其上的數字爲該通路可通行的概率,且該概率兩兩獨立。求S到T的可通行概率  。


SAB 通過的機率爲 (1/2) * (1/3) = (1/6)
SAB 不通過的機率爲 1 - (1/6) = (5/6)

SB 不通過的機率爲 1 - (1/2) = (1/2)

因此,SB + AB 不通過的機率爲 (5/6) * (1/2) = (5/12)
SB + SAB 通過的機率爲 1 - (5/12) = (7/12)

S(B+AB)T 通過的機率爲 (7/12) * (1/2) = (7/24)
S(B+AB)T 不通過的機率爲 1 - (7/24) = (17/24)

SCT 通過的機率爲 (1/2) * (1/3) = (1/6)
SCT 不通過的機率爲 1 - (1/6) = (5/6)

S(B+AB)T + SCT 不通過的機率爲 (17/24) * (5/6) = (85/144)
S(B+AB)T + SCT 通過的機率爲 1 - (85/144) = (59/144)


  (8分)6度分離假說的含義是,世界上任何兩個人要麼是朋友,要麼是朋友的朋友,或者更高階的朋友的朋友(如朋友的朋友的朋友),改論斷中”朋友”一詞出現的次數爲兩人之間的距離,那麼該距離小於等於6。如果某SNS(如QQ、旺旺等),有100萬用戶,其人際關係網咯符合以下兩個假設:
  朋友關係是一種對稱關係(如A和B是朋友,那麼B和A也是朋友)
  符合2度分離假說
  第i個人擁有的朋友的個數爲ni ,所有ni 中最大值爲n
  試估算n的最小值  。
  (9分)某電子商務網站進行A、B兩種推薦算法的效果對比測試,對用戶的訪問請求按照1:9的比例隨機分配給A和B兩種算法處理。產生推薦結果後,按照兩種指標對比兩種算法產生的結果好壞:第一種指標是CTRPV=該算法下用戶的點擊展現次數/該算法下所有的展現次數,第二種指標是CTRUV=該算法下有點擊的用戶數/該算法下所有的用戶數。假定每個用戶會對該推薦服務2次訪問,如果A和B的CTRPV持平(假設爲0.01)。那麼CTRUV哪個大,大的比小的大百分之多少  。
  第四部分:JAVA附加題(注,阿里有大量JAVA研發工程師需求;選作以下題目有機會增加該方向面試機會)
  1.以下每個線程輸出的結果是什麼?(不用關注輸出的順序,只需寫出輸出的結果集即可)
 public class Main {

public static void main(String[] args){
// test1
Thread t1 = new Thread(){
@Override
public void run(){
try{
int i=0;
while(i++<100000000){
// nothing
}
System.out.println("A1");
}catch(Exception e){
System.out.println("B1");
}
};
};
t1.start();
t1.interrupt();
// test2
Thread t2 = new Thread(){
public void run(){
try{
Thread.sleep(5000);
System.out.println("A2");
}catch(Exception e){
System.out.println("B2");
}
};
};
t2.start();
// t2.interrupt(); //不確定是否有這句話
// test3
Thread t3 = new Thread(){
public void run(){
try{
Thread.sleep(50000);
System.out.println("A3");
}catch(Exception e){
System.out.println("B3");
}
};
};
t3.start();
t3.interrupt();
// test4
Thread t4 = new Thread(){
public void run(){
try{
Thread.sleep(50000);
System.out.println("A4");
}catch(Exception e){
System.out.println("B4");
}
};
};
t4.start();
t4.interrupt();
// test5
try{
t4.start();
System.out.println("A5");
}catch(Exception e)
{
System.out.println("B5");
}
}
}
B3
B4
B5
A1
A2

  一個10億條記錄的文本文件,已按照關鍵字排好字存儲,請設計方法,可以快速的從文件中查找指字關鍵字的記錄。


  【系統工程師】 附加題


  在互聯網時代系統的穩定性要求越來越高,爲了提升系統的穩定性,高可用技術被廣泛運用,請列舉至少4中相關的技術解決硬件、系統或網絡等層面的單點問題。
  請描述一下TCP建立連接三次握手的過程。
  3.搜索引擎是很常用的web應用。大部分搜索引擎需要設計一個抓蟲(Crawler),從很多網站抓去網頁,分析數據,供搜索引擎使用。
  設想你來做一個搜索引擎的爬蟲,需要抓去約一百萬家網站的網頁內容。
  1) 請畫出一個抓蟲系統的架構圖。
  2) 重點說明你的爬蟲需要如何優化來提升性能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章