1.自定义view重写哪几个方法?
①两个参数的构造方法必须有。onDraw()方法必须有,是用来绘制View图像的
②如果要改变View 的大小,需要重写onMeasure()方法。
③如果要改变View在父控件中的位置,需要重写onLayout()方法
2.http 的session&cookie的区别
参考:cookie 和session 的区别详解
①cookie数据存放在客户的浏览器上,session数据放在服务器上。
②cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
③session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,到减轻服务器性能方面,应当使用COOKIE。
④单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
3.简述工作线程更新UI的方法
①Handler
②Activity runOnUiThread
③View.post
4.应用最多占多少内存
参考:Android 查看每个应用的最大可用内存
Android设备出厂以后,java虚拟机对单个应用的最大内存分配就确定下来了,超出这个值就会OOM。这个属性值是定义在/system/build.prop文件中的
5.滑动卡顿如何解决(不同原因及对应处理方式)
以listview为例
①getView convertView的复用。
②getView里面尽量不要解析图片。
③少用强制转换
④子view的层级不要太多,尽量使用RelativeLayout,减少布局测量时间。
⑤view的大小如果能够确定大小,就尽量使用精确值,例如10dp,减少布局测量时间。
⑥touch等主线程少做耗时操作。
6.为什么用Retrofit(一个开源库)
①快 参考浅谈我为什么选择用Retrofit作为我的网络请求框架
②解耦
③灵活
7.处理有序数组为什么比无序数组更快 参考StackOverflow
因为分支预测。
参考:为什么处理有序数组比无序数组快?
8.热修复与插件化相关
参考:
Android 主要的热修复方案原理分析
Android插件化:从入门到放弃
9.Integer类是不是线程安全的,为什么
不是的,读写并没有同步。
10.不使用同步锁如何实现线程安全
参考不用synchronized和lock,实现线程安全的单例模式
使用volatile 和 AtomicBoolean 实现的。
11.针对concurrent包下面的一些类的问题
参考:Java 并发工具包 java.util.concurrent 用户指南