二面放一起了
杭州一家小公司的两次面试,第一次15分钟就通过,第二次拷打了半小时
Unity客户端连续两面
一面
Q:自我介绍一下
A:介绍了下自己学了多久unity,然后说学校离这里很近
Q:看简历ing….先来聊一下项目好了,你简历上说做了AssetBundle框架是吧,简单介绍一下assetbundle是干什么的?
A:我的理解是类似zip一样的一种压缩文件,我项目里用的是lz4压缩,这样可以一块一块的加载资源嘛。
Q:和Resource.load()的区别?
A:Resource.load()用的是红黑树,然后不加载完的话就没有办法进入游戏,所以用ab更好
Q:我看你简历上面其他项目……为什么想到做ab这块的内容,因为这块是比较后期的内容了吧
A:因为我想学学怎么做游戏优化,然后搜了一下发现资源管理这块比较重要,就去学了,然后学ab的时候看unity社区里边的那个xlua热更新就跟着一起学了
Q:热更新流程?
A:额……能问的再具体一点吗?
Q:就比方我要更新一个函数?
A:在c#这边给可能要更新的函数打上hotfix特性,然后去lua里边写逻辑,运行的时候程序会检查那个delegatebridge变量是否存在,有的话就说明这部分内容被替换了
Q:那如果我还要更新lua的代码呢
A:就是lua是用require模块,如果要更新的话我就去package.load里面把旧模块设置为nil,更新新模块,然后把新模块复制给旧模块,把旧模块放回去就好了
Q:你c#学的怎么样?
A:额……直接问几个问题看看?我不知道我算是什么水平
Q:值类型和引用类型
A:值类型存在栈上面是具体的值,然后引用类型存在堆上面返回的是地址
Q:装箱拆箱过程
A:装箱就是在堆上划拉一空间,然后把值放进去返回地址,拆箱就是反过来,然后会多一个检测是否是值类型的操作
Q:讲一下委托和事件
A:委托就是函数的容器,我理解的是装的是函数指针,然后事件是在委托基础上再封装了一层,只能+=或者-=,就比如说我们前面的委托已经装了函数,这个时候如果另一个人用了=那前面的就全都失效了,这时候就得用事件
Q:讲一下反射
A:反射就是可以动态地获取程序集里面的元数据,比如说构造函数,类型什么的,我不需要知道这个类是怎么写的
Q:unity里边有什么地方用了反射
A:(想了一会儿)Mono挂组件
Q:ugui有用过吗?怎么排序
A:sort layer
Q:那个排的是layer
A:记不太清楚了,这块做的比较少
反问环节
Q:评价一下我面试的表现
Q:基础还可以。
A:学习方向,去做更复杂的项目还是去看看图形学相关的内容
Q:学ui的mvc框架,图形学只是加分项
A:进公司有没有mentor?
Q:有,不过我们小公司的话是没有大厂那种岗前培训的,就是来了先干活然后不懂公司里直接问。
二面
Q:手撕算法随机分布的1w个数,找最大的100个
A:快排
Q:时间复杂度空间复杂度
A:O(nlogn)空间是原地的
Q:那如果是10亿个数呢
A:没思路
Q:说明题刷的少了,C++面向对象的三大特性?
A:封装继承多态
Q:多态怎么实现的?
A:用virtual关键字声明,然后每个声明了虚函数的类都会有虚函数表
Q:继续
A:运行的时候对象会根据虚指针指向虚函数表的内容返回对应的函数指针,就是函数入口
Q:如果我用一个基类指针指向派生类对象,调用函数返回的内容?
A:是子类重写的函数
Q:如果这个函数父类没有写呢?
A:不能这么写
Q:linux熟悉吗?
A:不太熟
Q:服务器方面?
A:阿巴阿巴……(沉默)
Q:看一下项目,做的确实是比较简单
然后聊了我学校里边的课与我的安排,我又聊了点c++11的东西
Q:讲一下11有哪些新特性
A:移动语义
Q:有什么作用
A:直接转移对象的所有权,避免深拷贝
Q:还有什么新特性
A:左值右值,智能指针,顺带扯了一嘴我ab包的项目就是沿用了智能指针里边引用计数的思路
Q:设计模式
A:写了饿汉式和懒汉式的单例
Q:还有没有别的方法实现
A:用局部静态变量
Q:单例模式有什么缺点
A:全局污染,只适合用来写管理器这样的类
反问环节
Q:评价
A:题应该是还没刷,其他和一面一样
Q:如果能进公司谁带
A:一面面试官
Q:上班制度
A:9:00-6:30可以弹性一小时