笔者16年于长沙一个普通二本,毕业后去了满地都是机会的深圳。第一份工作是一家外包公司,主要业务是电商和电子支付信息安全方面的。一年后跳槽到华润旗下一个子公司做金融。至今已工作4年。大家都知道,对于跟我一样没有名校背景,也没有大厂出身的程序员来说,面试唯一的加分项就只有某一方面的技术深度了。所以我也建议各位小伙伴也跟我一样,选择一个自己感兴趣的,或者比较自信的方向,不断的钻研深入。
众所周知,2020年的冬天非常煎熬,疫情肆虐,大批的互联网公司都在裁员甚至倒闭。年后的金三银四跳槽季竞争愈发激烈,岗位需求急剧减少,求职者一面难求,能找到心仪offer的人就更少了。所以我并没有在疫情的风波中着急去跳槽找工作,而是一边观望,一边收集面试素材和面试真题,沉淀自己,提高自己的核心竞争力。
在刚过去的金九银十跳槽季,国内疫情已基本 稳定,经济复苏后,面试压力也就不那么大了,我开始投简历。我投递简历的顺序是按小公司—>大公司的套路来的,深圳的小公司非常多,中大型公司比较少,因此,在这一个多月的面试历程中,我估算了一下,大概面了6家小公司,2家中型公司和1家大公司。一般我去面比较大的公司之前,我都会先面一两家小公司预热一下。
以下是面试中被问到的一些问题
1.描述一下Activity 生命周期?
2.A Activity 打开 B Activity 时都有哪些生命周期回调?
3.Activity的启动模式分别说一下
4.如何保存Activity的状态或者(Activiy 重启怎么保存数据?)
5.横竖屏切换时Activity的生命周期
6.onStart,onStop和onResume,onPause的区别?
7.横竖屏切换时的生命周期?
8.Android中的Context, Activity,Appliction有什么区别?
9.Context是什么?,一个应用有多少个Context
10.Service是否在main thread中执行, service里面是否能执行耗时的操作?
11.Android应用程序启动过程
12.如何保证Service不被杀死?
13.onActivityResult 在哪两个生命周期之间回调?
14.Fragment的生命周期?
15.Activity和Fragment的区别?
16.简述下Acitivty任务栈和使用方法
17.请描述一下BroadcastReceiver
18.BroadCastReceiver的生命周期
19.什么是Service?Service的生命周期?
20.Service的启动方式?如果启动方式交织在一起的话,会出现什么情况?
21.怎么在Service中创建Dialog对话框
22.Service和Thread的区别?
23.ActivityManagerService了解吗?有什么作用?
24.广播的两种注册方式有什么区别?
25.广播发送和接收的步骤是什么?原理了解吗?
26.ContentProvider 是如何实现数据共享的?
27.activity的startActivity和context的startActivity区别
28.为什么要用ContentProvider?它和sql的实现上有什么差别?
29.ListView如何优化?(复用,滑动流畅等)
30.在什么情况下BroadcastReceiver接收不到广播?
…
1.TCP的三次握手和四次挥手,为什么不是两次握手?为什么挥手多一次呢?
2.如何对Android应用进行性能分析
3.Devik进程,linux进程,线程的区别
4.android应用对内存是如何限制的?我们应该如何合理使用内存?
5.数字签名的原理
6.Android 源码中常见的设计模式以及自己在开发中常用的设计模式
7.Android与 js 是如何交互的
8.网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议?
9.说一下handler机制?
10.子线程如何使用 Handler?
11.说一下你对Handler中ThreadLocal的理解?
12.主线程的 Looper 什么时候创建的?ActivityThread 的 main 什么时候调用?
13.Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么
14.如何优化自定义View
15.如何解决View的事件冲突?举个开发中遇到的例子?
16.网络请求缓存处理,okhttp如何处理网络缓存的?
17.WebSocket与socket的区别?
18.handler postDelay这个延迟是怎么实现的?
19.hashcode()和 equals()的作用、区别、联系?
20.Handler、Looper、MessageQueue、Thread关系?
21.Hashmap如何解决散列碰撞(必问)?
22.Hashmap底层为什么是线程不安全的?
23.RecyclerView的ItemView层级过深怎么优化?
24.怎么设计Android线程间通信?
25.Bitmap JPG区别 图像处理:JPG、PNG及BMP的区别?
26.广播(全局 本地区别)
27.onSaveInstanceState onRestoreInstanceState区别,调用时机
28.Serializable与Parcable的区别?
29.是否了解SurfaceView,它是什么?他的继承方式是什么?他与View的区别(从源码角度,如加载,绘制等)。
30.说下冷启动与热启动是什么,区别,如何优化,使用场景等。
面试题集和答案在文末
下面我来结合我的面试经历来谈谈不同公司级别的面试难度。
一般只要你收到这类型公司的面试邀请,只要你能把自己做过的项目架构,项目重难点说清楚,还有一些Android基础知识稍微扎实一点,然后你稍微准备一两个深一点的技术点,什么GC机制、基本的热修复原理说个10分钟,offer妥妥的,个别公司可能会考一些简单的算法题和智力题,比如冒泡、查找等等。在深圳这类型的公司三年安卓的价位一般在12-15这个区间,个别有钱的可能上限可以到18,一般都是15左右。至于面试题太常规,这里我就不多说了,想要看面试题和详细答案的可以直接看总结部分。
这类公司我面的其实也不是很多,深圳面试那家BL,做外汇金融的(ps:金融业务相关的公司都比较有钱,如果面试过程中面试官表现出对你有兴趣,聊薪资的时候你就可以大胆要)我去面试的时候,公司应该是在扩招阶段,面试的人很多。问的问题比较广泛,Java、Android、算法、框架都有涉及到,虽然问的都比较基础,但是我回答的都会比他问的更深入一点,也许是对我比较有好感,聊了半个多小时后,他叫我稍等一下,然后去叫来了他们的Team Leader。然后问了一些事件分发和绘制流程的细节问题,还问了一些binder的原理性问题,我…基本上能答出来,然后leader就直接问我,期望薪资是多少(一般技术面试官直接问你这个问题了,也就代表这份offer已经稳了)我说:22K。leader笑着说了句:好,说下周会给我答复。
后来也确实收到了答复,但是答复说22k给不了,18k能不能来入职,然后…就没有然后了。
一面之后就没有音讯了,所以没有什么发言权…
面试问的跟其他小公司一样从基础问起,但面试官会一步一步往深的问,直到你答不出来为止,然后下一个点 ,框架、原理性问题和性能优化方面的工作经验是比较注重的。也不觉得是自己答的太烂,只能说面试者中优秀的人太多,自己不够亮眼吧
B站一面
1.自我介绍
2.treemap、红黑树、完全平衡二叉树
3.快速排序和插入排序
4.个大致有序的数组如何排序,最快时间复杂度
5.如何自定义实现一个FlexLayout
6.RecyclerView的回收复用机制
7.如何实现RecyclerView的局部更新
8.说说对泛型的了解,Retrofit中的泛型是怎么解析的
9.说说对binder机制的了解
10.进程的状态,线程的状态,两者有区别吗
11.synchronized锁住对象的理解
12.Fragment replace生命周期变化
13.TCP和UDP有什么区别? 讲讲招手挥手过程
14.用过C++开发吗
15.Dalvik和Hotspot虚拟机了解吗?有什么区别?
B站二面
1.说自己做过最满意的项目
2.性能优化你做过哪些工作
3.屏幕适配做过哪些工作
4.遇到过哪些坑(困难点),是怎么解决的
5.如果要你来开发B站的一个页面,哪一个页面可以很快入手
6.用过哪些框架?MVVM?Jetpack有入手吗?
7.用过哪些开源库
6.热修复、插件化都用过,遇到过哪些坑?可以讲讲原理吗
7.为什么想来B站,看哪种视频多一点,点赞多还是白嫖多
8.你觉得B站APP有哪些可以优化的地方
面试B站可以说纯粹是因为兴趣吧,大学时期就一直用B站的APP,学习娱乐都是非常不错的地方。因为要去杭州面阿里,所以在上海朋友那里玩两天,顺便面阿里之前试试B站预热一下,一面二面是紧接着面的,邀请我三面的时候,我已经离开上海去了杭州,就没有后文了。
实话实说,蚂蚁金服是我内推面试的,之前投过简历,但是没有收到面试。
这次面试难度总的来说中等偏上,面试过程跟腾讯的差不多,也是从基础往深处问,问到你答不出来为止。还问了一些安全性问题,因为我前几年的工作也是做金融的,所以相对来说比较轻松些,也正因如此才来了蚂蚁金服。其他注重的就是架构技术,设计思想,还有第三方库的一些掌握使用这些。
技术面试过后,hr会跟你谈薪资,众所周知,阿里的福利待遇是很好的,月薪18k,也算不错的。
期间也内推面试过百度、华为、字节、美团等公司。但是百度和华为对学历都有较高的要求,所以并没有拿到面试机会。字节、美团倾向于招5年以上的技术专家,所以也没有成功。
这份资料我从2020年春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
由于篇幅原因,下面以截图展示部分内容。如有需要以下完整学习笔记PDF,可以点赞+评论支持下打工人老弟,点击这里即可免费自取!
正文总共分为6个部分:
Java 基础(★★)
Java 高级(★★)
Android 基础(★★★)
Android 高级(★★★)
Android 项目(★★★)
项目面试常见问题(★★★)
面向对象思想
多态
异常处理
数据类型
Java 的 IO
集合
Java 多线程
Java 中的反射
Java 中的动态代理
Java 中的设计模式&回收机制
Java 的类加载器
Android 基本常识
Activity
Service
BroadCastReceiver
ContentProvider&数据库
Android 中的布局
ListView
JNI & NDK
Android 中的网络访问
Intent
Fragment
Android 性能优化
Android 屏幕适配
AIDL
自定义控件
Android 中的事件处理
Android 签名
Android 中的动画
网络协议
其他
以上是整理总结的Android中高级面试遇到的真题解析,希望对大家有帮助;同时很多人经常也会遇到很多关于简历制作,职业困惑、HR经典面试问题回答等有关面试的问题。同样我也搜集整理了全套简历制作、金三银四社招困惑、HR面试等问题解析,有疑问,可以提供专业的解答。
对于Android开发的朋友来说应该是最全面最完整的面试资料,为了更好地整理每个模块,我参考了很多网上的优质博文和项目,力求不漏掉每一个知识点。很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个资料也已经帮助了很多的安卓开发者,希望也能帮助到你。