日韩 亚洲一区二_久久vs国产综合色大全_国产精品福利在线_欧美在线一级A片免费观看欧美在线_女同性毛片60分钟

您現(xiàn)在所在的位置:首頁(yè) >學(xué)員就業(yè) > 就業(yè)寶典 > 奇酷教育帶你挑戰高難度Unity3D試題,為面試打牢基礎(chǔ)(一)

奇酷教育帶你挑戰高難度Unity3D試題,為面試打牢基礎(chǔ)(一)

來(lái)源:奇酷教育 發(fā)表於:

想要得到高薪職位,第一關(guān)就是面試。那對(duì)於Unity3D開(kāi)發(fā)的小夥伴來(lái)說(shuō),面試時(shí)往往更注重對(duì)技術(shù)方面的考察,今天奇酷教育總結(jié)了一些面試時(shí)的技

想要得到高薪職位,第一關(guān)就是面試。那對(duì)於Unity3D開(kāi)發(fā)的小夥伴來(lái)說(shuō),面試時(shí)往往更注重對(duì)技術(shù)方面的考察,今天奇酷教育總結(jié)了一些面試時(shí)的技術(shù)性高頻題目,相信可以為大家帶來(lái)一些幫助。
1. 請簡(jiǎn)述值類(lèi)型與引用類(lèi)型的區(qū)別
 
答:區(qū)別:
1.值類(lèi)型存儲(chǔ)在內(nèi)存棧中,引用類(lèi)型數(shù)據(jù)存儲(chǔ)在內(nèi)存堆中,而內(nèi)存單元中存放的是堆中存放的地址。
2.值類(lèi)型存取快,引用類(lèi)型存取慢。
3.值類(lèi)型表示實(shí)際數(shù)據(jù),引用類(lèi)型表示指向存儲(chǔ)在內(nèi)存堆中的數(shù)據(jù)的指針和引用。
4.棧的內(nèi)存是自動(dòng)釋放的,堆內(nèi)存是.NET中會(huì)由GC來(lái)自動(dòng)釋放。
5.值類(lèi)型繼承自System.ValueType,引用類(lèi)型繼承自System.Object。
 
2.C#中所有引用類(lèi)型的基類(lèi)是什麼
 
答:引用類(lèi)型的基類(lèi)是System.Object 值類(lèi)型的基類(lèi)是System.ValueType
 
同時(shí),值類(lèi)型也隱式繼承自System.Object
 
 
3.請簡(jiǎn)述ArrayList和List<Int>的主要區(qū)別
 
答:ArrayList存在不安全類(lèi)型‘(ArrayList會(huì)把所有插入其中的數(shù)據(jù)都當(dāng)做Object來(lái)處理)
 
裝箱拆箱的操作(費(fèi)時(shí))
 
List是接口,ArrayList是一個(gè)實(shí)現(xiàn)了該接口的類(lèi),可以被實(shí)例化。
 
 
4.請簡(jiǎn)述GC(垃圾回收)產(chǎn)生的原因,並描述如何避免?
 
答:GC回收堆上的內(nèi)存
 
避免:1)減少new產(chǎn)生對(duì)象的次數(shù)
 
2)使用公用的對(duì)象(靜態(tài)成員)
 
3)將String換(huàn)為StringBuilder
 
5.請描述Interface與抽象類(lèi)之間的不同
 
答:抽象類(lèi)表示該類(lèi)中可能已經(jīng)有一些方法的具體定義,但接口就是公公只能定義各個(gè)方法的界面 ,不能具體的實(shí)現(xiàn)代碼在成員方法中。
類(lèi)是子類(lèi)用來(lái)繼承的,當(dāng)父類(lèi)已經(jīng)有實(shí)際功能的方法時(shí)該方法在子類(lèi)中可以不必實(shí)現(xiàn),直接引用父類(lèi)的方法,子類(lèi)也可以重寫(xiě)該父類(lèi)的方法。
實(shí)現(xiàn)接口的時(shí)候必須要實(shí)現(xiàn)接口中所有的方法,不能遺漏任何一個(gè)。
 
6.下列代碼在運(yùn)行中會(huì)產(chǎn)生幾個(gè)臨時(shí)對(duì)象?
string a = new string("abc");
            a = (a.ToUpper() + "123").Substring(0, 2);   
複製代碼
答:其實(shí)在C#中第一行是會(huì)出錯的(Java中倒是可行)。應(yīng)該這樣初始化:
string b = new string(new char[]{'a','b','c'});
複製代碼
 
7.下列代碼在運(yùn)行中會(huì)發(fā)生什麼問(wèn)題?如何避免?
List<int> ls = new List<int>(new int[] { 1, 2, 3, 4, 5 });
            foreach (int item in ls)
            {
                Console.WriteLine(item * item);
                ls.Remove(item);
            }   
複製代碼
答:會(huì)產(chǎn)生運(yùn)行時(shí)錯誤,因為foreach是只讀的。不能一邊遍歷一邊修改。
 
8.請簡(jiǎn)述關(guān)鍵字Sealed用在類(lèi)聲明和函數(shù)聲明時(shí)的作用
 
答:類(lèi)聲明時(shí)可防止其他類(lèi)繼承此類(lèi),在方法中聲明則可防止派生類(lèi)重寫(xiě)此方法。
 
 
9.請簡(jiǎn)述private,public,protected,internal的區(qū)別
 
答:
 
public:對(duì)任何類(lèi)和成員都公開(kāi),無(wú)限制訪(fǎng)問(wèn)
 
private:僅對(duì)該類(lèi)公開(kāi)
 
protected:對(duì)該類(lèi)和其派生類(lèi)公開(kāi)
 
internal:只能在包含該類(lèi)的程序集中訪(fǎng)問(wèn)該類(lèi)
 
protected internal:protected + internal
 
10.反射的實(shí)現(xiàn)原理?
 
答:審查元數(shù)據(jù)並收集關(guān)於它的類(lèi)型信息的能力。
反射個(gè)人認(rèn)為,就是得到程序集中的屬性和方法。
實(shí)現(xiàn)步驟:
1,導(dǎo )入using System.Reflection;
2,Assembly.Load("程序集")加載程序集,返回類(lèi)型是一個(gè)Assembly
3,   foreach (Type type in assembly.GetTypes())
            {
                string t = type.Name;
            }
   得到程序集中所有類(lèi)的名稱(chēng)
4,Type type = assembly.GetType("程序集.類(lèi)名");獲取當(dāng)前類(lèi)的類(lèi)型
5,Activator.CreateInstance(type); 創(chuàng)建此類(lèi)型實(shí)例
6,MethodInfo mInfo = type.GetMethod("方法名");獲取當(dāng)前方法
7,mInfo.Invoke(null,方法參數(shù));
 
11. .Net與Mono的關(guān)係?
 
答:Mono官網(wǎng)主頁(yè)
 
Mono is a software platform designed to allow developers to easily create 
cross platform applications. Sponsored by Xamarin, Mono is an open source 
implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.
 
mono是.net的一個(gè)開(kāi)源跨平臺(tái)工具,就類(lèi)似java虛擬機(jī),java本身不是跨平臺(tái)語言,但運(yùn)行在虛擬機(jī)上就能夠實(shí)現(xiàn)了跨平臺(tái)。.net只能在windows下運(yùn)行,mono可以實(shí)現(xiàn)跨平臺(tái)跑,
可以運(yùn)行於linux,Unix,Mac OS等。
 
 
12.簡(jiǎn)述Unity3D支持的作為腳本的語言的名稱(chēng)
 
答:Unity的腳本語言基於Mono的.Net平臺(tái)上運(yùn)行,可以使用.NET庫(kù),這也為XML、資料庫(kù)、正則表達(dá)式等問(wèn)題提供了很好的解決方案。
 
Unity裡的腳本都會(huì)經(jīng)過(guò)編譯,他們的運(yùn)行速度也很快。這三種語言實(shí)際上的功能和運(yùn)行速度是一樣的,區(qū)別主要體現(xiàn)在語言特性上。
 
JavaScript:和網(wǎng)頁(yè)中常用的JavaScript不一樣,它編譯後的運(yùn)行速度很快,語法方面也會(huì)有不少區(qū)別。
 
C#
 
Boo:可以看做是Python語言的變種,又糅合了Ruby和C#的特性,它是靜態(tài)類(lèi)型語言
 
 
13.Unity3D是否支持寫(xiě)成多線(xiàn )程程序?如果支持的話(huà)需要注意什麼?
 
答:參考http://www.unitymanual.com/3821.html
 
僅能從主線(xiàn )程中訪(fǎng)問(wèn)Unity3D的組件,對(duì)象和Unity3D系統(tǒng)調(diào)用
 
支持:如果同時(shí)你要處理很多事情或者與Unity的對(duì)象互動(dòng)小可以用thread,否則使用coroutine。
 
注意:C#中有lock這個(gè)關(guān)鍵字,以確保只有一個(gè)線(xiàn )程可以在特定時(shí)間內(nèi)訪(fǎng)問(wèn)特定的對(duì)象
 
 
14.Unity3D的協(xié)程和C#線(xiàn )程之間的區(qū)別是什麼?
 
答:多線(xiàn )程程序同時(shí)運(yùn)行多個(gè)線(xiàn )程 ,而在任一指定時(shí)刻只有一個(gè)協(xié)程在運(yùn)行,並且這個(gè)正在運(yùn)行的協(xié)同程序只在必要時(shí)才被掛起。
 
除主線(xiàn )程之外的線(xiàn )程無(wú)法訪(fǎng)問(wèn)Unity3D的對(duì)象、組件、方法。
 
Unity3d沒有多線(xiàn )程的概念,不過(guò)unity也給我們提供了StartCoroutine(協(xié)同程序)和LoadLevelAsync(異步加載關(guān)卡)後臺(tái)加載場(chǎng)景的方法。 StartCoroutine為什麼叫協(xié)同程序呢,所謂協(xié)同,就是當(dāng)你在StartCoroutine的函數(shù)體裡處理一段代碼時(shí),利用yield語句等待執(zhí)行結(jié)果,這期間不影響主程序的繼續(xù)執(zhí)行,可以協(xié)同工作。而LoadLevelAsync則允許你在後臺(tái)加載新資源和場(chǎng)景,所以再利用協(xié)同,你就可以前臺(tái)用loading條或動(dòng)畫提示玩家遊戲未卡死,同時(shí)後臺(tái)協(xié)同處理加載的事宜asynchronous[e ɪˈ s ɪŋ kr ə n ə s] .synchronous同步。 
 
 
15.U3D中用於記錄節(jié)點(diǎn)空間幾何信息的組件名稱(chēng),及其父類(lèi)名稱(chēng)
 
答:Transform 父類(lèi)是 Component
 
 
16.簡(jiǎn)述四元數(shù)的作用,四元數(shù)對(duì)歐拉角的優(yōu)點(diǎn)?
 
答:四元數(shù)用於表示旋轉(zhuǎn)
 
相對(duì)歐拉角的優(yōu)點(diǎn):
 
1)能進(jìn)行增量旋轉(zhuǎn)
 
2)避免萬(wàn)向鎖
 
3)給定方位的表達(dá)方式有兩(liǎng)種,互為負(fù)(歐拉角有無(wú)數(shù)種表達(dá)方式)
 
 
17.向量的點(diǎn)乘、叉乘以及歸一化的意義?
 
1)點(diǎn)乘描述了兩(liǎng)個(gè)向量的相似程度,結(jié)果越大兩(liǎng)向量越相似,還可表示投影
 
2)叉乘得到的向量垂直於原來(lái)的兩(liǎng)個(gè)向量
 
3)標(biāo)準(zhǔn)化向量:用在只關(guān)係方向,不關(guān)心大小的時(shí)候
 
 
18.矩陣相乘的意義及注意點(diǎn)
 
用於表示線(xiàn )性變換(huàn):旋轉(zhuǎn)、縮放、投影、平移、仿射
 
注意矩陣的蠕變:誤差的積累
 
 
19.為何大家都在行動(dòng)裝置上尋求U3D原生GUI的替代方案
 
不美觀(guān),OnGUI很耗費(fèi)時(shí)間,使用不方便