参加了今日头条的H5游戏开发面试 主要是如下问题html
一、egret有几种屏幕适配方案git
Egret 目前支持的模式有:showAll
, noScale
, noBorder
, exactFit
, fixedWidth
, fixedHeight
, fixedNarrow
, fixedWide
。github
详细讲参考 http://bbs.egret.com/thread-31286-1-1.htmlweb
二、常见的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.jsonjson
资源加载配置文件位于项目目录的resource
文件夹内,Egret项目在建立时已经包含该文件api
配置文件中的”resource”咱们能够视为资源库,当前游戏使用到的资源均可以放到这里浏览器
③主题配置文件 default.thm.json
为指定的组件配置默认皮肤,全局指定一次便可,以后直接实例化组件,再也不须要显式设置组件的skinName属性
一般咱们但愿更新版本的时候避免被浏览器缓存,如今能够经过设置 EXML 版本号的方式来实现。
④清单文件 manifest.json 代码清单
三、如何在egret中引用外部库,外部库是否参与打包
外部库是复制到lib下参与打包的
1,首先在整个项目的外面创建一个第三方扩展库的文件夹,而后将下载好的微信api的扩展库粘贴到里面;
2,在项目的egretProperties.json文件中配置,modules字段是用来配置扩展模块和第三方库的
前提是,下载的微信api的库文件内的后缀为json的文件里面的 name属性的值和该json文件的名称相同,如,都是weixinapi 则egretproperties.json属性文件中如上图所示的配置,,而后 从新编译项目 egret build -e,编译的同时则会看见项目左侧的libs库目录下多了weixinapi的文件夹,即大功告成:
四、控件位置摆放与锚点
每一个显示对象都包含一个锚点,锚点默认位于显示对象的左上角。
当设置一个显示对象的坐标位置时,会以锚点为参照改变显示对象的绘图位置。同时,锚点相对于显示对象的位置也是能够改变的。
可经过anchorOffsetX
和 anchorOffsetY
属性访问修改锚点的位置。
五、打包图集的深刻理解,为何性能好
使用TextureMerger打包图集,TexMerger把小图合成大图后,生成png+json,用ResDepot加载后,会自动切成小图躺在资源库里任你在exml里调用
使用纹理集的好处不少,咱们经过将大量的图片拼合为一张图片从而减小网络请求,原先加载数次的图片资源如今加载一次便可。 同时,在引擎渲染的时候也会较少IO读取,从而提升性能。
六、九宫格的理解,哪里会缩放,哪里不缩放
上图中,用四条虚线将圆角矩形分割为9个区域,其中四个区域(图中区域编号1,3,7,9)包含了圆角矩形的四个圆角。拉伸图像时,1,3,7,9区域不拉伸,2,8区域仅横向拉伸,4,6区域仅纵向拉伸,5区域横向纵向都拉伸。
设置九宫格的属性是 Bitmap
类中的 scale9Grid
属性。
七、http的知识
参看图集http、三次握手
八、TCP和UDP的认识、websocket属于tcp仍是udp
TCP和UDP协议属于传输层协议
面向链接的TCP就是在正式通讯前必需要与对方创建起链接
面向非链接的UDP协议就是在正式通讯前没必要与对方先创建链接,无论对方状态就直接发送
九、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数据包。
十、A*寻路算法的理解
参看http://www.sohu.com/a/191037466_478315
弗洛伊德算法
十一、简单算法
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 }
十二、经常使用数据库
数据库资料参见 https://blog.csdn.net/github_39336148/article/details/80469708
1三、lua的知识 元表metatable和协程
元表
在 Lua table 中咱们能够访问对应的key来获得value值,可是却没法对两个 table 进行操做。
所以 Lua 提供了元表(Metatable),容许咱们改变table的行为,每一个行为关联了对应的元方法。
例如,使用元表咱们能够定义Lua如何计算两个table的相加操做a+b。
如何在游戏中实际应用????
详细介绍参见
http://www.runoob.com/lua/lua-metatables.html
http://www.javashuo.com/article/p-pqksdupb-bt.html
协程
1四、websocket的原理
1五、egret经常使用的资源文件类型
ts文件 代码文件
json文件 配置文件
png文件 图片资源
exml文件 皮肤文件
1六、tween动画缓动类的理解
1七、OpenGL WebGL了解
1八、微信、facebook平台接入问题
一、拿到平台提供密钥和appid
二、准备平台须要的接口 如支付回调接口
一、配置第三方库sdk 如微信
二、参照文档使用第三方库提供的接口
1九、js和ts的区别
20、哈希表的实现
2一、lua C++ JS TypeScript的学习
2二、对渲染优化的理解