前言

接触Android已经3年,在工作中遇到疑难问题总是在网上搜索答案,各位大牛大神总是把自己的经验分享出来,帮助我们这些需要帮助的人,由此表示衷心感谢!然而现在自己细想了一下,自己也是时候把遇到的问题并把解决方案分享出来,希望能帮助到有需要的人。

随着时间的流逝,很多人说互联网这一块已经越来越不好干了,因为烧钱时代已经过去,剩下的都是根基牢固的大公司,独角兽已经不复存在。这就直接导致了互联网岗位的下降,本人亲测,也的确如此。

2021.05月,本人离职(此时3年工作经验,深圳就职),开始试水安卓市场,寻求一份合适自己,稳定的中大型公司。投了很多公司,面试机会并不是我想象中的那么多,即时面试过程顺利,也没有获得offer(候选人太多太多)。不过借此机会,前前后后我面了10家公司,现在就把我遇到的面试题,并且提供一些面试技巧给各位即将面试的同志们。

一面(~45min)

  • 介绍项目,讲述一下实习的工作内容和感想(~10min)
  • 什么是内存泄漏,Android里有哪些内存泄漏的场景,原因是什么
  • JVM的GC过程,GC的算法都有哪些
  • 进程和线程的概念,Android里怎样实现多线程?(Thread Handler AsyncTask IntentService等等)
  • Handler的原理和使用
  • Handler是怎么和线程绑定的(Looper),为什么Looper.loop()要设计成死循环
  • Java的几种内部类,区别是什么
  • Activity的生命周期和启动模式
  • 写题:二叉树的右视图(层序遍历即可)
  • 一面比较短,问的问题也比较基础,大概30分钟后开始二面

二面(~1h30min)

  • 自我介绍
  • 介绍项目,为什么要自学安卓(~5min)
  • Android如何实现多进程,应用场景是什么(答的不好)
  • Android的IPC机制(Binder)是否了解(答的也不好)
  • 如何用两个队列(FIFO)实现栈(FILO)
  • HashMap和HashTable区别,HashMap原理和实现,hash()的算法
  • 如果自己设计hash算*怎么设计,为什么(答的素数取余)
  • String的hashCode()和Object的hashCode()
  • 虚拟内存和物理内存的概念和关系,内存分页的调度算法
  • 怎么实现LRU缓存(参考leetcode T146)
  • 可以自己写一个java.lang.Object类吗,系统会加载哪一个
  • Java里泛型的实现
  • 了解常见排序算法吗,手写一下快排
  • Java里加锁的方式,synchornized关键字的原理,悲观锁和乐观锁都有哪些实现
  • 死锁的条件和解决方法,讲讲银行家算法
  • TCP的三次握手四次挥手,为什么要四次挥手
  • TCP的流量控制算法(滑动窗口),拥塞控制算法
  • 怎么解决用户高频点击打开新Activity导致的多实例问题(Activity启动模式)
  • 怎么判断两个无环单链表是否相交

反问
二面问题量非常的大,集中在Java/OS/算法,但并没有特别难以回答的问题,认真准备的话大部分都能答出来。面试官也非常友好,给了很多引导和提示。
因为三面面试官的时间问题,约了两天后的三面

三面(~45min)

  • 自我介绍
  • 介绍一下实习做的工作,是自己完成的吗,遇到什么困难,成果怎么样
  • RecyclerView怎么实现的item缓存,跟ListView有什么区别(因为项目用到了所以被问了)

设计题:微信的联系人列表功能
(1)设计添加联系人的API(从可能的方式,数据形式,接口参数方面回答)
(2)怎么实现联系人列表的UI(答的RecyclerView)
(3)怎么实现A-Z首字母的快速定位功能
是自学的Android吗,为什么选择这个方向,有没有什么经验给同样想自学的学弟学妹
是哪里人,为什么想到上海来就业

反问
三面的问题不多,不过因为多数问题没有标准答案,难度其实高于一二面

刷过的面试题

Java基础

1.静态内部类和非静态内部类的比较

2.多态的理解与应用

3.java方法的多态性理解

4.java中接口和继承的区别

5.线程池的好处,详解,单例(绝对好记)

6.线程池的优点及其原理

7.线程池的优点(重点)

8.为什么不推荐通过Executors直接创建线程池

9.不怕难之BlockingQueue及其实现

Android基础

1.Activity知识点(必问)

2.Fragment知识点

3.Service知识点

4.Intent知识点

性能优化篇

1.启动优化

2.内存优化

3.绘制优化

4.安装包优化

 源码流程篇

1.开源库源码分析

2.Glide源码分析

3.Android面试题:Glide

4.day 20 面试题:Glide面试题

5.聊一聊关于Glide在面试中的那些事

6.面试官:简历上如果写Glide,请注意以下几点...

7.Glide OOM问题解决方法汇总

8.OkHttp源码解析

9.okhttp连接池复用机制

10.okhttp 流程和优化的实现

11.一篇让你受用的okhttp分析

12.OkHttp面试之--OkHttp的整个异步请求流

......

最新面试题合集

1.android事件分发机制,请详细说下整个流程

2.android view绘制机制和加载过程,请详细说下整个流程

3.android四大组件的加载过程,请详细介绍下

4.Activity的启动模式

5.A、B、C、D分别是四种Activity的启动模式,那么A->B->C->D->A->B->C->D分别启动,最后的activity栈是怎么样的

6.Activity缓存方法

7.Service的生命周期,两种启动方法,有什么区别

8.怎么保证service不被杀死

9.静态的Broadcast 和动态的有什么区别

10.Intent可以传递哪些数据类型

11.Json有什么优劣势、解析的原理

12.一个语言的编译过程

......

总结

大厂对计算机的基础知识的考察真的很深入,后面想了想确实,计算机的基础掌握牢靠了,在接触新的知识真的很快,计算机方面的知识又是更新特别快的,需要不断的学习。

03-05 14:12