一、性能优化
1. 布局优化
- include
- merge
- viewstub
- ConstraintLayout的使用
2. 绘制优化
- 在onDraw方法优化耗时操作,onTouch优化耗时操作
- measure,onlayout方法调用尽量减少,优化耗时操作
3. 列表优化
- ListView优化
- RecycerView优化
- decoration的使用
- 三级缓存
- mChangedScrap:List
- caches:List
- recyclerViewPool: List
- recyclerView.setHasFixedSize(true);
- 使用getExtraLayoutSpace为LayoutManager设置更多的预留空间
- RecyclerView 数据预取
- viewHolder中避免创建过多对象
- setOnClickListener
- 局部刷新 notifyItemChanged()
- 重写onScroll事件
- 设置缓存 setItemViewCacheSize(int )
- 多个viewPager的RecyclerView复用RecycledViewPool
- GridView优化
4. 内存泄露优化
- Handler泄露
- 强引用,软引用,弱引用
- memery leak
- memery thrunk
5. 内存溢出优化
- Bitmap的优化
* 采样率sampleSize
* LruCache,DiskLruCache - 队列的使用
- 内存监控
- 频繁gc造成内存抖动
6. 线程池优化
- 1.FixThreadPool
- 数量固定,空闲时不会回收,没有超时机制
- 2.CacheThreadPool
- 数量不固定,会被回收,有超时机制
- 3.ScheduleThreadPool
- 用来执行定时任务和固定周期的任务
- 4.SingleThreadPool
- 只有一个核心线程,所有任务都在同一个线程顺序执行
7. 常见的检测工具
- leakcanary
- 系统的设置
- profile
- Mat内存检测工具
- java 工具集:jmap, jmonitor。。。
二、动画特效
三、架构思想,设计模式,IoC
- 设计模式
- 24种模式
- 设计原则(SOLID)
- 单一职责
- 开闭原则
- 里氏代换原则
- 面向接口,不面向实现编程原则
- 依赖倒置原则
四、注入技术(inject)
- APT工具
- 辅助内部类Mirror模块
- AnnotationProcessor ViewProcessor AnnotationHandler 辅助类生成器
- 注入框架把注解的对象,变成关联的id指向的对象原理就是:适用注解,反射技术,在编译期间,生成辅助的类,帮用户生成“关联id和注解对象的代码”,从而注入这些对象,利用容器技术去注入对象,让用户不在关心对象诞生,消失,甚至和某个对象关联。这就是IoC的思想常见的IoC思想实现。例如:ButterKnife。
五、常见日志分析
- ANR日志分析
- umeng日志,bugly日志分析原理是否了解
六、网络通信
-
http
- 协议code:HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599)。
- 500 Internal Server Error服务器遇到了不知道如何处理的情况。501 Not Implemented此请求方法不被服务器支持且无法被处理。只有GET和HEAD是要求服务器支持的,它们必定不会返回此错误代码。502 Bad Gateway此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。
- 503 Service Unavailable服务器没有准备好处理请求。常见原因是服务器因维护或重载而停机。 请注意,与此响应一起,应发送解释问题的用户友好页面。 这个响应应该用于临时条件和 Retry-After:如果可能的话,HTTP头应该包含恢复服务之前的估计时间。 网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为这些临时条件响应通常不应被缓存。504 Gateway Timeout当服务器作为网关,不能及时得到响应时返回此错误代码。505 HTTP Version Not Supported服务器不支持请求中所使用的HTTP协议版本。506 Variant Also Negotiates服务器有一个内部配置错误:对请求的透明内容协商导致循环引用。507 Insufficient Storage服务器有内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当端点。508 Loop Detected (WebDAV)服务器在处理请求时检测到无限循环。
- 400 Bad Request1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。2、请求参数有误。401 Unauthorized当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。402 Payment Required此响应码保留以便将来使用,创造此响应码的最初目的是用于数字支付系统,然而现在并未使用。403 Forbidden服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个 HEAD 请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个 404 响应,假如它不希望让客户端获得任何信息。404 Not Found请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。405 Method Not Allowed请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。 鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。
- 300 Multiple Choice被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。301 Moved Permanently被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。302 Found请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。303 See Other对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。304 Not Modified如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。305 Use Proxy 被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。
- 200 OK请求成功。成功的含义取决于HTTP方法:GET:资源已被提取并在消息正文中传输。HEAD:实体标头位于消息正文中。POST:描述动作结果的资源在消息体中传输。TRACE:消息正文包含服务器收到的请求消息201 Created该请求已成功,并因此创建了一个新的资源。这通常是在POST请求,或是某些PUT请求之后返回的响应。202 Accepted请求已经接收到,但还未响应,没有结果。意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。203 Non-Authoritative Information服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。当前的信息可能是原始版本的子集或者超集。例如,包含资源的元数据可能导致原始服务器知道元信息的超集。使用此状态码不是必须的,而且只有在响应不使用此状态码便会返回200 OK的情况下才是合适的。204 No Content服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。响应可能通过实体头部的形式,返回新的或更新后的元信息。如果存在这些头部信息,则应当与所请求的变量相呼应。如果客户端是浏览器的话,那么用户浏览器应保留发送了该请求的页面,而不产生任何文档视图上的变化,即使按照规范新的或更新后的元信息应当被应用到用户浏览器活动视图中的文档。由于204响应被禁止包含任何消息体,因此它始终以消息头后的第一个空行结尾。205 Reset Content服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置文档视图。该响应主要是被用于接受用户输入后,立即重置表单,以便用户能够轻松地开始另一次输入。与204响应一样,该响应也被禁止包含任何消息体,且以消息头后的第一个空行结束。
- 100 Continue这个临时响应表明,迄今为止的所有内容都是可行的,客户端应该继续请求,如果已经完成,则忽略它。101 Switching Protocol该代码是响应客户端的 Upgrade 标头发送的,并且指示服务器也正在切换的协议。102 Processing (WebDAV)此代码表示服务器已收到并正在处理该请求,但没有响应可用。103 Early Hints 此状态代码主要用于与Link 链接头一起使用,以允许用户代理在服务器仍在准备响应时开始预加载资源。
-
http协议请求常见字段
- Content-Security-Policy HTTP头部 来指定你的策略
- Content-Type 实体头部用于指示资源的MIME类型 media type
- If-Range HTTP 请求头字段用来使得 Range 头字段在一定条件下起作用
- The Content-Length entity header indicates the size of the entity-body, in bytes, sent to the recipient.
-
https
- SSL:在网络协议哪一层
- 传输层之上单独一层安全套接字层
- 基本原理是什么
- 说出对称加密和非对称加密的原理和区别
- 在哪几步用到对称加密,哪几步又用到非对称加密
-
TCP协议
- 三次握手,四次挥手:原因
- 为什么连接的时候是三次握手,关闭的时候却是四次握手?答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
- 和UDP的区别
- 面向连接
- 可靠传输
- 有序发送报文
- 在OSI参考模型哪一层
- 传输层
- 常见的tcp网络框架
- netty
- xsocket
- 其他
- protobuff的特点与优缺点
- 数据二进制序列化协议
- 压缩数据,减少网络传输数据
- 适用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式
- 用处:很适合做数据存储或 RPC 数据交换格式
六、开源库
- RxJava
- OkHttp + Retrofit
- Volley
- Glide
- 三级缓存
- 和其他图片库的区别
- Dagger2
- ImageLoader
- 图片压缩库
- 数据库realm,greenDAO的实现原理
- ButterKnife
- EventBus,RxBus
七、framework层
- 框架的每一层关键知识点
- 四大组件的启动流程
- 系统的启动流程分析
八、一些杂项:原理性的东西
- Handler原理
- 事件分发原理
- Activity 和DecorView的原理
- AsyncTask原理
- 细节:AsyncTask 能否在子线程实例化
- 内部是怎么实现异步和同步UI线程的
- JsBridge原理
- java究竟怎么和js通信的
- PhoneGap,hybird的原理
- Serialize 和Parceble有什么区别
九、多媒体相关
- 这里简直可以单独开一个职业,叫做:安卓多媒体工程师(图形,图像,音频,视频处理)