1。as2与as3.的最主要区别是什么?
2.flex的开发框架有哪些,它们有什么优缺点?
3.在flex开发中,很多代码都写在mxml文件里,为了做到mvc模式,你是怎么处理的。
4.如果发生内存泄露,你是如何解决的?
5。as3.0垃圾回收器是如何工作的?
6 flex和后台语言是如何交互的?
7。你是如何处理前端速度慢的问题?
8.flash与flex是如何协调开发的?
Flex笔试(面试题)
一.简述Flex内存释放优化原则。什么情况会发生内存经泄露,一旦有内存泄露,你会如何解决?
FLEX内存释放优化原则:
1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;
8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件都要记得移除干净。
9. 父对象被删除了不代表其余子对象都删除了,到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。
内存泄露情况:
1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null;
2. 系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用 ,否则使用此函数的对象将不会被删除;
类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。
3. 效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。
4. SWF泄露:要完全删除一个SWF要调用它的unload(
)方法并且把对象置null;
5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试);
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null;
内存泄露解决方法:
1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除,调用系统类的清除方法)
先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净;
2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;
二.你常用的Flex框架是什么?简述一下它的特点。
mate.
特点:Flex应用是基于事件驱动的,而Mate框架使其变得更加得简单,Mate允许用户定义是谁正在管理/
处理这一事件,以及数据是否需要从服务器端返回,或者其他的什么事件需要被触发,所有的这些都使得Flex应用的开发变得更加得简单。
三.Flex是如何与flash协作的?
实现编码与设计的好处是显而易见的:
1.代码易于维护与二次开发。所有AS代码以面向对象的思想在flash外部组织,用notepad即能打开。比起传统的as2分散于frame之间,以及更早的分散于影片与按纽之上,其优点好处不言而喻。
2.设计独立于代码之外。可以在没有程序员的清况下,修改程序(系统) 的外观,亦可以新做一批theme;程序没有变,只是改改图片和排列位置,大小等,就可以迅速焕然一新。譬如,在春节时,加一些春节的时令元素进去,这将是一件很容易做的事情。
四.如何提升Flex运行效率,请从各方面进行简述。
1、避免容器的多级嵌套,减少相对尺寸、相对定位的使用。
在使用百分比来给容器内的元件定尺寸,一旦容器中的任何一个元件的位置和尺寸变化,都会引发容器对所有子级的重定位动作。如果嵌套的级别很深,这个计算量会很大。
2、尽量使用轻量级的容器
Canvas是体积最小的容器,它只支持绝对定位。很多时候,都可以使用它来代替HBOx和VBox。另外,Canvas也是我们编写自定义容器性质组件的一个首选。它具有容器的基本功能,利于扩展。
3、避免使用大体积的组件,比如DataGrid、AdvancedDataGrid
大个子组件的功能强大,但开销也是非常大的。由于功能的复杂性,使得皮肤、样式、itemRenderer的实现都格外复杂。
4、处理数据时多用分页的方式
在使用数据类型控件时,尽量减少数据一次的显示量。比如TileList,它会把数据一次性全部创建,不管是不是需要显示,这样很浪费资源。 ViewStack 、TabNa
vigator等在处理元件时,并不是一次创建,只要元件在第一次被显示时才创建,这样,就避免的不必要的开销。
5、setStyle和styleName
Flex 组件的皮肤都是可视化元件,组件在自身初始化时,会使用当前的样式比如styleName完成所有皮肤元件的绘制。如果我们在运行期间通过 setStyle修改了组件的样式,组件的尺寸、位置就会作相应调整。联系到第一条,如果组件位于一个层级很深的容器中,也会有一个大的计算量。
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事件
properties在哪打开  (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的{}方式,如:{}{myVar1+myVar2}{myBtn}
(2)、MXML的方式。和{}相同,可以多绑一,可以双

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。