- 01.Android经典问题
- 02.Java经典技能问题
- 03.作业帮项目问题汇总
- 04.滴滴项目问题汇总
- 05.大搜车项目问题汇总
- 06.一些技术输出问题
- 组件化:module A 和 module B 之间有需要调用 Api 这块怎么解决的?module A 和 module B 之间如何通讯?
- 崩溃专题:崩溃治理,崩溃监听,崩溃原理,以及捕获崩溃异常。崩溃降级。
- ANR专题:ANR原理,信息收集,分析,监控,治理。造成ANR原因有哪些,如何解决的?
- 卡顿专题:卡顿原因,卡顿监控,卡顿治理,说一下卡顿治理的优化措施。如何监控渲染卡顿?
- 网络专题:网络优化,弱网,监控。如何抓包,放抓包处理等等,避免网络拦截
- 内存专题:内存监控,内存治理,内存如何分配。内存泄漏怎么排查,平常有做过哪些内存优化相关的工作?
- 启动专题:启动优化,页面打开优化,统计耗时。App启动过程有哪些优化?
- 稳定性专题:稳定性优化,做了那些稳定性工作,产生那些业绩,hook疑难问题解决?
- 安全专题:安全防御,挂载,xposed的工作原理。如何防抓包?涉及到抓包原理是什么?
- 图片专题:图片优化,大图检测,大图加载,图片加载流程,如何减少图片占用内存,图片圆角处理
- OOM专题:OOM是如何产生,OOM场景,OOM如何优化,OOM排查思路,OOM是如何监控
- FPS专题:通过invalidate说一下屏幕刷新机制?什么是流畅度?说一下Choreographer作用,VSYNC信号理解?FPS监控设计如何做?
- UI优化:布局检测工具有哪些?如何统计布局的损耗?源码如何加载xml布局?布局卡顿优化
- 进程专题:系统为什么会杀掉进程?进程回收优先级?app切换到后台后为什么容易被杀死?系统杀的为什么是我的进程,这是按照什么标准来选择的?
- 线程专题:如何做线程优化?如何统一线程调用?有哪些可以做异步任务的方式?线程CPU排查,线程卡顿。
- IPC专题:跨进程通信方案,AIDL是如何实现的?如何理解死亡代理,Binder机制,Binder流程原理。
- Synchronized:必问,java的锁机制。特别是jdk6之后的锁优化以及运用场景。为什么是重量级的、JVM层如何实现,锁升级和降级
- Lock:必问,AQS的原理最好懂。一般会拿来和synchronize比较。具体原理是怎么实现的?
- volatile:必问,会拿来和锁比较,他的两个重要作用。更深点会问到cpu缓存一致性协议、以及指令重排的类型与原理。
- 死锁:一般询问如何解决或者产生的条件。如何排查死锁和解决死锁问题?
- 反射:反射性能问题如何理解,如何提高反射效率,怎么获取泛型类型,反射使用场景和设计思想。
- 泛型:泛型擦除理解。方法,成员变量,方法体里面局部变量,那些会被擦除。
- 线程通信:Object的wait和notify。阻塞唤醒,一般会用一个代码或者具体的场景来询问如何保证多线程同步。
- 类:类加载机制。成员初始化顺序。同时还会问双亲委托机制。类加载器原理,使用场景等等。
- 线程与进程的内存关系:如一个线程占多少内存、一个进程可以开多少线程、一个进程占用多少内存等。如何处理线程异常。
- 多线程:多线程并发问题,并发三要素,有哪些锁,锁对应的原理是什么,锁的升级和降级理解,有哪些保证线程安全的方式
- 线程池:核心设计思想,线程池分类和使用场景,线程池复用问题,execute和submit有何区别,工作队列和阻塞队列如何理解。
- 对象:对象内存布局,对象的创建过程和内存分配情况,如何访问对象,对象如何判断死亡,如何理解方法调用栈帧等。
- 内存分布:JVM内存模型、运行时数据区、native内存分布。很看对JVM的理解程度。
- HashMap:1.7,1.8的差异,1.8中什么情况下转换为红黑树,构造函数中参数代表的意思
- GC过程:(判断对象是否存活,GC算法),垃圾回收机制,GC链路分析过程。
- 注解:注解场景有哪些,分类,注解为何跟反射一起用。编译器和运行期注解框架如何设计?
- 异常:为何设计异常,Error和Exception异常体系,异常处理机制是什么?异常捕获流程?异常性能分析?
- 音视频通话:如何设计音视频业务?为什么说这块业务很复杂,复杂在哪里?绘制架构设计图?
- Socket概念:Socket是如何通信的?跟Http有何区别?数据传递性能如何?是否具有安全性?如何保证数据时效性?
- Socket实践:Socket是如何使用的的?如何创建连接,读数据(接受)和写数据(发送)分别是怎么设计的?
- Socket实践:读数据的时候,如何将io字节流转化为特定的tcp数据,拿到tcp数据后如何解析数据(解析成对应实体bean)?
- Socket长链接:如何设置socket保持长链接?如何保持轮训心跳包稳定性并且不会阻塞主线程?如何理解心跳包?
- Socket读写:如何理解Socket读写数据?如何处理读写异常逻辑?异常之后如何设计重新连接?那些情况会断开连接?
- Socket数据:TcpPacket是如何设计的?消息的长度是不确定的,并且每条消息都有它的边界。我们如何来处理这个边界?
- Socket数据:如何保证数据有序性?一个任务队列,执行任务,如何保证先取出的任务,执行结果需要先放入结果队列?
- 缓存方案:Sp有何弊端?读取数据是否高效?如何设计线程安全?是否是增量刷新数据?mmap存储原理?
- 缓存脏数据:各种缓存方案,进程不安全是否会导致数据丢失,如何处理数据丢失情况?如何处理脏数据,其原理大概是什么?
- 缓存设计:由于磁盘 IO 操作是耗时操作,因此框架有必要将支持多次磁盘 IO 操作聚合为一次磁盘写回事务,减少访问磁盘次数是如何设计?
- App抓包:设计数据加密手段,sign签名,环境检测,CA证书校验,禁用代理,还有各种防抓包策略如何操作?
- 日志写入:如何设计日志写入框架?存储日志信息如何设计?日志保存策略如何设计?如何避免写日志影响主进程性能?
- 日志回捞:日志上传的业务逻辑是什么样的?有什么收益?日志上传总体设计方案是什么样的?
- 组件化:组件化如何实现?组件化如何进行分层设计?组件化如何通信?组件化路由跳转的原理?遇到那些问题?
- Flutter跨端:跨端是怎么做的?三棵树如何理解?如何做引擎复用,遇到过什么问题,是怎么解决的?
- Flutter插件开发:如何做flutter插件开发?什么场景下使用?插件的设计思想是什么?
- App状态监听:如何做App网络,GPS,定位,Wi-Fi等状态监听?广播监听的原理是什么?
- 隐私合规:如何做隐私合规处理?如何处理权限合规?如何避免隐私API合规?如何做敏感信息控频优化?合规是如何测试?
- APT:Apt的流程是怎样的?如何设计组件通信?绘制下apt工具的架构设计图?
- 视频播放器:视频播放器是如何封装的?设计思路是什么?是如何设计架构分层?SurfaceView在子线程为何绘制UI不会卡顿?
- 视频缓存:说一下边播边缓存的设计原理?具体是如何实现的?例如在快速滑动列表中是如何使用?
- 视频优化:做过那些视频优化工作?是否有做过视频监控方案?播放性能优化是怎么做的?
- 视频View:SurfaceView和TextureView有什么区别?它们绘制的原理是什么?那个性能更好,为什么?
- 组件化通信:ARouter实现原理是什么?设计思路是什么?如何做降级处理?Apt是如何生成代码?
- 视频:怎么获取视频第一帧?TextureView 相比 SurfaceView 性能如何,为什么性能还会下降,基于什么维度这样说?
- 组件化问题:组件化同级module是如何通信的?如何进行业务的复用?
- 磁盘工具:磁盘工具是怎么做的?解决了什么问题?
- 弱网模拟工具:弱网判断条件是什么?如何去模拟弱网环境?弱网条件下做了那些优化操作?
- 通用存储方案库:说一下通用存储方案是怎么做的?如何实现跨进程通信?各种存储方案是如何设计数据存储线程安全的?
- 日志打印:日志打印库是如何设计存储file文件?如何跨进程写入数据设计?如何保证数据写入完整性?写入文件过大怎么处理?
- ASM方法耗时分析:如何通过ASM实现方法耗时分析?函数耗时主要是什么导致的?字节码插桩的原理是什么?
- Retrofit:采用动态代理,那么什么是动态代理,有何特点?Retrofit如何加载API接口,其核心原理是什么?
- Glide:Glide 的源码设计哪里很微妙?Glide的缓存是怎么设计的?为什么要用弱引用。说一下三级缓存的原理?描述一下内存缓存的容器?
- MMKV库:mmkv了解吗?它是如何存储数据的,mmap为什么比io高效,如何避免线程安全,为何进程杀死后仍然能保存好数据,是怎么做到的?如何保证多进程写入安全?
- OkHttp:请求怎么管理,它的线程池怎么实现?网络请求缓存处理是怎样的逻辑思路?
- LeakCanary:LeakCanary 的核心工作流程,它的设计思想是什么?如何设计组件的监听?如何判断内存的泄漏?如何分析内存?
- Gson:
- Xposed:
- ARouter: