欢迎进入深水区。
面试如果推进到这些知识点,我基本可以确定恭喜通过技术面试了。一般常规的面试到达这些地方都是放飞自我,相互讨论,自由问答的时候了。
关于dalvik机器,基本上涉及的面试问题有下面一些:
- dalvik与jvm的区别异同?dalvik与art的异同?
- dalvik/jvm的内存模型是怎么样的?
- 静态变量存储在内存的什么区里面?在int i = 16代码中,对象都存储在什么地方?
- gc的常规算法有哪些?内存对象回收至少经过多少次gc?gc的流程是怎么样的?
- finalize方法是否一定会执行?引用队列有什么用?
- jni的调用过程?jni函数注册方式?
- jit和aot是什么意思?
- ......
关于asm的一些面试问题:
- asm苦的设计模式是怎么样的?
- 使用asm怎么做代码/方法/属性的删除?
- dup2_x2这个字节码是什么意思?
- invokedynamic用于什么场景?
- 请使用asm设计指定方法耗时的监控?或者方法调用链路跟踪?
- 你接触过的字节码插入的库有哪些?请介绍一下/请比较一下。
- ......
hook技术相关的一些问题:
- 动态代理/静态代理机制怎么玩?譬如ams、pms这些如何实现动态代理?
- xposed框架有没有使用过?请介绍一下。
- plt-hook技术原理?
- inline-hooke技术原理?
- 两种native相关的hook技术比较?
- apk反编译,重打包,反调试?
- 游戏产品的渠道重打包分发如何做?
- 如何利用hook技术监控bitmap内存占用?app的内存泄漏监控?
- ......
如果有兴趣的同学请自行探索,以上的问题一般情况下都是有实际使用经验的同学会触及,也就是踩过坑的同学会印象深刻。学习对应的知识,应用特定的三方库,解决具体的问题。