前言
我不是什么大牛,我只是一个有八年工作经验的Android老兵,既没有非常亮眼的学历,也没有牛逼大厂的履历。
这个冬天,在孩子得病从急诊转住院的时候,我得到了年前将被优化的消息,作为家里唯一经济来源的我整个人蒙了,一时间茫然和无助差点毁了我。
最后我还是和家人如实说了,受到了他们的极大的鼓励,也找到了重新开始的勇气。
可惜这场疫情来的如此凶猛,职位少、要求高、电话面试、视频面试、在线coding、屡战屡败、屡败屡战,构成了我这一个月的常规生活。
我一开始也焦虑、茫然,甚至对自己的能力和工作经验深深怀疑。
后来经过几个好朋友的鼓励打气,也看了很多面试文章,认真总结自己面试中不足的地方,查漏补缺,终于在这周确定了offer。
接下来我就对我面过公司的面试题做一下总结,权当抛砖引玉,希望对大家有帮忙。
面试问题汇总
某知名在线教育公司
- 介绍一下自己项目中MVP如何实现;
- 自定义View流程;
- 说说项目中遇到的性能优化、内存泄漏和内存溢出;
- native和h5交互怎么做;
- 事件分发流程;
- http、https的区别,post、get区别;
- 算法:两个单链表相交,求相交结点;
- 算法:获取单链表倒数第k个元素;
著名安全类公司
- Activity的启动模式和应用场景;
- Handler机制以及与Message等之间的关系;
- 与Service通信的几种方式,进程间通信和进程内通信的区别;
- 手写代码实现线程死锁; 手写两种单利模式,并讲出优缺点;
- 如何实现RecyclerView的侧滑删除;
- http、tcp/ip基本认识,post和get区别;
- 内部类为什么会造成内存泄漏;
- 怎样给RecyclerView加header和footer,为什么可以这样;
- RecyclerView如何实现复杂布局;
- 算法:一个整型数组中,只有两个数出现一次,其余均出现两次,找出这两个数,给出时间复杂度;
著名求职类公司
- View的回执流程,onMeasure方法的三种模式;
- 画出Window的层次结构;
- Handler、Looper原理;
- 说一下自己设计的图片框架;
- Glide源码;
- 对RxJava的理解;
- 事件分发机制,TouchEvent的down、up和move;
- 项目中如何实现热修复,或使用了哪个热修复库;
- 手写实现数据库SQLiteOpenHelper;
- ActivityThread的main方法中做了些什么;
- 内存泄漏的原因,常见场景和如何处理;
- 布局优化,如何防止过度绘制;
一个名字听起来巨有钱的公司
- RxJava的优劣势;
- home/user/a/…/b/./c所代表的的路径,手写代码输出绝对路径;
- 对系统相机的了解;
- View的回执流程;
- Glide源码,介绍自己的图片框架;
- 手写实现快速排序;
- 介绍代理模式;
- MVC、MVP各自特点和优缺点;
某大厂下的外卖团队
- 介绍Activity任务栈;
- RxJava原理,RxJava同时执行5个任务,是并行还是串行;
- Activity的启动过程;
- View的绘制过程,onMeasure方法中两个参数的含义;
- 自己封装过什么框架,介绍一下原理;
- ListView和RecyclerView的优化和区别;
- 如何为RecyclerView的Adapter设置监听,说出最好方案;
- 介绍一个自己做过的最满意的东西;
- 泛型中 ? 表示什么含义,若加入不满足条件的类型会怎样;
- 单例模式中的双检锁,如果把类锁换成内部声明的另一个类,效果会怎么样;
知名在线借款公司
- Activity的生命周期,启动模式;
- 如何实现多个Activity同时展示;
- 手写单例模式并解释为什么这样写;
- 如何防止过度绘制;
- 介绍下你阅读过的源码;
- 磁盘缓存怎么实现;
- JVM垃圾回收机制;
题外话
项目
面试官考察项目经验,考察的其实不仅仅是你基础的掌握,更多的是自己对业务的理解,架构设计,自己对项目的思考。所以,除了项目中涉及到基础知识的问题,还会问到诸如你觉得项目中有哪些设计比较好,或者有哪些不合理的地方,你是怎么解决的等方面的问题。
这些问题往大了去可能是架构方面的,也可能是具体技术细节。但是只要你讲出自己的思考和解决方案,有经验的面试官会大概了解到你的技术深度、架构设计能力和解决问题能力的层次。
所以一定要找到有亮点的地方提前进行背书,要有层次的介绍项目,思考一下项目设计或者实现不完善的地方。
还有一些面试官会问到如果让你设计一个什么什么系统,你怎么设计。这种题我觉得也最好提前做过背书。
因为对于工作经验少的同学,面试官主要看他想问题的深度和广度,但是对于工作经验不少于5年的人来说,面试官更关注你是否有成熟的实现流程和方法论。
所以一个层次化流程化的设计会极大增加面试官好感度。切记避免废话连篇核心不明确。(这也是我的问题,因为没有准备,所以遇到肯定说的很散,这样面试官觉得你自己做事情没有核心和方法)
个人价值观
一般技术面到后面,面试官都是leader或者是部门老大,他们其实很关心你的职业规划、对待工作的态度、团队合作的能力、自我价值实现方面的思考,当然还有项目实现的能力,过往项目经验和深度。所以最好自己先想想怎么用简短的话表述清楚。注意围绕关键词去说。
写给看到最后同学的话
这些算是我作为过来人对于应届毕业生和刚工作不久的同学的一些小小建议吧。
(1)一定要紧跟技术前进的脚步,尤其是大数据相关的技术,在技术更迭的时候一定要学习熟悉新技术,看源码,哪怕自己在工作中用不到也一定要学。因为这是你下一份工作的敲门砖。
我作为一个老兵,在上一家公司工作4年,我没有逼迫自己学习新技术。
结果现在面试碰壁,其实大部分原因就是人家用的都是主流技术,你不会你就被淘汰。
(2)不要给自己设置舒适区,这个就是说,一个公司待久了不要懒惰,不能荒废自己,始终要保持清醒的头脑和进取心,不断学习,不断完善自己的技术,架构设计能力,项目管理能力,交付能力等。
一定要及时从项目中总结经验和不足,最好落实到日记本中,最后通过不断思考,形成自己的做事方法论。
(3)对自己的职业生涯要有一个规划,以后要做哪一块一定要有自己的想法,确定了就要从这个方向完善自己,多学多练。
目前大数据这一块,有数据中台架构的公司不是很多,除了算法岗外,大多数人在团队中都是1专多能的角色,今天干干ETL,明天搞数仓,后天又给BI出数据,可能又搞调度系统、报表系统、标签系统、反作弊平台等平台。
没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。
(4)做事情要有担当,不要根据OKR给自己设置界限,有能力有空闲多做一定要多做,这也是别人认可你的最佳途径之一。互联网圈子很小,大家认可你,以后去大厂,换个好工作,也许就更容易。
我们写代码,真的不要单纯的为了生计,单纯的觉得这是一个青春饭,我们可以把它当做一个一辈子的事业,30岁以后你转型产品,转型架构师,你都是要有code的积淀的,不是说能转就能转的。
一个一生的事业,我想是值得你付出时间去学习的,鸡汤就这么多了。
在这我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料(主要是我把其他杂乱的不成体系的都删了~)
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
如果你有需要的话,可以点赞+评论,关注我,然后私信我【面试】我发给你