被约了面试,面试官先上来问一下,了不了解终端这个岗位干什么?
回答不了解,被告知具体的大前端的方向,跨端做的比较多。
面试内容:
- 是否了解Kotlin协程相关?
- 轻量级线程,底层是对语言进行支持保证能做到挂起操作
- 可以解决回调地狱的问题
- 看项目有使用MVVM架构,谈一谈和MVP的区别
- MVVM能解耦,View和ViweModel之间能各自做自己的事情
- MVP也能,但是MVP的View和Model之间的数据传输问题太难,都要Presenter进行手动同步,MVVM可以双向绑定
- 了解Handler内存泄漏的情况吗?
- Handler主要泄漏的原因是内部类持有了外部类的引用,会有外部Activity的引用
- 比如延迟发送这种情况
- 那Android的内存泄漏有哪些?
- 静态引用,匿名内部类持有外部类的引用,单例持有其他对象的引用
- 监测Android内存泄漏的方法?
- Android studio自带的Profiler工具,可以看到内存使用情况,也可以去排查内存抖动这些问题
- 定位内存泄漏,Leakcanary;
- Java内存分析MAT,可以做一些内存管理的时候用到
- Kotlin现在又一个匿名内部类,会又内存泄露吗?
- 在kotlin中,kotlin有一些相关的优化,如果接口回调中不调用的外部类,那么生成的匿名内部类不会持有外部类的引用,也就不会造成内存泄漏。 反之,如果接口回调中调用到外部类,生成的匿名内部类就会持有外部类引用
- 实现插件化怎么做到的?
- 插件化是将一个apk根据业务功能拆分成不同的子apk,插件化更关注动态加载、热更新
- 实现的是动态加载,用到某个模块的时候才去加载它
- 对于类的加载classloader
- 底层依赖于DexClassLoader,它里面的构造方法入参会有dexPath,optimizedDirectory等参数会指定加载类的地址,于是可以实现指定加载哪些类,进而实现动态加载的能力
- 对于资源的加载(这块不是很懂,是下来之后了解的)
- 反射调用AssetsManager的addAssetPath方法;
- 将外部的apk路径添加进去,构建新的Resource对象
- 通过classloader加载R.java获取drawable,对应的id
- 通过上述构建的Resource获取drawable对象。
- 数据加载这块不是很清楚
- 性能优化做了哪些?
- 资源方向
- 资源压缩
- 内存管理,监测泄漏,内存抖动
- 性能方向
- 懒加载实现提前加载
- 热启动方向(不是很了解,当时没怎么做这块)
- Android 路由跳转怎么做?
- 基础的创建导航图
- 然后Negavition跳转的时候入参页面对应的标识符
- 只支持fragement和activity这种的跳转,没有涉及到Native层,了解阿里有ARouter这种支持URL解析的框架;
没有算法手撕,然后是反问面试官具体的业务方向,涉及的技术栈有哪些
唉!晚上的淘天笔试做的一塌糊涂,写面经都打不起精神,淘天笔试这个样子预计是要凉凉了,写点面经攒攒人品!
#灵犀互娱##Android面经##许愿offer##灵犀互娱面经##写面经攒人品#