您的位置:首页 > 职场人生

2017年4月美团Android面试总结

2017-06-08 16:54 295 查看

开发职位或许没有之前如此火爆,但是只要你有真才实学,找个较好的工作还是比较容易的。如果你是985,211,如果你是硕士学历,那找个满意的offer更是不再话下;即使不是上面的条件,只要你好好努力的学习,把每一项的技术点攻破了,同样可以达到甚至超越上面条件的同学。

我隔一段时间都会出去面试一次,面试的目的不是为了找到好的工作,而是知道自己的优缺点是什么?知道市场需要什么样的人?同样,面试你的也是同行,这样也能够碰撞出不同的思想。当然,遇到好的机会那是再好不过了。试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是很可怕的,至少我这么认为。如果您同意这样的观点,不妨接着往下看,让我们一起研究面试过程中需要具备的知识。下面是我亲生经历的一次面试,这里写出来给大家分享,更多的是总结面试中遇到的问题以及以后学习过程中的方向。只有这样才能和社会接上轨迹。

我面试的是美团,这家公司还算不错的,至少在我印象中还是挺好。技术面试一共是三面。下面做一个总结

第一面
1 手写算法题。一共有3个,面试官随机选择一个。猫扑素数;1到n,求1的个数;单词反转。

2 Activity的加载模式。

standard,singleTop,singleTask,singleInstance。

可以参考:https://developer.android.com/guide/components/tasks-and-back-stack.html

2.1 什么时候会用到singleTask?

在MainActivity的时候用到

3 Handler机制?

MessageQueue,Looper等。

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

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

参考:ThreadLocal

4 多线程的方式有哪些?

1) new Thread()

2) AsyncTask

3) Handler

4) IntentService

5) ThreadPoolExecutor

5 ANR异常发生条件

1)5s内没有响应用户输入事件

2)10s内广播接收器没有处理完毕

3)20s内服务没有处理完毕

5.1 如何分析ANR

log+trace.txt

6自定义View和ViewGroup

说一下自己定义的组件就行

7 事件处理

分发,拦截,处理。只是View没有拦截处理

8 GC算法

标记清除,标记整理,复制,分代收集

参考:http://www.jianshu.com/p/7c708a66ff42

把上面文章弄懂了,就能刷过GC

9 四大引用

强,软,弱,虚,并说明下合适GC

10 动画

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

参考:https://developer.android.com/guide/topics/graphics/overview.html

11 Dalvik和Art区别?(Just In Time和Ahead Of Time)
就这样第一面基本结束。一共问了11个问题,其中美团的手写算法在业界算是比较出名,很多小伙伴可能卡在手写算法上。然后就是一些Android和Java的细节性东西,这些基础内容只要有1年经验的都基本能说出个一二三。
大概过了10分钟,接下来是

第二面
1 OkHttp原理?

2 Retrofit原理?为何用代理?代理的作用是什么?

3 ButterKnife原理?用到反射吗?为什么?

4 ANR异常如何查找并分析?

5 JVM内存模型?性能调优?

6 垃圾搜集算法有哪些?G1算法?

7 Http和Https的区别?

1)Https是ssl加密传输,Http是明文传输

2)Https是使用端口443,而Http使用80

3)HttpsSSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比Http协议安全

4)Https协议需要到CA申请证书

8 加密算法有哪些?对称加密和非对称加密的区别?

MD5,SHA1,Base64,RSA,AES,DES

对称:使用相同密钥,需要在网络传输,安全性不高。

非对称:使用一对密钥,公钥和私钥,私钥不在网络传输,因此安全性高。

9 TCP的三次握手?两次行不行?为什么?TCP攻击知道吗?如何进行攻击?

10 内存优化如何做?

11 看过那些源码?

12 会对代码进行review吗?何时review?怎么review?

13 项目中遇到的让你棘手的问题?多久解决,怎么解决?(考的是你发现问题和解决问题的能力)

14 如何学习?何时学习?怎么学习?学习渠道?(考的是学习能力)

就这样,第二面结束了。可以看出,第二面的难度会比第一面大一点,但是还好,基本都是常用的内容,深度会偏向原理性质。这就说明在平时的编码过程中,需要多多思考,多看源码实现方式,而不要一味着去写代码。程序员会写代码,但不要做一个只会写代码的程序员。我们的思维方式是不可替代的。
大概过了10分钟,开始进行第三面面试:

第三面
1 前几次面试感觉如何?

2 你现在的APP日活是多少?

3 你现在如何处理崩溃日志?

4 你觉得小团队好还是大团队好?(这个问题不能直接回答好和不好,不然掉坑里了)

5 你的优点和缺点说下?

6 你的发展方向说下?是先讲究宽度还是讲究深度,为什么?

7 为什么离职?

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

就这样,第三面结束了。可以看出,第三面面试官不会考察你的知识细节,而是问一些形而上的知识。他是从整体方向上去把握面试者,往往最后一个面试官对你起到决定性作用。当然,能见到最后一面面试官,说明你前两面都已经过了。

总结
这次面试感觉还不错,美团的开发同学待人方面很随和。很喜欢这种氛围。结果不重要,重要的是过程。只要你有实力,就别担心。如果不好好学习,就算背了面试题,又能如何?一样会在面试中PASS。所以说,平时写代码的时候需要多多思考,不一定用到才去Google,对于一些新的技术,要不断追求同时别忘记了基础很重要,基础,基础,基础,重要的事说3遍。

在接下来的学习和工作中,需要学习继续探索以下问题。

1 Java基础知识。线程,java虚拟机,内存模型等。

2 Android基础知识。官方API,常用控件源码,自定义控件,动画,性能分析等。

3 app层面:第三方开源框架(okHttp,Retrofit,ButterKnife),热修复技术(Andfix,Robust,Tinker等),崩溃处理,日志处理,内存溢出内存泄漏定位等。

4 网络基础:TCP/IP,Http/Https,UDP,七层网络协议等等。

5 沟通能力和相处能力,这是软实力。非常关键,如果你技术很好,但是相处起来很困难,我想面试官也不太愿意招你。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android