又到年末了,每到这个时候,咱们都会慢慢反思,这一年都作了什么?有什么进步?年初的计划都实现了吗?明年年初有跳槽的底气了吗?何况今年的互联网环境太差,须要本身有足够的知识储备,才可以应对这凌冽的寒风。java
本文主要是整理了中高级安卓须要会的(或者说面试被频繁问到的内容),主要做为参考大纲,以后会陆续更新每一个详细部分,供你们参考,互相学习。面试
须要了解其实现原理,还要灵活运用,如:本身实现 LinkedList、两个栈实现一个队列,数组实现栈,队列实现栈等。算法
HashMap、HashTable 和 CurrentHashMap 的核心区别(并发),其次内部数据结构的实现、扩容、存取操做,再深一点 哈希碰撞,哈希计算,哈希映射,为何是头插法,扩容为何是 2 的幂次等。sql
参考连接数据库
JAVA容器-自问自答学HashMap
什么是HashMap?
从源码角度认识ArrayList,LinkedList与HashMap编程
参考连接设计模式
理解Java内存模型
你了解Java内存模型么(Java七、八、9内存模型的区别)数组
JVM 类加载机制、垃圾回收算法对比、Java 虚拟机结构
当你讲到分代回收算法的时候,难免会被追问到新生对象是怎么从年轻代到老年代的,以及能够做为 root 结点的对象有哪些两个问题。
复制代码
一、谈谈对 JVM 的理解?
二、JVM 内存区域,开线程影响哪块区域内存?
三、对 Dalvik、ART 虚拟机有什么了解?对比?浏览器
ART 的机制与 Dalvik 不一样。在Dalvik下,应用每次运行的时候,字节码都须要经过即时编译器(just in time ,JIT)转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,极大的提升了程序的运行效率,同时减小了手机的耗电量,使其成为真正的本地应用。这个过程叫作预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。缓存
优势:
缺点:
四、垃圾回收机制和调用 System.gc()的区别?
参考连接
线程有哪些状态,哪些锁,各类锁的区别
并发编程:
synchronized 和 volatile 、ReentrantLock 、CAS 的区别
synchronized 修饰实例方法和修饰静态方法有啥不同。
复制代码
sleep 、wait、yield 的区别,wait 的线程如何唤醒它
计算机网络部分:
一、TCP 有哪些状态
二、三次握手、四次挥手。为啥不是三次不是两次
三、HTTPS 和 HTTP 的区别,HTTPS 2.0 3.0?
四、浏览器输入一个 URL 按下回车网络传输的流程?
五、问的深一点的可能涉及到网络架构,每层有什么协议,FTP 相关原理,例:TCP 创建链接后,发包频率是怎么样的?
复制代码
一、生产者模式和消费者模式的区别?
二、单例模式双重加锁,为何这样作?
三、知道的设计模式有哪些?
四、项目中经常使用的设计模式有哪些?
五、手写生产者、消费者模式。
六、手写观察者模式代码。
七、适配器模式、装饰者模式、外观模式的异同?
八、谈谈对 java 状态机的理解。
九、谈谈应用更新(灰度、强制更新、分区更新?)
复制代码
强引用、软引用、弱引用、虚引用的区别以及使用场景。
强引用置为 null,会不会被回收?
稍微问的深一些的面试官会和内存泄漏检测原理以及垃圾回收糅杂在一块儿。
复制代码
问到泛型、泛型擦除、通配符相关的东西
复制代码
(参考连接:自定义View,有这一篇就够了 - 简书、Android 自定义 View) 2. 事件拦截分发(Android事件分发机制,大表哥带你慢慢深刻 - 简书 )
事件分发已经不是直接让你讲了,会给你具体的场景,好比 A 嵌套 B ,B 嵌套 C,从 C 中心按下,一下滑出到 A,事件分发的过程,这里面确定会有 ACTION_CANCEL 的相关调用时机。
复制代码
解决过的一些性能问题,在项目中的实际运用。
性能优化工具
(TraceView、Systrace、调试 GPU 过分绘制 & GPU 呈现模式分析、Hierarchy Viewer、MAT、Memory Monitor & Heap Viewer & Allocation Tracker 等)
性能优化 (讲讲你本身项目中作过的性能优化) (1)网络:API 优化、流量优化、弱网优化
(2)内存:OOM 处理、内存泄漏、内存检测、分析、Bitmap 优化
LeakCanary 原理,为何检测内存泄漏须要两次? (3)绘制
(4)电量:WeakLock 机制、JobScheduler 机制
(5)APK 瘦身
(APK 瘦身是怎么作的,只用 armabi-v7a 没有什么问题么? APK 瘦身这个基本是 100% 被面试问到,多是我简历上提到的缘由。)
(6)内存抖动
(7)内存泄漏
(8)卡顿 {如何检测卡顿,卡顿原理是什么,怎么判断页面响应卡顿仍是逻辑处理形成的卡顿}
BlockCanary 的原理
(9)性能优化:布局优化、过分渲染处理、ANR 处理、监控、埋点、Crash 上传。
(10)启动优化
冷启动什么的确定是基础,后续应该还有的是懒加载,丢线程池同步处理,须要注意这里可能会有的坑是,丢线程池如何知道所有完成。
复制代码
问题:
一、启动页白屏及黑屏解决?
二、启动太慢如何解决?
三、启动崩溃捕捉?
四、Https 请求慢的解决办法(DNS、携带数据、直接访问 IP) 5. 缓存本身如何实现(LRUCache 原理) 8. 图形图像相关:OpenGL ES 管线流程、EGL 的认识、Shader 相关 9. SurfaceView、TextureView、GLSurfaceView 区别及使用场景 10. 动画、差值器、估值器(Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用)
属性动画、补间动画、帧动画的区别和使用场景
复制代码
相互间的区别和各类使用场景,如何选择适合本身的开发架构。
复制代码
Handler 机制原理,IdleHandler 何时调用。
复制代码
Gradle(Groovy 语法、Gradle 插件开发基础)
热修复、插件化
(一、谈谈对 ClassLoader 的理解
二、双亲委托机制的好处
三、自定义 ClassLoader 四、插件化为何会出现,如何代码加载,资源加载,代理 Hook)
Activity 生命周期;
Android 的 4 大启动模式,注意 onNewIntent() 的调用。
讲讲 Android 的四大组件;
组件化架构思路
一、如何从一个老项目一步步实现组件化,主要问思路,考察架构能力和思考能力。(须要考虑不少,每一步作什么,顺序很重要)
二、组件化和模块化的理解与区别?
系统打包流程
Android 有哪些存储数据的方式。
SharedPrefrence 源码和问题点;
sqlite 相关
一、sqlite 升级,增长字段的语句
二、数据库框架对比和源码分析
三、数据库优化及数据迁移问题
四、getWritableDatabase 和 getReadableDatabase 的区别
ListView 和 RecyclerView 区别?RecyclerView 有几层缓存,如何让两个 RecyclerView 共用一个缓存?
一、RecycleView 如何进行局部刷新。 二、性能优化。
如何判断一个 APP 在前台仍是后台?
如何作应用保活?全家桶原理?
混合开发
一、 Hybrid 作过吗? 例:Android 经过WebView调用 JS 代码 例:JS 经过WebView调用 Android 代码;
二、Hybrid 通讯原理是什么,有作研究吗?
三、说说你用过的混合开发技术有哪些?各有什么优缺点?
重点:Router 原理,如何实现组件间的通讯,组件化平级调用数据的方式。
复制代码
单链表:反转、插入、删除
双链表:插入、删除
手写常见排序、归并排序、堆排序
二叉树前序、中序、后序遍历
最大 K 问题
广度、深度优先搜索算法
能够去刷一下 LeetCode ,对本身提高也会比较大。
String 转 int。 核心算法就三行代码,不过临界条件不少,除了判空,还须要注意负数、Integer 的最大最小值边界等;
如何判断一个单链表有环?
链表翻转;
快排;
100 亿个单词,找出出现频率最高的单词。要求几种方案;
链表每 k 位逆序;
镜像二叉树;
找出一个无序数组中出现超过一半次数的数字;
计算二叉树的最大深度,要求非递归算法。
String 方式计算加法。
下次更新内容章节为 Java 中的集合,我会根据内容多少决定分几篇文章去讲,大体内容如我整理脑图
为避免失联或想第一时间查看个人文章更新,可关注个人微信公众号 KevenZheng ,以后会陆续更新上述目录的内容,敬请关注。
如需转载,请联系我或注明出处!