天天看點

[轉載]as3面試題

[轉載]as3面試題

2011年08月01日

  面試題

  1. 你對MVC的了解??

  答:MVC就是模型 視圖 控制器的縮寫 視圖和使用者互動 通過事件導緻控制器改變 控制器改變導緻 模型改變 或者控制器同時改變兩者 模型改變 導緻視圖改變 或者視圖改變 潛在的從模型裡面獲得參數 來改變自己。

  Mvc就是一種模型 一種程式設計思想。

  請解釋下MVC模式

  MVC(Model-View-Controller),即把一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三個層――模型層、視圖層、控制層。

  視圖(View):代表使用者互動界面,MVC設計模式對于視圖的處理是限于視圖上資料的采集和處理,以及使用者的請求,而不包括在視圖上的業務流程的處理。

  模型(Model):業務流程/狀态的處理以及業務規則的制定。業務流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的資料,并傳回最終的處理結果。業務模型的設計可以說是MVC的核心。

  控制(Controller):可以了解為從使用者接收請求, 将模型與視圖比對在一起,共同完成使用者的請求,但是它卻不做任何的資料處理。

  它的優勢在與:開發人員可以隻關注整個結構中的其中某一層,可以很容易的用新的實作來替換原有層次的實作,可以降低層與層之間的依賴,有利于标準化,利于各層邏輯的複用

  2. as3怎樣連接配接資料庫??

  答:as3 要和資料庫通信 一般通過地三方語言 比如jsp php 等

  As3通過解析xml裡面的資料和資料庫通信。

  3. 多場景如果互相切換(考慮效率);

  答:通過nextscene()函數

  或者用Loader 加載另外的swf檔案 來場景切換。

  4. 怎麼擷取居中的位置??

  答:mc.x=stage.StageWidth/2

  mc.y=stage.StageHeight/2

  5. 了解as3與PHP通信麼?

  答:通過apache軟體 首先需要兩個檔案 我随便起一個名字test.php 和 test.fla

  把他們放在apache運作目錄下面

  As代碼裡面 主要用到 urlloader urlrequest urlvariable等類 用urlrequest.data 屬性和

  Urlrequest.method等屬性 來和php傳參數。

  Php裡面 發送什麼 as就可以接收到什麼 這樣可以實作as3和php的通信。

  6:談談對A*尋路算法的了解

  答: 一個估價值函數 f(n)=g(n)+h(n)

  g(n)就是當時目标的位置到指定點的位置的一個值

  h(n)就是指定點的位置到目标點的位置的的一個值

  7: as2與as3.的最主要差別是什麼?,以及互相的優缺點

  答:as2和as3最大的差別在于 as2是面向過程的 as3是純面向對象的

  As3增加了很多新的東西 比如正規表達式 ,垃圾回收機制,增加了很多error類。

  裡面的函數架構變了很多 頂級函數縮減了很多 as3的架構更合理

  8: 談談你對面向對象的了解

  答:面向對象關鍵是對象,引用一句話“一切事物結對象”;對象有它固有的屬性和方法,

  對象也就是由屬性的集合和方法的集合構成的, 談到對象了,對象是類的一個執行個體。

  類和對象是面向對象的基礎 類是對象的一個抽象,不是具體的執行個體, 比如說 狗類

  分為很多種,而狗就是一個抽象, 狗有四條腿,兩隻眼睛 等式他的屬性, 狗會吃東西,叫,等式他的方法。這是我了解的面向對象。

  9.你的5(或3)年前景規劃和在5(或3)年後在flash行業要達到的目标(及個人職業規劃)?建議:

  1.盡量選擇有自主産品的公司,而非單純的外包公司。(有自己的産品,代表你可以對你自己的産品進行持續維護和改良,對你自身的程式設計能力是一種持續性的提高)

  2.盡量選擇待成長型的公司,而并非公司越大越好。(成長型的公司往往産品更有創意,開發成本更小,效率更高,有利于你在短時間内積累更多的作品)

  3.盡量遠離廣告制作公司。

  10什麼是OOP? OOP有那些特征簡要說明?

  OOP: Object Oriented Programming,面向對象的程式設計

  特征:抽象,多态,封裝,繼承

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

  答:從應用程式到最外層的容器在到容器裡的元件或容器周遊注冊的事件,然後按照原路傳回冒泡響應事件

  AS3事件流分三個階段:

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

  2.目标階段 (激發在目标對象本身注冊的監聽程式) 3.冒泡階段 (從目标節點到根節點,檢測每個節點是否注冊了監聽器)

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

  PS:注冊事件時捕獲階段預設是關閉的,無論事件是否開啟了捕獲,事件流隻會兩選一去執行

  13.說說就你所知道的用flash做網站建設的優缺點

  優點:全面的控制、無縫的導向跳轉、更豐富的媒體内容、更體貼使用者的流暢互動、跨平台和瘦用戶端的支援、以及與其它Flash應用方案無縫連接配接內建等

  限制:受帶寬與下載下傳時間的限,下載下傳速度有時候很慢;受搜尋引擎的限制,現在大部分的搜尋引擎搜多不到Flash站點資訊,但是google搜尋引擎已經解決了這個問題。

  15.as3.0垃圾回收器是如何工作的?

  flash player 8之前采用的是引用計數法,在flash player 8 之後用的是标記法,簡單的說就是:從應用的根節點開始,周遊所有其上的引用,标記每個它所發現的對象。然後疊代周遊每個被标記的對象,标記它們的子對象。這個過程第歸進行,直到Player周遊了應用的整個對象樹并标記了它所發現的每個東西。在這個過程技術的時候,可以安全地認為,記憶體中那些沒有被打标記的對象沒有任何活動引用,是以可以被安全地釋放記憶體。一般來說,flash player采用的是一種低頻的垃圾回收機制,Flash Player的垃圾回收發生在Flash Player需要另外請求記憶體之前。但并不是每次應用申請記憶體時都會導緻垃圾回收的執行,隻有當Flash占用的記憶體緊張到一定程度時才會執行真正的垃圾回收,一定程度上取決于用戶端計算機的實體記憶體的大小。

  16.什麼是遊戲引擎和對他的認識?

  答:是指應用通常遊戲設計的模型建構一個“平台“,能夠

  友善的支援遊戲開發後續的工作 引擎就是“用于控制所有遊戲功能的主程式,從計算碰撞、實體系統和物體的相對位置,到接受玩家的輸入,以及按照正确的音量輸出聲音等等

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

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

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

  答:修改sdkframeworksprojectsframeworkdefault.css裡Application的backgroundColor: #0000FF;

  19.flex的開發架構有哪些,它們有什麼優缺點?

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

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

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

  20.在flex開發中,很多代碼都寫在mxml檔案裡,為了做到mvc模式,你是怎麼處理的。

  我認為mxml并不影響mvc模式啊。分兩種情況來讨論,首先,是自己建立整個應用結構的時候,那我們可以手動将UI所在的mxml歸為一類,然後由Mediator去操作或者說控制這些元件既可了,然後Mediator又統一交給Controller去操作。如果采用其他架構來進行開發的話,那就更不用來考慮這個問題了,像Cairngorm、Puremvc之類的架構已經很好的為我們解決了這些問題。隻要按照它們的使用規範來進行開發,自然沒有問題。

  21.如果發生記憶體洩露,你是如何解決的?

  比如說 注意不要循環引用,特别是在使用Timer的時候要格外注意,不要忘記全局對象上的引用的清除,在建立控制器和模型的時候要注意一定要使用單件模式。在addEventListener時候盡量采用弱引用、自引用、或者子對象引用,以避免記憶體洩漏。

  22.flex和背景語言是如何互動的?

  無疑就這兩種方法:remote object 或者是Http service

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

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

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

  答:配置相關的安全沙箱的政策xml。

  網站:http://topic.csdn.net/u/20091020/10/364e66cf-c73e- 46dc-a04f-b4e569521336.html

  http://japi.javaeye.com/blog/792362

  講的很詳細。

  25請解釋下單例模式

  單例模式,是一種常用的軟體設計模式。在應用這個模式時,單例對象的類必須保證隻有一個執行個體存在。許多時候整個系統隻需要擁有一個的全局對象,這樣有利于我們協調系統整體的行為,簡化了在複雜環境下的配置管理。

  實作單例模式的思路是:一個類能傳回對象一個引用(永遠是同一個)和一個獲得該執行個體的方法(必須是靜态方法,通常使用getInstance這個名稱);當我們調用這個方法時,如果類持有的引用不為空就傳回這個引用,如果類保持的引用為空就建立該類的執行個體并将執行個體的引用賦予該類保持的引用;同時我們還将該類的構造函數定義為私有方法,這樣其他處的代碼就無法通過調用該類的構造函數來執行個體化該類的對象,隻有通過該類提供的靜态方法來得到該類的唯一執行個體。請寫個單例。例:

  package {

  public class MySubClass {

  private static var mySubClass:MySubClass;

  public var num:Number=0;

  public function MySubClass() {

  if (MySubClass.mySubClass!=null) {

  throw new Error("隻能産生一個執行個體");

  }

  }

  public static function getInstance():MySubClass {

  if (mySubClass==null) {

  mySubClass = new MySubClass();

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

  enterFrame:播放頭進入新幀時排程。如果播放頭不移動,或者隻有一幀,則會繼續以幀速率排程此事件。此事件為廣播事件,這意味着具有注冊了此事件的偵聽器的所有顯示對象都會排程此事件

  timerEvent:它的啟動是通過start()方法,暫停是通過stop()方法來實作。它的調用是運作的時間每次達到delay時排程

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

  答:flash.system.Capabilities.os 是系統類型

  flash.system.Capabilities.playerType 是視訊播放器類型

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

  類型是否為數字,那就typeof一下,看他是不是int或者Number,如果是問字元串内容是否為數字,那也有很多辦法,比如說,讀出每個字元的ascii碼,判斷範圍,或者是

  var a:String="1232d4";

  var b:Number=Number(a);

  var c:String=String(b);

  if(a==c){

  Alert.show("yes");//flex裡面的彈出框元件

  }else{

  Alert.show("no");

  }

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

  答:typeof(obj)

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

  答:同一個包裡才能調用internal所定義的變量或對象

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

  答:設定斷點

  32.注冊點和中心點的差別和聯系

  答案:在FLASH IDE下控制元件的坐标,參照點是元件資訊面闆上選擇的參照點,預設是元件中心點;控制元件縮放,參照點是元件中心點,也就是圓圈所在位置;使用AS控制元件的坐标和縮放,參照點都是元件的注冊點,也就是元件上的十字标記。

  33. flash事件對象的target與currentTarget屬性的差別?

  target屬性在事件流的目标階段,而currentTarget屬性在事件流的冒泡階段(如currentTarget有時指父級)和目标階段(兩屬性的指向相同),當然也可以是捕獲階段。

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

  答案:不一樣,null是沒有值的意思。undefined是申明未完成,或者類型未定等情況。

  NaN:不是個數字

  35. Math.round( ), Math.floor( ) 和Math.ceil( ) 三個方法都是四舍五入,請問有什麼差別? Math.round(-11.5)的值是多少?

  答案:都是取整:round 是取靠近最近整數;floor向下取整;ceil向上取整

  Math.round(-11.5)==-11

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

  應該沒人出這樣的題吧? if 咯。類型的話就typeof

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

  自定義事件,要麼就直接調用Event的構造函數,或者繼承于Event,寫一個子類。

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

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

  40. parseInt此方法轉化為int型的方法,請問你知道此方法的第二個參數是什麼意思嘛?(Flex裡面的一個方法)

  答:進制 2 8 16 等

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

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

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

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

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

  43.我想建立的視圖居中怎麼辦?(Flex中的視圖布局)

  答:布局政策裡面限定為劇中。即 horizontalAlign="center" verticalAlign="middle"

  或者在每個控件都以舞台的中心作為相對坐标來計算各自的xy值。

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

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

  在 URLStream 中的讀取操作是非阻塞模式的。

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

  答displayAsPassword=true;

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

  答:Txt.restrict="a-d";txt.restrict="^a-d";

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

  答:擷取或設定一個布爾值,該值訓示是否從包含 HTML 文本的 TextArea 元件中删除額外空白。 空格和換行符都屬于元件中的額外空白。 true 值訓示删除多餘的空白;false 值訓示不删除多餘的空白。

  此屬性隻影響使用 htmlText 屬性設定的文本,而不影響使用 text 屬性設定的文本。 如果使用 text 屬性設定文本,則忽略 condenseWhite 屬性。

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

  txt.text="this is a text";

  stage.focus=txt;

  txt.setSelection(6,6);

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

  答:文本框裡屬性裡有個連結,把連結的網站輸進去就可以

  50.AS3 中有那些基本資料類型?有那些複雜資料類型?他們的預設值是什麼?

  基本類型有:int(0)、unit(0)、boolean(false)、string(null)、number(NAN);

  複雜資料型有:array(null)、object(null)

  51.Sprite、MovicClip、shape的差別?

  Shape:建立簡單形狀;

  Sprite:不需要時間軸的對象的相應基類;

  movieclip:不同于 Sprite 對象,MovieClip 對象擁有一個時間軸;

  Sprite與shape:前者也包括 graphics 屬性,并且它包括不可用于 Shape 類的其它功能。 例如,Sprite 對象是顯示對象容器,而 Shape 對象不是(并且不能包含子顯示對象)。 由于此原因,Shape 對象會比包含相同圖形的 Sprite 對象消耗的記憶體少。 但是,Sprite 對象支援滑鼠單擊事件,而 Shape 對象不支援。

  Sprite與movieclip:sprite是去掉了時間軸的MovieClip;movieclip是動态類,而sprite不是;

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

  答:substring( )傳回一個字元串,該字元串由 start 和 end 參數指定的兩點之間的字元組成。如果未指定 end 參數,則子字元串的結尾就是該字元串的結尾。如果 start 的值等于 end 的值,則該方法會傳回一個空字元串。如果 start 的值大于 end 的值,則在函數執行前兩個參數将自動互換,且原始值不變。

  Substr:傳回字元串中從 start 參數所指定的索引開始,直至 length 參數所指定的字元數為止的字元。substr 方法不更改由 my_str 指定的字元串;它傳回一個新字元串。

  Slice:傳回一個字元串,該字元串包括從 start 字元一直到 end 字元(但不包括該字元)之間的所有字元。不修改原始 String 對象。如果未指定 end 參數,則子字元串的結尾就是該字元串的結尾。如果按 start 索引到的字元與按 end 索引到的字元相同或位于後者的右側,則該方法會傳回一個空字元串。

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

  答:參數分别為:Event名稱,響應(回調)函數,是否冒泡時響應,Event級别

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

  答:先用as建立一個event類, 然後

  可以用addEventListener直接響應

  也可以用元标簽聲明 [Event(name=事件名稱,type=事件類)],然後建立對象->dispatchEvent(建立的對象)->mxml标簽中使用事件名稱來響應

  56.對資料進行冒泡排序,(23,53,28,24,46,33,18)?

  答:var arr:Array=new Array(23,53,28,24,46,33,18);

  trace(arr);

  for (var i=0; i<arr.length; i++) {

  var stemp:int=0;

  for (var j=0; j<arr.length; j++) {

  if (arr[i]<arr[j]) {

  stemp=arr[j];

  arr[j]=arr[i];

  arr[i]=stemp;

  }

  }

  }

  trace(arr);

  57. 從一個字元串中去掉相連的重複字元,原字元串“adffjkljaalkjhl”變為“adfjkljalkjhl”?

  var str:String="adffjkljaaaaalkkkkjhhhfffl";

  var arr:Array =str.split("");

  trace(str)

  for(var i:int=0;i<arr.length-1;i++){

  for(var j:int=i+1;j<arr.length;j++){

  if(arr[i]==arr[j]){

  arr[j]="";

  }

  else{

  break;

  }

  }

  }

  var str2:String=""

  for(var m:int=0;m<arr.length;m++){

  str2+=arr[m]

  }

  trace(str2); 58.sharedObject的作用是什麼,與浏覽器cookie的差別是什麼?

  兩者都是存儲本地的一些簡單的資料類型,sharedObject預設是不會過期 cookie會在session結束時過期他是在浏覽器通過Http位址請求獲得的

  59 下面的輸出結果是什麼,為什麼?

  var a = Number(10);

  var b = Number(10);

  trace(a == b);

  輸出結果是true 因為a和b都被強制轉化成number類型了

  60 建立3個按鈕,名字分别為btn1,btn2,btn3,一個影片剪輯a_mc(自己随便建這些元件)

  1.當單擊btn1時,調用影片剪輯a_mc(使a_mc顯示出來)、此時btn1不可用(注意:是不能反應此動作事件),

  2.當點選btn2時,btn1可用、a_mc不可見(隐藏起來)

  3.當點選btn3時,關閉swf

  請使用as3.0和as2.0分别實作以上描述(as2.0的代碼寫在時間軸上,as3.0的代碼寫成*.as檔案) (已做)

  61. var letters:Array = new Array("a", "b", "c", "d", "e", "f");

  var someLetters:Array = letters.slice(-3,-1);

  trace(letters); // a,b,c,d,e,f

  請問trace(someLetters)的輸出結果是什麼?

  答案:d,e

  63.請寫出加載資源的關鍵代碼?

  var req:URLRequest = new URLRequest("1.swf");

  var loader:Loader = new Loader();

  loader.load(req);

  loader.contentLoaderInfo.addEventListener(Progress Event.PROGRESS, prograssHandler);

  function prograssHandler(event:ProgressEvent):void{

  var aa = event.bytesLoaded;

  var bb = event.bytesTotal;

  txt.txt_txt.text = String(Math.round(aa/bb* 100))+ "%";

  }

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

  1. number uint int差別

  2. Array 的方法

  3. includeLayout clipContent horizontalScollPolicy

  a. horizontalScollPolicy指定水準滾動條是始終顯示、始終不顯示,還是在需要時自動添加

  b. clipContent 剪截一個容器一部分

  c. includeLayout指定此元件是否包含在父容器的布局中。

  4. 把局部坐标轉變為全局坐标的方法

  5. swc的制作和用途

  6. 簡述mvc模式

  7. 面向對象的特點:

  8. 九宮格:

  9. TimerEvent和EnterFrame

  10.關于偶數的總和。

  11.加載圖檔并顯示程序

  12.自定義事件

  13.撞球:白球撞擊後,紅球進入各個洞。

  要求:

  1. 根據動量定量,建立任兩球碰撞效果的模型。

  2. 根據幾何關系,建立任意球入洞時的模型。

  http://www.as3hope.com/read.php?39