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 的 方式。和{} 相同,可以多绑一,可以双向绑定。如
(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) 开源组件的使用
转自:http://blog.csdn.net/bibishou/archive/2010/10/11/5933150.aspx