说好的博客,终于要来了。
这篇文章写一下面试时我自己一般是如何展示自己技术水平的。
我是一名做Android的攻城狮,自己的面试经验还算不错,作为求职者自己的面试成功率比较高,而技术关我从来还没遇到不通过的。我面试的时候喜欢先自己展现下自己的技术,然后再是面试官提问;这样让面试官能全面充分的了解我的技术层次,接下来谈薪水待遇自己的话语权就会多一些。
首先声明一点:我不喜欢在面试的时候多谈业务逻辑、多谈项目经验、多去展示自己对具体Api的记忆之类的行为。因为你所谈的项目和业务逻辑,都是需要和别人配合才确定下来的,而具体的业务、实施场景又是受到各种需求方、提供方的限定、干扰,所以我认为谈这些就是耍赖皮。就好比你给我说:我写的程序,效率都特别高!!可是,空口无凭,我怎么相信你?所以我都会和面试官说简单的介绍下项目,希望更多的去探讨Android标准的机制。
进入正题:
我一般会从一个控件引入,然后扩展到自己的知识结构;这个控件可以是ListView或者是自定义的瀑布流等等。
这里就以ListView为例:
谈到ListView首先可以谈谈它的基础使用,比如复用ConvertView,使用ViewHolder,以及最简洁的ViewHolder写法,以及不同方式之间的一个效率比等;还有以ListView为代表的Android里的MVC思想。
然后谈对ListView的优化:小的方面可以是分页、分批(实质一样)加载数据。
大的方面谈ListView的优化的话可以说分为两类:①线程优化;②内存优化。
线程优化可以谈到Android的异步任务机制和消息处理机制;Looper、Handler、Message内部实现、AsyncTask优缺点,实现定制AsyncTask等。
内存优化的话可以谈到Android、Java内存管理机制,进程分类,提升进程优先级等;以及对Bitmap的处理:加载、缩放、缓存,常用或自定义图片缓存算法,如何避免OOM,发生OOM时处理,全局低内存状态、异常处理等;还可以谈到UI布局的优化;网络访问的优化;避免内存泄露;以及加上各种别的细节:例如对各种流、游标的关闭、传感器的注销等的处理就可以上升到整体的Android性能优化。
还可以从ListView每一个Item的布局、或者是自定义一个增强型的ListView这个角度谈Android中View的测量、布局、绘制、重绘等机制。
谈到View的绘制流程涉及到一个View树的概念,然后可以联想到Android的事件分发树:事件分发、处理、拦截等。以及两个树之间的异同点。
ListView条目的点击又可以联想到IPC进程间通信,你还可以再谈谈Android组件设计的哲学。
谈以上很多机制的时候如果能结合Android源码、从源码角度,或者说参照Android源码实现机制说的话,就更好了:侧面告诉面试官自己喜爱钻研。
以上的这些基本上就是我面试的时候自己会主动谈的技能点,整个一套下来的话大概能谈快一个小时了,面试官就知道你的水平还不错。限于篇幅有限,我写的并不详细,只是写了个名字简单的提及而已,如果详细谈的话这篇文章就太长了。
遇到的面试官不一样,所以技术面试侧重点就不一样,很多的知识都是靠自己平时积累,做到广撒网,多捕鱼;还有就是要打磨自己,让自己的心智成熟,能和不同的面试官聊到一块儿,不能因为技术分歧而闹不愉快。
一个好的心态、踏实的技术态度,都会给自己帮助很多!
明天就是中秋节了,祝大家中秋快乐!!O(∩_∩)O