技术短板
字节码注入
怎么实现字节码注入
SPI到字节码注入,优缺点
字节码注入相关知识,transform优化
算法
ViewGroup的层级深度,转换为二叉树的层级深度
讨论LRUcache的实现和时间复杂度
查找两个字符串的交集和字符串1中有字符串2中没有的问题。
String字符串的数字相加
使用三个线程顺序打印有序的数组
给定一个有序的数组和目标数,找出与目标数最近接的index,要求复杂度是log(n)的时间复杂度。
二叉树的深度和广度,要求一次遍历
给定一个二叉树和一个目标数,在二叉树中是否存在一条路径的所有节点的和与目标数是相同的case,并且打印。
二叉树,读取每一层最右边的节点
将两个有序的链表合并成一个有序的链表,递归和循环两中方式
int数组,除了一个数字外,其他数字都出现两次,找出这个只出现一次的数字
什么是红黑树,优点。
使用数组实现一个队列,有void add(int val)和void pop()两个函数,而且需要考虑扩容
一个类,内部有一个链表的数据结构,实现void add(Node n)和void remove(int index)的函数
一个无序的int数组,给一个target数字,找出数组中两个数字相加为target,并输出坐标
数组中存有1-3的三种数字,例如[1,2,3,1,2,2,1,3,3],将其排序为[1,1,1,2,2,2,3,3,3],要求时间复杂度,后续将内容变为一个对象,继续排序
Android
MVVM的原理
MVVM-livedata的实现原理
View的事件传递机制
组件化的实现方案
RecyclerView防止内存OOM的一道题,充分利用自身的缓存机制
热修复,主要说了ClassLoader的方式和Rubost的插装方式,重点介绍了Rubost的原理。
实现直播礼物的一些技术选型
包体积的极致优化
包体积优化:静态Lint,Proguard,AndResGuard和删除R.java中的所有字段,删除access方法,在gradle的transform阶段将压缩png和jpeg,使用google开源的redex方案,每种方案的原理以及优缺点。
Dalvik和ART的区别
属性动画的原理
Kotlin写一个let的扩展函数
组件化的实现,为什么做组件化,不同实现的优缺点。
view的优化,减少层级,异步加载,x2c框架引入,优缺点,textview的优化。
冷启优化的一些方案。
从桌面点击icon图标开始,整个启动activity的启动过程
Binder的实现原理
插件化的原理,以及hook点,大概有两个,可以网上搜索一下
图片压缩原理,以及在transform阶段进行的必要性
判断一个应用是否切到后台
组件化的探讨,假设场景,怎么处理
插件化的实现方式,以及对相应的场景进行讨论
自定义view步骤
activity生命周期
性能优化,包体积优化,冷启优化,卡顿优化的一些实现方案
ui优化,主要从检测和优化两个部分说明,优化又分为通用的优化,和改变绘制流程的优化。
binder机制
冷启优化和ui卡顿的监测和优化
thinker实现插件化的原理,我们使用什么什么实现热更新,热更新的通用方案,以及优缺点
内存泄漏和oom怎么产生的,内存泄漏的监控,leakcanery的实现原理
看过哪些第三方框架的源码,具体的实现原理。retrofit、okhttp和EventBus的原理,3.0的区别
activity task的四种类型
fragment的生命周期
intent传输数据的大小限制
Dex的组成,为什么每个dex会有65536的限制
Activity的生命周期、fragment的生命周期,onRestart()什么时候调用
service的两种启动方式,service的生命周期
进程保活:1.防止进程被杀 2.杀死后再拉起,详细的答案网上搜一下,这里就不列举出来了
Activity的launchMode,每个Mode的含义,Activity的启动流程
组件化,依赖版本号不同的解决办法
怎么自定义Transform、自定义Task,Task之间怎么依赖,大致顺序是什么,增量编译的概念,异步加快文件的读取,ASM接口的使用
View的绘制流程,硬件加速的原理和软件绘制的区别,以及相关的view的优化
动画实现的方式,帧动画和属性动画的实现原理
一张图片加载到手机内存中真正的大小是怎么计算的
Activity的启动流程
View的绘制流程,从VSYNC信号开始
APT的使用以及怎样处理字节码(ASM、javaassit、BECEL等)
从Activity A跳到Activity B的生命周期的调用过程,如果是异步进程呢
冷起优化,systrace怎么使用,实现原理
ANR是什么,怎么上报ANR,有些手机拿不出,有些手机拿不出anr/traces.txt,怎么查找ANR问题
插件化的原理,Activity的启动流程,hook点
handler介绍,为什么阻塞不会造成anr,屏障消息,产生内存泄露原因,handler内存泄露的引用链
事件拦截机制,view的绘制流程
android的系统渲染原理,renderthread的解释,三缓冲机制播放透明mp4的原理,surfaceview和textureview的区别
view的绘制流程,onMeasure、onLayout、onDraw,各个参数是什么含义,尤其是widthMeasureSpec、heightMeasureSpec以及对应的AT_MOST、EXACTLY和UNSPECIFIED
音视频
播放带有alpha通道MP4的解决方案
mp4播放alpha视频实现的原理
常用的播放器,以及优缺点
opengl的绘制流程
音视频编解码的流程
ijkplayer的优缺点,以及是否看过相关源码
怎么样实现MP4播放alpha的视频,编解码的一些流程,NV20、YUV、RGB一些概念,SurfaceView和TextureSurfaceView的区别
音视频的相关知识,NV20,YUV,RGB的关系,为什么mp4的压缩率比webp的动画要高,编解码的流程,通用的编码格式,软硬解的区别。
OpenGL
OpenGL一些知识,顶点着色器、片元着色器的工作原理,什么是VBO(这个没想起来),以及shader的一些简单问题
opengl的绘制流程,texturesurface是什么,顶点着色器和片元着色器各自作用,VOB是什么
Java
设计的六大基础原则
使用UML画一下访问者设计模式
设计一个上传日志的大小,涉及到,性能、文件大小、怎样压缩、时机、TopK问题
JVM相关知识
http的一些问题,1.1和2.0区别,心跳机制,https怎么建立链接,怎么进行数据加密等。
单例的实现,sychrnized的实现原理,以及双锁不加violate,会不会有线程安全问题
代码设计的基础原则,以及用UML画出工厂模式
线程安全的问题,sychronized和viloated的使用
实现一个CAS(乐观锁)的方法
HashMap的实现原理,怎么优化内存占用,优化resize的过程,put()原理。hash冲突,resize,1.8的改动,怎样找到index,size为什么是2的倍数,怎样resize,resize过后,之前的hash冲突还存在吗?currenthashmap的实现原理
双锁单例,为什么要价violate
内部类访问外部类
函数值传递的一些题
子类继承父类,个字都有静态变量、静态代码块、构造函数,执行的顺序
内部类引用外部函数的参数,为什么要final定义,值传递
多线程怎么保证线程安全,violated、sychronized、reenterLock,这三个锁的原理以及区别,JVM是怎样实现sychronized线程安全的。
jvm的介绍,内存介绍,gc等
hashmap是否线程安全,concurenthashmap实现原理,1.8之后有什么改变
怎样重构代码,基本的6大原则,详细讨论每个原则的含义,使用过的设计模式
假定场景,接口定义的有缺陷,第二版需要修改,是增加还是直接修改,以及还有没有其他的方案,怎么去做,为什么,这个是开放的题,结合设计原则,以及真实的情况和自己的一些例子说明即可
线程和线程池的讨论,为什么要用线程池,线程池各个参数的含义,如果队列满了会发生什么,为什么线程池的数量是cpu核数+1.
cookie、session、token的含义和区别
对于架构的思考,怎样设计一个好的架构,6大设计原则,分别说明一下
用过什么设计模式,为什么要用设计模式,对于设计模式的思考
OOM产生的原理,内存泄漏是由于什么引起的,GCRoot有哪几种类型,JVM等
动态代理和静态代理的区别,是否使用反射,Http和Https的区别,Https的socket security layer的握手
手写消费者生产者模型的代码
怎样保证多线程的安全,什么是乐观锁,怎么使用
设计一个发送语音模块的架构,需要写出所有接口函数,并且需要详细说明,可能面试官更加在意设计能力,这里讨论的时间非常长。
ASM以及MD5的实现原理,png的压缩原理