一 Java 相关
容器相关:
HashMap 与 HashTable 差别,ArrayMap,LinkedList,ArrayList,ConcurrentHashMap 数组,等等
ConcurrentHashMap的1.7和1.8版本差异
LinkedHashMap实现原理
ArrayDeque实现原理
Java Object中有哪些方法?equals和hashCode方法什么时候会被重写?
Java 多线程并发问题汇总
Java中悲观锁与乐观锁,举例并说明其相关实现?
synchronized对不同方法的修饰,持有的锁对象的差异
说一下对于线程安全的理解,Java中线程安全与不安全的集合类有那些?
内存模型
垃圾回收算法(JVM)
垃圾回收机制和调用 System.gc()的区别?
平时项目中对于锁的应用
类加载过程(需要多看看,重在理解,对于热修复和插件化比较重要)
反射
多线程和线程池,Java线程中interrupt()、interrupted()和isInterrupted()分别代表什么意思?
JAVA 设计模式系列
设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
Java 四大引用
Java 的泛型,泛型擦除,什么情况下不会出现泛型擦除
final、finally、finalize 的区别
接口、抽象类的区别
动态代理与静态代理
二 Android 相关
自定义 View
View绘制流程,从Vsync信号到ViewRootImpl到最终View的draw
事件传递机制,结合滑动冲突具体场景解决问题
Apk安装过程
内存泄漏,Handler如何导致Activity内存泄漏,如何做检测,引用的链路到GCRoot
Fragment生命周期
Activity各类启动模式下的切换状态后显示状态
屏幕反转Activity的生命周期变化
Dialog弹起背后的Activity生命周期发生何种变化?
解决过的一些性能问题,在项目中的实际运用
性能优化工具
性能优化 (讲讲你自己项目中做过的性能优化)
Dalvik和ART的区别
Http[s]请求慢的解决办法(DNS、携带数据、直接访问 IP)
缓存自己如何实现(LRUCache 原理)
图形图像相关:OpenGL ES 管线流程、EGL 的认识、Shader 相关
SurfaceView、TextureView、GLSurfaceView 区别及使用场景
动画、差值器、估值器(Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用)
MVC、MVP、MVVM
AsyncTask、IntentService 原理及应用
Handler实现机制,同步屏障,IdleHandler
HandlerThread的实现原理
Gradle(Groovy 语法、Gradle 插件开发基础),Glide中生命周期如何实现的,Glide如何加载一个Gif图
热修复、插件化
组件化架构思路
系统打包流程
Android 有哪些存储数据的方式。
SharedPrefrence 源码和问题点;
sqlite 相关
如何判断一个 APP 在前台还是后台?
AMS 、PMS
Activity 启动流程,App 启动流程
Binder 机制(IPC、AIDL 的使用)
为什么使用 Parcelable,好处是什么?
Android 图像显示相关流程,Vsync 信号等
EventBus的实现原理,粘性事件是如何实现的?为什么要用EventBus,其优势在哪里?
Retrofit的实现原理结合动态代理来问
Picasso与Glide的区别(缓存的差异性)
Volley与Okhttp的差异性,Okhttp的实现与其优势
多进程的数据库与文件操作该如何实现?
RecyclerView中的缓存实现原理
RecyclerView中ItemDecoration的实现原理
SparyArray和ArrayMap的实现原理?
使用过RxJava和Retrofit吗?
SurfaceView和TextureView的区别
Surface为什么要用双缓冲机制?
Bitmap大图加载的优化策略?
SharePreference的commit和apply的区别
三 算法与数据结构
二维坐标系中有一些点,找出一点直线覆盖尽可能多的点
链表表示一个数字,求两个数字相加之和,返回一个链表
链表反转
无序数组中查找两个和为某一个值的数字,返回索引值
时间复杂度 / 空间复杂度
常用的排序算法有哪些?
字符串反转
链表反转(头插法)
如何查找第一个只出现一次的字符(Hash查找)
如何查找两个子视图的共同父视图?
无序数组中的中位数(快排思想)
如何给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
二叉树前序、中序、后序遍历
什么是完全二叉树?
二叉树的最低深度路径打印
最大 K 问题
广度、深度优先搜索算法
String 转 int。核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;
如何判断一个单链表有环?
100 亿个单词,找出出现频率最高的单词。要求几种方案;
链表每 k 位逆序;
镜像二叉树;
找出一个无序数组中出现超过一半次数的数字;
计算二叉树的最大深度,要求非递归算法。
String 方式计算加法。
字符串中最长不重复子串
背包问题(最大容量与最大价值)
动态规划与递归的差异性,什么问题可以用动态规划,什么问题不可以
排序算法类型与复杂度,有没有更优的优化空间
排序算法复杂度中nlgn中的lgn是怎么来的
堆排序相关,堆排序中的堆与堆栈中堆的差异性
两个字符串,求其最长子串?例如abc1234,123bc(暴力方法的复杂度,动态规划的复杂度)
对于算法问题,需要找到最优解,手写达到Bug free的水平,同时对于各种解决方式都能够给出时间复杂度,同时给出时间复杂度的计算过程。
四 计算机基础
TCP三次握手,四次挥手
DNS解析过程
Http和Https的区别
Https的建立连接过程
什么是死锁?如何产生?如何消除?
TCP拥塞控制与流量控制实现?
弱网下网络请求的处理策略,结合直播场景
了解那些设计模式?
工厂设计模式的优点在于什么?
外观设计模式和策略模式的是如何在项目中应用的?
有使用过那些加密算法?
怎么理解原子性和可见性?
如何保证原子性?
Https中数据传输是对称加密还是非对称加密?
补码表示方式,int最大值加2后等于多少
五 技能树
持续更新中。。。