Android面经分享,失业两个月,五一节前拿到offer

11,813 阅读7分钟

基本介绍

疫情期间,我被裁了。

从3月初开始复习,准备面试题。复习的资料主要为《Android开发艺术探索》和@jsonchao的博客,还有就是网上的其他博客资料。首先介绍一下自己基本情况:渣本毕业快4年,一直在小厂摸鱼混日子,学历和简历背景不是很好看,所以面试邀约也不是很多,面试也到处碰壁。从3月中旬开始面试,一直到4月底。共面试9家公司,近20轮面试,拿到2个小公司和1个上市公司(不是出名的公司)的offer,最后准备去上市公司了。也投递了BAT、360、抖音、快手、平安等大厂的岗位,不过大部分没给面试机会,少数大厂在后续面试中也把我拒绝了,原因是:基础知识不够扎实,技术深度不够。

面试分享

每轮面试都会有自我介绍,所以在面试前大家可以先准备一段自我介绍,向面试官介绍自己的基本情况。我这里只分享Android技术面试题(以每个公司为分类,将几轮面试题综合起来),面试官会在每个面试题继续深入,一直问到你不会为止。至于面试题答案,大家自行百度,在面试过程中尽可能回答完整(深度、广度、扩展),这样才能在面试官面前加分。建议大家找工作开始面试前,先找几家小公司找点面试感觉,然后再投自己期望的公司。

接下来是面试题:

公司一

  1. 组件化和arouter原理
  2. recyclerview和listview区别
  3. glide流程,缓存前压缩,缓存命中
  4. APP性能优化,内存优化,布局优化,绘制优化,内存泄漏
  5. Http和Https区别
  6. socket心跳包
  7. jvm虚拟机,堆和栈的结构
  8. activity启动模式,有哪些不同
  9. stack栈的特点,自定义stack结构
  10. kotlin优劣势

公司二

  1. 自定义view,中英文字符串宽高测量显示,测量算法,可扩展性
  2. 事件分发机制
  3. Activity,view,window联系
  4. 热修复和插件化原理
  5. Synchronized底层原理,java锁机制
  6. java容器,hashmap和hashtable区别,hashmap原理,扩容流程,扰动算法的优势
  7. ArrayList和LinkendList区别,List泛型擦除,为什么反射能够在ArrayList< String >中添加int类型
  8. Http和Https区别,SSL/TLS过程
  9. Android性能优化
  10. jvm虚拟机,堆和栈的结构,栈帧,JMM
  11. 组件化注意点,组件间通信机制
  12. 线程安全的单例模式有哪几种
  13. 熟悉的设计模式

公司三

  1. MVC,MVP,MVVM
  2. Activity和fragment生命周期区别,fragment正常添加和viewpager添加的区别,fragment懒加载原理,FragmentPagerAdapter 和 FragmentStatePagerAdapter
  3. 热修复和插件化
  4. 友盟bug统计,混淆后怎么定位bug。没接入热修复的APP中,上线后遇到bug怎么解决
  5. view绘制原理 (可以先说下基本view绘制,然后再说下屏幕刷新机制)
  6. 使用Analyze减少APK体积,原理
  7. Android 版本差异

公司四

  1. 基础类型字节,汉字占几个字节,线程和进程
  2. 四大组件,fileprovider和Contentprovide区别,activity启动流程
  3. MVC,MVP,MVVM
  4. TCP三次握手,四次挥手
  5. Eventbus,glide原理
  6. 性能优化,内存抖动,内存泄漏,内存溢出,handler机制,IntentService和handlerThread,子线程更新view内容的方法
  7. GC回收算法
  8. recyclerview和listview区别
  9. 组件化,模块化,插件化,热修复
  10. 工作中遇到的难题怎么解决的
  11. Kotlin Java优缺点,kotlin什么时候用分号,run,with,apply,内联函数,高阶函数
  12. APK体积优化
  13. 进程间通信
  14. 单例模式,哪些是安全的
  15. retrofit设计模式
  16. 自定义view
  17. 是否做过音视频和IM?
  18. APK性能优化
  19. CurrentHashMap1.7和1.8区别
  20. volatile关键字的作用,怎么保证原子性呢?
  21. 网络优化
  22. 对新技术的看法
  23. java泛型,协变和逆变

公司五

  1. HTTPS具体步骤
  2. 常用的设计模式,代理模式和装饰者模式区别
  3. 服务端返回错误的json数据,客户端怎么自定义model,避免出错
  4. Hook技术
  5. kotlin了解,协程
  6. 屏幕适配
  7. 抓包工具使用和原理
  8. 网络优化
  9. 未来期望,对公司的了解
  10. Okhttp,rxjava,glide,retrofit等原理,okhttp底层数据传输原理,http报文体结构
  11. APK体积优化
  12. Android jetpack使用和原理,新技术看法
  13. crashHandler获取应用crash信息
  14. recyclerview和listview缓存区别
  15. Android 常见崩溃问题分析及一般的解决方案
  16. NestedScrollView触摸机制,AOP相关知识
  17. 设计APP,整体架构选型
  18. Android沙盒和底层Linux通信
  19. ACTION_CANCLE什么时候触发
  20. 线程池原理

公司六

  1. 组件化,arouter,组件化UI,还有哪些路由框架。AS调试方法
  2. MVC,MVP,MVVM,Jetpack
  3. JVM,JMM,java加载对象的步骤,classLoader,GC回收算法
  4. 插件化和热修复
  5. 唯一安卓ID,安卓安全的知识,加密算法,判断activity前台进程
  6. TCP三次握手和四次挥手
  7. hash算法,hashmap,怎么解决hash冲突
  8. 加载大图,glide缓存机制,设计模式,双重检测的单例模式为什么要检查两次,自己设计图片加载框架思路
  9. 启动未注册的Activity
  10. AOP,蓝牙开发,IOT
  11. glide缓存清除:lrucache算法
  12. glide缓存文件太大,查找效率慢怎么优化?glide下载高清图片优化
  13. 最近研究的技术,遇到最难的事,对公司的期望

公司七

  1. 组件化, arouter优缺点
  2. MVC,MVP,MVVM
  3. 项目中的亮点,对架构的理解
  4. handler原理及相关知识点,message回收策略
  5. hashmap原理,arraymap原理,对比性能。
  6. hashmap为什么大于8才转化为红黑树,加载因子为什么是0.75
  7. Synchronized底层原理,java锁机制
  8. 服务和广播
  9. activity启动模式(给例子具体分析,A(标准)-》B(单例)-》C(singleTop)-》D(singleTask),分析有几个栈,每个栈内的activity)
  10. 常用设计模式,线程安全的单例模式

公司八

  1. static、final;继承与多态
  2. 组件化, arouter优缺点
  3. context相关知识点
  4. handler原理及相关知识点,handler缓存池大小。
  5. 性能优化,启动速度优化,架构
  6. java虚拟机与Dalvik和ART区别
  7. Kotlin协程,扩展函数和属性以及伴生对象
  8. 电商APP的首页,怎么设计一个APP架构
  9. MVP中数据请求为什么要和M一起,答:网络请求和javabean都是数据模型相关
  10. Glide的存储EngineKey是怎么保证唯一的。面试官答:有个队列会将EngineKey存储起来,每次生成后进行对比存储。这个我在源码中没找对位置,如果知道的同学,麻烦帮忙解释下。
  11. retrofit是怎么将service接口转化为我们需要的javabean的?
  12. 怎么做管理,新技术学习

公司九

  1. SqLite与contentProvider区别
  2. fragment周期,两个fragment切换周期变化,fragment通信
  3. https证书校验,加密相关,网络请求框架
  4. glide加载流程,大图显示,图片大小计算
  5. view绘制(从onSync()开始)
  6. 线程内存模型,线程间通信
  7. 获取view的宽高,更新view的方式,主线程消息机制
  8. OOM,内存泄漏,内存溢出,java引用类型,ANR分析
  9. APP性能优化,webview相关,webview优化,webview中Android与js互调
  10. 插件化和热修复

总结

简历上写的东西,一定要先搞懂,特别是简历上的专业技能。这次面试收到的最多反馈就是:基础知识不够扎实,技术深度不够。现在Android开发大部分需要懂点C++和Linux知识,大厂也需要刷算法面试题,在后面的学习过程中,我将从以上几个方面着手。当然也必须把基础知识学牢固,技术深度搞深入点。

最后祝大家都能拿到心仪的offer!