美图2017大三实习生电话面试

本人大三在校生,安卓小菜,打算找暑期实习,之前向美图发过简历,昨晚接到电话面试。
这次发现自己的确基础太差,很多东西自己是写过用过的,但是一细究,就发现自己从来没有去思考,有的基本内容之前了解,也都忘记了。而且自己很紧张,也是第一次面试没经验,全程智商掉线,问的都是安卓和java的基础性问题,但是答的一塌糊涂,这里贴出来,自己温习下也让大家了解下。
因为在简历里自己写了在校开发的几个项目,所以一开始让介绍一个自己认为比较好的,说一下其中遇到的技术问题和解决方法。
然后对安卓基础开始考察。大概有这些。

1.singleTask是否了解,举一个它的使用场景,后续问到会调用的方法。
各个模式的出入栈我能说出,但是singleTask的使用场景一时懵逼,举了个更适合singleTop的场景,果然问我觉得这种使用singleTask是不是最佳选择,自己觉得不是最佳,做了解释。

2.listView与recycleView常用哪个?(常用listView)问一下listView复用的问题。
a.说一下listView是怎么复用view的。
描述了listView重新使用已经移出屏幕的view。
b.怎么复用view。
这个肯定熟悉的,但是自己一来没经验二来太紧张,描述起来乱七八糟。
c.不使用viewHolder能不能进行view的复用。
这一个我一时也没能想出,大家能不能提供一个思路?还是根本就不行呢?
d.描述了一个场景,一个listView共有200项,10项可以占满屏幕,从顶部一直滑到底部,期间不向上滑,使用了复用的情况下,getView方法调用调用多少次,convertView初始化了几次。
自己回答gatView是每次都要的,convertView我们使用复用应该是10次。面试官人很好,说提示一下初始化了11或者12次,思考下为什么,我表示懵逼(其实此时大脑早已短路,对这次也没再抱有多大希望)。面试官告诉我,当我们最下方未完全滑入上方为完全滑出,这时也是要初始化的。我再次在心里感叹了自己智商掉线。

3.考虑这样一个布局怎么实现,就是常见的浏览器搜索框输入的时候,下方会出现搜索热词,各个热词排满一行后进入下一行。
我的思维已经完全僵化,也是没get他实际想问的知识,自己思考了使用各种布局利用各种wrapcontent、gravity,但是没有想到。面试官说其实这个比较难了,需要用到自定义viewGroup,我不肯放过机会机会表示自定义viewGroup我是写过的,实现这一个的话可以在layout方法操作,超过一行后布局到下一行。面试官紧接着问layout方法是什么作用,我只回答了确定各个子view的位置,此处需要大家帮助解答。

4.说一下view和viewGroup的事件传递机制吧,dispatchTouchEvent、onTouch和onTouchEvent先后先后顺序,还有onInterceptTouchEvent。
这一个自己其实当天还是仔细看过的,但是太紧张了,说的乱七八糟,尤其是拦截的部分,表述太差,也的确是了解不够,面试官表示了解的比较浅显。

5.contentprovider是否只能是数据库的数据,别的程序怎样读取。
自己只说出了contentResolver和uri,定义权限没说清楚。

6.描述了一个场景,微博中点击一个淘宝的链接,打开了淘宝应用,这是怎么完成的。

7.说一下fragment和activity的通信。
自己说到自定义接口,在fragment初始化时判定是否实现了接口,面试官紧接着问在哪个生命周期函数可以判断,我回答onAttach是双方绑定,onActivityCreated是activity的onCreate已经返回,我都是在onActivityCreated里判断的。面试官没有评价,此处求解。

8.fragment内部怎样嵌套fragment。
这个地方的好多函数我忘记了,所以自然说不出……事后自己查看是getChildFragmentManger,但是记成了getChildFragmentContext。面试官紧接着问,内层frag调用getContext获取的是哪一个context,自己之前就已经记错,回答是获取外层的,面试官无奈说回去自己写一下代码试下。

8.java的问题
a.静态内部类与非静态内部类区别。
b.因为前一个问题提到了内存泄漏,紧接着问你是怎么理解内存泄漏的。
c.什么样的对象是应该回收的呢?
bc两个问题自己答的乱七八糟,应该说我是懂得基本的道理的,但是叙述太差,说不准确也说不到要点。
d.匿名内部类有没有构造方法。
e.匿名内部类使用局部变量的要求。为什么要是final的。
为什么是final的表示不知道,其实自己查过多次,但是好像这里处理的很模糊?

面试结束,我表示很不好意思……
唉,自己基础还是太差,看来需要多努力了。#安卓工程师#
全部评论
匿名内部类使用局部变量的要求。为什么要是final的? 这是一个编译器设计的问题,如果你了解java的编译原理的话很容易理解。   首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。   当外部类传的参数被内部类调用时,从java程序的角度来看是直接的调用例如:   public void dosome(final String a,final int b){     class Dosome{public void dosome(){System.out.println(a+b)}};     Dosome some=new Dosome();     some.dosome();   }   从代码来看好像是那个内部类直接调用的a参数和b参数,但是实际上不是,在java编译器编译以后实际的操作代码是   class Outer$Dosome{     public Dosome(final String a,final int b){     this.Dosome$a=a;     this.Dosome$b=b;   }     public void dosome(){     System.out.println(this.Dosome$a+this.Dosome$b);   }   }}   从以上代码看来,内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。   这样理解就很容易得出为什么要用final了,因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是final来规避这种莫名其妙错误的存在。”  (简单理解就是,拷贝引用,为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类得到的值不一致,于是用final来让该引用不可改变)
点赞 回复 分享
发布于 2017-02-23 18:34
作为本科生,还是有机会的
点赞 回复 分享
发布于 2017-02-18 08:42
加油
点赞 回复 分享
发布于 2017-02-18 09:56
我也准备找暑期实习,你在哪里看到这些招聘信息的?
点赞 回复 分享
发布于 2017-02-18 12:04
电面不会问项目的么?
点赞 回复 分享
发布于 2017-02-18 13:46
楼主哪个学校的?我也大三想找暑期实习,但是基础感觉有点薄弱
点赞 回复 分享
发布于 2017-02-19 22:33
这么快就开始面试了吗
点赞 回复 分享
发布于 2017-02-20 18:53
今天偶尔看到了楼主提出的某个问题的答案,ListView中如果不用ViewHolder怎么实现View的复用。这个问题就是要给convertView设置Tag,我们通常是把ViewHolder作为tag设置到convertView中,但是View的setTag方法其实还有一个重载,那就是setTag(int,Object),这里前面的int是一个key,后者则是value,内部采用一个SparseArray来维护,所以设置只需要把内部view控件的id作为key,该View作为value,调用setTag方法就可以了。在拿到convertView的时候,也可以通过getTag(int)来获取到该view,也可以避免多次调用findViewById从而实现复用。
点赞 回复 分享
发布于 2017-04-15 18:44
listview的源码解析可以看看 http://blog.csdn.net/guolin_blog/article/details/44996879 这个
点赞 回复 分享
发布于 2017-04-15 19:23
同美图安卓 一面只问了 2 4 7 8 这几个问题 然后一面只有不到十分钟~
点赞 回复 分享
发布于 2017-04-15 20:03

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
点赞 49 评论
分享
牛客网
牛客企业服务