zoukankan      html  css  js  c++  java
  • 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以及数据源。

    
    
  • 相关阅读:
    手打的table
    高质量程序设计指南C/C++语言——C++/C程序设计入门(2)
    高质量程序设计指南C/C++语言——C++/C程序设计入门
    int *p = NULL 和 *p = NULL(转载)
    C语言深度剖析---预处理(define)(转载)
    C语言--union关键字(转载)
    C语言深度剖析--volatile(转载)
    C语言深度剖析---const关键字(转载)
    C语言循环剖析(转载)
    main函数的参数问题 (转载)
  • 原文地址:https://www.cnblogs.com/deman/p/4247815.html
Copyright © 2011-2022 走看看