Flex面试题3

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放置到服务器根目录

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:”开头的超链接,如这儿
(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 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的编码器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值