面试时,问哪些问题能试出一个 Android 应用开发者真正的水平
展开全部
首先,面试官们一定要知道,每个人由于经历不同,擅长的方向是千差万别的,所以一定不要抓住自己擅长的某个方面去问的很深,觉得“如果连这个都不会还算毛程序员啊”。
所以我问问题的时候,往往是“两步走”的循环:
1. 问他做过什么,如果有成品的话,我能看看更好。
2. 从他做过的东西里面,找到问题进行提问。具体的问题要看情况,可以是界面或效果的实现方式、相关bug的排除、该部分原理的分析。
举一次面试时的对话作为例子吧:
我先开始:
“这份简历和网上投过来的那份是一样的吧?”
“嗯,应该是一样的。”
“嗯好。你在之前的团队的位置是什么?”
“中高级吧。”
“具体的工作呢?”
“写框架,让新人比较容易上手,能够轻松工作。”
“你说的框架具体包括什么呢?”
“一些会共用的东西,写出来可以让新人就算是刚来也能很好的完成工作。”
“联网是你封装的吗?”
“是。”
“你们联网用的是什么?”
“就是……安卓自带的……HttpClient。”
“直接用的?”
“嗯。”
“那你们的网络请求是怎么做的异步呢?”
“嗯……用Handler嘛,还有AsyncTask。”
“能具体一点吗?”
“嗯……就是……额……”
“例如什么情况下用Handler,什么情况下用AsyncTask,你是怎么决定的呢?”
“嗯……”
“或者说,他们有什么区别呢?谷歌为什么要造他们两个出来,而不是只造一个呢?”
“区别……区别……他们肯定是有区别的,不然谷歌不可能造两个。嗯……”(到这里,这个问题就可以结束了。评级减一。)
“这样吧,你的简历上提到‘熟悉大图片的加载’,能说一下大图片加载有什么需要注意的吗?”
“缓存嘛。”
“缓存?”
“嗯,大图片的加载不就是ListView里面的大图片加载吗?要防止内存溢出。”
“ListView里面一定是大图?”
“嗯……”(不了解的东西却说自己熟悉,评级减一。继续顺着问。)
“那么ListView中图片的缓存你是怎么做的呢?”
“三级缓存嘛。”
“哪三级?”
“如果内存里面有,就用内存里面的;如果没有就用本地的;如果本地也没有就从网络上取。三级。”
“网络上的也叫缓存?”
“啊。你可以把他看作缓存,也可以不看作缓存嘛。”(这个……)
“内存缓存你是怎么实现的?”
“用的一个HashMap。”
“直接用的HashMap吗?”
“嗯……嗯。”
“直接用HashMap的话,怎么防止你刚才提到的内存溢出呢?”
“你可以用软引用嘛。”(首先答案有问题,另外当听到关键词“你可以”,多数情况下这个问题也可以结束了——八成是不会,仅仅听说过。不过出于谨慎还是继续问了)
“软引用就能防止内存溢出吗?”
“还有……还有谷歌出的一个叫LRUCache的。”(回避正面回答,确认他是不会。这个问题结束。评级减一。到此就再没必要聊下去了。)
然后简单过渡一下,就结束了面试。
所以你看,只需要简单提问,然后接着对方的回答继续往深了问,就什么都问出来了。
--------------------------------------------------------------------------------
评论中有人问到这次面试中我没有问完的问题的答案,那简单就说一下,想了解更多还请自行谷歌。
Handler和AsyncTask:这俩类都是用来实现异步的,其中AsyncTask的集成度较高,使用简单,Handler则需要手动写Runnable或者Thread的代码;另外,由于AsyncTask内部实现了一个非常简单的线程池,实际上是只适用于轻量级的异步操作的,一般不应该用于网络操作。我问他Handler和AsyncTask的区别,一方面是因为他说用AsyncTask联网,因此我认为他对AsyncTask并不熟悉;但更重要的是在我问他实现异步的具体手段的时候,他同时提到了Handler和AsyncTask——用这种“混搭”的使用方式来写联网框架,就算不考虑AsyncTask的可用性,也显得非常怪异,这听起来更像是在“列举Android实现异步操作最常用的类”,而非“讲述实现网络异步操作的具体方式”。也就是说,我听了这句话后开始怀疑他封装过联网框架这件事的真实性。但我只是怀疑,并不确定,因此接着问了我想问的。
图片缓存:大多数情况下,内存中使用LRUCache是最合适的。如果用HashMap来实现,不是不可以,但完全没必要嘛!需要注意在合适的时候释放缓存。至于具体怎么释放,我没考虑过,但用软引用的问题在于,你很难控制缓存的大小,也就是说,只有等到你的内存快要撑爆,你的图片缓存才会被回收。是不是感觉傻傻的?
对于初级和中级工程师,我更倾向于考虑对方的学习能力,也就是你对于自己所做过的东西是否足够了解,而非要求你那里都强,因为就像我开头说的,每个人由于经历不同,擅长的方向是千差万别的,我不喜欢挑别人的软肋问。只要你学习能力强,我就安全感满满哒!
至于高级工程师么……我还没面过呐!^_^
所以我问问题的时候,往往是“两步走”的循环:
1. 问他做过什么,如果有成品的话,我能看看更好。
2. 从他做过的东西里面,找到问题进行提问。具体的问题要看情况,可以是界面或效果的实现方式、相关bug的排除、该部分原理的分析。
举一次面试时的对话作为例子吧:
我先开始:
“这份简历和网上投过来的那份是一样的吧?”
“嗯,应该是一样的。”
“嗯好。你在之前的团队的位置是什么?”
“中高级吧。”
“具体的工作呢?”
“写框架,让新人比较容易上手,能够轻松工作。”
“你说的框架具体包括什么呢?”
“一些会共用的东西,写出来可以让新人就算是刚来也能很好的完成工作。”
“联网是你封装的吗?”
“是。”
“你们联网用的是什么?”
“就是……安卓自带的……HttpClient。”
“直接用的?”
“嗯。”
“那你们的网络请求是怎么做的异步呢?”
“嗯……用Handler嘛,还有AsyncTask。”
“能具体一点吗?”
“嗯……就是……额……”
“例如什么情况下用Handler,什么情况下用AsyncTask,你是怎么决定的呢?”
“嗯……”
“或者说,他们有什么区别呢?谷歌为什么要造他们两个出来,而不是只造一个呢?”
“区别……区别……他们肯定是有区别的,不然谷歌不可能造两个。嗯……”(到这里,这个问题就可以结束了。评级减一。)
“这样吧,你的简历上提到‘熟悉大图片的加载’,能说一下大图片加载有什么需要注意的吗?”
“缓存嘛。”
“缓存?”
“嗯,大图片的加载不就是ListView里面的大图片加载吗?要防止内存溢出。”
“ListView里面一定是大图?”
“嗯……”(不了解的东西却说自己熟悉,评级减一。继续顺着问。)
“那么ListView中图片的缓存你是怎么做的呢?”
“三级缓存嘛。”
“哪三级?”
“如果内存里面有,就用内存里面的;如果没有就用本地的;如果本地也没有就从网络上取。三级。”
“网络上的也叫缓存?”
“啊。你可以把他看作缓存,也可以不看作缓存嘛。”(这个……)
“内存缓存你是怎么实现的?”
“用的一个HashMap。”
“直接用的HashMap吗?”
“嗯……嗯。”
“直接用HashMap的话,怎么防止你刚才提到的内存溢出呢?”
“你可以用软引用嘛。”(首先答案有问题,另外当听到关键词“你可以”,多数情况下这个问题也可以结束了——八成是不会,仅仅听说过。不过出于谨慎还是继续问了)
“软引用就能防止内存溢出吗?”
“还有……还有谷歌出的一个叫LRUCache的。”(回避正面回答,确认他是不会。这个问题结束。评级减一。到此就再没必要聊下去了。)
然后简单过渡一下,就结束了面试。
所以你看,只需要简单提问,然后接着对方的回答继续往深了问,就什么都问出来了。
--------------------------------------------------------------------------------
评论中有人问到这次面试中我没有问完的问题的答案,那简单就说一下,想了解更多还请自行谷歌。
Handler和AsyncTask:这俩类都是用来实现异步的,其中AsyncTask的集成度较高,使用简单,Handler则需要手动写Runnable或者Thread的代码;另外,由于AsyncTask内部实现了一个非常简单的线程池,实际上是只适用于轻量级的异步操作的,一般不应该用于网络操作。我问他Handler和AsyncTask的区别,一方面是因为他说用AsyncTask联网,因此我认为他对AsyncTask并不熟悉;但更重要的是在我问他实现异步的具体手段的时候,他同时提到了Handler和AsyncTask——用这种“混搭”的使用方式来写联网框架,就算不考虑AsyncTask的可用性,也显得非常怪异,这听起来更像是在“列举Android实现异步操作最常用的类”,而非“讲述实现网络异步操作的具体方式”。也就是说,我听了这句话后开始怀疑他封装过联网框架这件事的真实性。但我只是怀疑,并不确定,因此接着问了我想问的。
图片缓存:大多数情况下,内存中使用LRUCache是最合适的。如果用HashMap来实现,不是不可以,但完全没必要嘛!需要注意在合适的时候释放缓存。至于具体怎么释放,我没考虑过,但用软引用的问题在于,你很难控制缓存的大小,也就是说,只有等到你的内存快要撑爆,你的图片缓存才会被回收。是不是感觉傻傻的?
对于初级和中级工程师,我更倾向于考虑对方的学习能力,也就是你对于自己所做过的东西是否足够了解,而非要求你那里都强,因为就像我开头说的,每个人由于经历不同,擅长的方向是千差万别的,我不喜欢挑别人的软肋问。只要你学习能力强,我就安全感满满哒!
至于高级工程师么……我还没面过呐!^_^
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询