1. 程式人生 > >網易遊戲測試工程師面試小記

網易遊戲測試工程師面試小記

過程:先是自我介紹,然後開始問問題,3個人,一個主問,一個插兩句,一個坐在那裡對簡歷發呆。然後就問我平常用什麼語言,答曰,以前C,現在C++

問題:

1、C++裡虛函式的作用

    虛擬函式好像一直問的比較多,這裡小總結一下:

    函式可以分為:類的成員函式(非靜態成員函式、靜態成員函式),非類的成員函式(普通的函式、虛擬函式)。根據這種函式的分類,就知道了函式絕對是不能同時為虛擬函式以及靜態成員函式的。

    虛擬函式還可以繼續細分為純虛擬函式和普通的虛擬函式。普通的虛擬函式必須要有函式的實現,必須有一個關鍵字來修飾:virtual ,同時不能有static修飾。

    純虛擬函式必須在普通的虛擬函式基礎上加上“=0”。預設情況是隻有定義,而無需實現的,即只是定義一個介面(當然也可以實現,這時實現認為是預設的一種狀態顯示),同時包含了純虛擬函式的類表明該類是一個抽象類,不能定義該類的物件,也就是說該類被定義成基類,是要被繼承的,通過繼承類來完成基類物件的生成。

    虛擬函式的作用是允許在派生類中重新定義與基類同名的函式,並且可以通過基類指標或引用來訪問基類和派生類中的同名函式。換句話說就是實現“動態聯編”,好處是在程式的執行階段動態地選擇合適的成員函式,因為要在執行時才能確定,所以效率稍低。

    實現方式:在定義了虛擬函式後,可以在基類的派生類中對虛擬函式重新定義,且與虛擬函式具有相同的形參個數和形參型別;如果在派生類中沒有對虛擬函式重新定義,則它繼承其基類的虛擬函式。這樣就實現介面的統一,不同定義過程。

2、C裡面的 Struct 和 C++ 裡的 Class 的異同

    這裡分兩種情況來回答
(1)C的struct與C++的class的區別。

     C是一種過程化的語言,struct只是作為一種複雜資料型別定義,struct中只能定義成員變數,不能定義成員函式。
(2)C++中的struct和class的區別。

     訪問許可權上:class中預設的成員訪問許可權是private的,而struct中則是public的。

     繼承上:class繼承預設是private繼承,而struct繼承預設是public繼承。

     其他:“class”這個關鍵字還用於定義模板引數,就像“typename”,但關鍵字“struct”不用於定義模板引數。

3、寫一個程式,給定一個數 x ,輸出不大於它的二的幾次冪

   這個很簡單了,就是 2^n<=x ,然後輸出 n 麼,就幾行程式碼。

4、說說快速排序的思想

   前面有篇文章已經總結過了,點這裡

5、面向物件和麵向過程的區別

      面向過程是自頂向下逐步程式設計,就是分析出解決問題所需的步驟,其最重要的是模組化的思想方法。

      面向物件的方法主要是把事物給物件化,包括其屬性和行為。抽象出物件的目的並不在於完成某個步驟,而是描述其在整個解決問題的步驟中的行為。

      簡單點說就是,面向過程就是你把程式碼封裝成函式,然後依次去做一件事情;面向物件就是你把要做的事情抽象成物件,告訴物件去做。面向物件三大特性(封裝,繼承,多型)使得在做複雜的事情的時候效率和正確率得到保證。

6、C++多型的概念

   多型性可以簡單地概括為“一個介面,多種方法”,程式在執行時才決定呼叫的函式,它是面向物件程式設計領域的核心概念。多型性是通過虛擬函式來實現的,只有重寫了虛擬函式的才能算作是體現了C++多型性。多型的目的則是為了介面重用,不論傳遞過來的究竟是那個類的物件,函式都能夠通過同一個介面呼叫到適應各自物件的實現方法。關於多型,這篇文章講的很不錯。

7、簡要說下sift特徵的提取(所有問題裡唯一一個和簡歷上有點相關的,暈)

   前面也說過了,點這裡

8、還有balabala的一些零碎的東西,就是一些C++的基本知識

總結:總體感覺,問的問題一般,3個面試官和我們差不多大,對他們的穿著打扮第一印象就是小屌絲,還有,3個人感覺有點浪費資源;

      其次,沒有抓簡歷的要點去問,想到哪問道哪,比較不專業;

      再次,在面的過程中突然覺得自己對這方面不是很感興趣,他們也表示做開發方向的基本只招計算機的,感覺測試沒多大發展前途;

      最後,選擇自己喜歡的比較重要,不管有木有二面,不想去了,不要浪費時間在不喜歡的上面。