2018/04/27
1、StringBuffer/StringBuilder
String是不可变对象,每次都会新增。
StringBuffer/StringBuilder则不然,每次只对其本身进行操作,所以拼接等操作性能优于String
StringBuffer是线程安全的,其方法为synchronized,多线程情况下使用。StringBuilder不具备线程安全特征。
2、Binder
3、同步、对象锁与方法锁区别、互斥锁与同步锁原理
4、回调与观察者模式区别
5、Handler LocalThread.标识
6、onMeasure/onLayout/onDraw调用,为了性能,什么时候控制只局面刷新。invalidate调用流程
深入
Need复习点:
1、Java基础;
2、安卓平台常用布局;
3、理解面向对象设计的基本原则;
4、精通常用的设计模式;
5、熟悉框架及各种特性;
6、熟悉Android下电话、信息、地理定位、数据库、动画等运行原理;
7、熟悉Android app 开发流程;
8、熟悉网络编程,熟悉Linux、XML、TCP/IP和HTTP协议;
9、深入了解android架构,对项目有构建系统框架能力;
re:
2、安桌平台常用布局;
LinearLayout:横、竖
RelativeLayout:以一个为基准
FrameLayout:默认左上角,一般结合Fragement使用
TableLayout:表格布局,TableRow,单员格里可以设置属性
AbsoluteLayout:使用具体坐标
3、理解面向对象设计的基本原则;
SOLID+迪米特原则
例子:ImageLoader
SOLID:
单一职责原则(SRP):显示、下载、初始化缓存都放在ImageLoader类中,未遵循该原则。
开放封闭原则(OCP):修改后,ImageLoader负责图片加载。ImageCache负责处理图片缓存。但只能通过内存缓存,程序退出后又得耗流量去下载,所以添加SDCard缓存、以及Double缓存(if else判断使用哪种),此时时if else逻辑就很臃肿,所以抽象出接口,通过注入接口的方式使用哪种缓存,这就是开闭原则。
里氏替换原则(LSP) :上面各种实际缓存的注入,其实就是里氏替换原则。
依赖倒置原则(DIP) :抽象依赖抽象,细节依赖抽象
接口隔离原则(ISP):try catch finally 里,finally里关闭对象,其实就可以整个关闭对象,让其只依赖其Closable接口,而不暴露具体对象的方法。
迪米特原则:
例子:租房中介,上面例子中SDCard缓存用到了jake wharton的DiskLruCache,但对用户是透明的,用户完全不知道其存在,这样就使得系统具有更好的扩展性与更低的耦合性。
6、熟悉Android下电话、信息、地理定位、数据库、动画等运行原理;
数据库运行原理:
query :使用匿名共享内存机制:适合数据量多的情况。内存映射
call:使用binder通信机制:适合数据量少的情况。
Provider :
android:bultiprocess=false:会在一个独立的应用程序中启动。
ContentProvider
ContentResolve
ContentService
ContentObserver
动画:
Animation 动画的一些属性,有两个成员,AnimationListener和Transformation
Transformation 有两个重要属性 alpha(透明度) matrix(各种平移、缩放、旋转等)
地理定位运行原理:
GPS定位,WIFI定准,基站定位,AGPS定位
1.有扎实的编程基础,熟练掌握java开发语言和android sdk,熟悉Android消息机制、事件分发机制、以及对overdraw的优化,对Android系统架构有一定了解。 |
2.熟悉Android中socket与http网络通信方式以及xml与json解析。 |
3.了解Glide的用法,会使用OkHttp等第三方框架。 |
4.会使用Systrace、TraceViewer分析以及优化卡顿性能问题,有分析与解决anr以及oom的能力。 |
5.熟悉常见的设计模式,理解Android中一些使用到设计模式的技术点,有良好的编码习惯与面向对象设计经验。 |
6.乐于分享,有良好的沟通能力和团队协作能力。 |
Handler消息机制:
MessageQueue,消息队列
Looper不断循环消息队列
Handler处理消息
事件分发机制:
overdraw优化:
socked
http区别:
Glide用法及原理:
OkHttp用法及原理:
anr:
oom:
设计模式,举例Android中用到的:
MVP模式:
20190419
leakcanary 实现原理,如何部署到线上分析
sparseArray put get 流程
RootView 和 view 的invalidate什么区别