客戶端面試萬金油

基本功

  1. ts的基礎數據類型有哪些?null和undefine有啥區別?
    答:Number、String 、Boolean、Null和Undefined。默認的 null 和 undefined 是其他類型的子類型,意味着你可以將 null 和 undefined 賦值給其他所有類型如 number。
    null是指這個這個數據的值爲null,一般用做初始化、傳參。undefined是指這個數據沒有初始化。
  2. let和var的區別?
    答:ES6要引入let目的就是爲了取代var。防止在編碼過程中出現一些奇葩的bug。
    var是函數級作用域,let是塊級作用域。
    var存在變量提升,變量在沒有定義之前如果使用,不會報錯,並且值爲undefined。let則會報錯
    let不允許重複聲明變量。
  3. 字典、哈希表、數組的工作原理以及各自的優缺點?
    答:字典的實現可以是哈希表、數組、二叉樹,主要是方便查找。
    哈希表:通過特定算法(哈希算法)將key值轉換爲下標,通過下標直接找到value(哈希值),主要用於查找、加密。
    數組:方便數據遍歷,但不利於查找且佔用連續存儲空間,中間數據的增、刪比較麻煩
  4. c++多態是如何實現的?

creator

  1. creator1.0 升級到 2.0的一些變化?
    答:待補充…
    1⃣️啓動流程升級
    2⃣️渲染流程優化:剔除無用的渲染分支
  2. creator如何進行資源管理的?uuid是如何生成的?以及如何解決meta文件衝突的?
    答:uuid 是 Creator 用來管理遊戲資源的。它會爲每個文件生成一個meta文件,每個文件分配一個唯一的 uuid,圖集會生成多個。當資源內容被美術修改,同時也被重命名時,資源管理器就能通過 meta 裏的 uuid 重新檢索到資源
  3. cocos跟unity的優缺點?
    答:1⃣️cocos支持h5,unity到目前還沒有
    2⃣️unity有完善圖形化編輯工具以及插件,易上手。
    3⃣️unity適用於大型3d遊戲,cocos包體小適於中小遊戲。
    4⃣️unity收費,cocos開源還可以研究源碼。
  4. cocos的內存管理機制,舉例說下啥情況會引起引用計數的變化?
    答:引用計數。
    引用計數+1:new、添加到父節點、賦值、添加到數組。
    引用計數-1:delete、比如a先賦值給b,再將c賦值給b則a的計數-1;
  5. creator/cocos2dx的啓動流程
    答:加載引擎、加載main.js、加載項目插件腳本、加載項目主腳本、初始化引擎(Animation Manager、Collision Manager、Physics Manager、Widget Manager)、初始化渲染、調用cc.game.start。
  6. 組件的生命週期函數以及調用時機?
    答:onload:組件腳本初始化階段。比如所在的場景被載入,或者所在節點被激活的情況下。通常做一些初始化工作。
    onEnable:當組件的 enabled 屬性從 false 變爲 true 時.
    start:第一次執行 update 之前觸發,通常用於初始化數據。
    update:每一幀渲染前。
    lateupdate:update之後。
    onDisable:當組件的 enabled 屬性從 true 變爲 false 時
    onDestroy:當組件或者所在節點調用了 destroy()

項目

  1. websocket是如何實現雙向連接的?如何實現拆包的?pb有什麼優勢?
    答:websocket是基於tcp來實現的,就必然有三次握手協議
  2. 瀏覽器垃圾回收機制的運行原理?
    答:常用的垃圾回收機制,標記清除/引用計數,大多瀏覽器是前者。
    定義和用法:當變量進入環境時,將變量標記"進入環境",當變量離開環境時,標記爲:“離開環境”。某一個時刻,垃圾回收器會過濾掉環境中的變量,以及被環境變量引用的變量,剩下的就是被視爲準備回收的變量。
  3. drawcall是cpu給gpu傳遞了什麼東西?
    答:圖元列表。
  4. 常用設計模式以及使用場景?
  5. 心跳包多久發一次?爲什麼?

算法題

1.判斷手牌中是否有5連的順子?(排序+找斷層)
2.單次抽獎根據權重(一等獎:1 二等獎:3 三等獎:4),判斷是否中獎?中了什麼獎

 1. sum = 1 + 3 + 4
 2. 隨機數1~8, 1(一等獎)、2~4(二等獎)、5~8(三等獎)

3.字符串轉數字實現下(大多是機試)

int str2int(const char* str)
{
    int temp = 0;
    const char* ptr = str;  //ptr保存str字符串開頭
    if (*str == '-' || *str == '+')  //如果第一個字符是正負號,
    {                      //則移到下一個字符
        str++;
    }
    while (*str != 0)
    {
        if ((*str < '0') || (*str > '9'))  //如果當前字符不是數字
        {                       //則退出循環
            break;
        }
        temp = temp * 10 + (*str - '0'); //如果當前字符是數字則計算數值
        str++;      //移到下一個字符
    }

    if (*ptr == '-')     //如果字符串是以“-”開頭,則轉換成其相反數
    {
        temp = -temp;
    }
    return temp;
}

4.冒泡排序

    int    flag = 1;   //設置標記變量  
    for (i = 0; i < 10 && flag; i++)  
    {  
        flag = 0;      //只要flag在下一次外循環條件檢測的時候值爲0,就說明已經排好序,不用繼續循環  
        for (j = 9; j > i; j--)  
        {  
            if (array[j] < array[j-1])  
            {  
                swap(&array[j], &array[j-1]);  
                flag = 1;   //如果有交換,就將標記變量賦1  
            }  
        }  
    }  

5.定義棧的數據結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間複雜度都是O(1)。

1、定義一個棧這裏我們稱爲最小棧,原來的棧我們稱爲數據棧。

2、最小棧和數據棧元素個數一定相同。最小棧的棧頂元素爲數據棧的所有元素的最小值。

3、數據棧入棧一個元素A,最小棧需要拿這個元素與最小棧棧頂元素B比較,如果A小於B,則最小棧入棧A。否則最小棧入棧B。

4、當數據棧出棧一個元素時,最小棧也同時出棧一個元素。

6.一個數組裏面,每個元素爲0-9的隨機數,如何最快去重?
答:把元素當作下標,存儲數字重複個數

靈魂拷問

  1. 自我介紹(項目中什麼角色?做什麼)。
  2. 職業規劃(瞭解你是否有上進心,自我思考)
  3. 哪個項目讓你最滿意、代表你的最高水平?如何做的?
  4. 讓你印象最深刻的一個(技術)難點,害的你搞了很久,最後怎麼解的,有什麼心得?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章