Android知识大纲

Android知识大纲

Java垃圾回收机制

Java内存是如何划分的,Java语言为什么要使用垃圾回收机制?

垃圾判定

1. 标记引用算法
2. 根搜索法

垃圾清扫

1. 标记-清除法    概念以及特点
2. 复制算法
3. 标记-整理法
4. 分代回收算法

有了垃圾回收机制,Java还会出现内存泄露吗,如果说存在,Java有什么应对机制吗?

Java的四种引用方式

  1. 强引用
  2. 软引用
  3. 弱引用
  4. 虚引用
    软引用、弱引用配合引用队列如何使用,使用的目的是什么?
    可参考:http://blog.csdn.net/u012152619/article/details/46981643
    以上这么多关于Java垃圾回收和内存的东西,你在编写代码的时候有需要注意的地方吗?

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,以及各自的特点

线程的几个状态

创建、就绪、运行、阻塞、停止

线程池

为什么要使用线程池?

  1. 线程池常见的几个类的用法:
    ThreadPoolExecutor、Executor,Executors,ExecutorService,CompletionService,Future,Callable 等
  2. 线程池四个分类
    newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool和SingleThreadExecutor
  3. 自定义线程池 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机制

  1. 使用方法, send/post两种方式
  2. handler底层怎么从发送消息到接收消息的
  3. 理清楚Looper、Handler、MessageQueue和Message概念和关系
  4. HandlerThread是什么东东,如何使用,和Handler有什么区别呢?
    参考:http://blog.csdn.net/jackzhouyu/article/details/49079699

Activity

  1. 正常执行时,生命周期是何变化?异常时和Activity重新展开时,注意方法的调用时机: onSaveInstance()、onRestoreInstance()、onWindowFocusChanged()和onConfigurationChanged()以及使用方法
  2. onStart()和onResume()、 onPause()和onDestroy()这两方法用处都很类似,Android为什么要这么设计呢?
  3. 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事件

public boolean dispatchTouchEvent(MotionEvent ev)
用来进行事件的分发。如果事件能够传递到当前View,此方法一定会被调用,返回结果受当前View的onTouchEvent()和下级View的diapatchTouchEvent()方法的影响,表示是否消耗当前事件

public boolean onInterceptTouchEvent(MotionEvent event)
用来判断是否拦截某个事件,如果当前View拦截了某个事件,那么在同一个事件序列当中,此方法不会被再次调用,返回结果表示是否拦截当前事件。
public boolean onTouchEvent(MotionEvent event)
在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

干货资源

https://juejin.im/entry/578d938079bc44005ff26aec

你可能感兴趣的:(Android知识大纲)