一面(~45min)
1.什么是内存泄漏?Android里内存泄漏的场景及其原因
2.JVM的GC过程,GC的算法都有哪些
3.进程和线程的概念,Android里怎样实现多线程?(Thread Handler AsyncTask IntentService等等)
4.Handler的原理和使用
5.Handler是怎么和线程绑定的(Looper),为什么Looper.loop()要设计成死循环
6.Java的几种内部类,区别是什么
7.Activity的生命周期和启动模式
8.介绍项目,讲述一下实习的工作内容和感想
9.写题:二叉树的右视图(层序遍历即可)
(一面比较短,问的问题也比较基础,面完等了大概30分钟后就开始二面了)
二面(~1h+)
1.介绍项目,为什么要自学安卓
2.Android如何实现多进程,应用场景是什么
3.Android的IPC机制(Binder)是否了解
4.如何用两个队列(FIFO)实现栈(FILO)
5.HashMap和HashTable区别,HashMap原理和实现,hash()的算法
6.如果自己设计hash算***怎么设计,为什么(答的素数取余)
7.String的hashCode()和Object的hashCode()
8.虚拟内存和物理内存的概念和关系,内存分页的调度算法
9.怎么实现LRU缓存
10.可以自己写一个java.lang.Object类吗,系统会加载哪一个
11.Java里泛型的实现
12.了解常见排序算法吗,手写一下快排
13.Java里加锁的方式,synchornized关键字的原理,悲观锁和乐观锁都有哪些实现
14.死锁的条件和解决方法,讲讲银行家算法
15.TCP的三次握手四次挥手,为什么要四次挥手
16.TCP的流量控制算法(滑动窗口),拥塞控制算法
17.怎么解决用户高频点击打开新Activity导致的多实例问题(Activity启动模式)
18.怎么判断两个无环单链表是否相交
19.反问
(二面问题量非常大,集中在Java/OS/算法,没有特别难以回答的问题,认真准备的话大部分都能答出来。面试官还蛮友好的,会给一些提示和引导)、
最后针对岗位了解聊了几句,面试官对岗位的定位做了个简单介绍,也询问了我的未来的发展方向,之后让回家等通知了,等了四天才通知我二面过了。
三面(~45min)
1.介绍一下项目相关内容(项目简介、重难点、成果)
2.是自学的Android吗,为什么选择这个方向,有没有什么经验给同样想自学的学弟学妹
3.RecyclerView怎么实现的item缓存,跟ListView有什么区别
4.设计题:微信的联系人列表功能
(1)设计添加联系人的API(从可能的方式,数据形式,接口参数方面回答)
(2)怎么实现联系人列表的UI(答的RecyclerView)
(3)怎么实现A-Z首字母的快速定位功能
5.反问
(三面的问题不多,大多是开放性问题,没有标准的答案,难度高于一二面,主要还是体现你的思考和项目经验)
————————————————————
总而言之,除了刷题,充分熟悉简历、积累项目也很重要、
平时也要注意多学习、多积累、多提升,才有可能去更大的平台。希望这篇贴能够帮助到有需要的人,最后也祝大家求职顺利。
#Android##百度##安卓工程师##android##面试题目#