前言
接触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.一个语言的编译过程
......
总结
大厂对计算机的基础知识的考察真的很深入,后面想了想确实,计算机的基础掌握牢靠了,在接触新的知识真的很快,计算机方面的知识又是更新特别快的,需要不断的学习。