android面试(3)---基本问题
1.值类型,引用类型?
基本数据类型都是值类型:byte,short,int,long,float,double,char,boolean
其他类型都是引用类型。
引用类型在传入方法是,方法内部对引用类型变量的修改会改变引用类型的内容。
值类型传递参数是copy。
2.垃圾回收?
GC机制:
Android 基于进程中运行的组件及其状态规定了默认的五个回收优先级:
IMPORTANCE_FOREGROUND:
IMPORTANCE_VISIBLE:
IMPORTANCE_SERVICE:
IMPORTANCE_BACKGROUND:
IMPORTANCE_EMPTY:
防止内存溢出 1.明确调用System.gc();
2.图片处理完成后回收内存。 请在调用BitMap进行图片处理后进行内存回收。 bitmap.recycle(); 这样会把刚刚用过的图片占用的内存释放。
3.图片处理时指定大小
防止context内存泄漏:
1).不要长时间引用context
2).尽量使用applicationcontext
3).在不控制生命周期的情况下,尽量避免在activity中使用static变量。
4).垃圾回收不一定及时,请在ondestory中及时cursor.close().
3.常用设计模式?
适配器模式:ListView或GridView的Adapter。
建造者模式:AlertDialog.Builder
命令模式:Handler.post后Handler.handleMessage
享元模式:Message.obtainMessage通过重用Message对象来避免大量的Message对象被频繁的创建和销毁
迭代器模式:如通过Hashtable.elements方法可以得到一个Enumeration,然后通过这个Enumeration访问Hashtable中的数据,而不用关心Hashtable中的数据存放方式
备忘录模式:Activity的onSaveInstanceState和onRestoreInstanceState就是通过Bundle这种序列化的数据结构来存储Activity的状态,至于其中存储的数据结构,这两个方法不用关心
观察者模式:我们可以通过BaseAdapter.registerDataSetObserver和 BaseAdapter.unregisterDataSetObserver两方法来向BaseAdater注册、注销一个 DataSetObserver。这个过程中,DataSetObserver就是一个观察者,它一旦发现BaseAdapter内部数据有变量,就会通 过回调方法DataSetObserver.onChanged和DataSetObserver.onInvalidated来通知 DataSetObserver的实现类。事件通知也是观察者模式。
原型模式:比如我们需要一张Bitmap的几种不同格式:ARGB_8888、RGB_565、ARGB_4444、ALAPHA_8等。那我们就可以先 创建一个ARGB_8888的Bitmap作为原型,在它的基础上,通过调用Bitmap.copy(Config)来创建出其它几种格式的 Bitmap。另外一个例子就是Java中所有对象都有的一个名字叫clone的方法,已经原型模式的代名词了。
代理模式:类似于ios开发的delegate委托模式,所有的AIDL都一个代理模式的例子。假设一个Activity A去绑定一个Service S,那么A调用S中的每一个方法其实都是通过系统的Binder机制的中转,然后调用S中的对应方法来做到的。Binder机制就起到了代理的作用。
状态模式:View.onVisibilityChanged方法,就是提供了一个状态模式的实现,允许在View的visibility发生改变时,引发执行onVisibilityChanged方法中的动作。
策略模式:Java.util.List就是定义了一个增(add)、删(remove)、改(set)、查(indexOf)策略,至于实现这个策略 的ArrayList、LinkedList等类,只是在具体实现时采用了不同的算法。但因为它们策略一样,不考虑速度的情况下,使用时完全可以互相替换 使用。
调解者模式:一个对象的某个操作需要调用N个对象的M个方法来完成时,把这些调用过程封装起来,就成了一个调解者
举例:如Resource.getDrawable方法的实现逻辑是这样的:创建一个缓存来存放所有已经加载过的,如果getDrawable中传 入的id所对应的Drawable以前没有被加载过,那么它就会根据id所对应的资源类型,分别调用XML解析器生成,或者通过读取包中的图片资源文件来 创建Drawable。
而Resource.getDrawable把涉及到多个对象、多个逻辑的操作封装成一个方法,就实现了一个调解者的角色
抽象工厂模式:DAO与Service的使用。
4.mvc开发模式理解:
MVC----model,view,control.
model---control----view:
当View产生变化,比如listview删除一行,它通知control,由control来操作model的数据变化。
反之亦然。MVC可以使显示部分与数据部分分离,这样修改或更换一部分而不会影响数据。
常见的例子:arrayapdator对应listview以及数据源。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。