找工作,帶你實戰筆試(二)

每日一葷

某人到商店買點鈔機,挑了兩臺最貴的,同時問了一下老闆爲什麼這種型號的貴一些,老闆告訴他因爲這是全智能語音型的。付款時他讓老闆就用這兩臺點鈔機點鈔,兩臺點鈔機都報出了準確的數字,他認爲語音功能還不錯,但沒看出什麼智能來,老闆說你以後用就知道了,他付完款後把點鈔機放到車後座,開車回公司。在路上,他突然聽到一臺點鈔機對另一臺說話了:“喂,傳說中被別人賣了還幫別人數錢的是不是就是咱哥們礙…”

公司一

C#知識

1.值類型,引用類型;裝箱和拆箱:

2.接口和類的繼承。

3.String , StringBuilder區別。 

4.C#與C++結構體的區別

5.sealed,const 和onlyread的區別; ""與null的區別

6.委託,delate :三種泛型委託

7.協程和多線程的區別?結構體和類的區別?

8.命名空間?unity 的命名空間-unityEngne

9.實現計時器的方法? 

    Time deltatime

    協程

計算機圖形學

1.圖片向格式有那些?

2.光照模型有哪些,公式?

    蘭伯特 半蘭伯特等

3.3維模型組成?  

    Mesh

4.如向將文理貼在模型上?

    uv座標

數據結構

數據結構有哪些?最熟悉什麼?

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.單鏈表和數組的區別

公司六

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的值,輸出結果應該是8”,while的作用是在每一次循環減去一個二進制的1,9999有八個1。
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());

輸出:GetA=12,GetAA=11
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羣的交集只能爲空或等於該新分組自身。
    選擇你熟悉的一門語言或僞代碼完成以上功能
公司七

1.怎樣引用全局變量
2.局部靜態變量和局部一般變量的區別
3.實現一個函數中的構造函數(有兩個),析構函數,賦值函數等方法
4.求b的值

#define A(x) x+xb=5*A

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.人工智能學過什麼,說一說蟻羣算法,蟻羣算法怎麼實現信息傳遞。蟻羣算法在遊戲中的應用:加入屏幕上有成千上萬的子彈,如何判斷子彈是否與玩家相撞(你不可能循環每個子彈判斷)

—unity已完—

也許必然要學會堅強,即使有天堅強被現實擊破,也要帶着堅強的碎片繼續狂奔。夢想的路上註定崎嶇不定,坎坷縈繞,風雨萬阻。而現實的路上註定疲倦不堪,身心傷痕累累,淚眼婆娑。但又能如何,當你生存在這個世界一天,必須學會扛起對未來憧憬的付出。

玩轉游戲開發

長按識別

關注“愛上游戲開發

讓我知道你在看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章