我5月5号会参加阿里的面试。
在准备过程中整理一下自己的知识结构,也参考一些网上别人整理的资料做一个总结。既是给自己做个备忘,不至于学着前面的忘着后面的,同时也为其他人做个分享。

##基础知识点

##Android基础知识点

###资料搜集
HIT-Alibaba/interview

###知识点

  1. Android系统架构
    分为四层分别是Application层、Framework层、Runtime层、Linux Kernal层

  2. Activity/Service 生命周期 以及 如何保证自己的Service不被杀死
    1.优先级setForground()
    2.onStartCommand()返回值STICKY
    3.监听钟表事件:这里有一个问题,当监听TIME_TICK的时候,其实内部调用的Alarm是RTC而不是RTC_WAKE所以无法唤醒。还是得看需求。
    4.在manifest里persistent设置为true
    Service完全解析
    1.Service的基本用法。两种运行方法,生命周期
    2.Service和Activity进行通信
    3.Service的销毁方式
    4.Service和Thread的关系
    5.创建前台进程
    6.AIDL(IPC)接口定义语言进行远程进程通信。
    保持设备唤醒,或者定期唤醒

  3. Android动画原理分析
    1.问题,16ms是谁决定的。(自己模仿的时候可以不断调用post将其post进自己的消息队列(这里不是消息队列,而是一个叫RunQueue的东西))
    而Animation类,是由Choreographer类决定 最后还是通过Handler来进行的,每10ms sendMessage一次,这个Handler还挺复杂的处理三种不同的消息,还要控制顺序。
    2.Animator和Animation有什么
    Animator源码分析
    Animation上面已经已经说了,下面看一下Animator。View.animate()方法返回的是一个ViewPropertyAnimator类,他有一个成员变量为ValueAnimator。内部有一个叫AnimationHandler的Runnable,它的作用也是向Choreographer类中post自身
    Choreographer有一个成员变量是boolean:VSYNC(由系统赋值)垂直同步信号。由系统来决定刷新的时间,这样就会比强行的自己赋值的internal要可靠的多,能够更准确的刷新。是通过一个recerver类来接受的这个信号,接受的时候会block,不是线程安全的。
  4. Handler机制
  5. Android线程之间,Activity之间的通信。
    (关于Handler、Looger请参看我的博客)
    Activity之间的通讯需要说的是EventBus熟悉一下它的结构。
    EventBus主要有两个逻辑,一个是订阅(subscribe),一个是分发(post);两个动作都是按类型进行的。
    EventBus主要是解耦吧,感觉性能方面不是很高。
  6. 注解开发
    知道了,注解实际上是由@interface类型定义,然后由元注解修饰如@Documented@Rentention(分为三种Runtime,class,Source)@Target….
    对于ButterKnife还有一些疑问,先不管了
  7. Dalvik VS ART
    现在只知道是ART在安装的时候就将其搞成了native代码(还不知道这个native代码究竟是什么意思)而不是像Dalvik那样Runtime的时候采取执行成bytecode.
    另外也优化了GC操作
  8. 常用的五种布局方式
    LinearLayout,RelativeLayout,FrameLayout,AbsoluteLayout,Tablelayout
  9. 广播
    静态注册动态注册,优先级(可以截取不在分发),IntentFilter,不要执行太久。
  10. 控制反转(设计模式篇)
  11. Activity的四种加载模式
    Standard
    SingleTask
    SingleTop
    SingleInstance
  12. ListView相关
    ItemType
    ListView优化之图片篇
  13. ContentProvider
    把需要在进程间传输的数据都写到共享内存中去,然后只能通过Binder进程间通信机制来传输一个共享内存的打开文件描述符给对方就好了。在Android系统中,Binder进程间通信机制和匿名共享内存机制结合在一起使用,真是太完美了。
  14. Binder机制
    概念上的分析
  15. [匿名共享内存]
  16. 如何自定义View
  17. Android事件分发
    当有事件从硬件设备输入时,system_server端在检测到事件发生时,通过管道(pipe)通知ViewRoot事件发生,此时ViewRoot再去的内存中读取这个事件信息。
    以ontouch为例说明android事件发送机制
  18. 加载大图
    图片会被解压缩为矩阵(分辨率),假设图片的分辨率是3776 2520,每一点又是由ARGB色组成,每个色素占4个Byte,所以加载这张图片要消耗的内存为: 3776 2520 * 4byte = 38062080byte 大约要38MB的内存,大小略有出入,因为图片还有一些Exif信息需要存储,会比仅靠分辨率计算要大一些。
    public static BitmapcreateScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
    主要还是做好缓存,,以及Options
  19. HttpClient和URLConnection的区别,怎么使用https
    最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient
  20. Percelable Serializable
    Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
    在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化
  21. Android里跨进程传递数据的几种方案。(Binder,文件[面试官说这个不算],Socket,匿名共享内存(Anonymous Shared Memory))
  22. ListView里的ViewType机制
  23. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析
    视图大小计算过程(measure过程)
  24. Listview 的 ViewType机制浅析,主要是复用吧,他其实是存在一个ArryList的数组里的scrapViews,(每一个元素都是一个ArrayList,对应每一中ViewType)
  25. TextView怎么改变局部颜色(SpannableString或者HTML)
  26. Activity A 跳转到 Activity B,生命周期的执行过程是啥?(此处有坑 ActivityA的OnPause和ActivityB的onResume谁先执行)
  27. Android中Handler声明非静态对象会发出警告,为什么,非得是静态的?(Memory Leak)
  28. ListView使用过程中是否可以调用addView(不能,ListView确实是继承自ViewGroup的)
  29. Android中的Thread, Looper和Handler机制(附带HandlerThread与AsyncTask)
  30. Application类的作用 passingData cachingData using Context
  31. 广播注册后不解除注册会有什么问题?(内存泄露)
    广播分普通广播和Oreder广播
  32. View绘制流程
  33. 属性动画(Property Animation)和补间动画(Tween Animation)的区别,为什么在3.0之后引入属性动画(官方解释:调用简单)。对于View animation,它只是改变了View对象绘制的位置,而没有改变View对象本身,比如,你有一个Button,坐标(100,100),Width:200,Height:50,而你有一个动画使其变为Width:100,Height:100,你会发现动画过程中触发按钮点击的区域仍是(100,100)-(300,150)。
  34. 有没有使用过EventBus或者Otto框架,主要用来解决什么问题,内部原理
  35. 设计一个网络请求框架(可以参考Volley框架)
  36. 网络图片加载框架
  37. Android里的LRU算法原理
  38. BrocastReceive里面可不可以执行耗时操作?(Offcourse not)
  39. Service onBindService 和startService 启动的区别
  40. Android性能优化
    优化tips
  41. Bitmap相关
    ListView优化之图片篇
    BitmapFactory.Options o
    一直觉得decode很高端,原来就是处理流啊。还以为是什么东西,真没意思。
  42. Paint相关

##Java基础知识点

  1. LinkedHashMap extends HashMap
    保留了HashMap的顺序
  2. Java静态块 块 变量 加载顺序
    静态块、静态变量 > 变量、初始块 > 构造函数

##网络基础知识点

  1. HTTP
    HTTP和四种基本请求的理解,get是查,post是改,一个是放在url里,一个是放在包的包体里
    响应报文:状态行,响应头,响应正文
    条件GET 304 Not Modified
    持久连接:避免了TCP重新连接 就是在头中讲Connection改为KeepAlive 基本看服务器支不支持。另外有一定的时间限制。可能不稳定。
    HTTP管线化:一次发送好几个请求,一次收到一串响应。只能是HTTP/1.1,只能是GET,性能没有太大提高
    会话跟踪:HTTP无状态,为了知道是哪个用户什么状态就需要跟踪。方法:url重写/隐藏的表单/Cookie/Session
    两种攻击:摸清请求随便发请求;输入一段JavaScript来添加自己的逻辑。
  2. TCP
    三次握手,四次挥手,SYN攻击
  3. IP
    广播与多播
  4. Socket编程基础

##作品MoFa艺术图文相关
图片加载部分
蒙阴影Drawabl e setColorFilter

模糊处理

SwipeBackLayout

DecorView

RenderScript