android 面试题整理(一)

  1. surfaceView和view的区别

    1. 最显著的区别就是普通view和它的宿主窗口共享一个绘图表面(Surface),SurfaceView虽然也在View的树形结构中,但是它有属于自己的绘图表面,Surface 内部持有一个Canvas,可以利用这个Canvas绘制。
    2. SurfaceView提供一个直接的绘图表面(Surface)嵌入到视图结构层次中。你可以控制这个Surface的格式,大小,SurfaceView负责在屏幕上正确的摆放Surface。简单说就是SurfaceView拥有自己的Surface,它与宿主窗口是分离的。
    3. View适用主动更新,SurfaceView 适用被动更新,如频繁的刷新View在UI线程更新,在非UI线程更新会报错,当在主线程更新view时如果耗时过长也会出错, SurfaceView在子线程刷新不会阻塞主线程,适用于界面频繁更新、对帧率要求较高的情况。SurfaceView可以控制刷新频率。SurfaceView底层利用双缓存机制,绘图时不会出现闪烁问题
    4. 双缓冲技术是游戏开发中的一个重要的技术,主要是为了解决 反复局部刷屏带来的闪烁。游戏,视频等画面变化较频繁,前面还没有显示完,程序又请求重新绘制,这样屏幕就会不停地闪烁。双缓冲技术会把要处理的图片在内存中处理好之后,把要画的东西先画到一个内存区域里,然后整体的一次性画出来,将其显示在屏幕上。
  2. 集合哪些是安全的

    1. Vector、HashTable、Properties是线程安全的;
    2. ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等都是线程不安全的。
  3. RecyclerView与ListView对比
    1. 缓存机制不同
    1.recyclerView比ListView多两层缓存
    1. recyclerView 四级缓存
    2. listView 两级缓存
    1. 局部刷新

    1. 缓存机制不同
      1.recyclerView比ListView多两层缓存
      1. recyclerView 四级缓存
      2. listView 两级缓存
1. 局部刷新 (指定ViewHolder完成rebind数据)
    1. 通过notifyDataSetChanged 刷新
        + 调用该方法后会将所有的holder添加一个ADAPTER_POSITION_UNKNOWN的flag的标识其position未知 并将boolean变量 mDataSetHasChangedAfterLayout置为true    
    2. notifyItemInserted 添加item 
        + 上面说过,在dispatchLayoutStep1时会根据操作集合(增删改)mPendingUpdates来执行相应的offsetPosition操作,就是将因为此操作而将要改变位置的holder的position全部更新比如在2的位置insert了一个item,那么offsetPosition后,当前所有从2开始的holder的position全部后移1,包括cached里的holder 那么在dispatchLayoutStep2复用position为2的holder时就没有,只能从pool里取或者新建holder,那么holder肯定标志位是重置的,需要rebind数据。
    3. notifyItemUpdate更新某个item
  1. java有什么特性,继承有什么用处,多态有什么用处

    • 继承,子类继承父类bai中所以du的属性和方法,但是对于private的属zhi相和方法,由于这个是父类的dao隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。
    • 多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。
      可以这么说:编译时看父类,运行时看子类。
  2. 反射是什么,在哪里用到,怎么利用反射创建一个对象
    - 要是指程序可以访问、检测和修改它本身状态或行为的一种能力
    - 一般是在读取配置文件的时候使用,比如在配置文件中定义了类名和方法名,要通过反射机制来找到对应的类和方法。
    - 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()

- 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance("Hello");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

paterWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值