Android知识大纲
Java垃圾回收机制
Java内存是如何划分的,Java语言为什么要使用垃圾回收机制?
垃圾判定
1. 标记引用算法
2. 根搜索法
垃圾清扫
1. 标记-清除法 概念以及特点
2. 复制算法
3. 标记-整理法
4. 分代回收算法
有了垃圾回收机制,Java还会出现内存泄露吗,如果说存在,Java有什么应对机制吗?
Java的四种引用方式
- 强引用
- 软引用
- 弱引用
- 虚引用
软引用、弱引用配合引用队列如何使用,使用的目的是什么?
可参考:http://blog.csdn.net/u012152619/article/details/46981643
<font color=red size=5>以上这么多关于Java垃圾回收和内存的东西,你在编写代码的时候有需要注意的地方吗?</font>
java数据结构
数据结构相关的类:Collection、List、Set、Map
__List:__ArraryList、LinkedList和Vector
__Set:__hashSet、LinkedSet和TreeSet
__Map:__HashTable、HashMap、LinkedMap和TreeMap
内存存放特性、数据增长特性和各自的适用场景
遍历Iterator、ListIterator和Foreach
线程安全问题,Tree一类的红黑树概念
了解Collections和Arrays两个辅助工具类的用法
HashMap/ArrayMap/SparseArray三个区别和使用场景
http://blog.csdn.net/u010687392/article/details/47809295
clone拷贝
- java中如何实现clone()拷贝,完成拷贝时他的内存是如何分配的?
- 什么是浅拷贝,什么是深拷贝,如何实现深拷贝?
参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201
多线程
线程用法
Thread、Runnable和Callable,以及各自的特点
线程的几个状态
创建、就绪、运行、阻塞、停止
线程池
为什么要使用线程池?
- 线程池常见的几个类的用法:
ThreadPoolExecutor、Executor,Executors,ExecutorService,CompletionService,Future,Callable 等 - 线程池四个分类
newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool和SingleThreadExecutor - 自定义线程池 ThreadPoolExecutor
线程池工作原理
核心线程数、等待队列、处理策略等
线程同步
同步方式:synchronized和lock
同步相关方法:wait()/notify()/notifyAll() sleep()/join()/yield() await()/signal()/signalAll
如何使用,各自适用场景?
参考:http://wiki.jikexueyuan.com/project/java-concurrency/executor.html
设计模式
面向对象设计六大原则
优化代码的第一步——单一职责原则
让程序更稳定、更灵活——开闭原则
构建扩展性更好的系统——里氏替换原则
让项目拥有变化的能力——依赖倒置原则
系统有更高的灵活性——接口隔离原则
更好的可扩展性——迪米特原则
参考:http://blog.csdn.net/bboyfeiyu/article/details/50103471
android适配问题
不同系统版本之前的适配 -- API变化
不同手机厂商之间的适配 -- 对Android原生系统进行了改造
屏幕适配 -- 尺寸单文(dp/sp/px)、布局layout和图片资源
可参考:http://blog.csdn.net/qq_28758749/article/details/51297842
Handler机制
- 使用方法, send/post两种方式
- handler底层怎么从发送消息到接收消息的
- 理清楚Looper、Handler、MessageQueue和Message概念和关系
- HandlerThread是什么东东,如何使用,和Handler有什么区别呢?
参考:http://blog.csdn.net/jackzhouyu/article/details/49079699
Activity
- 正常执行时,生命周期是何变化?异常时和Activity重新展开时,注意方法的调用时机: onSaveInstance()、onRestoreInstance()、onWindowFocusChanged()和onConfigurationChanged()以及使用方法
- onStart()和onResume()、 onPause()和onDestroy()这两方法用处都很类似,Android为什么要这么设计呢?
- Activity的四种启动方式standard、singleTop、singTask和singleInstance是什么?他们onNewIntent()方法的关系
参考:
(1) http://blog.csdn.net/woshimalingyi/article/details/50961380
(2) http://blog.csdn.net/jiangwei0910410003/article/details/16968881
(3) http://www.cnblogs.com/lijunamneg/archive/2013/03/26/2982461.html
(4)http://blog.csdn.net/mynameishuangshuai/article/details/51491074
Fragment
1. 什么是fragment?为什么要使用fragment?
需要对比Activity才能更好的作出解答
2. fragment的生命周期,并且和Activity的联系?
3. fragmentManger和FragmentTransaction两者用法,它的replace/add/remove/hide/show方法,以及添加到回退站和回退的用法
4. fragment和Activity的通信,以及何种方案保证降低他们的耦合性
以及fragment上踩过的一些坑
a. 嵌套fragment时Duplicated id或者Tag
b. replace之痛
c. Fragment的public默认无参数构造方法
原因:Fragment会被重新销毁(Activity销毁的时候它里面的Fragment就被销毁了,可能因为内存不足,手机配置发生变化,横竖屏切换)。在重新创建的时候系统调用的是无参构造函数。
d. getActivity()为空指针
讲解:http://blog.csdn.net/goodlixueyong/article/details/48715661
f. frgament和viewpager配合使用,生命周期影响几何,fragment如何感知自己已经处于显示状态,并且与Activity通信
http://blog.csdn.net/tongcpp/article/details/41978751
参考:
(1)http://toughcoder.net/blog/2015/04/30/android-fragment-the-bad-parts/
(2)http://blog.csdn.net/lmj623565791/article/details/37970961
Service
1. 生命周期及两种启动方式
2. Service的线程关系和Thread,它属于哪个线程和进程
3. Service和IntentService的区别
参考:
http://blog.csdn.net/xiao__gui/article/details/11579087
http://blog.csdn.net/huutu/article/details/40357481
android事件分发机制
1. Activity里面的组件发生点击事件时,事件是如何传递的?
2. view和viewgroup事件分发区别,理解dispatchTouchEvent()、onInterceptTouchEvent、onTouchEvent、onTouch和onClick事件
<font color=red>public boolean dispatchTouchEvent(MotionEvent ev)</font>
用来进行事件的分发。如果事件能够传递到当前View,此方法一定会被调用,返回结果受当前View的onTouchEvent()和下级View的diapatchTouchEvent()方法的影响,表示是否消耗当前事件
。
<font color=red>public boolean onInterceptTouchEvent(MotionEvent event)</font>
用来判断是否拦截某个事件,如果当前View拦截了某个事件,那么在同一个事件序列当中,此方法不会被再次调用,返回结果表示是否拦截当前事件。
<font color=red>public boolean onTouchEvent(MotionEvent event)</font>
在dispatchTouchEvent()中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接收事件
当子view的action_down事件不处理后,后续事件序列将不再传递给他
当子view除action_down外的事件不处理后,虽然后续事件也会收到,但是它的父组件却无法处理
requestDisallowInterceptTouchEvent,onInterceptTouchEvent两个方法
参考:
https://segmentfault.com/a/1190000005268399
精通网络通信机制;
对TCP、HTTP协议有丰富实践经验;
熟悉HTML、CSS、JS等web基础知识,独立或主导完成过大中型移动app经验者优先;
深入研究过android系统机制和framework源码,精通android上的app开发、调试、编译、打包等流程;
有技术难题攻关经验,在移动端app内存优化、绘制效率优化、IO优化或数据库、电量等调优方面有丰富的经验。
面试问题准备
- app之间通信有哪些方式
- 给你一个app设计项目,你应该怎么去搭建框架,如何去设计这个app
- Android加载大图问题解决办法1
- Android加载大图问题解决办法2
网友评论