2013網易校園招聘筆試題


1、假設進棧次序是e1, e2, e3, e4,那可能的出棧次序是()
A、e2, e4, e3, e1
B、e2, e3, e4, e1
C、e3, e2, e4, e1
D、e1, e2, e4, e3

給定入棧順序,求出可能的出棧順序。(點評:老得掉渣得題目了,只要小心點都沒有問題)

2、表達式X=A+B*(C-D)/E的后綴表示形式可以是()
A、XAB+CDE/-*=
B、XA+BC-DE/*=
C、XABCD-*E/+=
D、XABCDE+*/=

分析:XABCD-*E/+=
3.四叉樹中包含地空指針數量有多少?假設每個節點含有四個指向其孩子的指針,那么給定n個節點,其4n個指針有多少指向空?(比較簡單的題目,n個節點使用了的指針有n-1,所以最后的答案位4n-(n-1)=3n+1)

分析:或者舉例說明也行。。
4.那個排序算法是非穩定的?選擇,冒泡、希爾,堆排序,快速等 (也是比較基礎的題目)

A、冒泡排序      B、歸並排序       C、快速排序         D、堆排序      E、希爾排序

分析:凡是O(n^2)的全部是穩定排序,O(nlogn)的全部是非穩定排序。。


5.根據函數,賦予參數值,寫輸出。。請問func(0x7f530829)的返回值是()

int func(unsigned int i)
{
    unsigned int temp = i;
    temp = (temp & 0x55555555) + ((temp & 0xaaaaaaaa)>>1);
    temp = (temp & 0x33333333) + ((temp & 0xcccccccc)>>2);
    temp = (temp & 0x0f0f0f0f) + ((temp & 0xf0f0f0f0)>>4);
    temp = (temp & 0xff00ff) + ((temp & 0xff00ff00)>>8);
    temp = (temp & 0xffff) + ((temp & 0xffff0000)>>16);
    return temp;
}

A、15           B、16            C、17           D、18

分析:函數實現的是求二進制表示的時候,1的個數,一共15個
最開始把每一個位看做一個節點,相鄰節點值相加,結果用兩個位表示。。。
然后每兩個位看做一個節點,相鄰節點值相加,結果用四個位表示。。。
以此類推,直到只剩下一個節點。。。

6.進程與線程的區別:系統調度是對進程還是線程,線程與進程共享的內存空間、公共地址空間等;

A.操作系統只調度進程,不調度線程

B.線程共享內存地址空間,進程不共享

C.線程間可共享內存數據,但進程不可以

D.進程可以通過IPC通信,但線程不可以
7.內存管理:段頁式管理,地址映射表是?(操作系統方面的知識也不能掉以輕心呀)

A. 每個作業或進程一張段表,一張頁表

B. 每個作業或進程的每個段一張段表,一張頁表

C. 每個作業或進程一張段表,每個段一張頁表

D. 每個作業一張頁表,每個段一張段表

8、關於TCP協議,下面哪種說法是錯誤的()
A、TCP關閉連接過程中,兩端的socket都會經過TIME_WAIT狀態
B、對一個Established狀態的TCP連接,調用shutdown函數可以讓主動調用的一方進入半關閉狀態
C、TCP協議默認保證了當TCP的一端發生意外崩潰(當機、網線斷開或路由器故障),另一端能自動檢測到連接失效
D、在成功建立連接的TCP上,只有在Established狀態才能收發數據,其他狀態都不可以。

分析:tcp/ip協議的實際使用過程中的問題:例如單方面斷開后,另一端出於哪種狀態,還有

9、關於主鍵Primary Key和索引index的說法哪些是錯誤的?()
A、唯一索引的列允許為NULL值
B、一個關系表中的外鍵必定是另一表中的主鍵
C、一個表中只能有一個唯一性索引

D、索引主要影響查詢過程,對數據的插入影響不大
分析:數據庫方面的知識:主鍵和索引的基本定義及其性質,例如主鍵在表中是否唯一,索引的速度以及對表的改變的影響;無論是唯一索引還是非唯一索引,索引列都允許取NULL值

10、數據庫的事務隔離級別一般分為4個級別,其中可能發生“不可重復讀”的事物級別有()
A、SERIALIZABLE 
B、READ COMMITTED
C、READ UNCOMMITTED

D、REPEATABLE READ
分析數據庫:數據庫的不可重復訪問異常,四種事務隔離級別中哪些可以避免該類異常?

各隔離級別對各種異常的控制能力 

  LU丟失更新 DR臟讀 NRR非重復讀 SLU二類丟失更新 PR幻像讀
未提交讀 RU Y Y Y Y Y
提交讀 RC N N Y Y Y
可重復讀 RR N N N N Y
串行讀 S N N N N Y

11、如果F(n)為該數列的第n項,那么這句話可以寫成如下形式:
F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) (n>=3)
請實現該函數F(n)的求解,並給出算法復雜度,要求算法復雜度小於O(n^2)。
思路:使用滾動數組可以保存以前保存的結果,加快速度,減少空間復雜度。

int Fib(int index)
{
      if(index<1)
      {
            return-1;
      }
      int a1=1,a2=1,a3=1;
      for(int i=0;i<index-2;i++)
      {
            a3=a1+a2;
            a1=a2;
            a2=a3;
       }
       return a3;
}

詳見:菲波那切數列七種解法:http://www.cnblogs.com/hlxs/archive/2011/07/15/2107389.html

 第二 部分(必做):程序設計
1、下面的程序的輸出是什么?

#include<stdio.h>
int main(void)
{
    int n;
    char y[10] = "ntse";
    char *x = y;
    n = strlen(x);
    *x = x[n];
    x++;
    printf("x=%s\n",x);
    printf("y=%s\n",y);
    return 0;
}

輸出:
x=tse
y=
因為n=4,則*x = x[n];  的功能是將x指向的第一個字符n修改為\0,這樣y字符串就結束了,所以第二輸出為空,x++操作后,x指向第二個字符t,所以第一個輸出為:tse。

2、請給出下面程序的輸出結果,並說明原因。

 

#include<iostream>
#include<vector>
using namespace std;
template<class t>
class array
{
public:
    array(int size);
    size_t getVectorSize()
    {
        return _data.size();
    }
    size_t getSize()
    {
        return _size;
    }
public:
    vector<t> _data;
    size_t _size;
};

template<class t>
array<t>::array(int size) : _size(size) , _data(_size)
{    }

int main(void)
{
    array<int> *arr = new array<int>(3);
    cout<<arr->getVectorSize()<<endl;
    cout<<arr->getSize()<<endl;
    return 0;
}

12.寫一個程序來確定系統是大端模式還是小端模式;

13.編程實現采用位操作來實現整數的加法操作。

14. 圖的矩陣表示法,圖的深度優先遍歷,算法思路及其實現。

15.CAS(compare and swap)操作實現:(具體原理可以參考)

16.fork函數的用法。具體題目為:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
 
int main(void)
{
   int i;
   for(i=0; i<2; i++){
      fork();
      printf("-");
      fflush(stdout);
   }
 
   return 0;
}

6個-

詳見:http://coolshell.cn/articles/7965.html

17.spin lock原理:
先來一些代碼吧!

void initlock(volatile int* lock_status)
{
    *lock_status = 0;                       
}
void lockvolatile int* lock_status)
{
    while(test_and_set(lock_status = =1);                       
}
void unlock(volatile int* lock_status)
{
    *lock_status = 0;
}

問題:volatile的作用?lock函數優化(針對在多cpu上提高cpu cache)?上面的缺陷(內存模式上的)?

volatile的作用: 作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值。如果沒有volatile,基本上會導致這樣的結果:要么無法編寫多線程程序,要么編譯器失去大量優化的機會。

18.給定一個巨大的文件,如何從中選出k行,隨處輸出k行到文件中。要求每一行出現的概率都相等。設計算法、說明思路,算法復雜度。

19.win32中WM_Quit的作用是什么?

20.比較mutex和臨街區之間的區別,並說明其使用場景。

21.多線程編程,如何安全退出線程。

還有網易數據挖掘方面的題目,這次數據挖掘的題目比較新奇,都是簡答題。如下:

1,簡述你對數據與處理的認識;
2,簡述你對中文分詞的理解,說明主要難點和常用算法;
3,常見的分類算法有哪些;
4,簡述K-MEANS算法;
5,設計一個智能的商品推薦系統;
6,簡述你對觀點挖掘的認識

網易游戲筆試的人太少,因此可提供的筆試題目都不全,只是聽說特別的難。還有好多是數學方面的智力題。例如:

1、英雄升級,從0級升到1級,概率100%。

從1級升到2級,有1/3的可能成功;1/3的可能停留原級;1/3的可能下降到0級;
從2級升到3級,有1/9的可能成功;4/9的可能停留原級;4/9的可能下降到1級。
每次升級要花費一個寶石,不管成功還是停留還是降級。
求英雄從0級升到3級平均花費的寶石數目。

 


免責聲明!

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



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