Android研发去美团面试,被面试官用各种原理蹂躏,所幸最终拿到Offer

  • 一个线程是否只有一个Looper?

  • 如何保证一个线程只有一个Looper?

  1. 多线程的方式有哪些?

  2. 生产者消费者模式

  3. wait 和 sleep的区别

  4. String、StringBuffer 、StringBuilder的区别

  5. ANR异常发生条件

  • 如何分析ANR
  1. 自定义View和ViewGroup

  2. 事件处理 分发,拦截,处理。

  3. GC算法

  4. 四大引用 强,软,弱,虚,并说明下合适GC

  5. 动画 View动画,属性动画,帧动画。再说下View和属性动画区别。

  6. JVM 原理

  7. 屏幕适配相关问题

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

二面

==============================================================

  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. 平常如何学习?何时学习?怎么学习?学习渠道?

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

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

这一节讲的我喉咙都快起火了~

这里必须得感谢一下我毕业后的第一个领导张哥,多亏张哥那会就传授给我正确的学习方式,还一再强调一定要多看源码,不然这里已经凉凉了…

(当然,也与我的天才脱不了干系 2333)

三面

==============================================================

  1. 前两轮面试感觉如何?

  2. 热修复

  3. 插件化组件化

  4. 动态化

  5. Kotlin

  6. Flutter

  7. 聊了一下之前的公司和项目

  8. 你觉得小团队好还是大团队好?

  9. 说说自己的优缺点

  10. 发展方向 职业生涯规划 是先讲究宽度还是讲究深度,为什么?

  11. 为什么离职?

  12. 其他小问题:哪里人啊?现在工资怎样?要求如何,何时到岗?有什么问题要问我的吗?

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

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

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

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

小结

==============================================================

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

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

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

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

关于我的学习方式

====================================================================

  • 多总结、多输出

多写文章,输出优质内容

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

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

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

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

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

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

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

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

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

尾声

评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。

有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。

一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值