一个五年 Android 开发者小米、阿里、字节跳动,最新阿里 + 头条 + 腾讯大厂 Android 笔试真题
为何离职?
先从我的换工作的动机开始说吧。
公司裁员的时候老大说:『你就留下好好干吧,以后不管公司怎么分股票、期权,肯定少不了你』。我非常信任我的老大,跟着老大一起工作,感觉是一种享受。
但是没想到疫情裁员后,公司内部大动荡,主业务线从客户端 A 业务线转移到另外的 B 业务线上。我主要负责 A 客户端的架构,这下可真闲下来了。B 业务线那边的业务量还是很忙的,没时间配合我做一些架构上的事情。于是我每天就看看资料,补充点能量。
呆了几天后,就后悔当初没有拿 N+1 走,有一种被老大忽悠的感觉。 因为公司接下来的操作让我很是不爽,先是晚上打车不能超过 30,然后福利大减,瞬间没有工作的心情了。再过了一两周后公司宣布新一轮融资成功,可惜只融到了 2 千多万美元(按照预期应会更高),然后接着招新人。
我特么无语了,站在公司的角度是没有任何问题的,可以节省开销,也可以容纳新鲜血液。但是我作为一个老员工,心寒,走的员工都拿到了 N+1,我们这些老员工什么也没有得到,反而福利大减,伤人啊! 现在即使我想走,什么也得不到,一种莫名的恼火涌上心头(只怪本人经历尚浅,看不清一些大的趋势,还是老鸟们聪明,拿钱走人,然后换一个新工作,好不自在啊)。
不过理智分析一些这样确实有好处,可以给自己留很多的时间来选择更好的公司。就如此刻的我一样,在公司悠闲的上着班,骑驴找马,遇到合适的,可以立刻走。其实细想一下,如果我当时拿了 N+1 走了后,可能会迫切的需要一份合适的工作,然后迅速入职。至于新公司怎么样,还真不敢确定。
已经动了想走的心,意味着再也不可能在这里很安分的待下去了。
面试准备
整体分为以下两个方面:
自我介绍 & 项目经验
知识储备
* 自我介绍
1、结合招聘岗位,只讲重点。简历内容这么多,实际的你,更有很多很多可以描述的东西。但时间有限,没有面试官会听你说个没完。根据你求职的岗位,说重点即可。其实简历制作的原则,也是一样。只是自我介绍时间更短,内容更精华。2、有理有据,少说空话。如果你说“自己学习能力强”,这就是一句假大空的话。谁都可以说自己学习能力强。你如果真的在这方面有突出,就要举一个例子,比如是 1 个月从 0 到 1 考了什么证书等。3、有开头有结尾,有逻辑。开头问候,结尾总结。中间 1、2、3 条理清楚。4、特别提醒。自我介绍中的内容,很可能是面试官后续发问的内容。所以,一是要引起重视,讲最重要的,你最想让面试官知道的内容。 而是做好准备,扬长避短,不要给自己挖坑。
比如前面你说自己学习能力强,但是没有举例子。
面试官很可能,顺着你的话问你,怎么证明你学习能力强呢? 结果你答不上来,或者是非常普通的成绩,根本不能算是“学习能力强”。 那你就是给自己挖坑了。
其实自我介绍也是每个人各有不同,说起来也只能提供大致的思路。和你具体的求职岗位、经历、个人风格有很大的关系。
项目经验
项目经验这块因人而异,把觉得做的有亮点的东西挑出来,从四个方面来准备:
功能模块的实现
达到了什么效果
遇到了什么问题,是如何解决的
涉及到的相关知识点
项目经验和知识点 其实是一个双向的过程,要 试图去找到它们之间的联系:
谈到项目经验的时候,可以说:做完 xx 之后,我还去了解了一下 yy 背后的原理,xxx,这里体现的是 你是否有求知欲 。
谈到知识点的时候,可以说:yy 的原理是这样的,在 xx 项目中我是如何应用它来解决问题的,这里体现的是 你是否具备把知识付诸实践的能力。
* 知识储备
很多人准备面试的时候,大多数就会这样的,打开牛客网,查找 “Android 面经”,找几个多的开始看。以及从各大技术交流平台搜索 Android 面试题。开始刷题复习。
这虽然看起来很自然,但是并不是一种 健康的方式,面试题的作用应当是查缺补漏,上学的时候也不是直接发习题册然后对着答案学习吧?
知乎上有个问题,叫做 如何高效学习,里面有一个回答我觉得很符合我自己的观点,就是 建立起自己的知识体系,建立知识体系的目的在于:
巩固记忆。
认识自己,找到自己的优势及不足。
把握复习的进度。
经验总结。
目前我参考和自己整理的总结的会分为以下几个大点:
(1)java 面试题(2)Android 面试题(3)混合开发面试题(4)高端技术面试题(5)非技术性问题 &HR 问题汇总
面试经历
1.小米
一面、二面面试题**1.介绍一下 binder 和原理 2.measure layout draw 流程,滑动冲突 3.常用的多线程工具类。blockingqueue ,concurrenthashmap,信号量,countdownlatch,cyclicbarrier,exchanger 等,stringbuffer4.stringbuilder 和 stringbuffer 区别 5.lock 和 syncrognized 原理区别,适合什么场景。6.实现生产者,消费者 7.handler 原理,是如何实现延时的。8.一个 activity 启动另外一个 activity 的生命周期。算法题:1 反转链表 2.归并排序 3.快速排序 4.feiboqiena 数列 5.二分查找 6.两个队列实现栈
7.两个栈实现队列 8.判断链表是否成环,找到成环的交点。
最终顺利通过 hr 面拿到 offer。
2.阿里
这次面的是一个阿里钉钉面经如下:
**阿里一面(面试时长 80min) **
自我介绍,对自己项目的介绍,架构图呈现
因为说自己以后的发展方向是音视频,所以问了我用过哪些现有框架
项目中的一些优化问题,MVC -> MVP,Handler 的内存泄漏情况分析等,对 MVP 和 MVVM 的理解。
项目中的第三方库选择的问题,因为简历中写了我对第三方库选择的问题,比如选 ObjectBox 和 greenDao 的问题,图片加载框架问题
HashMap 和 HashTable,引申 ConCurrentHashmap 的深入,version1.7 和 1,8 的区别,以及高并发下 HashMap 发生的问题
四大启动模式,以及场景对应
Handler 的机制介绍,不存在消息时的 IdleHandler 的运作机制,为什么不能在子线程初始化问题
设计模式中的单例介绍,使用场景(Okhttp 的 Seesion 存储等等),在线编写
快排算法
OkHttp 的源码分析,及整体架构的流程图绘制
四大组件的完整介绍,及深入,答了 IntentService、LocalBroadcast
四大引用的问题和 MVP 框架相结合进行回答
网络中的响应码对大体进行回答,具体回答了 200、404、500、304 等
View 绘制流程问题,如何不使用 xml,来实现
中间位置的定位
事件分发机制流程讲解,以及如何实现单击事件和长按事件的判定
关于为什么选用 mqtt 协议的问题,优势,原理等等(没答上来,只说针对性做过测压,以及 oceanlink 和 mqtt 的对比)
?
阿里二面
自我介绍,优缺点的,以及未来希望的发展方向
目整体介绍,如何做到分压啊之类的问题
如果给我阿里、腾讯、头条、谷歌的 offer 的一个选择(不掺杂地域性的问题),首先直接否定了 google 我就的一个企业的商业模式进行分析。
我对钉钉这个产品的理解,我的回答是就的是钉钉前身的对标项目微信,已经后期转型的商业模式作出的分析,最后给出的我的结论是一个企业性质的办公软件
给出了钉钉一个 mac 平台的关于共享屏幕的耗 CPU 的问题
让我提问,提的是关于音视频发展方向的问题,具体是一个发展空间。
评论