1. 請簡述值類型與引用類型的差別
答:
差別:
1.值類型存儲在內存棧中,引用類型數據存儲在內存堆中,而內存單元中存放的是堆中存放的地址。
2.值類型存取快,引用類型存取慢。
3.值類型表示實際數據,引用類型表示指向存儲在內存堆中的數據的指針和引用。
4.棧的內存是自己主動釋放的。堆內存是.NET中會由GC來自己主動釋放。
5.值類型繼承自System.ValueType,引用類型繼承自System.Object。
可參考http://www.cnblogs.com/JimmyZhang/archive/2008/01/31/1059383.html
2.C#中全部引用類型的基類是什么
答:
引用類型的基類是System.Object 值類型的基類是System.ValueType
同一時候。值類型也隱式繼承自System.Object
3.請簡述ArrayList和List<Int>的主要差別
答:
ArrayList存在不安全類型‘(ArrayList會把全部插入當中的數據都當做Object來處理)
裝箱拆箱的操作(費時)
List是接口,ArrayList是一個實現了該接口的類。能夠被實例化。
4.請簡述GC(垃圾回收)產生的原因,並描寫敘述怎樣避免
答
:GC回收堆上的內存
避免:1)降低new產生對象的次數
2)使用公用的對象(靜態成員)
3)將String換為StringBuilder
5.請描寫敘述Interface與抽象類之間的不同
答:
抽象類表示該類中可能已經有一些方法的詳細定義,但接口就是公公僅僅能定義各個方法的界面 ,不能詳細的實現代碼在成員方法中。
類是子類用來繼承的,當父類已經有實際功能的方法時該方法在子類中能夠不必實現。直接引用父類的方法。子類也能夠重寫該父類的方法。
實現接口的時候必須要實現接口中全部的方法,不能遺漏不論什么一個。
參考http://www.cnblogs.com/seapub/archive/2012/08/08/2628433.html
6.下列代碼在執行中會產生幾個暫時對象?
string a = new string("abc"); a = (a.ToUpper() + "123").Substring(0, 2);
答:事實上在C#中第一行是會出錯的(Java中倒是可行)。應該這樣初始化:
string b = new string(new char[]{'a','b','c'});
7.下列代碼在執行中會發生什么問題?怎樣避免?
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); }
答:會產生執行時錯誤,由於foreach是僅僅讀的。不能一邊遍歷一邊改動。
8.請簡述keywordSealed用在類聲明和函數聲明時的作用
答:
類聲明時可防止其它類繼承此類,在方法中聲明則可防止派生類重寫此方法。
9.請簡述private,public,protected,internal的差別
答:
public:對不論什么類和成員都公開。無限制訪問
private:僅對該類公開
protected:對該類和其派生類公開
internal:僅僅能在包括該類的程序集中訪問該類
protected internal:protected + internal
10.反射的實現原理?
答:審查元數據並收集關於它的類型信息的能力。
參考http://blog.163.com/xuanmingzhiyou@yeah/blog/static/1424776762011612115124188/
反射個人覺得。就是得到程序集中的屬性和方法。
實現步驟:
1,導入using System.Reflection;
2,Assembly.Load("程序集")載入程序集,返回類型是一個Assembly
3, foreach (Type type in assembly.GetTypes())
{
string t = type.Name;
}
得到程序集中全部類的名稱
4,Type type = assembly.GetType("程序集.類名");獲取當前類的類型
5,Activator.CreateInstance(type); 創建此類型實例
6,MethodInfo mInfo = type.GetMethod("方法名");獲取當前方法
7,mInfo.Invoke(null,方法參數);
11..Net與Mono的關系?
答:Mono官網主頁
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的一個開源跨平台工具。就類似java虛擬機,java本身不是跨平台語言。但執行在虛擬機上就能夠實現了跨平台。
.net僅僅能在windows下執行。mono能夠實現跨平台跑,
能夠執行於linux。Unix。Mac OS等。
12.簡述Unity3D支持的作為腳本的語言的名稱
答:Unity的腳本語言基於Mono的.Net平台上執行,能夠使用.NET庫,這也為XML、數據庫、正則表達式等問題提供了非常好的解決方式。
Unity里的腳本都會經過編譯,他們的執行速度也非常快。這三種語言實際上的功能和執行速度是一樣的。差別主要體如今語言特性上。
JavaScript:和網頁中經常使用的JavaScript不一樣,它編譯后的執行速度非常快,語法方面也會有不少差別。
C#
Boo:能夠看做是Python語言的變種,又糅合了Ruby和C#的特性。它是靜態類型語言
13.Unity3D是否支持寫成多線程程序?假設支持的話須要注意什么?
答:參考http://www.unitymanual.com/3821.html
僅能從主線程中訪問Unity3D的組件。對象和Unity3D系統調用
支持:假設同一時候你要處理非常多事情或者與Unity的對象互動小能夠用thread,否則使用coroutine。
注意:C#中有lock這個keyword,以確保僅僅有一個線程能夠在特定時間內訪問特定的對象
14.Unity3D的協程和C#線程之間的差別是什么?
答:http://blog.csdn.net/kongbu0622/article/details/8775037
多線程程序同一時候執行多個線程 。而在任一指定時刻僅僅有一個協程在執行,而且這個正在執行的協同程序僅僅在必要時才被掛起。
除主線程之外的線程無法訪問Unity3D的對象、組件、方法。
Unity3d沒有多線程的概念。只是unity也給我們提供了StartCoroutine(協同程序)和LoadLevelAsync(異步載入關卡)后台載入場景的方法。 StartCoroutine為什么叫協同程序呢。所謂協同,就是當
你在StartCoroutine的函數體里處理一段代碼時,利用yield語句等待執行結果,這期間不影響主程序的繼續執行,能夠協同工作。
而LoadLevelAsync則同意你在后台載入新資源和場景。所以再利用協同
,你就能夠前台用loading條或動畫提示玩家游戲未卡死,同一時候后台協同處理載入的事宜asynchronous[e ɪˈ s ɪŋ kr ə n ə s] .synchronous同步。
15.U3D中用於記錄節點空間幾何信息的組件名稱,及其父類名稱
答:Transform 父類是 Component
16.簡述四元數的作用。四元數對歐拉角的長處?
答:四元數用於表示旋轉
相對歐拉角的長處:
1)能進行增量旋轉
2)避免萬向鎖
3)給定方位的表達方式有兩種。互為負(歐拉角有無數種表達方式)
17.向量的點乘、叉乘以及歸一化的意義?
1)點乘描寫敘述了兩個向量的類似程度,結果越大兩向量越類似,還可表示投影
2)叉乘得到的向量垂直於原來的兩個向量
3)標准化向量:用在僅僅關系方向,不關心大小的時候
18.矩陣相乘的意義及注意點
用於表示線性變換:旋轉、縮放、投影、平移、仿射
注意矩陣的蠕變:誤差的積累
19.為何大家都在移動設備上尋求U3D原生GUI的替代方案
不美觀,OnGUI非常耗費時間,使用不方便
20.請簡述怎樣在不同分辨率下保持UI的一致性
NGUI非常好的攻克了這一點,屏幕分辨率的自適應性,原理就是計算出屏幕的寬高比跟原來的預設的屏幕分辨率求出一個對照值,然后改動攝像機的size。
原生GUI http://unity3d.9ria.com/?p=2587
NGUI http://blog.csdn.net/mfc11/article/details/17681429
21.為什么dynamic font在unicode環境下優於static font
Unicode是國際組織制定的能夠容納世界上全部文字和符號的字符編碼方案。
使用動態字體時,Unity將不會預先生成一個與全部字體的字符紋理。當須要支持亞洲語言或者較大的字體的時候,若使用正常紋理,則字體的紋理將非常大。
22.Render的作用?描寫敘述MeshRender和SkinnedMeshRender的關系與不同
A renderer is what makes an object appear on the screen。
23.簡述SkinnedMesh的實現原理
http://blog.csdn.net/n5/article/details/3105872
24.在場景中放置多個Camera並同一時候處於活動狀態會發生什么
答:
游戲界面能夠看到非常多攝像機的混合
25.Prefab的作用?怎樣在移動環境的設備下恰當地使用它?
答:
Prefab在實例化的時候用到,主要用於經常會用到的物體,屬性方便改動
http://www.cnblogs.com/88999660/archive/2013/03/15/2961663.html
26.怎樣銷毀一個UnityEngine.Object及其子類
答:
Destory
27.為什么Unity3D中會發生在組件上出現數據丟失的情況?
答:
組件上綁定的對象被刪除了
28.怎樣安全的在不同project間安全地遷移asset數據?三種
答:
將Assets文件夾和Library文件夾一起遷移
導出包
用unity自帶的assets Server功能
29.MeshCollider和其它Collider的一個主要不同點?
答:Convex?
30.當一個細小的快速物體撞向還有一個較大的物體時。會出現什么情況?怎樣避免?
穿透(碰撞檢測失敗)
http://forum.unity3d.com/threads/3353-collision-detection-at-high-speed
31.OnEnable、Awake、Start執行時的發生順序?哪些可能在同一個對象周期中重復的發生?
答
Awake -》OnEnable-》Start
OnEnable在同一周期中能夠重復地發生
http://answers.unity3d.com/questions/217941/onenable-awake-start-order.html
32.請簡述OnBecameVisible及OnBecameInvisible的發生時機,以及這一對回調函數的意義?
答
當物體是否可見切換之時。
能夠用於僅僅須要在物體可見時才進行的計算。
33.Unity3D怎樣獲知場景中須要載入的數據?
題目是獲取的意思?
Resource.Load
AssetBundle
34.MeshRender中material和sharedmaterial的差別?
改動sharedMaterial將改變全部物體使用這個材質的外觀。而且也改變儲存在project里的材質設置。
不推薦改動由sharedMaterial返回的材質。
假設你想改動渲染器的材質,使用material替代。