天天看點

網上搜集的一些FLEX面試題

smartblack整理,轉載請注明出處

1. 使用Flex Bulider3 建立一下新的.mxml 的頁面時預設的背景是藍色的, 請問用什麼辦法能修改掉此背景顔色, 以至于下次建立時背景不是為預設的藍色的呢? 請寫出你認為正确的方法。

答:修改sdk/frameworks/projects/framework/default.css 裡Application 的backgroundColor: #0000FF;

2. 使用Flex Bulider3 如何跟蹤程式?

答:我知道的三種1.trace() 2. 設定斷點 3. 當不在調試模式時可以調用as 的Alert.show() 或js 的alert() 如:navigateToURL(new URLRequest("javascript:alert(traceMsg)"), "_self");

3. 請問enterFrame 和timerEvent 這2 個事件有什麼差別? 請說下具體的使用方法和相關的使用場合?

答:enterFrame 是按幀發生,timeEvent 是根據設定的Timer 類參數發生。如:

用ENTER_FRAME 控制小球圓周運動:

addEventListener(Event.ENTER_FRAME,ballMove);

用TIMER 控制小球圓周運動:

var myTimer:Timer=new Timer(83.3,0);// 關于該數的設定見TIMER 類的說明

myTimer.start();

myTimer.addEventListener(TimerEvent.TIMER,ballMove);

4. 請說下你了解AS3 的事件機制是什麼機制? 你認為正确的就可以說出來.

答:建立一個完整的事件機制需要四個步驟:注冊偵聽、分發事件、偵聽事件、移除偵聽。建立成功後,觸發事件,事件流會進行捕獲、目标和冒泡三個階段。捕獲階段由FP 沿顯示清單從根容器往下層層尋找觸發事件的目标對象,找到後即進入目标階段。然後,事件對象從目标對象再次沿顯示清單往上移動至根容器,遇到注冊偵聽的節點就調用偵聽函數。如果想中途中斷冒泡,可以使用stopPropagation 。

5. 請問addEventListener 裡面有幾個參數, 你能說出具體的使用方法嘛?

答:addEventListener(

  type:String,    事件的類型

  listener:Function,    監聽函數

  useCapture:Boolean = false,    是否打開捕獲功能

  priority:int = 0,    監聽器優先級别

  useWeakReference:Boolean = false    是否使用弱引用

)

6. 請問我想判斷一個字型是否是數字, 用什麼辦法去判斷呢?

答:isNaN(parseInt(strPara) 或 strPara is Number

7. 請問我想判斷一個字元或者一個對象的類型怎麼判斷呢?

答:typeof(obj)

8. 請問你了解 internal 控制符麼? 能說下具體使用方法和場合嘛?

答:internal 是預設的包内通路,展現了封裝思想和package 子產品化思想。舉例來說,A 類需要使用B 類和C 類的方法和屬性,但又不希望它們對其他類暴露,隻要将A,B,C 放入同一包内,包外的其他類就無法使用B ,C 類了。

9. 我想在某一點不去執行任何内容, 也就是說我想停止執行了, 你知道要怎麼做嘛?

答:設定斷點

10. 請問 undefined 和 null 是否一樣, 如果不一樣能否說出其中的差別呢?

答:undefined 是尚未初始化的無類型變量或未初始化的動态對象屬性的特殊值。null 是一個可以配置設定給變量的或由未提供資料的函數傳回的特殊值。它們的相同之處在于都未初始化,不同在于undefined 是無類型或動态類型的。如:

var v1;trace(v1);//undefined

var v2:*;trace(v2);//undefined

var v3:Object;trace(v3);//null

11. 建立常量知道怎麼建立嘛? 說下你是怎麼建立的.

答:const PI:Number = 3.1415926; public static const STARTUP:String = "startup";

12. 請問用什麼方法自定義一個事件呢? 說下具體的方式.

答:(1) 擴充Event 類或其子類

       (2) 定義一個static const 常量作為事件的type 傳入構造函數

       (3) 定義一個私有變量作為事件的Data 儲存資料,并為其添加getter 和setter

       (4) 覆寫toString() 和clone() 方法

13. 請問怎麼樣檢測本機的内容呢, 比如說, 我想知道本機的作業系統, 是否有視訊等這些.

答:flash.system.Capabilities.os 目前的作業系統

flash.system.Capabilities.hasStreamingVideo 系統是否可以播放視訊流

14. 請問用什麼辦法解決安全域的問題? 如果你不知道安全域的問題的話, 可以在本機中綁定一下圖檔, 然後再放到伺服器上, 就會出現此問題了.

答:配置安全沙箱的政策檔案crossdomain.xml 放置到伺服器根目錄,如:

<?xml version="1.0" encoding="UTF-8"?>

<cross-domain-policy>

       <allow-access-from domain="*" />

</cross-domain-policy>

15. 有三種基本數字類型:number, int, 和uint 請問有什麼差別. 具體說一下.

答:number 數字類型包含浮點型( 正0 負); int 整型( 正0 負); uint( 無符号整型)

16.parseInt 此方法轉化為int 型的方法, 請問你知道此方法的第二個參數是什麼意思嘛?

答:指定第一個參數字元串的進制,範圍為2-36 。例如parseInt(“100”,2)=4

17.Math.round( ) , Math.floor( ) 和Math.ceil( ) 三個方法都是四舍五入, 請問有什麼差別?

答:round 是取最接近的整數,即原數+0.5 後取整;floor 向下取整;ceil 向上取整

18. 請問一個數組裡可以放不同的類型嘛?

答:可以,如var x:Array = ['a',1,new Button()];

19.var letters:Array = ["a", "b", "c"]; 我想在這個數組裡搜尋‘c ’字元, 請問怎麼辦?

答:for(var i:* in letters)

     if(letters[i] == 'c') trace("c's position is " + i); 或

if(letters.toString().indexOf('c') > 0)

     trace( "c's position is " + letters.toString().indexOf('c') );

20. 怎麼樣轉換數組為字元串, 怎麼樣将字元串轉化為數組?

答:數組-> 字元串:trace(new Array('a','b','c').join("").toString());

字元串-> 數組: var arr:Array = new String("a,b,c").split(',');

21. 我想建立的視圖居中怎麼辦?

答:布局政策裡面限定為居中,即horizontalAlign="center" verticalAlign="middle"; 或者在每個控件都以舞台的中心作為相對坐标來計算各自的xy 值。

22. 請問知道層級的概念嘛? 如果知道請問怎麼樣交換2 個元件的層級呢?

答:層級表示的是顯示對象在顯示清單中的位置,從第0 層開始,位于最下面。

交換元件層級可以使用id 交換,也可以直接交換層級索引。如:

my_sprite.swapChildren(my_ball2, my_ball1);

my_sprite.swapChildrenAt(2, 1);

23. 請問你知道loader,URLLoader,URLStream 這個三種動态加載資源的具體使用場合, 以及有什麼差別嘛?

答:(1)Loader 像2.0 中MovieClip 的loadMovie 功能,用于加載外部的圖檔和SWF 檔案。使用 load() 方法來啟動加載。被加載的顯示對象将作為 Loader 對象的子級添加。在使用Loader 加載資料,添加偵聽事件時,一定要給Loader 的contentLoaderInfo 屬性增加事件,而不是給Loader 對象增加事件。

(2)URLLoader 類以文本、二進制資料或URL 編碼變量值對的形式先從URL 下載下傳資料,然後才将資料用于ActionScript 。它會發出有關下載下傳進度的通知,通過bytesLoaded 和bytesTotal 屬性以及已排程的事件,可以監視下載下傳進度。

(3)URLStream 類提供對下載下傳URL 的低級通路。資料一下載下傳,便可随即為應用程式使用,這和使用URLLoader 需要等到整個檔案下載下傳完不同。并且URLStream 類還允許在完成下載下傳前關閉流。已下載下傳檔案的内容将作為原始二進制資料提供。

(4)URLStream 、URLLoader 、Loader 等讀取外部資料的類,類裡的load 方法參數值是URLRequest 對象。如:

var request:URLRequest=new URLRequest("httpURL 位址");

loader.load(request);

24. 如何把MouseEvent 的localX 和localY 屬性轉化成全局坐标?

答:全局坐标系:stageX,stageY 。原點位于舞台左上角。

本地坐标系:localX,localY 。原點位于相對元件的左上角。

内容坐标系:contentMouseX 和contentMouseY 。描述滑鼠相對于整個容器内容的位置,用于當子元件的高或寬可能超出容器自身設定高寬的情況。

轉換方法:

contentToGlobal 内容到全局坐标

contentToLocal 内容到本地坐标

globalToContent 全局到内容坐标

globalToLocal 全局到本地坐标

localToContent 本地到内容坐标

localToGlobal 本地到全局坐标

25. 請問我現在有一個正方形的圖檔, 我想把他做成圓形, 有什麼辦法呢? 前提是用flex 或者as3

答:不清楚,是不是用BitMapData 的draw 方法實作呢?會的朋友請告訴我。

26. 請問新建立的一個sprite 能否被直接加到ui 容器裡? 如果不能請說出用什麼辦法能加入.

答:不能。先将sprite 加入一個擴充自UIComponent 的類,再加入UI 容器。

27. 我怎麼設定把一個文本框, 設定成一個密碼框?

答:将displayAsPassword 屬性設定為true

28. 我想在文本框裡隻能輸入abcd, 有什麼辦法能做到呢? 如果我想輸入除abcd 以外的其它都能輸入又怎麼做呢?

答:restrict=”a-d” 。restrict="^(a-d)"

29. 請問condenseWhite 這個屬性在TextInput 裡是表示什麼意思?

答:僅會應用于通過htmlText 屬性設定的文本,預設為false 。當設定為true 時,會删除文本中額外的換行和空白。

30. 我現在剛建立的檔案的text 為 this is a text, 我想設定光标在 is 上, 請問怎麼設定?

答:觸發事件,在偵聽函數上讓selectionBeginIndex=5,selectionEndIndex=6

31. 請問怎麼樣在文本框裡添加超連結?

答:(1) 使用文本框的htmlText 屬性添加必須以"event:" 開頭的超連結,如<a href='event:geturl|http:/|_blank'> 這兒</a>

(2) 添加對TextEvent.LINK 事件類型的偵聽,如addEventListener(TextEvent.LINK,clickLink);

(3)"event:" 後面的字元串将被包含在偵聽事件的text 屬性裡,如

private function clickLink(event:TextEvent):void

{

   var cmdArray:Array = event.text.split("|");

   if(cmdArray[0]=="geturl")

      navigateToURL(new URLRequest(cmdArray[1],cmdArray[2]);

}

32. 我想擷取系統裡的字型, 請問怎麼辦?

答:import flash.text.Font;

var allFonts:Array = Font.enumerateFonts(true);

allFonts.sortOn("fontName", Array.CASEINSENSITIVE);

var fontsLength:int=allFonts.length;

for(var i:int=0;i<fontsLength;i++)

trace(" 字型名稱:"+allFonts[i].fontName+" 字型樣式:"+allFonts[i].fontStyle+" 字型類型:"+allFonts[i].fontType)

33.substring( ) ,substr( ), slice(), 請說下3 種解析字元串的不同之處, 以及适用場合?

答:substring(v1,v2): 截取從v1 到v2 的字元串,包括v1, 不包括v2

substr(v1,v2): 從v1 開始,截取v2 長度

slice(v1,v2): 類似于substring ,不過可以接受負值參數,表示倒數第幾位

34. var fruits:XML =

Apple

Orange

Pear

Watermelon

;

以下有一個字元串, 我現在知道了color 為orange, 我想知道此color 相對應的name 節點的值, 我應該怎麼做?

答:原題的XML 不規範。找到name 節點值可以用fruits.fruits(@color==’orange’).name

35. 請說下目前使用flex 和背景互動的幾種方法, 以及适用場合.

答:(1) 基于AMF 消息格式的RemoteObject 元件,如Lcds/BlazeDs ,AMFPHP 等。

(2) 基于SOAP 消息格式的WebService ,對于使用SOAP 的伺服器友善連接配接。

(3) 基于純文字或擁有良好格式的XML 消息格式的HTTPService 元件。

一般來說,選用高效穩定的RemoteObject 中間件。

36. 我現在想在flex 裡調用JS 方法, 我要怎麼辦呢?

答:直接在AS 中使用ExternalInterface.call() 來調用JS 方法。如:

import flash.external.ExternalInterface;

ExternalInterface.call("simpleJSFunction");

ExternalInterface.call("simpleJSFunctionWithParameters","myParameter");

var result:String=ExternalInterface.call("simpleJSFunctionWithReturn");

37. 我想用JavaScript 調用ActionScript 函數, 我要怎麼辦呢?

答:使用ExternalInterface.addCallback 在JavaScript 裡設定對Flex 的回調方法并且在JavaScript 裡調用ActionScript 方法。

AS:

ExternalInterface.addCallback("function1",callback1);

privatefunctioncallback1():void

{

Alert.show("callback1executed");

}

JS:

container[swf].function1();

38.FileReference 請說下此對象的幾個相關事件

答:browse(typeFilter:Array = null):Boolean 顯示一個檔案浏覽對話框,讓使用者選擇要上載的檔案。

cancel():void 取消正在對該 FileReference 對象執行的任何上載或下載下傳操作。

download(request:URLRequest, defaultFileName:String = null):void 打開對話框,以允許使用者從遠端伺服器下載下傳檔案.

upload(request:URLRequest, uploadDataFieldName:String = "Filedata", testUpload:Boolean = false):void 開始将使用者選擇的檔案上載到遠端伺服器。

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 和背景語言是如何互動的?

答:見第35 題。

7. 你是如何處理前端速度慢的問題?

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

8.flash 與flex 是如何協調開發的?

答:這個問題可以這樣來了解,如果是确實需要用到FLEX SDK 的應用,那我們就可以建立一個flex 工程,具體需要flash 做UI 的時候,輸出成swc 作為flex 的skin ,如果說并不需要flex sdk ,隻是為了編碼友善而選擇flex 的話,那我們隻要建立一個as 工程,讓flex 作為flash 的編碼器。

元件

1. 我不想在容器裡顯示滾動條怎麼辦?

答:指定horizontalScrollPolicy 和verticalScrollPolicy 為off

2. 請問Flex bulider3 可以建立幾種不同的項目?

答:三種。Flex Project 、 AS Project 和Flex Library Project 。

3. 你了解RSL 嘛? 請說明下RSL 的使用方法, 以及使用RSL 為了解決什麼問題?

答:RSL(Runtime shared libraries) 即動态連結庫,在程式運作時由FlashPlayer 動态加載。靜态連結庫是SWC 檔案,通過編譯器的library-path 和include-libraries 編譯進應用程式。采用靜态連結的應用程式SWF 會産生比較大的檔案以及更長的下載下傳時間。使用RSL 的應用程式載入時間短且檔案比較小,而且提高了記憶體使用效率,隻是在開始需要花點時間下載下傳RSL 。RSL 的強大展現在多個應用程式共享公共代碼時,因為RSL 隻需要被下載下傳一次,多個應用程式動态連結到相同的RSL ,通路其中已經緩存在用戶端的資源。

使用RSL :

(1). 在項目檔案夾中點右建, 選擇"properties"-"Flex Build Path"-"Library Path"

(2). 該頁籤上我們看到"FrameWork linkage", 預設是"Merged into cdoe"(FLEX4 預設是RSL)

(3). 點開下拉, 選擇"runtime shared library(RSL)"

(4). 針對自定義的SWC ,修改其link type 為RSL ,選擇None, 同時勾上Automatically extract swf to deployment path( 自動将SWF 提取到部署路徑) 。如果想對不同域的RSL 共享,則選擇Digests (摘要),同時指定其Policy file url (政策檔案)。具體可參考FLEX SDK 中的SWC 檔案處理方式。

(5). 點選OK

4. 請問SWC 是做什麼用的, 怎麼樣自己制作一個SWC?

答:靜态連結庫是SWC 檔案,通過編譯器的library-path 和include-libraries 編譯進應用程式。

建立Flex Library Object 或使用compc 指令可以制作SWC 。

5.flex 生成出來的檔案都是很大, 請問你用什麼辦法進行縮小呢?

答:(1)RSL

(2)Module

(3) 外部加載資源

6. 請問trace( NaN == NaN ) 結果為true 還是false, 為什麼?

答:NaN 具有獨特的數學性質,任何與其相關的比較都會得到false 的計算結果。改用全局 isNaN() 函數檢測NaN 值,如下所示:

trace(NaN == NaN); // false!

trace(NaN != NaN); // false again!

trace(isNaN(NaN)); // true

7.warning: unable to bind to property ” on class ‘Object ’ (class is not an IEventDispatcher) 在使用ItemRender 時, 經常會出現這種警告, 請問想去除的話怎麼辦呢?

答:ArrayCollection 的子元素是無法作為資料源綁定的。可以聲明中間變量,在override set data 時将ArrayCollection 的子元素傳入,然後再将中間變量作為新的綁定源即可。

8. 現在流行MVC, 但是as 代碼有的時候還是大部分寫在mxml 裡面, 請問我想代碼分離怎麼辦呢?

答:嚴格按照MVC 架構規範書寫代碼。如果還是不行,可以考慮重寫元件或者從業務邏輯上解耦。沒必要用source 引用外部as 檔案來達到代碼分離,那沒有意義。

9. 我想繼承UIComponent 重新寫一個正方形的元件, 我應該怎麼做? 請說重點部分即可.

答:(1) 使用get 、set 初始化元件邊長等必要資料,指定能通過MXML 标記設定的屬性。

(2) 如果元件内有子元素,覆寫createChildren() 方法,使用addChild 加入這些子元素。

(3) 覆寫commitProperties() 方法,送出邊長等元件屬性變化。

(4) 覆寫measure() 方法,設定元件預設size 和預設最小size 。

(5) 覆寫updateDisplayList() 方法,依據布局确定子元素大小及位置。最後,使用graphics 類的drawRect 方法畫出正方形邊框。

10. 常用的幾個切換資料的元件比如: TabNavigator 等都有屬性 creationPolicy 你知道這種政策的使用方式是什麼嘛? 以及優, 缺點呢?

答:延遲執行個體化。優點是可以更快地加載元件,缺點是首次通路其他元件時,由于需要重新加載此元件,可能會有一定的延遲。

11. 我想在application 裡擷取目前運作的URL, 我要怎麼擷取.

答:Application.application.url

12. 請說下事件裡的currentTarget 和 target 的差別?

答:在事件流的過程中,目标階段确定的目标對象由Event 中的target 屬性來記錄,冒泡階段移動的遊标則由currentTarget 來記錄。事件對象冒泡過程中每往上移動一級,就會克隆出一個僅與前副本currentTarget 不同的新副本。

13. 請列舉下你常用的幾種effects, 并說明使用原因.

答:SoundEffect ,為了播放MP3

TweenLite 很多特效

14.HBox,VBox 和canvas 有什麼差別呢? 試說出其中幾點

答:canvas 隻有絕對布局,沒有布局管理器。

HBox,VBox 則相反,沒有絕對布局,隻有相對布局。

15. 請問我想在list 裡選中多行資訊, 我要怎麼做呢?

答:設定allowMultipleSelection 為true

16.Alert 裡面有幾個屬性, 我想設定圖檔怎麼辦呢?

答:使用iconClass 屬性指定圖檔

17. 請問你是否設定過樣式呢, 我想動态設定樣式怎麼辦呢? 如果我想在as 代碼裡設定樣式我又要怎麼辦呢?

答:使用setStyle ()

18. 你能說一下UIComponent 的生命周期嘛? 以及相關的使用場合呢?

答:(1) 調用元件構造函數

(2) 設定元件屬性

(3) 調用addChild() 将元件添加到父元件顯示清單

(4) 元件的parent 屬性設定為對父容器的引用

(5) 設定樣式

(6) 元件分發preinitialize 事件

(7) 調用元件createChildren()

(8) 調用 invalidateProperties() ,invalidateSize() ,invalidateDisplayList() 失效方法,FLEX 将在下一個“渲染事件”(render event) 期間對相應的commitProperties() ,measure() , updateDisplayList() 方法進行調用。這個規則唯一例外就是當使用者設定元件的height 和width 屬性時, Flex 不會調用measure() 方法。也就是說,隻有當元件的explicitWidth 和explicitHeight 屬性是NaN 時Flex 才會調用measure() 方法。

(9) 元件分發initialize 事件。此時元件所有的子元件初始化完成,但元件尚未更改size 和布局,可以利用這個事件在元件布局之前執行一些附加的處理

(10) 在父容器上分發childAdd 事件

(11) 在父容器上分發initialize 事件

(12) 在下一個“渲染事件”(render event) 中, Flex 執行以下動作:

a. 調用元件的commitProperties() 方法

b. 調用元件的measure() 方法

c. 調用元件的layoutChrome() 方法

d. 調用元件的updateDisplayList() 方法

e. 在元件上分發updateComplete 事件

(13) 如果commitProperties() , measure() ,updateDisplayList() 方法調用了invalidateProperties() ,invalidateSize() ,invalidateDisplayList() 方法,則Flexh 會分發另外一個render 事件

(14) 在最後的render 事件發生後, Flex 執行以下動作:

a. 設定元件visible 屬性使其可視

b. 元件分發creationComplete 事件,元件的大小(size) 和布局被确定,這個事件隻在元件建立時分發一次

c. 元件分發updateComplete 事件。無論什麼時候,隻要元件的布局(layout) ,位置,大小或其它可視的屬性發生變化就會分發這事件,然後更新元件來正确地顯示。

19. 請問你是否發現過 flex3 裡的bug 呢, 請列舉一些?

答:flex Module 記憶體洩露,對象無法釋放。

20. 列舉出flex 裡面的幾個綁定資料對象的方式

答:對自已的類或者變量添加綁定功能:

(1) 類前使用[Bindable] 表示所有屬性都支援綁定,此類必須實作IEventDispatcher 接口。

(2) 可以給變量聲明前或變量getter setter 前使用[Bindable] 。如果getter 和setter 方法同名,那麼給其中一個[Bindable] ,相當于給兩個都用了[Bindable] 。

使用擁有綁定功能的屬性:

(1) 、MXML 的{} 方式,如:{myInput.text}{myVar1+myVar2}{myBtn}

(2) 、MXML 的<mx:Binding> 方式。和{} 相同,可以多綁一,可以雙向綁定。如<mx:Binding source="myInput.text" destination="myBtn.label"/>

(3) 、AS 的mx.binding/utils.BindingUtils 類的bindProperty () 方法或bindSetter () 方法

(4) 、AS 的mx.binding.utils.ChangeWatcher 的watch () 方法

21. 請問我自己定義了一個元件, 我想在元件裡的屬性裡設定幾個預設值, 我要怎麼設定呢?

答:在定義元件時,初始化元件屬性時即可指定預設值。

22.callLater() 方法怎麼使用, 為什麼要使用這個方法呢?

答:callLater(method:Function, args:Array):void

其中method 是函數名,args 是要傳入函數的參數。

callLater 指定的函數在下次重新整理螢幕的時候才會執行,這可以確定在對某個對象進行操作時對象已經建立完畢。當然也可以利用這個特點來制作漸進動畫。

23. 請問你是否使用過module 這種方法去做項目呢? 他的優, 缺點是什麼呢? 使用元件的方式加載的話, 他的優, 缺點是什麼呢?

答:優點是合理分割了主Application ,子產品化開發。更小的SWF 檔案體積,配合RSL 和延遲加載政策,大大減少使用者等待時間。缺點就是容易引起記憶體洩露。

24. 目前網頁裡都有導航, 請問在Flex 要做導航要注意一些什麼呢? 以及怎麼樣做呢?

答:注意預設的延遲執行個體化可能會導緻某些對象為空。

25. 我想在一個錯誤的圖檔連結裡, 定義一下預設的圖檔怎麼做呢?

答:控制Image 的source 屬性,當圖檔連結出現錯誤時,指定預設連結。

26. 請試寫一個自定義的驗證元件

答:

package myCompenent

{

    import mx.validators.Validator;// 引用Validator 類

    import mx.validators.ValidationResult;// 引用ValidationResult 類

    public class myValidators extends Validator

    {

        public function myValidators()// 構造函數

        {

            super();

        }

        private var results:Array;// 定義一個數組,用以存儲錯誤

        // 重寫驗證函數

        override protected function doValidation(value:Object):Array

        {

            var s:String = value as String;

            results = [];// 清空數組

            results = super.doValidation(value);// 先用繼承類中的doValida tion 方法驗證

            if (results.length > 0)// 如果驗證時有錯,傳回錯誤資訊

                return results;

            if(s.length>6)// 自定義驗證,字元長度不超過6

            {

                // 記錄出錯資訊

                results.push(new ValidationResult(true,"text","StringTooLong", " 字元長度超過6 了"));

            }

            return results;

        }

    }

}

27. 請說明下trigger triggerEvent 在驗證元件裡是什麼意思, 具體怎麼使用呢?

答:指定觸發驗證的元件和觸發事件,預設是source 指定的元件和valueCommit 事件。

具體來說,多個validator 的source 對應多個元件,但它們的trigger 都指向一個送出按鈕,triggerEvent 都是click 。這樣,隻會在點選送出按鈕時,才觸發所有驗證。

28.ExternalInterface, LocalConnection 2 者有什麼差別?

答:ExternalInterface 是Flex 和Javascript 通迅使用;

LocalConnection 可以讓運作于同一台計算機的本地應用程式進行互動,使用AMF3 格式通信,相容以前版本。

29. 你是否使用過flex 的測試工具呢? 請說明下具體是哪種, 以及使用方式, 你為什麼使用這種工具?

答:沒有,隻聽過FlexUnit ,FlexMonkey 。

30. 我能把CSS 編譯成swf 嘛?

答:可以,在CSS 檔案上右鍵選擇Compile CSS to SWF 。

31. 請用as3 列舉下你用過的模式

答:工廠模式,單例模式

32.Embed 綁定圖檔有什麼缺點?

答:直接編譯到swf 檔案中,造成其體積過大。而且由于嵌入代碼中,維護不便。

33.TitleWindow 的元件是可以拖動的, 我不想讓他拖動我要怎麼辦呢?

答:讓isPopUp 屬性=false ,同時設定彈出視窗為模态視窗,禁止與其他視窗互動。

34. 你是否使用過profile, 你覺得這個工具怎麼樣, 優, 缺點是什麼呢?

答:可以很友善地觀察對象的建立和銷毀,幫助檢查記憶體洩露問題。

35. 你是否做過flex 前端的性能優化, 你覺得怎麼做是比較完美的?

答:(1) 、避免容器的多級嵌套,減少相對尺寸、相對定位的使用。

(2) 、盡量使用輕量級的容器

(3) 、避免使用大體積的元件,比如DataGrid 、AdvancedDataGrid

(4) 、處理資料時多用分頁的方式

(5) 、少使用setStyle

(6) 、使用延遲執行個體化加載子元件

36. 你是否了解E4X, 請說明一下優, 缺點?

答:E4X 是在ECMA-357 标準中定義的,并成為AS3 的一部分。優點是提供更簡明和可讀性強的文法從XML 中查找和提取資料。

37. 請列舉一下你知道的影響性能的幾個因素?

答:同上面第35 題。

38. 請說明一下ShareObject 的使用方法? 以及優, 缺點?

答:getLocal() 用來指定存儲在用戶端的路徑。

data 屬性用來指定要存儲的資料内容。

flush 方法負責把資料内容寫入。

clear 方法用于清除儲存的資訊。

39. 請列舉一下, 你認為不錯的網站或者blog.

答:insideRIA ,AS 天地會,AIRIA ,javeeye ,N 神,杜增強,牛牛豬研究所,黑羽

40. 我現在給你100 萬做一個flex 項目, 你認為成功的要素在哪呢?

答:(1) 資料和需求等傳統軟體項目的成功要素

(2) 子產品化開發,MVC 架構

(3)swf 檔案減肥,運作效率,記憶體洩露問題,前台優化

(4) 開源元件的使用

繼續閱讀