actionscript面試題
actionscript面試會(huì)出什么題呢?下面是學(xué)習(xí)啦小編為大家?guī)?lái)的actionscript面試題,相信對(duì)你會(huì)有幫助的。
actionscript面試題
1.as2與as3.的最主要區(qū)別是什么?
答:首先,as2和as3是完全不同的語(yǔ)言,幾乎沒(méi)有兼容性可言。as2編譯用的AVM1虛擬機(jī),as3用的AVM2,速度快,提供了一些基礎(chǔ)異常處理。 as3是純的OOP,強(qiáng)類型語(yǔ)言。as2不是。具體的差別有太多太多。
2.flex的開發(fā)框架有哪些,它們有什么優(yōu)缺點(diǎn)?
答: 最常見(jiàn)的當(dāng)然是Cairngorm、Puremvc了,此外還有Mate,Swiz等等,據(jù)說(shuō)被廣泛應(yīng)用的已經(jīng)有10幾款了。Cairngorm作為 Adobe官方出品,有著貴族血統(tǒng)的它比較全面,是這些框架中已知bug最少的,但是基于他的應(yīng)用相對(duì)臃腫復(fù)雜一些,需要對(duì)每個(gè)可以被觸發(fā)的事件寫一個(gè)對(duì) 應(yīng)的Command,編碼量巨大,并且單元測(cè)試很不容易,不適合敏捷開發(fā)。Puremvc應(yīng)該是現(xiàn)在用的最多的as框架了。比較完善、并且與 Cairngorm相比,更適合中小型應(yīng)用的開發(fā),它與Cairngorm一樣,也是以MVC模式為中心,并以Façade作為中央存儲(chǔ)器的單件類的形式 進(jìn)行開發(fā)的。說(shuō)下Mate,它是一個(gè)比較奇怪的框架,是基于標(biāo)簽的事件驅(qū)動(dòng)型的。也就是說(shuō)你不能再隨意的寫as類的,在使用Mate的情況下,只能用 MXML來(lái)做這些事情。Swiz是Mate的孿生兄弟,長(zhǎng)的挺像,沒(méi)具體用過(guò),不大了解。
3.在flex開發(fā)中,很多代碼都寫在mxml文件里, 為了做到mvc模式,你是怎么處理的。
我認(rèn)為mxml并不影響mvc模式啊。分兩種情況來(lái)討論,首先,是自己創(chuàng)建整個(gè)應(yīng)用結(jié)構(gòu)的時(shí)候,那我們可以手動(dòng)將UI所在的mxml歸為一類,然后由 Mediator去操作或者說(shuō)控制這些組件既可了,然后Mediator又統(tǒng)一交給Controller去操作。如果采用其他框架來(lái)進(jìn)行開發(fā)的話,那就更 不用來(lái)考慮這個(gè)問(wèn)題了,像Cairngorm、Puremvc之類的框架已經(jīng)很好的為我們解決了這些問(wèn)題。只要按照它們的使用規(guī)范來(lái)進(jìn)行開發(fā),自然沒(méi)有問(wèn) 題。
4.如果發(fā)生內(nèi)存泄露,你是如何解決的?
在profile觀察中已經(jīng)內(nèi)存泄漏是沒(méi)有很好的解決辦法的,至少我不知道,我能做的只是盡量去避免這種情況的發(fā)生,比如說(shuō) 注意不要循環(huán)引用,特別是在使用Timer的時(shí)候要格外注意,不要忘記全局對(duì)象上的引用的清除,在創(chuàng)建控制器和模型的時(shí)候要注意一定要使用單件模式。在 addEventListener時(shí)候盡量采用弱引用、自引用、或者子對(duì)象引用,以避免內(nèi)存泄漏。
5。as3.0垃圾回收器是如何工作的?
flash player 8之前采用的是引用計(jì)數(shù)法,在flash player 8 之后用的是標(biāo)記法,簡(jiǎn)單的說(shuō)就是:從應(yīng)用的根節(jié)點(diǎn)開始,遍歷所有其上的引用,標(biāo)記每個(gè)它所發(fā)現(xiàn)的
對(duì)象。然后迭代遍歷每個(gè)被標(biāo)記的對(duì)象,標(biāo)記它們的 子對(duì)象。這個(gè)過(guò)程第歸進(jìn)行,直到Player遍歷了應(yīng)用的整個(gè)對(duì)象樹并標(biāo)記了它所發(fā)現(xiàn)的每個(gè)東西。在這個(gè)過(guò)程技術(shù)的時(shí)候,可以安全地認(rèn)為,內(nèi)存中那些沒(méi)有 被打標(biāo)記的對(duì)象沒(méi)有任何活動(dòng)引用,因此可以被安全地釋放內(nèi)存。一般來(lái)說(shuō),flash player采用的是一種低頻的垃圾回收機(jī)制,F(xiàn)lash Player的垃圾回收發(fā)生在Flash Player需要另外請(qǐng)求內(nèi)存之前。但并不是每次應(yīng)用申請(qǐng)內(nèi)存時(shí)都會(huì)導(dǎo)致垃圾回收的執(zhí)行,只有當(dāng)Flash占用的內(nèi)存緊張到一定程度時(shí)才會(huì)執(zhí)行真正的垃圾 回收,一定程度上取決于客戶端計(jì)算機(jī)的物理內(nèi)存的大小。
6 flex和后臺(tái)語(yǔ)言是如何交互的?
無(wú)疑就這兩種方法:remote object 或者是Http service
7。你是如何處理前端速度慢的問(wèn)題?
flex前端速度慢 其實(shí)仔細(xì)說(shuō)應(yīng)該分2部分,1.是flex生成的swf由于SDK龐大的關(guān)系,swf體積也跟著龐大了,這我們可以做的就是用Module動(dòng)態(tài)加載,還有就 是RSL了。2.處理速度慢,遠(yuǎn)程方法速度慢,這是AVM的硬傷了,基本沒(méi)有很好的解決方法,我們能做的只是讓這個(gè)異步進(jìn)行的更完美一些,讓用戶在等待的 過(guò)程中,做其他的事情,以至于讓用戶忽略這段等待的時(shí)間。
8.flash與flex是如何協(xié)調(diào)開發(fā)的?
這個(gè)問(wèn)題可以這樣來(lái)理解,如果是確實(shí)需要用到FLEX SDK的應(yīng)用,那我們就可以建立一個(gè)flex工程,具體需要flash做UI的時(shí)候,輸出成swc作為flex的skin,如果說(shuō)并不需要flex sdk,只是為了編碼方便而選擇flex的話,那我們只要建立一個(gè)as工程,讓flex作為flash的編碼器。
9.使用Flex Bulider3建立一下新的.mxml的頁(yè)面時(shí)默認(rèn)的背景是藍(lán)色的,請(qǐng)問(wèn)用什么辦法能修改掉此背景顏色,以至于下次創(chuàng)建時(shí)背景不是為默認(rèn)的藍(lán)色的呢?請(qǐng) 寫出你認(rèn)為正確的方法.
還真不會(huì),我的做法一般是在這個(gè)工程里面,建一個(gè)總的css,都在里面規(guī)范起來(lái),包括背景色啊,還有字體大小等等。。
10. 使用Flex Bulider3如何跟蹤程序?
裝個(gè)debug版本的flash player,到時(shí)候在FB里面F11 debug它咯。
11. 請(qǐng)問(wèn)enterFrame和timerEvent這2個(gè)事件有什么區(qū)別?請(qǐng)說(shuō)下具體的使用方法和相關(guān)的使用場(chǎng)合?
不會(huì) 我覺(jué)得差不多,不過(guò)我一般用enterFrame,還請(qǐng)高人指點(diǎn)。。
12. 請(qǐng)說(shuō)下你理解AS3的事件機(jī)制是什么機(jī)制?你認(rèn)為正確的就可以說(shuō)出來(lái).
AS3事件流分三個(gè)階段:
1.捕獲階段 (即由根節(jié)點(diǎn)流向子節(jié)點(diǎn),檢測(cè)每個(gè)節(jié)點(diǎn)是否注冊(cè)了監(jiān)聽(tīng)器)
2.目標(biāo)階段 (激發(fā)在目標(biāo)對(duì)象本身注冊(cè)的監(jiān)聽(tīng)程序)
3.冒泡階段 (從目標(biāo)節(jié)點(diǎn)到根節(jié)點(diǎn),檢測(cè)每個(gè)節(jié)點(diǎn)是否注冊(cè)了監(jiān)聽(tīng)器)
當(dāng)中涉及了兩個(gè)屬性target和currentTarget,target是事件的派發(fā)者,currentTarget是正在檢測(cè)的對(duì)象,當(dāng)開始了事件 流,事件的currentTarget屬性處于不斷變化中.
PS:注冊(cè)事件時(shí)捕獲階段默認(rèn)是關(guān)閉的,無(wú)論事件是否開啟了捕獲,事件流只會(huì)兩選一去 執(zhí)行注冊(cè)的監(jiān)聽(tīng)程序
關(guān)于EventDispatcher三個(gè)函數(shù)的參數(shù):
1.addEventlistener(事件類型,監(jiān)聽(tīng)函數(shù),是 否打開捕獲階段,監(jiān)聽(tīng)器優(yōu)先級(jí)別,是否打開弱監(jiān)聽(tīng))
2.removeEventListener(事件類型,監(jiān)聽(tīng)函數(shù),是否打開捕獲階段) (前兩個(gè)參數(shù)是必須的,如果注冊(cè)監(jiān)聽(tīng)器時(shí)打開了捕獲階段,那么第三個(gè)參數(shù)也是必須的,否則會(huì)出現(xiàn)錯(cuò)誤)
3.dispatchEvent(new Event(事件類型,是否冒泡,是否可以取消事件))
關(guān)于Event擴(kuò)展有兩點(diǎn)要注意:
1.可以定義字符串常量代表事件類型.
2. 構(gòu)造函數(shù)必須調(diào)用父類的構(gòu)造函數(shù),super(type,bubbles,cancelable)
3.擴(kuò)展Event可以使Event帶自定義變 量,從而可以傳遞數(shù)據(jù).
13.請(qǐng)問(wèn)addEventListener里面有幾個(gè)參數(shù),你能說(shuō)出具體的使用方法嘛?
這題出的有點(diǎn)像考API記憶力呵呵, 它的五個(gè)參數(shù)分別是addEventlistener(事件類型,監(jiān)聽(tīng)函數(shù),是否打開捕獲階段,監(jiān)聽(tīng)器優(yōu)先級(jí)別,是否打開弱監(jiān)聽(tīng))
看過(guò)“actionscript面試題”的人還看了: