渣渣二本的辛酸面试之路:从深圳到杭州,从外包到蚂蚁金服,4年小Android的心路历程
写在开头
笔者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接收不到广播?
......
Android 中高级
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.说下冷启动与热启动是什么,区别,如何优化,使用场景等。
面试题集和答案在文末
下面我来结合我的面试经历来谈谈不同公司级别的面试难度。
小公司(0-200人)
一般只要你收到这类型公司的面试邀请,只要你能把自己做过的项目架构,项目重难点说清楚,还有一些Android基础知识稍微扎实一点,然后你稍微准备一两个深一点的技术点,什么GC机制、基本的热修复原理说个10分钟,offer妥妥的,个别公司可能会考一些简单的算法题和智力题,比如冒泡、查找等等。在深圳这类型的公司三年安卓的价位一般在12-15这个区间,个别有钱的可能上限可以到18,一般都是15左右。至于面试题太常规,这里我就不多说了,想要看面试题和详细答案的可以直接看总结部分。
中型公司(200-1000人)
这类公司我面的其实也不是很多,深圳面试那家BL,做外汇金融的(ps:金融业务相关的公司都比较有钱,如果面试过程中面试官表现出对你有兴趣,聊薪资的时候你就可以大胆要)我去面试的时候,公司应该是在扩招阶段,面试的人很多。问的问题比较广泛,Java、Android、算法、框架都有涉及到,虽然问的都比较基础,但是我回答的都会比他问的更深入一点,也许是对我比较有好感,聊了半个多小时后,他叫我稍等一下,然后去叫来了他们的Team Leader。然后问了一些事件分发和绘制流程的细节问题,还问了一些binder的原理性问题,我....基本上能答出来,然后leader就直接问我,期望薪资是多少(一般技术面试官直接问你这个问题了,也就代表这份offer已经稳了)我说:22K。leader笑着说了句:好,说下周会给我答复。
后来也确实收到了答复,但是答复说22k给不了,18k能不能来入职,然后....就没有然后了。
大型公司(5000人以上)
腾讯
一面之后就没有音讯了,所以没有什么发言权...
面试问的跟其他小公司一样从基础问起,但面试官会一步一步往深的问,直到你答不出来为止,然后下一个点 ,框架、原理性问题和性能优化方面的工作经验是比较注重的。也不觉得是自己答的太烂,只能说面试者中优秀的人太多,自己不够亮眼吧
上海哔哩哔哩(B站)
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年以上的技术专家,所以也没有成功。
面试复习笔记:
这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
给文章留个小赞,就可以免费领取啦~
戳我领取:Android对线暴打面试指南、超硬核Android面试知识笔记、3000页Android开发者架构师核心知识笔记
《960页Android开发笔记》
《1307页Android开发面试宝典》
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
《507页Android开发相关源码解析》
只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。
最后,我把我之前和这一个月的面试题及答案按照规范整理成了PDF,有1200多页,附带简历模板和算法打包成了文件夹。需要的朋友可以在评论区留下您的邮箱地址,我定期会抽空看评论,然后发给大家。
感谢您阅读这篇文章,如果可以收到您的点赞,那是将使我非常荣幸,希望我们可以成为朋友,一起分享交流Android技术。如果你原意,可以加入我们三千人的交流群,私信我【666】可获取群号。
文末
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿!