• 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以及数据源。

    
    
  • 相关阅读:
    JVM 综述
    看 Netty 在 Dubbo 中如何应用
    Netty 心跳服务之 IdleStateHandler 源码分析
    Netty 高性能之道
    Netty 解码器抽象父类 ByteToMessageDecoder 源码解析
    Netty 源码剖析之 unSafe.write 方法
    Netty 出站缓冲区 ChannelOutboundBuffer 源码解析(isWritable 属性的重要性)
    Netty 源码剖析之 unSafe.read 方法
    Netty 内存回收之 noCleaner 策略
    Netty 源码阅读的思考------耗时业务到底该如何处理
  • 原文地址:https://www.cnblogs.com/deman/p/4247815.html
Copyright © 2020-2023  润新知