參加了今日頭條的H5游戲開發面試 主要是以下問題
1、egret有幾種屏幕適配方案
Egret 目前支持的模式有:showAll, noScale, noBorder, exactFit, fixedWidth, fixedHeight, fixedNarrow, fixedWide。
詳細講參考 http://bbs.egret.com/thread-31286-1-1.html
2、常見的egret配置文件有哪些
①項目配置文件 egretProperties.json
項目配置文件包含了項目編譯運行所需要的重要配制參數或選項:
1.模塊配置modules:項目所需要的各個模塊
2.原生打包設定native:適用於原生打包
3.版本號egret_version:運行時的引擎版本,及最后打包是的引擎版本
4.項目運行容器環境:總體分為(Html5環境和Runtime/Native環境)
一般都會在launcher目錄
Html5環境:需要egret_require.js和egret_loader.js做配合
【index.html】:調試啟動頁面
【release.html】:發布環境啟動頁面
Runtime/Native環境:脫離HTML5環境,需要native_loader.js和native_require.js和runtime_loader.js做配合
②資源加載配置文件 default.res.json
資源加載配置文件位於項目目錄的resource文件夾內,Egret項目在創建時已經包含該文件
配置文件中的”resource”我們可以視為資源庫,當前游戲使用到的資源都可以放到這里
③主題配置文件 default.thm.json
為指定的組件配置默認皮膚,全局指定一次即可,之后直接實例化組件,不再需要顯式設置組件的skinName屬性
通常我們希望更新版本的時候避免被瀏覽器緩存,現在可以通過設置 EXML 版本號的方式來實現。
④清單文件 manifest.json 代碼清單
3、如何在egret中引用外部庫,外部庫是否參與打包
外部庫是復制到lib下參與打包的
1,首先在整個項目的外面建立一個第三方擴展庫的文件夾,然后將下載好的微信api的擴展庫粘貼到里面;
2,在項目的egretProperties.json文件中配置,modules字段是用來配置擴展模塊和第三方庫的

前提是,下載的微信api的庫文件內的后綴為json的文件里面的 name屬性的值和該json文件的名稱相同,如,都是weixinapi 則egretproperties.json屬性文件中如上圖所示的配置,,然后 重新編譯項目 egret build -e,編譯的同時則會看見項目左側的libs庫目錄下多了weixinapi的文件夾,即大功告成:

4、控件位置擺放與錨點
每個顯示對象都包含一個錨點,錨點默認位於顯示對象的左上角。
當設置一個顯示對象的坐標位置時,會以錨點為參照改變顯示對象的繪圖位置。同時,錨點相對於顯示對象的位置也是可以改變的。
可通過anchorOffsetX和 anchorOffsetY屬性訪問修改錨點的位置。
5、打包圖集的深入理解,為什么性能好
使用TextureMerger打包圖集,TexMerger把小圖合成大圖后,生成png+json,用ResDepot加載后,會自動切成小圖躺在資源庫里任你在exml里調用
使用紋理集的好處很多,我們通過將大量的圖片拼合為一張圖片從而減少網絡請求,原先加載數次的圖片資源現在加載一次即可。 同時,在引擎渲染的時候也會較少IO讀取,從而提高性能。
6、九宮格的理解,哪里會縮放,哪里不縮放

上圖中,用四條虛線將圓角矩形分割為9個區域,其中四個區域(圖中區域編號1,3,7,9)包含了圓角矩形的四個圓角。拉伸圖像時,1,3,7,9區域不拉伸,2,8區域僅橫向拉伸,4,6區域僅縱向拉伸,5區域橫向縱向都拉伸。
設置九宮格的屬性是 Bitmap 類中的 scale9Grid 屬性。
7、http的知識
參看圖集http、三次握手
8、TCP和UDP的認識、websocket屬於tcp還是udp
TCP和UDP協議屬於傳輸層協議
面向連接的TCP就是在正式通信前必須要與對方建立起連接
面向非連接的UDP協議就是在正式通信前不必與對方先建立連接,不管對方狀態就直接發送
9、get和post的區別
get參數通過url傳遞,post放在request body中。
get請求在url中傳遞的參數是有長度限制的,而post沒有。
get比post更不安全,因為參數直接暴露在url中,所以不能用來傳遞敏感信息。
get請求只能進行url編碼,而post支持多種編碼方式
get請求會瀏覽器主動cache,而post支持多種編碼方式。
get請求參數會被完整保留在瀏覽歷史記錄里,而post中的參數不會被保留。
GET和POST本質上就是TCP鏈接,並無差別。但是由於HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。
GET產生一個TCP數據包;POST產生兩個TCP數據包。
10、A*尋路算法的理解
參看http://www.sohu.com/a/191037466_478315
弗洛伊德算法
11、簡單算法
1
// 冒泡排序
for(int i=0;i<arr.length-1;i++){//外層循環控制排序趟數 2 for(int j=0;j<arr.length-1-i;j++){//內層循環控制每一趟排序多少次 3 if(arr[j]>arr[j+1]){ 4 int temp=arr[j]; 5 arr[j]=arr[j+1]; 6 arr[j+1]=temp; 7 } 8 } 9 }
12、常用數據庫
數據庫資料參見 https://blog.csdn.net/github_39336148/article/details/80469708
13、lua的知識 元表metatable和協程
元表
在 Lua table 中我們可以訪問對應的key來得到value值,但是卻無法對兩個 table 進行操作。
因此 Lua 提供了元表(Metatable),允許我們改變table的行為,每個行為關聯了對應的元方法。
例如,使用元表我們可以定義Lua如何計算兩個table的相加操作a+b。
如何在游戲中實際應用????
詳細介紹參見
http://www.runoob.com/lua/lua-metatables.html
https://www.cnblogs.com/blueberryzzz/p/8947446.html
協程
14、websocket的原理
15、egret常用的資源文件類型
ts文件 代碼文件
json文件 配置文件
png文件 圖片資源
exml文件 皮膚文件
16、tween動畫緩動類的理解
17、OpenGL WebGL了解
18、微信、facebook平台接入問題
1、拿到平台提供密鑰和appid
2、准備平台需要的接口 如支付回調接口
1、配置第三方庫sdk 如微信
2、參照文檔使用第三方庫提供的接口
19、js和ts的區別
20、哈希表的實現
21、lua C++ JS TypeScript的學習
22、對渲染優化的理解

