1. 程式人生 > >遊戲客戶端面試(Unity)

遊戲客戶端面試(Unity)

推薦閱讀:

一。最開始的兩家公司筆試面試題目

      一家公司是學校聘請研究教育方面VR課件的公司,面試沒幾天,就收到了面試通過的訊息,後面因為通過了另一家遊戲公司而拒絕了。
      另一家公司是一家遊戲外企,在春熙路,當時筆試還可以,面試被問及到很多圖形學的知識,不行被刷

C#知識
1.值型別,引用型別;裝箱和拆箱:
2.介面和類的繼承。
3.String , StringBuilder區別。
4.C#與C++結構體的區別
5.sealed,const 和onlyread的區別; ""與null的區別
6.委託,delate :三種泛型委託
7.協程和多執行緒的區別?結構體和類的區別?
8.名稱空間?unity 的名稱空間-unityEngne
9.實現計時器的方法? Time eltatine:協程
計算機圖形學


1.期末成績,學了什麼。
2.光照模型有哪些,公式?蘭伯特 半蘭伯特等
3.3維模型組成? Mesh
4.如向將文理貼在模型上? uv座標
5. 圖片向格式有那些?
資料結構
資料結構有哪些?最熟悉什麼?
Unity
1.碰撞器,觸發器的區別。物體發生碰撞的幾個過程?
2.Mesh下面有哪些欄位(熟悉元件不的欄位)頂點座標,法線,紋理座標,三角形繪製序列等
3.如何實現資源複用? 物件池
4.U3D指令碼的生命週期? Awake一Start—— Update- FixedUpdate一LateUpdate -0nGUI一Reset一OnDisable一OnDestoy
5.如何實現UI介面的層級?圖集的建立?圖集的作用?
6.座標空間有哪些?順序?世界座標系一螢幕座標系— GUI介面一視口…

二。天府四街某科技有限公司

    公司主要是做棋牌類的帶有賭博性質的遊戲,當時公司成立沒多久,很幸運的進去了。
當時筆試主要是針對lua和shader方面,大概記得幾個:
1.lua實現類的繼承
2.lua遍歷查詢某個數
3.shader實現半透明效果
4.優化
反正全是程式設計題和簡答題。當時優化寫了有物件池,面試就被問到了物件池

三。簇橋附近某科技有限公司

    一家修馬路的公司,公司很大,環境很好。當時面試感覺還可以,就是很多優化方面的不太懂,所以沒過。
1.向量的加減
2.ngui和ugui的區別
3.用過的資料結構有哪些,優缺點
4.優化
5.字典和List的區別
還有一些想不起來了。。。

四。東郊記憶附近某科技有限公司

    這個公司主要是做休閒小遊戲的,據說兩三個星期就能完成一款小遊戲。當時談得挺好的,說後面聯絡我,就再也沒有聯絡了。
1.當時主要問了下為什麼想跳槽
2.在原來公司的主要工作
3.當一款遊戲改動後,如何做升級工作,用什麼方法。

五。高新附近某科技有限公司

目前有三個專案組,有一個是二次元偏女性的。
1.UI用的是什麼框架?UGUI
2.程式碼用的是什麼框架?MVC
3.說說你在公司做的專案
4.程式碼:單鏈表的增刪查
5.只需要說出思路:有一條一次可跑6只小豬的賽道,現在有38只,用最少的次數測出跑得最快的前三隻
6.申請記憶體的方式:new
7.canvas的作用:
Canvas畫布負責UI元件的佈局以及渲染,所有的UI組建元素必須作為Canvas的子節點。
8.單鏈表和陣列的區別

六。環球中心某科技有限公司

    這個公司主要是做格鬥,RPG型別的遊戲,地點在環球中心,地理位置是真的不錯,高大上,環境也很好。去應聘的時候公司正在招H5微信小遊戲的。當時端午快到了,看到公司每個人都發了一盒粽子,一桶菜籽油,一袋米,恩,感覺福利不錯,上班時間9:30-18:30.
基礎
1.面向物件和麵向過程的區別及其優缺點?
    區別:面向過程就是分析出解決問題的步驟,然後一步一步實現,在使用的時候分步呼叫即可;
              面向物件就是把問題事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是描述某個事物在整個解決問題步驟中的行為。
面向過程
    優點:效能高
    缺點:沒有面向物件易維護、易複用、易擴充套件
面向物件
    優點:易維護、易複用、易擴充套件,由於面向物件有封裝、繼承、多型性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護 。
    缺點:效能低,類呼叫時需要例項化,開銷比較大,比較消耗資源。
2.面向物件程式有何特點,如何實現?
(1)封裝:C#對方法的封裝只需要改變方法的訪問級別,比如設為public,private等。
(2)繼承:使用符號“:”實現繼承,繼承可以使子類或者說派生類獲得父類或者說基類的所有可被繼承的內容。
(3)多型:體現在函式過載和虛方法使用上,編譯時多型利用函式過載實現,執行時多型通過覆寫虛方法實現。
3.解釋時間複雜度和空間複雜度,並指出在評估演算法質量是應選擇哪個指標?
時間複雜度:程式執行過程中所用的時間,與演算法中語句的執行次數成正比例。
空間複雜度:演算法需要消耗的記憶體空間
在評估演算法質量是應選擇時間複雜度作為主要標準。
4.求下面二叉樹的前序遍歷,中序遍歷的輸出結果。
在這裡插入圖片描述
前序遍歷:根左右6423517
中序遍歷:左根右3246157
後序遍歷:左右根3241756
在這裡插入圖片描述
5.選著你熟悉的一種排序演算法編寫程式碼實現方法Sort(int[])對一個數組進行排序。
    當時做題選擇的是最簡單的排序:冒泡法。還有更過的排序方法請見:十大經典排序演算法
6.編寫一個函式,當已知一個三角形邊長a,b,c時,求其對應的三個夾角。
    這個題應該算是很簡單的,只要你瞭解三角形邊與角之間的公式,直接變換公式就能寫成程式。此題還需要呼叫反函式
在這裡插入圖片描述
C++部分
*7.const int a和const int a,const int const a有何區別?
    後面那一塊很懵逼,看不懂。C++裡面的指標什麼的真的很煩人,當時也沒怎麼學懂,需要了解的自己百度吧,推薦一個答案:const int *a與int *const a,const int *const a的區別

8.假設x=9999,以下函式的輸出是多少?

int fun(int x)
{
    int count=0;
    while(x)
    {
        ++count;
        x=x&(x-1);
    }
}

    恩,這個題也是醉了,沒有輸出語句,我怎麼知道輸出的是什麼變數,恩,但是呢,又不能直接那樣寫,於是當時寫的答案“輸出語句呢,如果要輸出count的值,輸出結果應該是4”
9.編寫一個函式模板,實現將輸入的陣列逆序,並存儲到目標陣列中,函式輸入引數src,原函式組dst,目標陣列int len陣列長度。
    大致說下思路:將原陣列逆序取出,順序存入目標陣列

for(int i=len;i>=0;i--)
{
  for (int j=0;j<len;j++)
  {
      dst[j]=src[i];
  }
}

在這裡插入圖片描述
C#部分
10.ref和out有何區別?

(1)ref傳進去的引數必須在呼叫前初始化,out不必,即:

1 int i;
2 SomeMethod( ref i );//語法錯誤
3 SomeMethod( out i );//通過

(2)ref傳進去的引數在函式內部可以直接使用,而out不可:

public void SomeMethod(ref int i)
{
   int j=i;//通過
   //...
}
public void SomeMethod(out int i)
{
   int j=i;//語法錯誤
}

(3)ref傳進去的引數在函式內部可以不被修改,但out必須在離開函式體前進行賦值。
    ref在引數傳遞之前必須初始化;而out則在傳遞前不必初始化,且在 … 值型別與引用型別之間的轉換過程稱為裝箱與拆箱。
11.閱讀以下程式碼,程式輸出是什麼?

private class A
    {
        private int m_a;
        public A(int _a) { m_a = _a;}
        public virtual int GetA()
        {
            return m_a;
        }
        public int GetAA()
        {
            return m_a;
        }
    }
    public class B : A
    {
        private int m_a;
        public B(int _a) : base(_a) { m_a+=_a-1;}
        public override int GetA()
        {
            return m_a;
        }
    }
    var b = new B(12);
    var a = b as A;
    Console.WriteLine("GetA={0},GetAA={1}",b.GetAA(),a.GetA());

在這裡插入圖片描述
12.編寫一個函式,輸入指定長度,輸出一個包含數字,大寫字母,小寫字母的隨機字串。要求:字串的內容可選,即可以選擇是否包含數字/大寫字母/小寫字母,且可選內容是否重複
在這裡插入圖片描述
擴充套件
    這兩個擴充套件題,真的是,我的能力有限,沒有思路。第一個題還能看懂題,後面一個題越看越懵逼,忘大佬解答。
13.選擇你熟悉的一門語言,或者使用虛擬碼,實現以下功能:
    一個矩形Rectangle包含左上角座標(x1,y1),右下角座標(x2,y2),width,height(寬,高)四個屬性

bool intersect(Rectangle b) 判斷是否與矩形B相交

bool contain(Rectangle b) 判斷矩形b是否被包含在當前矩形中

可選:Rectangle Rotate(p,angle) 將矩形按照點p旋轉angle角度,並返回旋轉後的矩形。
在這裡插入圖片描述
14.假設現有M個人,分散在N各QQ群中,任何人可以屬於一個或多個群,現在需要將M個人按照以下要求重新分成K個組:
重新分組後:
(1)每組成員是互斥的,即任意兩個新組之間的交集是空的
(2)任意兩組組成的冰機不是分組錢任意QQ群的子集。
(3)任意一組成員至少是1個分組的QQ群的子集。
(4)任意一組成員與任意其他QQ群的交集只能為空或等於該新分組自身。
選擇你熟悉的一門語言或虛擬碼完成以上功能
在這裡插入圖片描述

七。軟體園E5某公司

1.怎樣引用全域性變數
2.區域性靜態變數和區域性一般變數的區別
3.實現一個函式中的建構函式(有兩個),解構函式,賦值函式等方法
4.#define A(x) x+x
b=5*A,問b的值
5.分別使用bool,int,float,指標與"零"做比較
6.寫出下面程式的輸出結果,並說出有什麼問題

A(){
    A(){
        print("a");
    }
    ~A(){
        print("~a");
    }
}
B():A{
    B(){
        print("b");
    }
    ~B(){
        print("~b");
    }
}
main(){
    A *pa=new B();
    delete(*pa);
}

7.矩陣運算
8.說你玩過的5個遊戲及心得
9.說出你最熟悉的設計模式,並舉例說明
10.寫一個函式,實現在字串n中查詢子串M,並返回查詢到的第一個下標
11.人,羊,菜,狼過河問題
12.寫一個函式,查詢任意一個數n,的連續幾個數之和也為n.
筆試題暫時只記得這些了,下面說說面試吧
面試
面試幾乎全考的簡歷上的內容
1.說說你數學建模擔任的角色,怎麼建的模等
2.C++學了那些,針對你說的考
3.計算機圖形學學了那些?,怎麼畫直線,裁剪演算法有哪些,並說明怎麼實現,渲染管道,矩陣的逆運算,在圖形學中的意義
4.資料結構學了那些,佇列和棧的區別,如何實現用兩個棧實現佇列的功能。
5.如何洗牌?
6.說說在原來公司的專案,好友列表怎麼實現,無盡列表怎麼實現?
7.編輯器擴充套件怎麼實現?
8.lua怎麼實現繼承?
9.shader的光照模型知道那些
10.人工智慧學過什麼,說一說蟻群演算法,蟻群演算法怎麼實現資訊傳遞。蟻群演算法在遊戲中的應用:加入螢幕上有成千上萬的子彈,如何判斷子彈是否與玩家相撞(你不可能迴圈每個子彈判斷)