騰訊2012.9.23校園招聘筆試題


一、選擇題

1、數據庫表設計最合理的是(A)

A、學生{id,name,age}  學科{id,name}  分數{學生id,學科id,分數}

分析:數據庫里面 一般是 學生,學科,分數 分開放。

2、在數據庫系統中,產生不一致的根本原因是(D)

A.數據存儲量太大    B.沒有嚴格保護數據    C.未對數據進行完整性控制    D.數據冗余

3、15L和27L兩個杯子可以精確地裝(C)L水?

A.  53    B.  25    C. 33    D. 52

分析:15和27 升水 可以裝出 3升水,故:27 + 3 +3 因此33合理。。

4、考慮左遞歸文法 S->Aa|b、 A ->Ac | Sd |e,消除左遞歸后應該為(A)

e為空集
消除左遞歸,即消除 有A->A*的情況
消除做遞歸的一般形式為
U = Ux1 | U x2 |y1|y2
U = y1U' |y2 U'
U' = x1U'|x2U'|e
A = Ac|Aad|bd|e
A =bdA'|A'
A'= cA'|adA'|e

5、下列排序算法中,初始數據集合對排序性能無影響的是()

A.插入排序    B.堆排序    C.冒泡排序    D.快速排序

6、二分查找在一個有序序列中的時間復雜度為(O(logn)

7、路由器工作在網絡模型中的哪一層(網絡層)?

分析:主要作用就是選路和轉發,當然網絡層

8、select foo,count(foo) from pokes where foo>10 group by foo having count(*)>5 order by foo

SQL Select語句完整的執行順序:

1、from子句組裝來自不同數據源的數據;
2、where子句基於指定的條件對記錄行進行篩選;
3、group by子句將數據划分為多個分組;
4、使用聚集函數進行計算;
5、使用having子句篩選分組;
6、計算所有的表達式;
7、使用order by對結果集進行排序。

因此 合理的答案應該為 from --where-- group by-- having --select-- order by

只有select選出了相應的表 才能對其排序,刪除之類的操作

9、深搜如下圖,遍歷順序為()

這道題目 我咋看不出來 那個解呢。
如果深度的話 A B C D E F H I G
廣度的話 A B C D E F G H I

10、UNIX系統中,目錄結構采用(二級目錄結構

11、請問下面的程序一共輸出多少個“-”?

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>  
int main(void)
{
   int i;
   for(i=0; i<2; i++)
  {
       fork(); //復制父進程,調用一次,返回兩次
       printf("-"); //緩沖區數據
   }
   return 0;
}

答案:8

分析:

如果你對fork()的機制比較熟悉的話,這個題並不難,輸出應該是6個“-”,但是,實際上這個程序會很tricky地輸出8個“-”。

要講清這個題,我們首先需要知道fork()系統調用的特性,

  • fork()系統調用是Unix下以自身進程創建子進程的系統調用,一次調用,兩次返回,如果返回是0,則是子進程,如果返回值>0,則是父進程(返回值是子進程的pid),這是眾為周知的。
  • 還有一個很重要的東西是,在fork()的調用處,整個父進程空間會原模原樣地復制到子進程中,包括指令,變量值,程序調用棧,環境變量,緩沖區,等等。

    所以,上面的那個程序為什么會輸入8個“-”,這是因為printf(“-”);語句有buffer,所以,對於上述程序,printf(“-”);把“-”放到了緩存中,並沒有真正的輸出,在fork的時候,緩存被復制到了子進程空間,所以,就多了兩個,就成了8個,而不是6個。

    另外,多說一下,我們知道,Unix下的設備有“塊設備”和“字符設備”的概念,所謂塊設備,就是以一塊一塊的數據存取的設備,字符設備是一次存取一個字符的設備。磁盤、內存都是塊設備,字符設備如鍵盤和串口。塊設備一般都有緩存,而字符設備一般都沒有緩存

對於上面的問題,我們如果修改一下上面的printf的那條語句為:

printf("-\n");

或是

printf("-");
fflush(stdout);

就沒有問題了(就是6個“-”了),因為程序遇到“\n”,或是EOF,或是緩中區滿,或是文件描述符關閉,或是主動flush,或是程序退出,就會把數據刷出緩沖區。需要注意的是,標准輸出是行緩沖,所以遇到“n”的時候會刷出緩沖區,但對於磁盤這個塊設備來說,“n”並不會引起緩沖區刷出的動作,那是全緩沖,你可以使用setvbuf來設置緩沖區大小,或是用fflush刷緩存。

12、接上

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>  
int main(void)
{
   int i;
   for(i=0; i<2; i++)
  {
       fork(); //復制父進程,調用一次,返回兩次
       printf("-\n"); //緩沖區數據
   }
   return 0;
}

答案:6

13、避免死鎖的一個著名算法是(銀行家算法

14、你怎么理解分配延遲(dispatch lantency)的?

分析:分配延遲 一般指進程切換時間 在進程調度哪里,只有A進程切換

15、不是進程的基本狀態的是(D)

A.  阻塞態   B.執行態    C.就緒態   D.完成態

16、任務 1: cpu 3.5分鍾 io 14分鍾
任務 2 : 10分鍾后 cpu 2 分鍾 io 8分鍾
任務3 : 15分鍾后 cpu 1.5分鍾 io 6分鍾

查了資料 io 花費p 則多道程序 cpu占用率 為 1-p^n只有 多個都處於等待才不是cpu時間
因此 分析過程如下
0-10分鍾 cpu時間 10*0.2 = 2
10-15分鍾 cpu利用率為 1-0.8^2 = 0.36 所以這 5分鍾里面 cpu時間 為 0.36*5 =1.8
15 -之后 cpu利用率 1-0.8^3 = 0.488
0-10提供2分鍾cpu時間
10-15 提供1.8分鍾cpu時間
15 -18.7 提供1.8分鍾cpu
18.7-21.5提供 1分鍾cpu
21.5-23.5提供0.4分鍾cpu時間

故,總共花費23.5分鍾

17、在所有非搶占CPU調度算法中,系統平均響應時間最優的是(C)

A.實時調度    B.段任務優先    C.時間片輪轉    D.先來先服務

18、什么是內存抖動(Thrashing)(A)?

A.非常頻繁的換頁活動

19、Belady's Anomaly出現在哪里()?

A內存管理算法    B內存換頁算法    C預防死鎖算法    D磁盤調度算法

分析:Belady異常(Belady Anomaly):有些情況下,頁故障率(缺頁率)可能會隨着所分配的幀數的增加而增加。

20、生產者消費者中不產生死鎖的程序是(A)

。。。。。。

二、填空題

21、將下圖進行拓撲排序得:ABCFD

分析:非常簡單,把握一個原則。。目的節點一定不排在源節點前邊

22、補充完整二分查找:

tail=mid-1;、head = mid;

23、補充完整求連續子數組最大和

nStart = max(nStart+A[i],0);
nAll = max(nAll,nStart);

24、給一二叉樹,寫出先序遍歷順序。。abdefghc

25、最長遞增子序列,得到其長度的最優化時間復雜度為(O(nlogn)),空間復雜度為(O(n)

26、入棧出棧順序問題,卡特蘭數:n=5,那么。。。。C(2n,n)/(n+1)

27、a+b*(c-d)/e-f的逆波蘭式是:abcd-*e/+f-

三、附加題

1、海量數據處理。。獲取T級別條字符串中的出現次數最多的前10個關鍵字

2、設計一個IP統計系統(后台統計系統)

 

 

 

 


免責聲明!

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



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