Android开发去美团面试,我是怎么被面试官用各种原理蹂躏?

目前Android开发岗位确实没有以前那么火爆了,但是只要你确实有真才实学,想要找一份自己满意的工作还是相当容易的。

而如果你是985,211,硕士学历,那么,要拿个相当好的Offer更是不在话下;

即使不是上面的条件,只要你好好努力的学习,把每一项的技术点攻破了,同样可以达到甚至是超越上面有着优越条件的朋友。

学历不是特别OK的朋友可以托人内推,给面试机会以后,就是技术的较量了……

搞程序就是这么公平:学历固然对拿Offer有一定帮助,但哪怕你学历再高,技术不行还是得挂。面试从来都是考察你的技术、考察你的思维和解决问题的能力,技术才是打开新世界大门的钥匙!

我常常和大家分享,每隔一段时间就要出去面试一轮,面试的目的不一定是为了找到好的工作,而是知道自己的优缺点是什么?知道市场需要什么样的人?

定期的面试可以让你了解当下市场需要哪些技术,也更加容易确定自身的短板在哪,同时,也可以更加有针对性的学习提升,并且在面试过程中遇到了你不会的点,你也可以借机向面试官提问,趁机学习了一波大厂的技术操作

要是运气好,拿到了高薪Offer,岂不是更赚?

同样,因为面试你的也是同行,这样也能够碰撞出不同的思想。

试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是非常可怕的,至少我这么认为。

扫描二维码关注公众号,回复: 11347579 查看本文章

好了,废话不多说了。下面是亲身经历的一次面试,这里写出来给大家分享一波,更多的是总结面试中遇到的问题以及以后学习过程中的方向。

面试的公司是美团,美团的同学都非常nice,手动点赞!

技术一共是三面。下面是具体题目

一面

  1. 手写算法题。一共有几个,面试官会随机抽一个作为题目。

给出一个序列包含n个正整数的序列A,然后给出一个正整数x,你可以对序列进行任意次操作的,每次操作你可以选择序列中的一个数字,让其与x做按位或运算。你的目的是让这个序列中的众数出现的次数最多。

请问众数最多出现多少次?

  1. Activity的生命周期、加载模式。 什么时候会用到singleTask?
  2. Handler机制 子线程可以创建handler吗?一个线程是否只有一个Looper? 如何保证一个线程只有一个Looper?
  3. 多线程的方式有哪些?
  4. 生产者消费者模式
  5. wait 和 sleep的区别
  6. String、StringBuffer 、StringBuilder的区别
  7. ANR异常发生条件 如何分析ANR ?
  8. 自定义View和ViewGroup
  9. 事件处理 分发,拦截,处理。
  10. GC算法
  11. 四大引用 强,软,弱,虚,并说明下合适GC
  12. 动画 View动画,属性动画,帧动画。再说下View和属性动画区别。
  13. JVM 原理
  14. 屏幕适配相关问题

差不多就问了这几个问题,其他的忘记了,其中美团的手写算法在业界算是比较出名,很多小伙伴可能卡在手写算法上。然后就是一些Android和Java的细节性东西,这些基础内容只要有一点工作经验的都基本能说得上来。

二面

image

  1. Http和Https的区别?
  2. 看过哪些源码?Glide原理?
  3. OkHttp原理?
  4. Retrofit原理?为何用代理?代理的作用是什么?
  5. ButterKnife原理?用到反射吗?为什么?
  6. eventbus的原理。
  7. Handler原理
  8. Binder原理
  9. ANR异常如何查找并分析?
  10. JVM内存模型?性能调优?
  11. 垃圾收集算法有哪些?G1算法?
  12. 加密算法有哪些?对称加密和非对称加密的区别?
  13. TCP的三次握手?两次行不行?为什么?TCP攻击知道吗?如何进行攻击?
  14. 性能优化方面
  15. 会对代码进行review吗?何时review?怎么review?
  16. 项目中遇到的让你棘手的问题?多久解决,怎么解决?
  17. 平常如何学习?何时学习?怎么学习?学习渠道?

二面跟比一面比起来,会更加深入,偏向原理性质。

所以大家平时的编码过程中,要多思考,多看源码,要理解实现方式,而不要一味的去写代码完成需求,长此以往的话未来很容易被后浪淘汰的。

这里必须得感谢一下我毕业后的第一个领导张哥,多亏张哥那会就告诉我一定要多看源码,不然这里已经挂了…

三面

  1. 前两轮面试感觉如何?
  2. 热修复
  3. 插件化组件化
  4. 动态化
  5. Kotlin
  6. Flutter
  7. 聊了一下之前的公司和项目
  8. 你觉得小团队好还是大团队好?
  9. 说说自己的优缺点
  10. 发展方向 职业生涯规划 是先讲究宽度还是讲究深度,为什么?
  11. 为什么离职?
  12. 其他小问题:哪里人啊?现在工资怎样?要求如何,何时到岗?有什么问题要问我的吗?

三面面试官可能考虑到之前两轮的原因没有问太多技术问题…

然而我确实已经是强弩之末了,在我感觉中,他竟然上来就是一套连环拳?

  • 你觉得小团队好还是大团队好?
  • 说说自己的优缺点??
  • 职业生涯规划???

行了行了,我不装了,坦白了,我就承认我不行好了吧?

image

小结

这次面试感觉还不错,美团的同学待人方面很随和。很喜欢这种氛围。

最后的定级就不说了,我始终认为:结果不重要,重要的是过程。只要你有实力,就不用担心,Offer向来都不会亏待那些努力的人!

如果不好好学习,就算背了面试题,又能如何?一样会在面试中PASS。

所以说,平时写代码的时候需要多多思考,不一定用到才去Google,对于一些新的技术,要不断追求同时别忘记了理解原理很重要!基础也很重要!

关于我的学习方式

  • 多总结、多输出

多写文章,输出优质内容

而除了人人皆知的写博客,还可以通过画图的方式将知识串起来

包括流程图、思维导图,先把自己记得的部分在图上画出来(这里推荐Xmind)

比如思维导图我是这么做的:

Android开发知识体系→Java基础知识、Android基础知识、性能优化、NDK……

然后性能优化又细分为启动优化、UI渲染优化、内存优化、APK优化……

长此以往的这样一步一步深入构建,你对于自身的知识掌控度会有质的飞跃!

随便找个知识体系图的话,也可以起到自己查漏补缺的作用

在自己绘制导图的过程中,如果遇到写不上的地方,我想你也知道你要提升哪一块了吧?

这样做还有一个好处:体系化学习

平常大家学(jie)习(jue)知(BUG)识的时候都是碎片化的知识,过后非常容易忘,而如果你用思维导图的形式将这些碎片化的知识整合到一起,甚至是工作中也经常使用,效果就会非常好。

  • 学习一线大厂的各项技术

大厂是我们的技术先驱,不仅仅是各种技术,还有很多令你大开眼界的使用方法,学习这些有利于自己竞争力的提高,深入理解后也可以进一步的提升你的学习效率。

这一方面,通常那些我答不上来的题目,我会直接问面试官,这个应该怎么解或是什么思路,面试后就赶紧记下来,回去操作几遍就差不多了

另外还有万能的群友,平常大家交流的时候也可以学到很多东西。

  • 定期面试

每隔一段时间就要出去面试一轮,面试的目的不一定是为了找到好的工作,而是知道自己的优缺点是什么?知道市场需要什么样的人?

定期的面试可以让你了解当下市场需要哪些技术,也更加容易确定自身的短板在哪,同时,也可以更加有针对性的学习提升,并且在面试过程中遇到了你不会的点,你也可以借机向面试官提问,趁机学习了一波大厂的技术操作

要是运气好,拿到了高薪Offer,岂不是更赚?

同样,因为面试你的也是同行,这样也能够碰撞出不同的思想。

试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是非常可怕的,至少我这么认为。

这个前面已经说过一遍了,我就不要脸的Copy过来了……

  • 多看大佬的学习笔记,学习大佬的设计思想

之前我跟一位大佬交流后,就拿到了他做的《Android开发核心知识点笔记》

image

纯目录页都非常非常的长……大佬,不愧是大佬……

  • 配合各种资料辅助学习

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘,所以得需要比较系统的学习

最后

有段话想分享给大家:

“如果你热爱,那么请继续热爱,你的付出终将获得与之匹配的回报,如果眼前觉得没有希望,不妨再坚持一会,‘今天很残酷,明天也很残酷,但是后天很美好’ ‘冬天都已经来了,春天还会远吗?’ ”

道理就是这个道理,但是“大道理大家都懂”,而那些成功的人,就是把这些道理运用到了工作和生活当中。

共勉!

猜你喜欢

转载自blog.csdn.net/ajsliu1233/article/details/106857599