一、Android部分
1.Android基础
- 四大组件,具体的使用和碰到的问题。四大组件的考察会结合 ANR(四大组件是否都会产生 ANR、时间是多少等)、进程优先级、启动模式
- listView的卡顿优化、listView如何优化,listView和RecyclerView的区别,二者的缓存逻辑
- 序列化前后对象有何区别
- Handler的工作原理
2.Android进阶
- ==技术原理== 屏幕绘制原理、View的绘制流程(在白板上写出对于View的绘制和优化流程)(View的位置参数有哪些,left,x,translationX的含义以及三者的关系)(View的绘制流程,onMeasure,onLayout的计算流程,MeasureSpec的几种模式)(View的绘制原理)
- 几种动画的原理
- 布局加载原理
- 客户端中比较少碰到的复杂环境下的线程安全问题
- 资讯流懒加载如何实现
- Binder通信原理、进程间通信方式,Binder原理
- 提高app安全性的方法
- App的启动流程
- 如何处理App启动流程优化(App的启动优化流程)
- View的性能优化,页面卡顿的原因(View的性能优化,listView的卡顿优化)
- BitmapFactory.Options.inSampleSize 为什么是 2 的幂
- 处理滑动的几种方式,Scroller滑动的原理
- 自定义View的流程,自定义View需要注意的问题,例如自定义View是否需要重写onLayout,onMeasure
- invalidate、postInvalidate、requestLayout的区别
- Touch事件的分发流程
- 插件化Activity生命周期的管理
- 资源的访问原理
- 如何优化WebView,WebView的泄露
- native和js交互流程
3.开源框架相关(开源框架,例如rxjava、Glide、LeakCanary,OkHttp)
- rxjava的线程切换原理
- Glide的优势,它是如何绑定生命周期的
- 为什么用Glide,它的优势
- 是否使用过Flutter开源框架
4.新技术等
- 插件化开发流程,插件化优势,插件化开发中遇到的问题以及如何解决的
- 插件化框架的比较,梳理插件化的架构
- 组件化开发流程
- 插件化优势,插件化加载Activity原理,加载资源原理
- 插件化首次启动耗时长,如何优化
二、Java部分
1.Java基础
- Java四大引用/弱引用/ReferenceQueue/ leakcanary 的使用
- 堆和栈的区别
- 栈帧里记录了哪些信息
- 多线程技术
- 垃圾回收原理以及回收策略
- synchronized
- Lock
- equals
- hashCode
- 垃圾回收算法
- java中的强、软、弱、虚引用
2.Java进阶
- 类的加载机制,为什么用双亲委派模型,java是否支持多态
- HashMap的原理,ConCurrentHashMap的原理
三、算法(定期练习算法题 剑指offer、leetCode)
1,算法
第 TopK 大的数(快排思想、能提到线性查找算法 BFPAT 更佳)
前 TopN 个数(堆排序、先分治再堆排序)
数据结构-线段树
动态规划、
贪心、
分治等算法的基本思想
排序,要求时间复杂度是O(n),例如1,4,5,2,7,6,9。如果数列是10,102,99,10000,825,1003030如何排序
算法:连续子数组的最大和
算法:给定一段已排好序的数列,数列中元素有可能是重复的,找出数列中目标值的最小索引,要求不能用递归,只能用循环。
算法:Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.
You have the following 3 operations permitted on a word:
1、Insert a character
2、Delete a character
3、Replace a character
Input: word1 = “horse”, word2 = “ros”
Output: 3
Explanation:
horse -> rorse (replace ‘h’ with ‘r’)
rorse -> rose (remove ‘r’)
rose -> ros (remove ‘e’)算法:int[] insert(int[] arr,int len,int cap,int pos,int value),给定一个数组,例如{1,2,3,空,空},该数组的len=3,容积cap=5,插入位置pos是1,插入的值是5,结果是{1,5,2,3,空},返回插入后的数组(考虑扩容);
2,其他
- 称重问题:10个箱子,每个箱子里都有若干砖头,其中有一个箱子里每个砖头重9克,其他的箱子里的砖头每个重10克,给你一个秤,要求只能用一次称重找出砖头重9克的箱子。
- 追击问题:2辆火车相向同时出发,一个从A点出发,速度是30km/h,一个从B点出发,速度是20km/h,A、B之间的距离是S,同时一只鸟也从A点出发,速度是50km/h,鸟在两辆火车间折返飞行,问三者相遇时,鸟飞的总路程。
- 切饼问题:1刀切2块,2刀切4块,10刀最多切几块。
四、计算机知识
1.计算机网络(比较多)
- TCP 和 UDP 的区别
- TCP 的拥塞控制
- TCP 的握手与挥手流程
- HTTP 与 HTTPS
- 比如在问大图加载时顺口问一下“同一个文件,放到 drawable 目录下和放到 SD 卡中,加载到内存时内存占用一样么” (这里涉及到了 Bitmap decode 时的过程以及 Bitmap 内存占用的计算)
- 比如 HashMap put 方法调用时内部的流程是怎样(方法内部的流程、HashMap 的扩容等)
- 比如 Http 1.1 和 2.0 的特点和区别
- TCP、IP各自所在的网络层次,IP报文中的内容
- https的对称加密和非对称加密
- TCP、UDP区别,拥塞控制原理,视频传输为什么用UDP,UDP丢包会产生什么问题,如何处理数据包的发送速度和带宽的关系
2.计算机原理
- 指针占几个字节
- ARouter路由协议的原理分析
五、项目架构设计、模块设计、项目优化
- 注意介绍项目架构
- 画出架构图
- 架构重构
- 内存、卡顿优化、电量优化等细节优化
- 模块设计题目(相关的场景让你做一个模块设计)
- MVC、MVP的区别
- MVC到MVP的架构重构流程
- 实现一个库,完成日志的实时上报和延迟上报两种功能,该从哪些方面考虑
六、设计模式
- 了解哪些设计模式,手写单例设计模式
七、其他工具
1. Gradle
2. Git
- git cherry-pick
- git hook
3.其他
- LeakCanary原理,内存泄露的分析流程
八、面试相关
- 牛客网上视频面试(网站上配置有白板可以写代码)
- 简书大佬JasmineBen提供的Android面试题资料
- 自我介绍,聊聊简历上写的项目
- 自己的优势和劣势
- 对开发流程的理解
- 梳理你遇到的最严重的问题,以及如何解决的
- 如何处理几百人的团队分工
- 你对淘宝App的使用体验,从哪些方面优化淘宝App
九、书
《大话设计模式》、《Android 源码设计模式》。《剑指 offer》《Android 进阶之光》《高性能 Android 应用开发》
JVM (来自《深入理解 Java 虚拟机》)《深入理解 Java 虚拟机》