谈谈Android面试之后的一些感受,附面试题

3,745 阅读7分钟

这篇文章本来是不想的,因为入职新公司都一个月了,但是想想还是写写,自己对过去的两三年做个总结,或许能帮助到些人,或者从中能得一些建议。这次出去面试主要是两个星期的时间,第一个星期主要是投简历,第二个星期主要是面试,一天安排了2-3个面试。

先说说这次面试主要印象比较深的知识点:

  • 栈和堆的区别
  • 接口和抽象类的本质区别
  • String、StringBuffer和StringBuilder的区别
  • 注解、反射、泛型
  • Handler消息机制,生产者和消费者模型
  • View、ViewGroup的事件传递机制,如何解决滑动冲突? 回答如何滑动冲突最好是举出实际的场景和怎么解决的
  • View、ViewGroup的绘制流程
  • okHttp、Retrofit的源码,原理
  • 解释一下什么是MVP架构
  • Https原理,加密算法
  • RecyclerView的缓存机制
  • 常见的设计模式主要问到了这几个(单例、代理、适配器、建造者),先说概念,然后面试官会问具体的使用场景
  • 最新的Google AAC架构(ViewModel、LiveData、Room等等)有没有在使用,以及背后的实现原理
  • Kotlin有没有在使用,问这个问题的公司,基本上自己的公司在使用Kotlin开发新App,要么在使用Kotlin迁移、重构、与java混合在一起
  • Android常见的内存泄漏原因,以及检查工具,主要是问如何使用Android Profile检查内存泄漏的,性能分析怎么做?以及第三方检查内存泄漏的工具LeakCanary的原理?
  • 开发的App有哪些亮点,难点、如何排查线上的bug,有没有重构代码的经验

以上的面试题,主要是Android应用层知识,需要面试之前造造火箭的,还需要平时的耕耘、积累和总结。

再说说面试印象比较深的公司

浦发信用卡
浦发信用卡是被怼的最惨的,刚开始问了几个基础的问题,然后问我你做的app传参数是怎么防止别人窜取的。因为我上家公司主要是做金融理财贷款类型的app,在加上是浦发信用卡研发团队的性质,想想问这个问题很正常。 我回答用so库对参数进行验证,对一些特殊的参数进行md5加密,跟后台进行比对。面试官so库就安全嘛,不可以反编译嘛。然后接着问https原理,加密算法知道哪些?压根回答不出,信心一下子就没了。面试官接着问RecyclerView的缓存机制,更加回答不出,因为平时也看过,里面的代码也太多,平时没遇到上万,几十万的数据,有很多种不同类型的布局的列表。所以不会往深入看,也看不太懂。

天天拍车(D轮的专业个人卖车平台,类似瓜子二手车)
面试官问了两个半的小时的技术问题,涵盖了上面总结的大部分面试题(除了浦发信用卡总结的),总体发现聊的还不错,因为大部分都答出来了,过了两天收到了复试。

工程师爸爸(B轮的专业做儿童教育的)
面试官主要是问了最新的Android Jetpack最新的组件原理、Kotlin有没有在使用、android的进程间的通信方式、多线程下载你是怎么做的?断点怎么做?总体回答的还可以,问到后面面试官说,我看了你的github。因为我的github上面开源了一个多线程下载文件实例和Kotlin写的一个开源的App。过了两天收到了复试。

总结了几家公司,还有其它公司的复试,offer。没一一列举了。复试的都没去,因为打电话过来复试,都快入职了我现在公司。入职的公司记得是第一个星期周六面试的,印象比较两个深的问题:1、Handler消息机制、生产者和消费者模型如何理解,如何应用到实际开发中的。2、帧动画有上多张图片如何保证内存不OOM?问的技术点基本上都答出了来了,然后人事面,问我什么时候尽快入职,往后推了一个星期入职。 目前入职的公司是主要做智能交互、智能机器人这块,10几个搞android的。发现前人敲的代码,有好的,也有差的。这个也正常,自己也有敲的差的代码也留给了别人。

总体发现整个面试下来,投简历发现今年996的公司还蛮多的,前两年没有这么多。有的人事,boss会直接说是996,要么自己面试过程中问是不是996,996的公司是拒绝的,压根不想去。面试的过程中发现自己的信心不够,技术能力也不够、自己也着急。面试想想这几点要特别注意。

  1. 像大一点的厂,投简历过去,在加上面试的时间回复,需要两周。
  2. 如果面试官过程中,发现面试官没有问什么技术问题,或者问的问题不够深入,基本上可以断定这家公司不是靠技术作为驱动公司发展的。
  3. 提高自己的信心,自己要会的多,对知识点的理解要深入。

写这篇文章的目的主要是做个总结。记得刚出学校时,希望自己能遇到一个大牛带带自己,要多学习,可能进公司的目的都是为了学习。我想有很多刚出学校的有我这样的心态,哈哈,这个当初的心态.....现在想想整个心态都不一样了,进公司是为了体现价值、给公司带来效益。至于技术很大一部分是需要靠自己的,还一部分是公司的业务、产品需求是做哪块,技术点就会主要攻哪块。平时学习需要多积累、多体会、代码需要多动手敲。 刚出学校来写代码很乱,没编程风格,没思路。这个很正常,大部分人都这样,能力是慢慢提升的,经历过一两年这一点会好多了。现在我看看自己两年前的敲的代码,很菜,很次。

由于自己做开发三年了,主要是在做android端的app,这其中也学习了Spring、SpringMVC、ios开发等等。之所以会接触其它的,一是待的公司的需要,有的公司人手不够或者有的岗位并不想在招人,拉你去做做、去看看,对于这个自己开始工作的第一年内心是很拒绝的,并不想做其它的。二是随着工作时间久了,学习能力也慢慢的提高了,发现需要学习其它的东西,光Android的应用层压根不够,再加上市场的竞争越来越激烈。去年开始接触Kotlin、Rect、ios的时候,学习的过程中发现很多东西的都是相通的,即使是不同的平台,不同的开发语言。比较像金庸小说里面描述武学的那样 “天下武学殊途同归”。

写代码总结以下几点:

  1. 需要确认需求的,理解有偏差的。写代码之前一定要和产品经理沟通交流。宁愿多花时间去和测试的、设计师沟通,也不要去埋头写代码。同样的,认真想想怎么实现这样一个功能,思路理清了在敲代码。
  2. 养成良好的编码习惯,风格。多看看Google开源的在github上示例,或者其它知名公司的。
  3. 六大设计原则、一些常用的设计模式理解透牢记于心,多在编码过程中使用。
  4. 代码要有思路,写好注释,写的代码不单单是自己要看,也是给别人看的。
  5. 平时学习需要多总结、多体会、代码需要多动手敲。