面试时提问的问题,问哪些问题能试出一个 Android 应用开发者真正的水平

面试时,问哪些问题能试出一个Android应用开发者真正的水平? - 安卓 - 伯乐在线
& 面试时,问哪些问题能试出一个Android应用开发者真正的水平?
这是我在知乎上关于,大家感觉有些帮助,就收录在这里,以下是我的回答:
一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大,需要一些技巧,这里我不局限于回答题主的问题,而是分享一下我个人关于如何做好Android技术面试的一些经验:
面试前的准备
1. 简历调查
简历到你手上的时候,你要做好充分的调查分析,不仅仅是对公司负责,也是对自己与候选人时间的尊重,明显不match的简历,就不要抱着“要不喊过来试试看”的想法了,候选人也许很不错,但如果跟你的岗位不match, 也不要浪费大家时间,你要想清楚现在需要的人是有潜力可以培养的,还是亟需帮忙干活的。另外如果简历里附带了博客链接,GitHub地址,相关作品的,可以提前去看看,直接看人家多年积累的文章与代码,比这短短一小时的面试来得靠谱的多。
2. 准备问题
了解清楚候选人背景后,要根据简历,有针对性的准备问题,可以是他作品或做过项目里的某个技术细节的实现方式,也可以是他声称精通的某些领域的相关问题。总之不要等到面试过程中现想问题,特别是刚开始面试别人的同学,往往经验不足稍带紧张导致大脑短路,其实也是很尴尬的,把要问的问题提前写下来,准备充分。
考察哪些点?
1. 简历是否真实
这其实是面试第一要务,面试的过程其实就是看简历是否属实的过程,因为能到面试环节,说明这个人是符合要求的,不满足要求的早就被剔除了,如果他真的如简历描述的那样,100%会招过来,如果人人都如此,那就不需要有面试这种过程了。
需要注意的是这里的真实有三层含义:
一是他如实描述了自身经历,很多人只在一些大项目里做一个很小的螺丝钉,但简历里往往夸张这段经历。
二是不知道自己不知道,常见于简历里各种“精通”开头的描述,因为知识体系与视野的局限,明明只是了解很浅却夸口精通,很多时候他并不认为自己说的有问题,而是真的以为自己已然精通,有点井底之蛙的感觉。
三是简历里的真实要与你的期望相匹配,一门技术了解到怎样的程度才算精通,很难有定论,所以这里的“真实”只能是候选人与面试官标准之间的契合,这种有主观运气成分,也许面试官水平不够错误判断了你,也不用感到不爽,面试何尝不是种双向选择呢。
2. 技术的深度
技术的深度一向是我最看重的部分,当今任何一个技术领域都非常宽广,一个人要同时掌握那么多知识并且都深入几乎不可能,那都需要拼学习效率与工作年限了。而你曾经做过的东西,正在做的东西,是绝对可以了解得更深入的,一个对技术有好奇心,有技术热情的人,都不会仅仅停留在这个东西挺好用,而是会忍不住去探究它背后的技术原理,即便不是亲自去看源码,也会花点时间了解别人整理过的经验,所以单凭考察技术上的深度,就可以考察一个人是否对技术有热情,是否有技术好奇心等等这些很多大牛认为的所谓“优秀程序员的特征”。
之前曾看到过一句话:“一个人对他所做的事情了解得越深,他就能做的越好”。放在这里再合适不过了。
3. 技术的广度
深度是有了,还需要广度吗?我个人的理解是:深度是必要条件,广度是加分项。同样的有技术好奇心的优秀程序员,也不会满足于仅仅局限于自己的一亩三分地,工作之余,也会想要尝试一些其它的领域和方向,因为投入问题也许不够深入,但很多领域知识你知道与不知道,对你个人知识体系的形成关系很大。比如你要实现一个功能,在你当前熟悉的技术领域上很困难或者效果不佳,在你就要放弃时你的同事告诉你,这用一个简单sql语句就可以实现啦,为什么要搞得那么麻烦?这个例子虽然举得很蹩脚,但是我想意思大家应该已经明白了。知识越有广度,头脑里的技术体系就越完备,同样的问题,你就可以想到N个解,思考一下就得出最优解了,如果你听都没听过一些东西,就会经常说出“这个好难搞啊”,“这根本就不可能”,其实有的时候真是知识的局限问题,所谓的从0到1难,也是这个意思。
4. 逻辑思维能力
这也是我比较看重的一点,这里并不是指那些臭名昭彰的脑经急转弯问题,而是通过交流观察,判断一个人表达观点逻辑是否清晰,回答问题是否有章法,这个很难描述,但如果你细心观察,你会发现很容易通过一些简单的交流,就可以看出一个人是否逻辑清晰。有时候你会觉得某个人表达沟通很不错,其实不是沟通的问题,是他说出去的话,经过了他大脑的条理清晰的整理,让你很容易就能明白。这种习惯不是一朝一夕就能养成的,所以面试过程中这点装不出来。
另外一个人如果逻辑清晰,而且反应又敏捷,语速很快,那是大大的加分项,恭喜你,碰到一个聪明人了。
具体问哪些问题?
前面提到的是要重点考察的点,那么具体的Android开发,有没有一些通用的问题可以问的呢?我个人一般会从这几个角度考察候选人:
1. Android经验
如果不是校招,Android经验是必须的,我比较喜欢问一些基础概念与技术原理,比如Activity、View、Window的理解,各LaunchMode的使用场景,View的绘制流程,Touch事件机制,Android动画的原理,Handler, Looper的理解,Android跨进程通讯的方式,Binder的理解,Android Mashup设计的理解等等。
2. Java水平
基本上就是Effective Java那本书里提到的东西,如果你背完那本书里的问题,并且对答如流,没问题,就要你这样的。其实也会考察关于final用法,反射原理,注解原理,java编译过程,GC等一些常见问题。
3. IT基础知识
其实就是计算机科班学生学校里学到的一些东西,在校招时这块是重点,社招会放宽,但一些基本的常识是要有的,比如不少人都不知道http的get post有啥区别,https的那个s是什么意思,讲不清进程与线程的概念,不知道二分算法是个啥东西。这些简单问题的筛选,可以过滤一些所谓野路子的程序员,是不是科班出身不重要,搞这行就得对一些基本常识有概念,不然以后怎么愉快的交流呢?
4. 代码质量的认识
我们需要的是一个对代码味道有感觉的人,关于这点,看下《Clean Code》就够了,面试中这点其实不好考察,可以让他聊一聊对代码质量的认识,虽然不能排除对方夸夸其谈,至少想法不多,只能提到命名风格这一点的人是不符合要求的,也可以在写Code的环节中观察。
5. 技术视野
比如对Android开发新技术的了解与学习,对其它流行技术领域的了解,这其实与我刚才提到的技术广度的考察有关,就我面试过程中,发现很多非互联网行业的从业人员,因为公司各种操蛋规定与公司技术氛围的原因,技术视野相当狭窄。
我个人对这点深有体会,2011年我还在传统行业从事软件研发,当时的公司因为担心技术信息泄露,不让上网,相当封闭,我个人虽然自认为已在那个行业内做到业内专家的级别,但总感觉哪里不对,有一天我很兴奋的打算跟身边同事聊一聊Android的时候,发现他们居然都不知Android为何物?2011年啊同志们,当时的震惊无法言表,深切感觉到需要作出改变了,毅然放弃多年行业积累,转战移动互联网,直到现在。时至今日,多年前的小伙伴也有很多混出了名党,开始走向人生巅峰,我也从来没有后悔当初做出的选择。
6. 技术想象力
一个优秀的技术人,如果知识的深度与广度足够,知识已成体系,那么他对于一些从未接触过的领域,也是可以做出足够合理的想象与判断,面试过程中如果问到一些领域候选人没有涉猎,这时候一般不用过多纠缠,但如果你想借这个问题考察下他的技术想象力,可以深入下去,比如问他:“你觉得这个东西应该是什么原理呢?”,“这个酷炫的控件,如果要你来做,你会怎么实现?”。在这方面表现出色的同学无疑是有深厚基础与足够广度的人。
7. 技术习惯
好的程序员都会有好的习惯,比如各种快捷键的熟练应用,各种命令行的掌握,一些提高开发效率的工具与习惯,碰到问题是baidu还是google,有没有做一些小工具帮助减少重复工作,工作之余有没有继续学习?有没有看什么不错的书等等,这些小细节很大程度上决定了程序员的开发效率,这也是为什么很多人说一个优秀程序员抵得上100个普通程序员,这也是重要原因之一。
面试后的反馈:
面试一般不止一轮,你需要给出你的反馈,多轮面试结果一起考量,减少误判的风险,反馈一般怎么写呢?以下是我的建议:
1. 面试纪录
面试过程中的完整纪录,尽量客观评价,让其它面试官知道你问了哪些问题,回答的怎么样,也避免了重复问题的尴尬。
2. 优点与缺点
你的主观评价,亮点有哪些,你觉得哪些地方不够好?
3. 综合评价
你对候选人的综合评价,hire或者no hire的根本原因,如果有些地方感觉没考察清楚,期望其它面试官继续加强考察,也可以写上。
4. 怎样才给通过?
通过标准因人而异,每个人都有自己心中的bar, 但还是有些可直观考量的因素的:
一是岗位的要求,不同的岗位标准当然不一样,校招与设招肯定也不一样。
二是岗位的紧急程度,兄弟们天天加班忙死了,赶紧找人过来帮忙吧哈哈。
三是候选人的年龄,大龄程序员莫怪,一把年纪了还跟刚毕业一两年的同事一个水平,说明成长太慢,做技术的潜力有限,这个大家应该能理解。
四是前面提到的做技术的深度,这个是必须的,广度也要有一些,视野不能太窄。
五是要有亮点,大家在面试的过程中要注意发掘亮点,有时候他问题很多但有一个足够的亮点也够了,用心观察也发现不了什么亮点的,就要注意了。
说了这么水平多,其实最重要的就是一句话,问问你自己:你真的原意跟那个家伙一起并肩战斗吗?
可能感兴趣的话题
不是Android面试嘛,肯定是自定义控件和各种框架啊不是吗,这些不是最体现水平,理论的我一直觉得有时能忽悠人,没有给个项目来的实际
关于安卓频道
安卓频道分享Android开发文章,精选工具和安卓相关的行业动态。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线Android面试时的问题,实现半透明的popupwindow的源码
Android面试时的问题,实现半透明的popupwindow的源码
1.设置半透明主题
2.设置window的alpha值
&WindowManager.LayoutParams lp =
getWindow().getAttributes();
&& &lp.alpha =
0.5f; //0.0-1.0
&getWindow().setAttributes(lp);
发现这两种都不能满足要求,起码的颜色就不太对。想做好点,做成类似alertDialog的样子,带边框,弹出窗口带动画效果,之后背景置灰,那多帅。
看到那个仿uc浏览器的源码,是用alertdialog做的,达到那种效果,加点动画就行了。下图是从那个ucweb源码里面弄出来的。
& 上面的代码就不贴了,我上传的项目文件里面也有。
&&&下面是弹出popupwindow的图片,第一张是动画中,第二张是完全弹出的:
&弹出popwindow的代码如下,比较乱,多包涵:
popupWindow = new PopupWindow(menuView,
LayoutParams.FILL_PARENT,
&&&LayoutParams.FILL_PARENT,
popupWindow.showAtLocation(findViewById(R.id.parent),
Gravity.CENTER
Gravity.CENTER, 0, 0);
popupWindow.setAnimationStyle(R.style.PopupAnimation);
加上下面两行可以用back键关闭popupwindow,否则必须调用dismiss();
ColorDrawable dw = new ColorDrawable(-00000);
popupWindow.setBackgroundDrawable(dw);
popupWindow.update();
下面是实现步骤:&
1。背景置灰:
&&&popupWindow =
new PopupWindow(menuView,
LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT, true);
&&&第二三个参数必须是LayoutParams.FILL_PARENT,这样才能填充整个屏幕,达到背景置灰的目的。
&&&整个popupwindow里面是一个GridView,图片什么的也是用的那个仿UC浏览器界面项目的,在此谢谢了。
&&&关键的东西都在xml里面。
&?xml version="1.0"
encoding="utf-8"?&
&LinearLayout
xmlns:android="/apk/res/android"
&&&android:orientation="vertical"
android:layout_width="fill_parent"
&android:gravity="center"
android:layout_height="fill_parent"
&&&android:layout_gravity="center"
android:background="#b0000000" &
&&LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:gravity="center"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/downbutton_corner"&
&&&&GridView
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="4"
android:verticalSpacing="5dip"
android:horizontalSpacing="5dip"
android:stretchMode="columnWidth"
android:gravity="center"
android:layout_gravity="center"
/&&/LinearLayout&&/LinearLayout&
第一个linearlayout里面的android:background="#b0000000",就是全屏背景,网上搜的好多半透明都是“#e0000000”,我觉得那颜色太深,“#b0000000”更合适。
第二个linearlayout是popupwind的背景,里面的android:background="@drawable/downbutton_corner"是关键,边框,圆角都是里面定义的。
2。popupwindow的边框,圆角背景。downbutton_corne.xml
xmlns:android="/apk/res/android"
&&&android:shape="rectangle"&
&&&&gradient
android:startColor="#c0000000"
android:endColor="#c0000000"
android:angle="90" /&&!--背景颜色渐变
&&&&stroke
android:dashWidth="2dp" android:dashGap="2dp"
android:width="2dp"
android:color="#FF00ff00"&&/stroke&
&&&&!--描边
&&&&corners
android:bottomRightRadius="5dp"
android:bottomLeftRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp"
/&&!--设置圆角--&
这个涉及到shape画图,要是不懂的话。网上很多资料,搜一下就是了。我博客里面也有,http://blog.csdn.net/ymdcr/archive//6048256.aspx
&gradient android:startColor="#c0000000"
android:endColor="#c0000000" android:angle="90"
/&&!--背景颜色渐变 --&
我就设置了一个固定的颜色"#c0000000"。android:angle="90"这个是设置颜色渐变方向,从上到下啊,从左到右啊,貌似只能90的倍数,也只有四个方向嘛。
&&/stroke&,边框就是这个实现的。
dashWidth指的是边线的宽度 dashGap 指的是每条线之间的间距,(因为是边线是很多小横线组成的)。
3。淡入淡出动画
popupWindow.setAnimationStyle(R.style.PopupAnimation);
这条代码是设置style的,动画文件就是在style文件里面引入的。下面是淡入的动画,动画教程网上也很多。淡出的动画就这些参数值交换位置就是了。android:duration这个是持续时间,为了截图,我把它弄成5秒了。
xmlns:android="/apk/res/android"&
android:fromXScale="0.6" android:toXScale="1.0"
android:fromYScale="0.6" android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%" android:duration="5000"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="5000" /&
大概就是这些了。
还有一个关键的问题。弹出pop之后,back键无效了,必须在pop里面设置事件dismiss掉。下面是问题的描述,哪位解决了,告诉我一下,谢谢。我的邮箱:
问题解决了,是因为没设置背景的原因。&
popupWindow.setBackgroundDrawable(new BitmapDrawable());
//把这一行放在showAtLocation前面就行了,以前是放在后面的,粗心了。
popupWindow.showAtLocation(findViewById(R.id.parent),
Gravity.CENTER
Gravity.CENTER, 0,
网上也有很多人说,弹出pop之后,不响应键盘事件了,这个其实是焦点在pop里面的view去了。
以这个为例,焦点就在gridview上面去了。28楼的兄弟提示的,谢了。
在gridview加上setOnKeyListener,就能解决。
menuGrid.setOnKeyListener(new
OnKeyListener() {
&@Override
&& &public
boolean onKey(View v, int keyCode, KeyEvent event)
&& & switch
(keyCode) {
KeyEvent.KEYCODE_MENU:
(popupWindow != null &&
popupwindows.isShowing()) {
&popupWindow.dismiss();
&System.out.println("menuGridfdsfdsfdfd");
&& & return
& & [/code]
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。那些IT培训出来的Android工程师,希望你面试时涨点记性
那些IT培训出来的Android工程师,希望你面试时涨点记性
影视剧里的爱情故事
这几天,公司在前程无忧上发布了招聘Android工程师广告。不到3个小时,hr就抱怨说投递Android工程师的简历已经多达300份了。不得已将Android工程师招聘就下架,然后就去筛选简历了。我也顺便看了看公司的要求,写的很简单,主要有:
经验:1年以上。 有开发过蓝牙相关项目经验优先。
学历:大专及以上。不知道hr和部门经理花费了多少时间挑选了10个人出来了。然后就预约了他们过来面试。很荣幸,经理让我出一点面试题,还特意嘱咐,毕竟我们是软硬件的方案公司,已经有成熟的架构了。app的难度不大,只要后面肯学是一样。就把第一轮面试的任务交给我。这里我并不是歧视培训机构出来的Android工程师,而是这几天面试下来,让我觉得很不可思议。如果有的人再用心一点,或许offer就是你的了。也希望不论你是正常毕业出来找工作,还是培训出来,自学的,或者中途转行的,都涨一点记性。先说说笔试部分。有两道题基本上回答的很令人无语。1.写一写自定义view的思路。有几个人直接写了一个onMeasure()方法放那里了,就写了这几个单词,难道就不用多写一点解释。我一看简历的工作经验,不是2年,就是2年半,还有3年的,怎么一个自定义view都没有遇到过?真的是让我怀疑你的工作经验是怎么来的。重点是:有一个面试者就直接向我坦诚了自己是培训出来的。我瞬间就恍然了很多……我也是个打工的,没必要去指责他,只是给他讲了讲自定义view,简历应该如何如何。这哥们居然临走时感谢我,要了我的微信。2.有没有访问过公司官网?如果有,谈谈你的意见。这一题是hr要求加上去的。结果很失望,只有3个人说访问过。你去别人家公司面试,就不去访问别人一下官网,更何况,你投简历的时候,你就不用看公司简介,上上别人家公司官网。就算你是群投,收到面试通知后,都不用好好准备一下吗?去官网看看公司文化,团队,产品,特别是产品,大概就知道会用到哪些技术。再说说口头问的部分1.搞清楚自己的开发工具1).请问你现在开发使用的什么工具?面试者:Android Studio。2).那你现在主要使用哪个版本开发?面试者:2.4。一瞬间,我直接懵了。Google才放出正式的2.3版本。你就用起2.4呢?后面还补充告诉我,自己去官网下载的,一直在使用……2.不要刻意去讨好公司,技术的知识点不确定就不要随便回答。1).你在简历上说自己做过蓝牙相关的项目,那你告诉我,一般使用蓝牙需要哪几个权限?面试者:好像两个,两三个吧?2).那你能不能说一下?面试者:我都是直接复制粘贴的……唉,你让我说什么好。你要是做过蓝牙相关开发,哪怕是你忘记了权限,你也可以说一下蓝牙连接的流程。就算以前没做过,招聘的岗位都告诉你了,有做过蓝牙项目app的优先,你就可以去补充一下Android 关于蓝牙的知识点啊?3.别把别人上架的app当成自己的。1).你有没有app上架过?面试者:有。等他在应用市场找给我的时候,我一看就傻眼了,下载量破500万了,一看开发者就不是你。唉,我当时就想,兄弟啊,你没有可以告诉我,就算找一个别人的,能不能不要这么多下载量的?更何况,国内Android应用市场这么多,想自己的app上架都不是什么难事。更可况,面试要求里,也没有说非要你上架app。毕竟我们公司的app的难度还好。4.Android 6.0权限的处理。1).在实际开发中,你说如何处理6.0以上手机权限问题的。面试者:我们开发的app不需要适配6.0啊。2).要是客户的手机是6.0的,客户要求你的app项目适配6.0的呢?面试者:不会吧,都不用适配6.0的。你不是都有两三年开发经验了?6.0以上权限适配属于最基本的知识。随便说个思路,先申明权限,到用的时候,对高版本手机进行判断撒的……都是可以的,实际开发项目时,又不是不让你上网去学习研究。唉……不知道该怎么说好了!拒绝做面试题的!有两个过来面试的,直接告诉我:我写不好,能不能直接说啊!我也只好同意了,毕竟从那么多简历里面,把你们筛选出来是多么地不容易。结果,好是令人失望。如果你没有过硬的技术,请不要随便拒绝面试题。后记那个坦诚告诉我是培训出来的人,晚上发信息告诉我一些信息。他们说Android面试,不用做题的?现在企业喜欢经验多的,我们都是被要求写几年经验。这样才有面试机会。你们招聘公司职位要求的技术不是随便写的吗?……大家都不容易,但是做技术这一行,还是需要硬实力。再怎么包装你有几年经验,拿到面试通知时,为什么不去好好准备面试,去背诵知识点。你连最起码的别人公司的官网都不上,你又有什么话语权?哪怕你没有app上过架,确实是刚毕业,转行,或者刚培训出来的,如果临时抱佛脚,复习了公司要求的知识,这个offer就属于你的了。毕竟还有3个月试用期。不论什么原因让你的简历如何完美,但是还请你的技术能够跟上。我所知道的,同事,朋友做IT的,有的是跨专业,有的是高中,有的是培训出来的,既然他们都行,请你也行!
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
影视剧里的爱情故事
百家号 最近更新:
简介: 原配小三小四组成的爱情戏,你知多少?
作者最新文章}

我要回帖

更多关于 面试时应该注意的问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信