一、前言
记本人第一次面试的经历,希望能给即将面试的小伙伴一些经验。
对于面试完以后,我的心态是这样的。
委屈的话不多说,说多了都是自己技术不到家,不怪别人。接下来我来复盘一下这次面试的一些内容和知识点,给大家看看,也给我自己以后”以史明鉴“,顺便充充电。
废话不多说,接下来进入正文。
二、面试ing
part 1 - 自我介绍
面试官:先自我介绍一下。
我:我叫***…
事后总结:由于一开始没有准备如何更好的介绍自己,所以这段自我介绍就是很平淡无奇了,没有什么突出的地方。所以我建议小伙伴们在面试前能准备一段比较有想法的自我介绍,让面试官能够记住你,有一个良好的第一印象。
part 2 - 知识问答环节
2-1:安卓开发中的的布局
面试官:说说你用过哪些安卓开发中的布局。
我:我常用的布局有线性布局、相对布局、帧布局。
事后总结:我回答得也太简短了吧。是不是应该把安卓的常用布局都列出来,每种布局的特点都简单讲一下。然后再说自己常用的布局。由于知识储备匮乏,和问一句答一句,导致这场视频面试只用了17分钟不到就结束了。(心里顿时凉了半截)
2-2:viewHolder
面试官:简单说一下viewHolder。
我:这个好像没有用过。
事后总结:WTF???怎么就会答了没用过呢???ListView、RecyclerView的适配器里不是都用到了嘛??这组件平时也没算少用啊。当时可能是有点紧张了,因为面试时这个问题并不是第二个问题,直接被”无情“的面试官打懵了。所以面试时尽量要镇静、放松,不要被带节奏了。
好了。错了就要认,下面来讲一下viewHolder。
viewHolder通常出现在适配器里,用于对控件的实例进行缓存。例如,
在ListView或recylerView滚动的时候快速设置值,不必每次都重新创建很多对象,从而提升性能。(代码就不贴了,不熟悉的可以自行搜索查阅)
2-3:Handler
面试官:讲一下Handler中的sendMessage 和 post的区别。
我:sendMessage用过,但是post没有怎么接触。(然后就没有然后了…)
事后总结:这不是答非所问吗???太难了。用过sendMessage,好歹也继续讲一下用法和作用吧。
知识:Handler的sendMessage和post都是用于子线程和主线程(UI线程)间的通信。
很常用场景就是子线程处理延时操作(例如网络请求等)获取到数据,然后需要在UI上更新展示。
由于android是单线程模型,不能够直接在子线程中直接更新UI数据(有些UI组件可以)。那么此时就需要使用Handler将子线程的数据传输到主线程,再在主线程中去更新UI。
那sendMessage和post有什么区别呢?通过查阅资料和查看源码,其实这两者并没有本质的区别,只是在用法上会有一点差异,post本质还是使用了sendMessage。
附上参考文章:
handler.post和handler.sendMessage的区别和联系
该文章中有通过源码去分析较为详细的分析二者的异同,接下来我也会自己去实现一下代码,巩固一下。
顺便提一下,在android版本1.5以后还为开发者提供了一个封装好的异步消息处理类-AsyncTask。实现原理也是基于异步消息处理机制,相比而言,方便易用,避免了频繁创建、销毁线程所造成的资源浪费。
2-4:Inten和Bundle
面试官:请讲一下intent和Bundle。
我:xxxxx。(回答太垃圾了,不忍心写出来)
ps:把自己知道的展示出来。不能回答太简短了。
知识:intent 和 Bundle都是用于两个Activity之间的跳转传值。本质上并没有太大的区别,通过分析源码,其实intent本质上还是使用了Bundle来进行传值相比而言,intent更注重数据传递,而bundle更注重数据的存取。用法上bundle会更加灵活,这段时间会实现一下代码,总结写一篇博客,尽可能的理解二者的使用区别。
2-5:开源库的考查
ps:我的心态已经崩了。我的回答没有什么意义,就不写了。
2-5-1:eventBus 和 RXJava
当面试官说出eventBus和RXJava的时候,我已经蒙圈了。听都没听过(流下了菜鸡的眼泪)。还好现在的水平不是毕业水平,不然可能要去天桥底霸位了。
后面痛定思痛,查阅了一下资料,研究了一下,知道了什么是evevtBus、RXjava(android还有一个RXandroid),其实两者都是第三方封装好的关于异步处理的开源框架。这几天一定一定一定会写一篇关于eventBus的基础用法和个人理解的博客。
以初学者的角度认为比较友好的文章:
EventBus使用详解(一)——初步使用EventBus
EventBus使用详解(二)——EventBus使用进阶
但是由于文章比较的“年代久远、年久失修”,与目前版本(3.0)的eventBus有一些出入,但是不影响初学者去理解学习,可以综合其他比较新的文章一起看。
2-5-2:okHttp
我当时的回答依旧让现在的我“泪流满面、呕心沥血、毁人不倦、不知所措”啊。okHttp其实我用过的,结合上面说到的AsyncTask以及阿里的fastJson对一个天气查询的API进行网络请求和数据处理。但是当时也没有很好的去表达出来。
三、知识以外的考察
就是一些对工资方面啊、对公司的一些疑惑、你个人的学习能力、团队意识之类的,也希望在在面试前能够有一个准备,特别是对于公司或者其他的一些相关疑问,可以事先准备好,不至于到时一时不知所措或者表达不清之类的。
四、总结
总的来说,这次面试的问题方向是android基础知识+常用的开源框架+个人态度方面的了解。
所以,正在学校学习的师弟师妹、同届同学们其实可以拓展自己的知识面,不要沉浸在学校的基础中,多去了解一些常用的开源框架、与时俱进。
学校教的更多是基础,而与时俱进需要我们自己去额外学习。
这次面试总得来说还是收获很大的,至少让我自己知道了一些真实公司所用到的技术以及框架,还有自己的不足,这些是在学校里面所学不到的。如果不是这次面试,也许现在的我还是一个彻彻底底的井底之蛙,而经过这次面试后,我只是一个技术上的井底之蛙了,思想看到了更多的蓝天。
接下来的目标就是技术上也能够看到更多的蓝天。
最后说一句:面试官很nice。谢谢。
来源:oschina
链接:https://my.oschina.net/u/4364008/blog/4282080