去蓝港在线面试Unity3D的笔试题.难吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了去蓝港在线面试Unity3D的笔试题.难吗相关的知识,希望对你有一定的参考价值。
参考技术A 前一阵子去蓝港面试unity3d程序,在前台登记以后被领到一个吧台前面填2张个人信息表,之后有人送来笔试题,做了1个小时,感觉挺难的。之后被带到下面面试,面试的是一个年龄稍大的(可能是项目经理或者技术总监),和另一个较为年轻的unity主程,人都比较随和,面试过程没有感觉压抑,想说什么就说什么。除了问一些技术问题,就是下面面试题的一个拓展,还问了有没有玩过蓝港的游戏,看我的手机是windowsphone的,就问了我之前有没有把自己做的东西发布到自己wp手机上。虽然自己技术还很欠缺,但是去蓝港面试一回还是很有收获的。 下面是这次的笔试题,拿出来分享,希望大家遇到自己会的能把答案在评论里贴出来,和大家一起分享探讨 。1、请简述值类型与引用类型的区别。
2、C#中所有引用类型的基类是什么?
3、请简述ArrayList和List之间的主要区别。
4、请简述GC(垃圾收集)产生的原因,并描述如何避免。
5、请描述interface和抽象类之间的不同。
6、下列代码在运行中,会产生几个临时对象?
string a=new string(“abc”);
a=(a.ToUpperCase()+“123”).SubString(0,2);
复制代码
7、下列代码在运行中会发生什么问题?如何避免?
List Is=new List(new int[]1,2,3,4,5);
foreach(int n in Is)
Debug.Log(n*n);
Is.Remove(n);
复制代码
8、请简述sealed关键字用在类声明时与函数声明时的作用。
9、请简述private,public,protected,internal的区别。
10、请简述反射的实现原理。
11、请简述.Net与Mono之间的关系。
12、请简述Unity3D支持的3种脚本语言的名称。
13、Unity3D是否支持写成多线程程序?如果支持的话要注意什么?
14、Unity3D中的协程(coroutine)和C#线程之间的区别是什么?
15、请说出Unity3D中勇于记录节点空间几何信息的组件名称,及其父类名称。
16、请简述四元数的作用以及四元数相对欧拉角的优点。
17、请简述向量的点乘,向量的叉乘以及向量归一化的意义。
18、请简述矩阵相乘的意义以及注意点。
19、请简述为何大家都在移动设备上寻求Unity3D的原生GUI系统的替代方案。
20、请简述如何在不同分辨率下保持UI的一致性。
21、请简述为什么dynamic font在unicode环境下优于static font。
22、请简述Renderer的作用,并描述MeshRenderer与SkinnedMeshRenderer之间的关系
与不同。
23、请简述SkinnedMesh的实现原理。
24、在场景中Prefab的作用,并描述如何在移动设备环境下恰当的使用它。
26、如何销毁一个UnityEngine.Object及其子类。
27、请简述为什么Unity3D中会发生在组建上出现数据丢失的情况(missing)。
28、请简述Unity3D下如何安全的在不同工程间迁移asset数据,请举出三种方法。
29、请简述MeshCollider和其他Collider的一个主要不同点。
30、当一个细小的高速运动的物体(如子弹)撞向另一个较大的物体时,可能出现什么
情况?如何避免?
31、请简述OnEnable,Aawake和Start在运行时的发生顺序。哪些可能在同一个对象的生
命期中发生。
32、请简述OnBecameVisible及OnBecameInvisible的发生时机,以及这一对回调方法的
意义。
33、请简述Unity3D如何获知场景中需要加载的数据。
34、请简述MeshRenderer中material和sharedmaterial的区别。
认认真真一字一句看到这里,点“推荐”、评论的都能找到一份满意的高薪unity3d工作。 *^◎^*本回答被提问者和网友采纳
某大厂的笔试题,解压压缩的字母串
这几天看到一个大厂的面试题,感觉比较有意思,是学习递归的好题目,下面和大家分享一下这道题的解法。
题目说明:
压缩的字母规则是,连续相同的字母串压缩成:连续的个数 +[字母串]。如 aaa,压缩成:3[a];amamam 压缩成 3[am]。
请实现解压缩字符串功能。实现程序语言不限制。完成时间两个小时,过程不能看手机,不能切屏。
自测样例,输入:3[k] 2[am] 预期输出:kkkamam
输入:2[k3[am]] 预期输出:kamamamkamamam
解题思路:
这个题目初看,解压缩的算法不难设计,只需要进行简单的递归就可以了,这里就不再赘述,而不用递归而且保证算法在o(n)时间内完成倒是有些难度。
这里需要用到栈的思想处理,倒序完成。
1.初始态中将输入字符串赋值给结果
2.找到最后一个[符号,取出其前面的数字以及与这个[最近的]符号,之间的所有字符,将这些字符串按照数字的个数展开,并用展开后的字符串对于数字[字符串]的原结构进行替换,保存到结果当中。
3处理完所有[即可完成解压。
代码如下:
import re
def UnFoldString(repeat,strInput):
if repeat<1:
return None
result=""
for i in range(0,repeat):
result=result+strInput
return result
def UnCompressString(strInput):
pat = r'\\d+'
result=strInput
numlist = re.findall(pat, strInput)#把所有数字通过re匹配出来,这个做法只适用于Python,后续可以优化
numIndex= len(numlist)-1#记录目前展开的位置
for j in range(0,len(result)):#遍历一次复杂度o(n)
i= len(result)-1-j#关键在于使用栈的方式,从后找到最后一个[
if result[i]=='[':
numlen=len(numlist[numIndex])
#print(numlen,i,numlist[numIndex],result[i-numlen:i])
if result[i-numlen:i]!=numlist[numIndex]:#如果最后一个[前面不是最后一个数字,肯定是有问题的
return None
else:
compressStr=result[i+1:].split(']')[0]#当前位置i对应的是[,那么从i+1到下一个]一定是要解压的字符,通过split方式最直观
comressStrLen=len(compressStr)+2
result=result[:i-numlen]+UnFoldString(int(numlist[numIndex]),compressStr)+result[i+comressStrLen:]
numIndex=numIndex-1
return result
strInput="3[k]2[am]"
print(UnCompressString(strInput))
strInput="2[k3[am]]"
print(UnCompressString(strInput))
strInput="12[k3[am]]"
print(UnCompressString(strInput))
发散题目:
当然这题做到这肯定没结束,如果在面试中出现这道题目,我肯定会问对于压缩算法的实现策略,也就是把输入输出调转过来。
输入:kamamamkamamam 预期输出: 2[k3[am]]
这个想递归实现的方式都不简单。
可以先考虑下基本思路,因为这个结果需要嵌套,也就是左子串,右子串和中间你已经找到的最长子串都需要进行递归。
其中找最长的子串可以考虑贪心算法,直接按照字符串一半长度逐步尝试。
然后逐步向右移位。把左、右半边不在最长子串中的序列递归压缩。
具体代码及注释如下:
def FindMaxsubstring(strInput):
#print(strInput)
strlen=len(strInput)
if strlen<2:
return 0,strInput,strlen
repeat=1
subStr=""
if strlen==2:
if strInput[0]==strInput[1]:
return 2,strInput[0],strlen
else:
return 0,strInput,strlen
for i in range(0,int(strlen/2)):
greedyIndex=int(strlen/2)-i
if greedyIndex<1:
break
repeatMax=int(strlen/greedyIndex)
j=2
while strInput[:greedyIndex]==strInput[greedyIndex*(j-1):greedyIndex*j]:
j=j+1
repeat=repeat+1
subStr=strInput[:greedyIndex]
strlen=greedyIndex
if repeat>1:
return repeat,subStr,greedyIndex*repeat
return 0, strInput, strlen
def GenResult(strInput):
repeat,lastRepeat=0,0
subStr,lastSubStr="",""
lastLen=0
leftIndex=0
strLen=len(strInput)
rightIndex=strLen
if strLen<2:
return strInput
for i in range(0,strLen-1):
lastRepeat,lastSubStr,lastRightIndex=FindMaxsubstring(strInput[i:])
if lastRepeat>1 and len(lastSubStr)>lastLen:
#print(lastSubStr,str(i))
repeat=lastRepeat
lastLen = len(lastSubStr)
subStr=lastSubStr#递归生成子串
rightIndex=lastRightIndex
leftIndex=i
if repeat <2:
return strInput
if leftIndex<2 and (strLen-rightIndex)<2:
return strInput[:leftIndex]+str(repeat)+"["+GenResult(subStr)+"]"+strInput[rightIndex+leftIndex:]
else:
return GenResult(strInput[:leftIndex]) + str(repeat) + "[" + GenResult(subStr) + "]" + GenResult(strInput[rightIndex+leftIndex:])
print(GenResult("kkkamam"))
print(GenResult("kamamamkamamam"))
以上是关于去蓝港在线面试Unity3D的笔试题.难吗的主要内容,如果未能解决你的问题,请参考以下文章