Flex4常見面試題

1.as2與as3.的最主要區別是什麼?
答:首先,as2 和as3是完全不同的語言,幾乎沒有兼容性可言。as2編譯用的AVM1虛擬機,as3用的AVM2,速度 快,提供了一些基礎異常處理。 as3是純的OOP,強類型語言。as2不是。具體的差別有太多太多。

 

2.flex的開發框架有哪些,它 們有什麼優缺點?
答: 最常見的當然是Cairngorm、Puremvc了,此外還有Mate,Swiz等等,據說被廣泛應用的已經有10幾款了。Cairngorm作爲 Adobe官方出品,有着貴族血統的它比較全面,是這些框架中已知bug最少的,但是基於他的應用相對臃腫複雜一些,需要對每個可以被觸發的事件寫一個對 應的Command,編碼量巨大,並且單元測試很不容易,不適合敏捷開發。Puremvc應該是現在用的最多的as框架了。比較完善、並且與 Cairngorm相比,更適合中小型應用的開發,它與Cairngorm一樣,也是以MVC模式爲中心,並以Façade作爲中央存儲器的單件類的形式 進行開發的。說下Mate,它是一個比較奇怪的框架,是基於標籤的事件驅動型的。也就是說你不能再隨意的寫as類的,在使用Mate的情況下,只能用 MXML來做這些事情。Swiz是Mate的孿生兄弟,長的挺像,沒具體用過,不大瞭解。

 

3.在flex開發中,很多代碼都 寫在mxml文件裏,爲了做到mvc模式,你是怎麼處理的。
我認爲mxml並不影響mvc模式啊。分兩種情況來討論,首先,是自己創建整個應用結構的時候,那我們可以手動將UI所在的 mxml歸爲一類,然後由Mediator去操作或者說控制這些組件既可了,然後Mediator又統一交給Controller去操作。如果採用其他框 架來進行開發的話,那就更不用來考慮這個問題了,像Cairngorm、Puremvc之類的框架已經很好的爲我們解決了這些問題。只要按照它們的使用規 範來進行開發,自然沒有問題。

 

4.如果發生內存泄露,你是如何解決的?
在profile觀察中已經內存泄漏是沒有很好的解決辦法的,至少我不知道,我能做的只是儘量去避免這種情況的發生,比如說 注意不要循環引用,特別是在使用Timer的時候要格外注意,不要忘記全局對象上的引用的清除,在創建控制器和模型的時候要注意一定要使用單件模式。在 addEventListener時候儘量採用弱引用、自引用、或者子對象引用,以避免內存泄漏。

 

5。as3.0垃圾回收器是如何工 作的?
flash player 8之前採用的是引用計數法,在flash player 8 之後用的是標記法,簡單的說就是:從應用的根節點開始,遍歷所有其上的引用,標記每個它所發現的對象。然後迭代遍歷每個被標記的對象,標記它們的子對象。 這個過程第歸進行,直到Player遍歷了應用的整個對象樹並標記了它所發現的每個東西。在這個過程技術的時候,可以安全地認爲,內存中那些沒有被打標記 的對象沒有任何活動引用,因此可以被安全地釋放內存。一般來說,flash player採用的是一種低頻的垃圾回收機制,Flash Player的垃圾回收發生在Flash Player需要另外請求內存之前。但並不是每次應用申請內存時都會導致垃圾回收的執行,只有當Flash佔用的內存緊張到一定程度時纔會執行真正的垃圾 回收,一定程度上取決於客戶端計算機的物理內存的大小。

 

6 flex和後臺語言是如何交互 的?
無疑就這兩種方法:remote object 或者是Http service

 

7。你是如何處理前端速度慢的問 題?
flex前端速度慢 其實仔細說應該分2部分,1.是flex生成的swf由於SDK龐大的關係,swf體積也跟着龐大了,這我們可以做的就是用Module動態加載,還有就 是RSL了。2.處理速度慢,遠程方法速度慢,這是AVM的硬傷了,基本沒有很好的解決方法,我們能做的只是讓這個異步進行的更完美一些,讓用戶在等待的 過程中,做其他的事情,以至於讓用戶忽略這段等待的時間。

 

8、請說下你理解AS3的事件 機制是什麼機制?你認爲正確的就可以說出來.
AS3事件流分三個階段:

1.捕獲階段 (即由根節點流向子節點,檢測每個節點是否註冊了監聽器)

2.目標階段 (激發在目標對象本身註冊的監聽程序)

3.冒泡階段 (從目標節點到根節點,檢測每個節點是否註冊了監聽器)

當中涉及了兩個屬性target和currentTarget,target是事件的派發者,currentTarget是正 在檢測的對象,當開始了事件流,事件的currentTarget屬性處於不斷變化中.

PS:註冊事件時捕獲階段默認是關 閉的,無論事件是否開啓了捕獲,事件流只會兩選一去執行註冊的監聽程序

關於 EventDispatcher三個函數的參數:

1.addEventlistener(事件類型,監聽函數,是否打開捕獲階段,監聽器優先級別,是否打開弱監聽)

2.removeEventListener(事件類型,監聽函數,是否打開捕獲階段) (前兩個參數是必須的,如果註冊監 聽器時打開了捕獲階段,那麼第三個參數也是必須的,否則會出現錯誤)

3.dispatchEvent(new Event(事件類型,是否冒泡,是否可以取消事件))

關於Event擴展有 兩點要注意:

1.可以定義字符串常量代表事件類型.

2.構造函數必須調用父類的構造函 數,super(type,bubbles,cancelable)

3.擴展Event可以使 Event帶自定義變量,從而可以傳遞數據.

 

9.請問 undefined 和 null 是否一樣,如果不一樣能否說出其中的區別呢?
不一樣,null 是沒有值的意思。undefined是申明未完成,或者類型未定等情況。

 

10. 創建常量知道怎麼創建嘛? 說下你是怎麼創建的.
比 如說:public static const STARTUP:String = "startup";
const PI:Number = 3.1415926;

 

11、請問用什麼方法自定義一個 事件呢?說下具體的方式.
自 定義事件,要麼就直接調用Event的構造函數,或者繼承於Event,寫一個子類。

 

12. 請問一個數組裏可以放不同的 類型嘛?
答:可以 var x:Array = ['a',1,new Button()];

 

13. 我想創建的視圖居中怎麼辦?
答:佈局策略裏面限定 爲居中。即 horizontalAlign="center" verticalAlign="middle"
或者在每個控件都以舞臺 的中心作爲相對座標來計算各自的xy值。

 

瞭解更多...請看:http://www.accptech.com/article/flex/1636_4.html

發佈了30 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章