Flex笔试题
使用Flex Bulider3建立一下新的.mxml的页面时默认的背景是蓝色的,请问用什么办法能修改掉此背景颜色,以至于下次创建时背景不是为默认的蓝色的呢?请写出你认为正确的方法。
答:修改sdk\frameworks\projects\framework\default.css里Application的backgroundColor: #0000FF;
使用Flex Bulider3如何跟踪程序?
答:我知道的三种1.trace() 2.设置断点 3.当不在调试模式时可以调用as的Alert.show()
请问 undefined 和 null 是否一样,如果不一样能否说出其中的区别呢?
答:undefined是尚未初始化的无类型变量或未初始化的动态对象属性的特殊值。null是一个可以分配给变量的或由未提供数据的函数返回的特殊值。它们的相同之处在于都未初始化,不同在于undefined是无类型或动态类型的。如:
var v1;trace(v1);//undefined
var v2:*;trace(v2);//undefined
var v3:Object;trace(v3);//null
请问怎么样检测本机的内容呢,比如说,我想知道本机的操作系统,是否有视频等这些.
答:flash.system.Capabilities.os 当前的操作系统
flash.system.Capabilities.hasStreamingVideo系统是否可以播放视频流
有三种基本数字类型:number, int, 和uint 请问有什么区别.具体说一下.
答:number数字类型包含浮点型(正0负); int 整型(正0负); uint(无符号整型)
Math.round( ), Math.floor( ) 和Math.ceil( ) 三个方法都是四舍五入,请问有什么区别?
答:round 是取最接近的整数,即原数+0.5后取整;floor向下取整;ceil向上取整
我怎么设置把一个文本框,设置成一个密码框?
答:将displayAsPassword属性设置为true
我想在文本框里只能输入abcd,有什么办法能做到呢?如果我想输入除abcd以外的其它都能输入又怎么做呢?
答:restrict=”a-d”。restrict=”^(a-d)”
substring( ),substr( ), slice(),请说下3种解析字符串的不同之处,以及适用场合?
答:substring(v1,v2): 截取从v1到v2的字符串,包括v1,不包括v2
substr(v1,v2): 从v1开始,截取v2长度
slice(v1,v2):类似于substring,不过可以接受负值参数,表示倒数第几位
请说下目前使用flex和后台交互的几种方法,以及适用场合.
答:(1)基于AMF消息格式的RemoteObject组件,如Lcds/BlazeDs,AMFPHP等。
(2)基于SOAP消息格式的WebService,对于使用SOAP的服务器方便连接。
(3)基于纯文本或拥有良好格式的XML消息格式的HTTPService组件。
一般来说,选用高效稳定的RemoteObject中间件。
我现在想在flex里调用JS方法,我要怎么办呢?
答:直接在AS中使用ExternalInterface.call()来调用JS方法。如:
import flash.external.ExternalInterface;
ExternalInterface.call("simpleJSFunction");
ExternalInterface.call("simpleJSFunctionWithParameters","myParameter");
var result:String=ExternalInterface.call("simpleJSFunctionWithReturn");
我想用JavaScript调用ActionScript函数,我要怎么办呢?
答:使用ExternalInterface.addCallback在JavaScript里设置对Flex的回调方法并且在JavaScript里调用ActionScript方法。
AS:
ExternalInterface.addCallback("function1",callback1);
privatefunctioncallback1():void
{
Alert.show("callback1executed");
}
JS:
container[swf].function1();
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开始将用户选择的文件上载到远程服务器。
as2与as3的最主要区别是什么?
答:首先,as2和as3是完全不同的语言,几乎没有兼容性可言。as2编译用的AVM1虚拟机,as3用的AVM2,速度快,提供了一些基础异常处理。 as3是纯的OOP,强类型语言。as2不是。具体的差别有太多太多。
flex的开发框架有哪些,它们有什么优缺点?
答:最常见的当然是Cairngorm、Puremvc了,此外还有Mate,Swiz等等,据说被广泛应用的已经有10几款了。Cairngorm作为Adobe官方出品,有着贵族血统的它比较全面,是这些框架中已知bug最少的,但是基于他的应用相对臃肿复杂一些,需要对每个可以被触发的事件写一个对应的Command,编码量巨大,并且单元测试很不容易,不适合敏捷开发。Puremvc应该是现在用的最多的as框架了。比较完善、并且与Cairngorm相比,更适合中小型应用的开发,它与Cairngorm一样,也是以MVC模式为中心,并以Fa?ade作为中央存储器的单件类的形式进行开发的。说下Mate,它是一个比较奇怪的框架,是基于标签的事件驱动型的。也就是说你不能再随意的写as类的,在使用Mate的情况下,只能用MXML来做这些事情。Swiz是Mate的孪生兄弟,长的挺像,没具体用过,不大了解。
在flex开发中,很多代码都写在mxml文件里,为了做到mvc模式,你是怎么处理的。
答:我认为mxml并不影响mvc模式啊。分两种情况来讨论,首先,是自己创建整个应用结构的时候,那我们可以手动将UI所在的mxml归为一类,然后由Mediator去操作或者说控制这些组件既可了,然后Mediator又统一交给Controller去操作。如果采用其他框架来进行开发的话,那就更不用来考虑这个问题了,像Cairngorm、Puremvc之类的框架已经很好的为我们解决了这些问题。只要按照它们的使用规范来进行开发,自然没有问题。
如果发生内存泄露,你是如何解决的?
答:在profile观察中已经内存泄漏是没有很好的解决办法的,至少我不知道,我能做的只是尽量去避免这种情况的发生,比如说注意不要循环引用,特别是在使用Timer的时候要格外注意,不要忘记全局对象上的引用的清除,在创建控制器和模型的时候要注意一定要使用单件模式。在addEventListener时候尽量采用弱引用、自引用、或者子对象引用,以避免内存泄漏。
你是如何处理前端速度慢的问题?
答:flex前端速度慢 其实仔细说应该分2部分,1.是flex生成的swf由于SDK庞大的关系,swf体积也跟着庞大了,这我们可以做的就是用Module动态加载,还有就是RSL了。2.处理速度慢,远程方法速度慢,这是AVM的硬伤了,基本没有很好的解决方法,我们能做的只是让这个异步进行的更完美一些,让用户在等待的过程中,做其他的事情,以至于让用户忽略这段等待的时间。
我不想在容器里显示滚动条怎么办?
答:指定horizontalScrollPolicy和verticalScrollPolicy为off
请问Flex bulider3可以创建几种不同的项目?
答:三种。Flex Project、 AS Project 和Flex Library Project。
请问SWC是做什么用的,怎么样自己制作一个SWC?
答:静态链接库是SWC文件,通过编译器的library-path和include-libraries编译进应用程序。
新建Flex Library Object或使用compc命令可以制作SWC。
flex生成出来的文件都是很大,请问你用什么办法进行缩小呢?
答:(1)RSL
(2)Module
(3)外部加载资源
请问trace( NaN == NaN ) 结果为true 还是false,为什么?
答:NaN 具有独特的数学性质,任何与其相关的比较都会得到false的计算结果。改用全局 isNaN()函数检测NaN值,如下所示:
trace(NaN == NaN); // false
trace(NaN != NaN); // false
trace(isNaN(NaN)); // true
现在流行MVC,但是as代码有的时候还是大部分写在mxml里面,请问我想代码分离怎么办呢?
答:严格按照MVC框架规范书写代码。如果还是不行,可以考虑重写组件或者从业务逻辑上解耦。没必要用source引用外部as文件来达到代码分离,那没有意义。
我想在application里获取当前运行的URL,我要怎么获取.
答:Application.application.url
HBox,VBox和canvas有什么区别呢?试说出其中几点
答:canvas只有绝对布局,没有布局管理器。
HBox,VBox则相反,没有绝对布局,只有相对布局。
请问我想在list里选中多行信息,我要怎么做呢?
答:设置allowMultipleSelection为true
Alert里面有几个属性,我想设置图片怎么办呢?
答:使用iconClass属性指定图片
列举出flex里面的几个绑定数据对象的方式
答:对自已的类或者变量添加绑定功能:
(1)类前使用[Bindable]表示所有属性都支持绑定,此类必须实现IEventDispatcher接口。
(2)可以给变量声明前或变量getter setter前使用[Bindable]。如果getter和setter方法同名,那么给其中一个[Bindable],相当于给两个都用了[Bindable]。
使用拥有绑定功能的属性:
(1)、MXML的{}方式,如:{myInput.text}{myVar1+myVar2}{myBtn}
(2)、MXML的方式。和{}相同,可以多绑一,可以双向绑定。如
(3)、AS的mx.binding/utils.BindingUtils类的bindProperty () 方法或bindSetter () 方法
(4)、AS的mx.binding.utils.ChangeWatcher的watch () 方法
请问我自己定义了一个组件,我想在组件里的属性里设置几个默认值,我要怎么设置呢?
答:在定义组件时,初始化组件属性时即可指定默认值。
请问你是否使用过module这种方法去做项目呢?他的优,缺点是什么呢?使用组件的方式加载的话,他的优,缺点是什么呢?
答:优点是合理分割了主Application,模块化开发。更小的SWF文件体积,配合RSL和延迟加载策略,大大减少用户等待时间。缺点就是容易引起内存泄露。
我想在一个错误的图片链接里,定义一下默认的图片怎么做呢?
答:控制Image的source属性,当图片链接出现错误时,指定默认链接。
ExternalInterface, LocalConnection 2者有什么区别?
答:ExternalInterface是Flex和Javascript通迅使用;
LocalConnection可以让运行于同一台计算机的本地应用程序进行交互,使用AMF3格式通信,兼容以前版本。
你是否使用过flex的测试工具呢?请说明下具体是哪种,以及使用方式,你为什么使用这种工具?
答:没有,只听过FlexUnit,FlexMonkey。
我能把CSS编译成swf嘛?
答:可以,在CSS文件上右键选择Compile CSS to SWF。
请用as3列举下你用过的模式
答:工厂模式,单例模式
Embed绑定图片有什么缺点?
答:直接编译到swf文件中,造成其体积过大。而且由于嵌入代码中,维护不便。
TitleWindow的组件是可以拖动的,我不想让他拖动我要怎么办呢?
答:让isPopUp属性=false,同时设置弹出窗口为模态窗口,禁止与其他窗口交互。
你是否使用过profile,你觉得这个工具怎么样,优,缺点是什么呢?
答:可以很方便地观察对象的创建和销毁,帮助检查内存泄露问题。
你是否做过flex 前端的性能优化,你觉得怎么做是比较完美的?
答:(1)、避免容器的多级嵌套,减少相对尺寸、相对定位的使用。
(2)、尽量使用轻量级的容器
(3)、避免使用大体积的组件,比如DataGrid、AdvancedDataGrid
(4)、处理数据时多用分页的方式
(5)、少使用setStyle
(6)、使用延迟实例化加载子组件
请说明一下ShareObject的使用方法?以及优,缺点?
答:getLocal()用来指定存储在客户端的路径。
data属性用来指定要存储的数据内容。
flush方法负责把数据内容写入。
clear方法用于清除储存的信息。