基本功
- ts的基礎數據類型有哪些?null和undefine有啥區別?
答:Number、String 、Boolean、Null和Undefined。默認的 null 和 undefined 是其他類型的子類型,意味着你可以將 null 和 undefined 賦值給其他所有類型如 number。
null是指這個這個數據的值爲null,一般用做初始化、傳參。undefined是指這個數據沒有初始化。 - let和var的區別?
答:ES6要引入let目的就是爲了取代var。防止在編碼過程中出現一些奇葩的bug。
var是函數級作用域,let是塊級作用域。
var存在變量提升,變量在沒有定義之前如果使用,不會報錯,並且值爲undefined。let則會報錯
let不允許重複聲明變量。 - 字典、哈希表、數組的工作原理以及各自的優缺點?
答:字典的實現可以是哈希表、數組、二叉樹,主要是方便查找。
哈希表:通過特定算法(哈希算法)將key值轉換爲下標,通過下標直接找到value(哈希值),主要用於查找、加密。
數組:方便數據遍歷,但不利於查找且佔用連續存儲空間,中間數據的增、刪比較麻煩 - c++多態是如何實現的?
creator
- creator1.0 升級到 2.0的一些變化?
答:待補充…
1⃣️啓動流程升級
2⃣️渲染流程優化:剔除無用的渲染分支 - creator如何進行資源管理的?uuid是如何生成的?以及如何解決meta文件衝突的?
答:uuid 是 Creator 用來管理遊戲資源的。它會爲每個文件生成一個meta文件,每個文件分配一個唯一的 uuid,圖集會生成多個。當資源內容被美術修改,同時也被重命名時,資源管理器就能通過 meta 裏的 uuid 重新檢索到資源 - cocos跟unity的優缺點?
答:1⃣️cocos支持h5,unity到目前還沒有
2⃣️unity有完善圖形化編輯工具以及插件,易上手。
3⃣️unity適用於大型3d遊戲,cocos包體小適於中小遊戲。
4⃣️unity收費,cocos開源還可以研究源碼。 - cocos的內存管理機制,舉例說下啥情況會引起引用計數的變化?
答:引用計數。
引用計數+1:new、添加到父節點、賦值、添加到數組。
引用計數-1:delete、比如a先賦值給b,再將c賦值給b則a的計數-1; - creator/cocos2dx的啓動流程
答:加載引擎、加載main.js、加載項目插件腳本、加載項目主腳本、初始化引擎(Animation Manager、Collision Manager、Physics Manager、Widget Manager)、初始化渲染、調用cc.game.start。 - 組件的生命週期函數以及調用時機?
答:onload:組件腳本初始化階段。比如所在的場景被載入,或者所在節點被激活的情況下。通常做一些初始化工作。
onEnable:當組件的 enabled 屬性從 false 變爲 true 時.
start:第一次執行 update 之前觸發,通常用於初始化數據。
update:每一幀渲染前。
lateupdate:update之後。
onDisable:當組件的 enabled 屬性從 true 變爲 false 時
onDestroy:當組件或者所在節點調用了 destroy()
項目
- websocket是如何實現雙向連接的?如何實現拆包的?pb有什麼優勢?
答:websocket是基於tcp來實現的,就必然有三次握手協議 - 瀏覽器垃圾回收機制的運行原理?
答:常用的垃圾回收機制,標記清除/引用計數,大多瀏覽器是前者。
定義和用法:當變量進入環境時,將變量標記"進入環境",當變量離開環境時,標記爲:“離開環境”。某一個時刻,垃圾回收器會過濾掉環境中的變量,以及被環境變量引用的變量,剩下的就是被視爲準備回收的變量。 - drawcall是cpu給gpu傳遞了什麼東西?
答:圖元列表。 - 常用設計模式以及使用場景?
- 心跳包多久發一次?爲什麼?
算法題
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的隨機數,如何最快去重?
答:把元素當作下標,存儲數字重複個數
靈魂拷問
- 自我介紹(項目中什麼角色?做什麼)。
- 職業規劃(瞭解你是否有上進心,自我思考)
- 哪個項目讓你最滿意、代表你的最高水平?如何做的?
- 讓你印象最深刻的一個(技術)難點,害的你搞了很久,最後怎麼解的,有什麼心得?