一、序列化和反序列化
- 序列化 : 把数据按照一定的逻辑保存的过程
- 反序列化 : 把数据按照一定的逻辑恢复的过程
- Serializable 性能不会太高 , 会记录类的全名、属性名 , 反序列化时是反射
- Parcelable : write的顺序和read的顺序必须相同
a. Java推荐(对成员进行序列化 , 内存间的序列化)
b. write() -> Parcel(只记录属性值) -> read()
二、==和equal的区别
- ==比较的是内存地址
- equal比较的是值(比较的是值,String重写了hashcode方法)
三、ImageLoader、Picasso、Glide
- ImageLoader : 支持监听图片下载进度 , 可以在View滚动的时候暂停加载图片(PauseOnScrollListener)
- Picasso : 框架体积小、不支持GIF
- Gilded : Picasso的升级版 , GIF、Video、视频类优先
四、MVC和MVP模式
- MVC : 用户操作View发送请求 , Controller负责决定应该调用哪个Model来进行处理 , Model根据用户请求进行相应的业务逻辑处理并返回数据 , 最后Controller调用对应的View来显示Model数据
- MVP : View和Model不直接交互 , Presenter作为视图和数据的连接器 , 当View有变动或者Model有变动时 , 不会相互影响 , 耦合性低
五、ListView和RecyclerView的区别
- RecyclerView的ViewHolder编写规范是好的 , 自带item复用功能
- RecyclerView自带动画效果
- RecyclerView可以实现ListView、GirdView、瀑布流效果
- RecyclerView可以局部刷新(notifyItemChanged)
六、String、StringBuffer、StringBuilder
- String : 字符串常量 , 每次修改都会new一个新的对象
- StringBuffer : 可修改的字符串 , 线程安全
- StringBuilder : 可修改的字符串 , 线程不安全(单线程使用) , 效率比StringBuffer高
七、android动画
- 补间动画 : 不会改变View的真正位置和相关属性(点击事件的出发区域还是动画前的位置)
- 帧动画 : 加载一系列Drawable资源来创建动画
- 属性动画 : 改变View的属性值
八、设计模式
- 单例 : 确保类只有一个实例 , 且自行实例化并向整个系统提供这个实例
- Builder建造者模式 : 需要创建一个对象时要用到很多变量组合而成的时候
- 工厂模式 : 简单工厂模式、 工厂方法模式、抽象工厂模式(基类)
- 策略模式 : 一个类或算法可以在运行时更改
九、进程和线程的区别
- 进程是CPU资源分配的最小单位 , 线程是CPU调度的最小单位
- 进程之间不能共享资源 , 线程可以共享所在进程的地址空间和其他资源
- 一个进程可以有多个线程 , 进程可以开启进程 , 也可以开启线程
- 一个线程只能属于一个进程 , 线程可以直接使用进程的资源 , 线程依赖进程存在
十、内部类
可以直接访问外部类的属性
成员内部类、局部内部类、匿名内部类(没有构造方法)、静态内部类(static修饰 , 不能使用外围类的非static成员变量和方法)
十一、Synchronized
可以在多线程环境下座位线程安全的同步锁 , 可修饰 :
- 代码块
- 成员方法(方法用Synchronized修饰 , 修饰的是this)
- 修饰静态方法(方法用Synchronized修饰 , 修饰的是Class对象)
十二、接口和抽象类的区别
- 接口用implements来实现 , 抽象类用extent继承
- 抽象类可以有构造函数 , 接口不能
- 抽象类可以有main方法能运行 , 接口不能
- 接口可以实现多个 , 抽象类只能继承一个
- 接口默认是public修饰 , 抽象类可以任意修饰符
十三、final的作用
- final修饰的变量叫常量 , 常量必须初始化 , 初始化后不能被修改
- final修饰方法 , 不能被重新
- final修饰类 , 最终类 , 不能被继承
网友评论