蘑菇街2017校園招聘筆試題


1

1 設順序循環隊列Q[0: M-1]的頭指針和尾指針分別為F和R.頭指針F總是指向隊頭元素的前一位置.尾指針R總是指向隊尾元素的當前位置.則該循環隊列中的元素個數為() 2   A、 (R-F+M)%M
3   B、  R-F
4   C、  (F-R+M)%M
5   D、  F-R

正確答案: A 

 

 

2、算法的時間復雜度取決於()
A 待處理數據的狀態
B 處理器的速度
C 問題的規模
D 程序所占空間

正確答案: A C   

解析:

比如說快排,初始數據的順序影響快排的時間復雜度。

 

3、

1 int f(int x)
2     return ((x>2) ? x*f(x-1) : 3);
3 }
4 int i;
5 I=f(f(2)):
執行如上函數后. I的值為()
A  30
B  無限遞歸
C  9
D  2160

正確答案: C   

 

4、有關操作系統常用調度算法敘述正確的是()

A、FCFS調度算法不利於短作業
B、SPF調度算法不利於短作業
C、HRN調度算法不利於長作業
D、HRN調度算法既利於短作業又有利於長作業

正確答案: A D 

常見的調度算法:
1.先來先服務調度算法(FCFS):就是按照各個作業進入系統的自然次序來調度作業。這種調度算法的優點是實現簡單,公平。其缺點是沒有考慮到系統中各種資源的綜合使用情況,往往使短作業的用戶不滿意,因為短作業等待處理的時間可能比實際運行時間長得多。 因此選A;

2.短作業優先調度算法 (SPF): 就是優先調度並處理短作業,所謂短是指作業的運行時間短。而在作業未投入運行時,並不能知道它實際的運行時間的長短,因此需要用戶在提交作業時同時提交作業運行時間的估計值。  

3.最高響應比優先算法(HRN):FCFS可能造成短作業用戶不滿,SPF可能使得長作業用戶不滿,於是提出HRN,選擇響應比最高的作業運行。響應比=1+作業等待時間/作業處理時間。 因此選D;

4. 基於優先數調度算法(HPF):每一個作業規定一個表示該作業優先級別的整數,當需要將新的作業由輸入井調入內存處理時,優先選擇優先數最高的作業。

 

5、promise的狀態有()

 

A 、Unfulfilled
B 、Pause
C 、Resolved
D 、Rejected

 

正確答案: C D 

答案:

  • 一個promise可能有三種狀態:等待(pending)、已完成(fulfilled)、已拒絕(rejected)
  • 一個promise的狀態只可能從“等待”轉到“完成”態或者“拒絕”態,不能逆向轉換,同時“完成”態和“拒絕”態不能相互轉換
  • promise必須實現then方法(可以說,then就是promise的核心),而且then必須返回一個promise,同一個promise的then可以調用多次,並且回調的執行順序跟它們被定義時的順序一致
  • then方法接受兩個參數,第一個參數是成功時的回調,在promise由“等待”態轉換到“完成”態時調用,另一個是失敗時的回調,在promise由“等待”態轉換到“拒絕”態時調用。同時,then可以接受另一個promise傳入,也接受一個“類then”的對象或方法,即thenable對象。

 

6、下面的哪個選項是自底向上分析方法()

 

遞歸下降分析法
預測分析法
LL( 1)分析法
算符優先分析法

 

正確答案: D

解析:

自底向上分析法(bottom-up analysis method )一種語言形式分析算法.是根據形式文法的重寫規則,自葉開始逐級向上歸約,直到構造出表示句子結構的整個推導樹為止的一種語言形式分析算法.
遞歸向分析法為每一個非終結符建立相應的子程序,然后模擬語法樹自動向下推倒,在推倒過程中遇到終結符則檢查是否匹配,遇到非終結符則調用相應的子程序處理。
預測分析法是根據客觀對象的已知信息而對事物在將來的某些特征、發展狀況的一種估計、測算活動。運用各種定性和定量的分析理論與方法,對事物未來發展的趨勢和水平進行判斷和推測的一種活動。
LL(1)分析使用顯式棧而不是 遞歸調用 來完成分析。以標准方式表示這個棧非常有用,這樣LL(1)分析程序的動作就可以快捷地顯現出來。
算符優先分析法是一種簡單直觀、特別方便於表達式分析,易於手式實現的方法。算符優先法只考慮算符(廣義為終結符號)之間的優先關系,它是一種自底向上的歸約過程,但這種歸約未必嚴格按照句柄歸約。它是一種不 規范歸約 法。
 
 
 
7、有關曼徹斯特編碼敘述正確的是()
在信號位開始時不改變信號極性,表示輯”1”

模擬數據轉換為數字信號

在信號位中電平從高到低跳變表示0

數字數據轉換為數字信號

正確答案: B C

 

8、關於中間件特點的描述.不正確的是()

A 中間件運行於客戶機/服務器的操作系統內核中,提高內核運行效率

B 中間件應支持標准的協議和接口

C 中間件可運行於多種硬件和操作系統平台上

D 跨越網絡,硬件,操作系統平台的應用或服務可通過中間件透明交互

正確答案: A 

解析:

中間件位於操作系統之上,應用軟件之下,而不是操作系統內核中

 

 

9、下面關於promise的說法中,錯誤的是()
A、resolve()和reject都是直接生成一個進入相應狀態的promise對象,其參數就是進入相應狀態時傳遞過去的參數,可以在完成回調的參數中得到
B 、Promise.resolve(value),Promise.reject(reason)是Promise構造器上還直接提供了一組靜態方法
C、在調用then方法或者catch方法時都是異步進行的,但是執行速度比較快
D、Promise構造器的prototype上還有兩個方法,分別是then和catch。這兩個方法的參數也是回調函數,這些函數會在Promise實例進入不同狀態后被調用。Then對應到resolve,catch對應到reject

正確答案: D   

 

10、KMP算法下,長為n的字符串中匹配長度為m的子串的復雜度為()

A 、O(N)
B、O(M+N)
C、O(M+LOGM)
D、O(N+LOGM)

正確答案: B

解析:

kmp模式匹配
 1  private static int Bf(int[] a, int[] b) {
 2 int i =0,j=0;
 3 while(i<a.length&&j<b.length){
 4 if(a[i]==b[j]){
 5 i++;
 6 j++;
 7 }else{
 8 i = i - j+1;
 9 j=0;
10 }
11 }
12 if(j>=b.length){
13 return i - b.length+1;
14 }else{
15 return 0;
16 }
17 }
最好情況:每趟匹配不成功都是在第一個字符,即每趟都只需匹配一次就知道該趟是否匹配。O(m+n)
最壞情況:每趟匹配不成功都是在最后一個字符。時間復雜度O(m*n)
 
11、通過構建有序序列,對於未排序數據,在已排序序列中從后向前掃描,找到相應的位置並插入的排序算法是()
A、歸並排序
B、選擇排序
C、希爾排序
D、插入排序

正確答案: D 

解析:

歸並操作(merge),也叫歸並算法,指的是將兩個順序序列合並成一個順序序列的方法。
如 設有數列{6,202,100,301,38,8,1}
初始狀態:6,202,100,301,38,8,1
第一次歸並后:{6,202},{100,301},{8,38},{1},比較次數:3;
第二次歸並后:{6,100,202,301},{1,8,38},比較次數:4;
第三次歸並后:{1,6,8,38,100,202,301},比較次數:4;
總的比較次數為:3+4+4=11,;
逆序數為14;
簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
以下為簡單選擇排序的存儲狀態,其中大括號內為無序區,大括號外為有序序列:
初始序列:{ 49 27 65 97 76 12 38 }
第1趟:12與49交換:12 { 27 65 97 76 49 38 }
第2趟:27不動 :12 27 { 65 97 76 49 38 }
第3趟:65與38交換:12 27 38 { 97 76 65 49}
第4趟:97與49交換:12 27 38 49 { 97 76 65 }
第5趟:76與65交換:12 27 38 49 65 { 97 76 }
第6趟:97與76交換:12 27 38 49 65 76 97 完成
 
 
12、執行chmod 644 mm.txt后的權限是()
A、-rw-r--r--
B、rw-r--r--
C、-rwxr--r--
D、rwxr- -rw-

正確答案: A 

 

13、下列說法正確的是()

 

A、二維以上的數組其實是一種特殊的廣義表
B、數組一旦建立,結構的元素個數和元素間的關系就不再變化
C、數組是一種線性結構,因此只能用來存儲線性表
D、數組采用順序存儲方式表示

 

正確答案: A B D 

 

14、為了提高數據庫的性能,需要針對系統設計基准測試進行壓力測試,那么進行壓力而是時需要考慮以下哪些指標()

A、可擴展性
B、響應時間
C、開發性
D、吞吐量

正確答案: A B C D

 

15、假如在MySQL中有存儲過程proc1(員工編號,月份)用來查詢員工的工資,兩個參數類型均為字符類型,則下列調用存儲過程的方法正確的是()

A、call Proc1(‘emp001’  ,’ 201601’ );
B、exec Proc1(‘emp001’  ,’ 201601’ );
C、call Proc1(‘emp001’  ,null);
D、call Proc1(‘emp001’  ,);

正確答案: A C

解析:

存儲過程的調用用call語句: CALL 存儲過程名 ( 參數列表 ) 
CALL 語句調用一個先前用CREATE PROCEDURE創建的程序。
CALL 語句可以用聲明為OUT或的INOUT參數的參數給它的調用者傳回值。 
存儲過程名稱后面必須加括號,哪怕該存儲過程沒有參數傳遞 

 

16、利用時間重疊概念實行並行處理的是()

 

A、多處理機
B、流水處理機
C、相聯處理機
D、並行(陣列)處理機

 

正確答案: B 

 

17、下列關於策略處理規則描述正確的是()

 

A、如果子容器的某個策略被配置,則此配置值會覆蓋由其父容器所傳遞下來的配置值
B、當組策略的用戶配置和計算機配置沖突的時候,優先處理用戶配置
C、組策略的配置值是有累加性的
D、系統是先處理計算機配置,再處理用戶配置

 

正確答案: A C D

 

18、設哈夫曼樹中的結點總數為49,若用二叉鏈表作為存儲結構,則該哈夫曼樹中總共有多少個空指針域()

51
52
50
49

正確答案: C

解析:

一共有 n個節點。那么每一個節點都有兩個域,共有2n個。一共有多少個分支呢?每一個節點都有父節點(除了根節點)那么就會有n-1個分支。那么空指針的域就是2n - (n-1) = n+1;那么就會有n+1個空指針域。也就是50個。不管是不是滿二叉樹,這個結論都是正確的。

 

 

19、Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟連接(Soft Link),下列說法正確的是()

A、軟連接可以跨文件系統進行連接,硬鏈接不可以
B、當刪除原文件的時候硬鏈接文件仍然存在,且內容不變
C、硬鏈接被刪除,磁盤上的數據文件會同時被刪除
D、硬鏈接會重新建立一個inode,軟鏈接不會

正確答案: A  

 

20、在java中重寫方法應遵循規則的包括()

A、訪問修飾符的限制一定要大於被重寫方法的訪問修飾符
B、可以有不同的訪問修飾符
C、參數列表必須完全與被重寫的方法相同
D、必須具有不同的參數列表

正確答案: B C

解析:

方法的重寫(override)兩同兩小一大原則
方法名相同,參數類型相同
子類返回類型小於等於父類方法返回類型,
子類拋出異常小於等於父類方法拋出異常,
子類訪問權限大於等於父類方法訪問權限。
 
21、以下集合對象中哪幾個是線程安全的()
A、LinkedList
B、ArrayList
C、Vector
D、Hashtabie

正確答案: C D

 

22、下列有關java構造跟使用敘述正確的是()

 

構造器的返回值為vold類型
如果一個源文件中有多個類,那么構造器必須與公共類同名
構造器可以有0個,1個或一個以上的參數
每個類可以有一個以上的構造器

 

正確答案:BCD

 

23、

 1 public class Test{
 2     static int cnt = 6;
 3     static{
 4         cnt += 9;
 5     }
 6 public static void main(string[] args){
 7     System.out.println(“cnt =” + cnt);
 8 }
 9 static{
10     Cnt /=3;
11     };
12 }
A、Cnt=5

B、Cnt=2

C、Cnt=3

D、Cnt=6

正確答案: A   

解析:

靜態塊中的代碼按寫的順序首先依次執行,執行於方法前

 

24、

b = 2*a/ 4
a = "one"
print(a,b)

執行下列語句后的顯示結果是什么()

A、10
B、one0.5
C、error
D、one 0

正確答案:C

 

 

25、

1.bit = input("Enter a binary digit:")
2.if bit = 0 or 1:
3.    print "your input is" ,bit
4.else
5.    print "your input is invalid"

以上程序要求用戶輸入二進制數字0/1並顯示之,請指出程序中的錯誤:()

A、4
B、5
C、3
D、2

正確答案: A D

 

26、下列有關this指針使用方法的敘述正確的是()

 

A、保證基類保護成員在子類中可以被訪問
B、保證基類私有成員在子類中可以被訪問
C、保證基類共有成員在子類中可以被訪問
D、保證每個對象擁有自己的數據成員,但共享處理這些數據的代碼

 

正確答案: D 

 

27、設有定義char *p[]={"Shanghai","Beijing","Honkong"};則結果為j字符的表達式是()

 

A、*p[1] +3
B、*(p[1] +3)
C、*(p[3] +1)
D、p[3] [1]

正確答案: B

 

 

28、

 1 void func(char *p)
 2 {
 3     p=p+1;
 4 }
 5 int main()
 6 {
 7     char s[]={‘1’,’2’,’3’,’4’};
 8     func(s);
 9     printf(“%c”,s);
10     return 0;
11 }
A、2
B、編譯錯誤
C、1
D、無法確定

正確答案: C  

題目似乎有錯誤......

 

 

 

29、以下字符串定義與賦值中,正確的是()

A、char s[80] = {"A", "B" ,"C"}

B、char s[80]; s = {'A', 'B','C'}

C、char s[80]; s = "ABC";

D、char s[80] ="ABC";

正確答案: D

 

 

30、在MySQL中,下列關於出發機器的描述正確的是()

A、MySQL的觸發器只支持行級出發,不支持語句級觸發
B、觸發器可以調用將數據返回客戶端的存儲程序
C
C、在MySQL中,使用new和old引用觸發器中發生的記錄內容
D、在觸發器中可以使用顯示或者隱式方式開始或結束事務的語句

正確答案: A C  

 

31、對於工資表結構如下(員工編號,姓名,部門,工資),如果要對查詢的結果按照部門升序與工資降序進行排序,則下列排序正確的是()

A、order by部門,工資
B、order by部門,工資desc
C、order by部門 asc,工資desc
D、order by部門desc,工資desc

正確答案: B C

 

32、為了提高數據的查詢效率,需要在數據庫中建立索引,則下列設計索引的原則描述正確的是()

 

A、在頻繁進行排序或分組(即進行group by 或order by操作)的列上建立索引
B、考慮列中指的分布,列的基數越大,索引的效果越好
C、在select關鍵字后選擇列表的列上,建立索引
D、在表中,索引越多越好

正確答案: A B 

 

 

 

33、網絡地址為172.16.0.0,采用子網掩碼255.255.224.0 .以下說法正確的是()

 

A、其中一個子網的廣播地址為:172.16.32.255
B、其中一個子網的廣播地址為:172.16.128.255
C、划分了8個有效子網
D、划分了6個有效子網

正確答案: C 

解析:

根據子網掩碼可以知道網絡號有多少位,主機號有多少位!

255.255.224.0 
1111 1111     1111 1111     1110  0000     0000 0000

網絡號有19位,主機號有13位

網絡地址:
172.16.0.0
廣播地址:網絡地址的主機位有13位全部變成1
1010 1100 0001 0000 0001 1111 1111 1111
即:172.16.31.255

 

有效子網:block size = 256-224 = 32 ;
所以第一個子網為172.16.0.0;
第二個為172.16.32.0;
第三個為172.16.64.0;
第四個為172.16.96.0;
第五個為172.16.128.0;
第六個為172.16.160.0;
第七個為172.16.192.0;
第八個為172.16.224.0;
廣播地址:下個子網-1.所以第2個子網的廣播地址分別是172.16.31.255.
綜上所述應該選C
 子網掩碼前面全是1,后面為0,必須是連續的
 224是1 1 1 0 0 0 0 0 0 可行
 240是1 1 1 1 0 0 0 0 0 可行
 248是1 1 1 1 1 1 0 0 0 可行
 250是1 1 1 1 1 1 0 1 0 不可行
 

 

 

34、對下列常見的各種網絡術語描述正確的是()

A、ADNS是一種用於TCP/IP應用程序的分布式數據庫,因此它在TCP/IP體系中處於應用層
B、TFTP是一種文件傳遞應用程序,它使用的傳輸層協議是TCP
C、Ping是對兩個TCP/IP系統連通性進行測試的基本工具,它利用CMP進行基本的請求的應答
D、Telnet 是標准的提供遠程登錄功能的應用,可以在不同OS系統的主機之間運行

正確答案: C D

 

35、Arthur最近搬到了新的別墅,別墅特別大,原先的桌子顯得比較小,所以他決定換一張新的桌子。他買了一張特別大的桌子,桌子是由很多條桌腿進行支撐的,可是回到家之后他發現桌子不穩,原來是桌子腿長度不太相同。他想要自己把桌子修理好,所以他決定移除掉一些桌腿來讓桌子變得平穩。桌子腿總共有n條腿,第i條腿長度為li,Arthur移除第i桌腿要花費代價為di。假設k條腿桌子平穩的條件:超過一半桌腿能夠達到桌腿長度的最大值。例如:一條腿的桌子是平穩的,兩條腿的桌子腿一樣長時是平穩的。請你幫Arthur計算一下是桌子變平穩的最小總代價。 

 1 大體思路是把先把輸入的腿長映射到一個106維的腿長數目數組,數組中的值為對應腿長的的數目。然后從后往前遍歷
 2 沒碰到一個腿長,將比他高的腿長砍掉,同時計算還需要砍多少桌腿,對剩余的桌腿排序砍掉對應部分,然后計算最小值。
 3 #include<iostream>
 4 #include<vector>
 5 #include<algorithm>
 6 using namespace std;
 7  
 8 int main()
 9 {
10     int n;
11     while(cin>>n)
12     {
13         vector<int >l,d,d_cut;
14         int a[106]={0};
15         int li,di;
16         for(int i=0;i<n;i++)
17         {
18             cin>>li;
19             l.push_back(li);
20             a[li]++;
21         }
22         int minCost=0;
23         for(int i=0;i<n;i++)
24         {
25             cin>>di;
26             d.push_back(di);
27             minCost+=di;
28         }
29         for(int i=105;i>0;i--)
30         {
31             int cost=0;
32             d_cut.clear();
33             if(a[i])
34             {
35                 int cutLegNum=l.size()-a[i];
36                 for(int j=i+1;j<=105;j++)
37                 {
38                     cutLegNum-=a[j];
39                 }
40                 cutLegNum-=(a[i]-1);
41                 for(int k=0;k<n;k++)
42                 {
43                     if(l[k]<i)
44                         d_cut.push_back(d[k]);
45                     if(l[k]>i)
46                         cost+=d[k];
47                 }
48                 if(cutLegNum>0)
49                 {
50                     sort(d_cut.begin(),d_cut.end());
51             for (int k = 0; k <cutLegNum; k++)
52                         cost+=d_cut[k];
53                     if(cost<minCost)
54                         minCost=cost;
55                 }     
56             }
57         }
58         cout<<minCost<<endl;
59     }
60     return 0; 
61 }

 

 

36、現有一個n個整數的序列,你要做的就是交換兩個數的位置直到整個序列按照升序排列,那么將這個整數序列排好序,需要交換多少次?例如,1,2,3,5,4,我們只需要交換一次,即將5和4交換即可。

 1 #include <iostream>
 2 #include <vector>
 3  
 4 using namespace std;
 5  
 6 classSolution
 7 {
 8 public:
 9     intMinChange(vector<int>& array,intlen)
10     {
11         if(len<1)
12         {
13             return0;
14         }
15  
16         intcount = 0;
17  
18         for(inti = 0; i < len;i++)
19         {
20             for(intj = i + 1; j < len;j++)
21             {
22                 if(array[i]>array[j])
23                 {
24                     count++;
25                 }
26             }
27         }
28  
29         returncount;
30     }
31 };
32 intmain()
33 {
34     intn = 0;
35     cin >> n;
36     vector<int>array;
37     inttemp = 0;
38     for(inti = 0; i < n;i++)
39     {
40         cin >> temp;
41         array.push_back(temp);
42     }
43  
44     Solution s;
45     cout << s.MinChange(array,n);
46     return0;
47 }

 


免責聲明!

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



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