1. 服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达?
  2. SQLite 数据库升级,数据迁移问题?
  3. 数据库框架对比和源码分析?
  4. CAS介绍,OAuth 授权机制?
  5. 谈谈你对安卓签名的理解
  6. App 是如何沙箱化,为什么要这么做?

####混合开发

  1. 混合开发的方式?各自优缺点和使用场景?
  2. Hybird
  3. React Native
  4. Weex
  5. Flutter
  6. Dart
  7. 快应用

####Framework

  1. 请介绍一下 NDK?
  2. 如何加载 ndk 库?如何在 jni 中注册 native 函数,有几种注册方式?【猎豹移动】
  3. Android 进程分类?
  4. 谈谈对进程共享和线程安全的认识?
  5. 谈谈对多进程开发的理解以及多进程应用场景?
  6. 什么是协程?
  7. 逻辑地址与物理地址,为什么使用逻辑地址?
  8. Android 为每个应用程序分配的内存大小是多少?
  9. 进程保活的方式?
  10. 系统启动流程是什么?
  11. 一个应用程序安装到手机上的过程发生了什么?
  12. App 启动流程,从点击桌面开始(Activity 启动流程)?
  13. 什么是 AIDL?解决了什么问题?如何使用?
  14. Binder 机制及工作原理?
  15. App 中唤醒其他进程的实现方式?
  16. Activity、Window、View 三者的关系与区别?
  17. ApplicationContext 和 ActivityContext 的区别?
  18. ActivityThread,ActivityManagerService,WindowManagerService 的工作原理?
  19. PackageManagerService 的工作原理?
  20. PowerManagerService 的工作原理?
  21. 权限管理系统(底层的权限是如何进行 grant 的)?
  22. 操作系统中进程和线程有什么区别?系统在什么情况下会在用户态和内核态中切换?【猎豹移动】
  23. 如果一个 App 里面有多个进程存在,请列举你所知道的全部 IPC 方法。

####性能优化

  1. 如何对 Android 应用进行性能分析以及优化?
  2. ANR 产生的原因是什么?怎么定位?
  3. OOM 是什么?怎么解决?是否可以 try catch?
  4. 内存泄露的解决方法?
  5. ddms 和 traceView 的使用?
  6. 性能优化如何分析 systrace?
  7. 用 IDE 如何分析内存泄漏?
  8. Java 多线程引发的性能问题,怎么解决?
  9. 启动页白屏、黑屏、太慢怎么解决?
  10. App 启动崩溃异常怎么捕捉? 对于 Android App 闪退,可能有哪些原因?请针对每种情况简述分析过程。【猎豹移动】
  11. 如何保持应用的稳定性?
  12. RecyclerView 和 ListView 的性能对比?
  13. Bitmap 如何处理大图?如何预防 OOM?
  14. 如何缩小 Apk 的体积?
  15. 如何统计启动时长?

####Gradle

  1. Gradle 源码解析
  2. 对热修复和插件化的理解?
  3. 插件化原理分析
  4. 模块化实现(好处,原因)
  5. 项目组件化的理解
  6. 描述清点击 Android Studio 的 build 按钮后发生了什么?

####Kotlin

  1. 谈谈对 Kotlin 的理解
  2. 闭包和局部内部类的区别?

网络基础

  1. 描述一次网络请求的流程?
  2. TCP 中 3 次握手和 4 次挥手的过程?
  3. TCP 与 UDP 的区别及应用?
  4. HTTP 协议
  5. HTTP 1.0 与 2.0 的区别
  6. HTTP 报文结构
  7. HTTP 与 HTTPS 的区别以及如何实现安全性
  8. HTTPS 原理
  9. 谈谈你对 WebSocket 的理解
  10. WebSocket 与 socket 的区别
  11. 视频加密传输

数据结构与算法

####数据结构

  • 简述常见的数据结构?
  • 堆的结构?
  • 树、B+ 树、二叉树、红黑树的了解?
  • 二叉树的深度优先遍历和广度优先遍历?
  • 堆和树的区别?
  • 图的了解?

####算法

  • 排序算法有哪些?
  • 最快的排序算法是哪个?
  • 手写冒泡排序
  • 手写快速排序
  • 快速排序的过程、时间复杂度、空间复杂度
  • 手写堆排序

####常见算法问题

  • 给阿里2万多名员工按年龄排序应该选择哪个算法?
  • GC算法(各种算法的优缺点以及应用场景)
  • 蚁群算法与蒙特卡洛算法
  • 子串包含问题(KMP 算法)写代码实现
  • 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
  • 万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)
  • 两个不重复的数组集合中,求共同的元素。
  • 两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?
  • 一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中。说出最优的方法
  • 一张Bitmap所占内存以及内存占用的计算
  • 2000万个整数,找出第五十大的数字?
  • 求1000以内的水仙花数以及40亿以内的水仙花数
  • 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
  • 5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同
  • 时针走一圈,时针分针重合几次

设计模式与架构

####设计模式

  • 谈谈你对 Android 设计模式的理解
  • 项目中常用的设计模式有哪些?
  • 手写生产者-消费者模式?
  • 手写观察者模式?
  • 适配器模式、装饰者模式、外观模式的异同?

####架构

  • MVC、MVP、MVVM 原理和区别?
  • 请画出 MVC、MVP 的差异?【猎豹移动】
  • 对 RxJava 的理解,功能与原理,优缺点?
  • 从 0 设计一款 App 整体架构,如何去做?
  • Fragment 如果在 Adapter 中使用应该如何解耦?
  • 对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?
  • 实现一个 Json 解析器(可以通过正则提高速度)?

其他方面

####人事相关

  • 请简单做个自我介绍?
  • 为什么离开上家公司?您在前一家公司的离职原因是什么?
  • 为什么要做 xxx 岗位(出现所学专业与求职岗位不同时提问)?
  • 讲一个你认为做的最好的项目/案例
  • 你应聘该岗位的优势是什么?
  • 你上家公司的薪水/期望的薪金?
  • 你对薪资的要求?
  • 谈谈你对跳槽的看法?
  • 对待加班看法?
  • 自己最擅长的技术点,最感兴趣的技术领域和技术点,做了那些东西?
  • 自己的优点和缺点是什么?并举例说明?
  • 你朋友对你的评价?
  • 说下项目中遇到的棘手问题,包括技术,交际和沟通?
  • 项目中遇到最大的困难是什么?如何解决的?
  • 在五年的时间内,你的职业规划?
  • 给你一个项目,你怎么看待他的市场和技术的关系?
  • 你一般喜欢从什么渠道获取技术信息和提高自己的能力?
  • 你的学习方法是什么样的?实习过程中如何学习?实习项目中遇到的最大困难是什么以及如何解决的?
  • 如果实际工作后发现自己不适合这个职位怎么办?
  • 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
  • 工作上与领导意见不同时,怎么办?
  • 如果你的主管抢了你的功劳你该怎样?
  • 若上司在公开会议上误会你了,该如何解决?
  • 工作中你难以和同事、上司相处,你该怎么办?
  • 因成绩比较突出,受同事们孤立你怎么看?
  • 你和别人发生过争执吗?你是怎样解决的?
  • 如果工作失误,给公司造成经济损失,你该怎么办?
  • 你对于我们公司了解多少?
  • 你为什么愿意到我们公司来工作?
  • 你能为我们公司带来什么?
  • 你最擅长的技术点,最感兴趣的技术领域和技术点?
  • 说说你对行业、技术发展趋势的看法?
  • 理想中的工作环境是什么?
  • 说说你的家庭?
  • 就你申请的这个职位,你认为你还欠缺什么?
  • 你做过的哪件事最令自己感到骄傲?说一件最能证明你能力的事情?
  • 对这项工作,你有哪些可预见的困难?
  • 如果被录用,你将怎样开展工作?
  • 希望与什么样的上级共事?
  • 你工作经验欠缺,如何能胜任这项工作?
  • 如果你在这次面试中没有被录用,你怎么打算?
  • 除了本公司外,还应聘了哪些公司?
  • 你还要什么了解和要问的吗?
  • 实习过程中周围同事/同学有哪些值得学习的地方?
  • 是否可以实习,可以实习多久?
  • 实习过程中做了什么,有什么产出?
  • 公司实习最大的收获是什么?
  • 评价下自己,评价下自己的技术水平,个人代码量如何?
  • 当前的 offer 状况;如果 BATH 都给了offer 该如何选?
  • 你对一份工作更看重哪些方面?平台,技术,氛围,城市,还是 money?
  • 假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办?
  • 你看中公司的什么?或者公司的那些方面最吸引你?
  • 讲一件你印象最深的一件事情?
  • 介绍你做过的哪些项目,介绍一个你影响最深的项目?
  • 你做过的哪件事最令自己感到骄傲?
  • 都使用过哪些框架、平台?
  • 都使用过哪些自定义控件?
  • 项目中用了哪些开源库,如何避免因为引入开源库而导致的安全性和稳定性问题?
  • 有没有什么开源项目?
  • 研究比较深入的领域有哪些?
  • 对业内信息的关注渠道有哪些?
  • 业余都有哪些爱好?
  • 最近都读哪些书?
  • 你的梦想是什么?

常见套路

如果有遇到以下这些情况,你可以继续投简历:

  • 我们 xx 总不在,会叫 hr 联系你,你先回去等通知
  • 面试叫你带上以往作品(工作成绩需要以往作品展示的除外,如:ui)然后面试官一直问你方案是怎么做的
  • 遇到面试官敷衍随便问问题

除了上面的面试题,我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。