Flex面试题及答案

Flex面试题及答案
2011年08月06日
   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)开源组件的使用

你可能感兴趣的:(技术杂绘)