本帖最后由 李维老师 于 2016-6-12 17:36 编辑
很多学员在找工作前都会谈面试色变,说到面试就会紧张、害怕,见到面试官就像见到吃人的老虎一样。
我觉得面试其实是一件很轻松的事情,是你和面试官相互了解的一次交流过程,是你展示自己的知识和魅力的一次机会。我们不是去乞求入职机会,我们是去给公司一次得到优秀人才的机会。
从今天开始,维哥将带领你们笑对面试,云淡风轻间就将offer拽在手中。
时间:2016年5月31日 周二 上午 面试公司:深圳市云鹏正曜科技发展有限公司 公司地址:福华一路115号投行大厦5楼 走到投行大厦楼下,诶嘿,还挺高大上符合我心中办公地点的选择“嘿嘿”。请原谅维哥这渣渣像素和拍照技术。。。 进到公司,前台是一个漂亮的妹纸(没好意思拍照),光看妹纸去了连前台照片都忘记拍了,只好补拍了一张,好吧又暴露了我的渣渣拍照技术。 妹纸带我见了HR之后还不忘对我说一声“面试加油哦。”(好吧,我是纯属YY)。 step1:笔是坐在HR旁边的桌子写题,好紧张地说(好吧,其实并不紧张)。但是弄得我不好拍照啊,还好维哥记性好,笔试题基本上都记下来了。 1. Java中的String和StringBuffer类各有什么特点?使用String有什么优势?(嘻嘻还好java基础比较好) 2. Android中横竖屏切换时,对Activity的生命周期有什么影响?(这么简单的题,能难倒我们大黑马) 3. Activity在即将销毁时,如何保存数据?(onSaveInstanceState,咱可是专业的。还给他展开讲了如果是主动调用finish来销毁activity则不会走该方法) 4. Android中的数据保存方式?(这里我展开说了一下工作中每种存储方式的具体使用场景) 5. 使用Intent方式在Activity之间传递数据,最大容量为多大?(4KB,这里展开讲了一下Bundle实现了parcelable接口,讲到了parcelable怎么跨进程读写数据) 6. Handler机制,简述Handler、MessageQueue、Message、Looper的关系?(这个我不仅仅给他简述了,还深入源码地给他讲了一遍) step2:第二轮是android技术面试。相信面试官看完我的笔试题之后都不想面试我了,为啥?因为我回答得已经远远超出了他的预期啊。可能他也意识到了我确实是有点真材实料,首先我做了一个简单的自我介绍 “我叫李维,来自湖南岳阳。2013年毕业于中南大学,从事android开发已有三年时间,2013年6月至2014年8月在某某公司从事android开发工作,主要负责手机短信模块的开发。2014年8月至2015年8月在深圳某某科技公司担任android开发工程师职位,主要负责某某智能手环APP的开发与维护。2015年8月至今在深圳某某科技公司,担任android多媒体开发工程师职位,负责公司平板的内置在线音乐项目的开发。本人性格开朗,热爱编程、喜欢专研新知识。英语较好,能独立阅读英文技术文档。” 做完一个简单的自我介绍之后本来是想和他讲解我的项目的,他笑笑说不用了你的能力我已经很清楚了,直接问了我一些比较比较高深一点或者流行一点的问题。如: 面试官:RxJava、RxAndroid和Retrofit框架都熟悉吗?
我:这些虽然我还没有在公司的项目中使用过,但是在自己做的一些小项目、小demo中我用到了这些技术。Rx是响应式编程的意思, 本质是观察者模式, 是以观察者(Observer)和订阅者(Subscriber)为基础的异步响应方式. 在Android编程时, 经常会使用后台线程, 那么就可以使用这种方式. RxAndroid来源于RxJava, 在RxJava的基础上扩展了一些Android的功能。 Retrofit是一套RESTful架构的Android(Java)客户端实现,基于注解,提供JSON to Object,Object to JSON,网络请求(POST,GET,PUT,DELETE等)封装。
面试官:讲讲MVP模式的使用及其与MVC的区别?
我:首先MVC是经典的模式,它的目的是将数据层与视图层分开用控制层来统一操作。在android中,M是数据层包含网络请求数据及数据库查询数据等等,V是View层,是各种layout文件,C是Controller层,是Activity与Fragment。但是MVC也有缺点Controller对应的是Activity,而Activity中却又具有操作UI的功能,我们在实际的项目中也会有很多UI操作在这一层,也做了很多View中应该做的事情,当然Controller中也包含Controller应该做的事情,比如各种事件的派发回调,而且在一层中我们会根据事件再去调用Model层操作数据,所以这种MVC的方式在实际项目中,Activity所在的Controller是非常重的,各层次之间的耦合情况也比较严重。 所以在这个时候我们的MVP就应运而生了,它是MVC的改良版,MVP中把Layout布局和Activity作为View层,增加了Presenter,Presenter层与Model层进行业务的交互,完成后再与View层交互进行回调来刷新UI。这样一来,所有业务逻辑的工作都交给了Presenter中进行,使得View层与Model层的耦合度降低,Activity中的工作也进行了简化。
面试官:UIL的源码熟悉吗?
我:这个源码我看过,还有volley、EventBus、等项目的源码我都有去研究过。
面试官:在项目过程中是怎么来做优化的?
我:这个优化是贯穿于整个项目中的,比如写布局的时候1、我会去考虑布局的嵌套层级,尽量多使用include、merge标签,比较linearLayout与RelativeLayout的渲染时间,使用ViewStub类等等。2、在写自定义view的时候,我会去考虑绘制优化,在onDrawe方法中不做耗时操作及新建对象。3、避免内存泄漏4、避免ANR。5、利用线程池来优化线程。6、使用一些工具如MAT来分析内存泄漏,使用traceView来查看某个方法消耗的时间等等。
面试官:那你说一下会有哪些情况导致内存泄漏、怎么来避免?
我:比如说,1、静态变量会导致内存泄漏 ,因为静态变量会持有当前类的引用,假如activity中的context对象是静态的,那么该activity就很难销毁。2、单利模式也能导致内存泄漏,如果单例持有了activity的引用的话他的生命周期是和Application保持一致的,所以activity对象无法被及时释放。3、属性动画也能引起内存泄漏,属性动画有一种无限循环动画,如果在activity中执行这种动画而又不在ondestroy方法中停止动画的话,就会引起内存泄漏。另外像线程生命周期的不可控性也会引起内存泄漏。 面对上面那些问题,维哥心中是拔凉拔凉的啊!!!(好吧,其实我是火辣辣的)还好我平时闲着蛋teng的时候喜欢看一些新的开源框架,喜欢看一些优秀的开源框架源码解析,喜欢看一些优化的博客。所以这些对于我来说那是so easy啦。哈哈哈,又得瑟了。当时那面试官听完眼睛都瞪得圆圆的,其实面试官看着跟我年纪也差不多大,我就在心里暗想这人是不是担心我进去会抢他饭碗啊。(又在YY了)面试完,他跟我说你的技术在我这边完全没有问题,接下来我们CTO还会跟你聊聊。(好吧,我就知道后面还有) step3:CTO一看就是技术大牛,人也很爽快,说话也是笑呵呵的。和他聊天非常舒适,由于他并不是做android开发的,就问了我一些关于热修复及职业生涯发展规划之类的。热修复咱们黑马的课程里面就有,所以维哥就非常完美地回答出来了,听的他也是脸上保持着衣服灿烂的。至于职业生涯发展规划,你们懂得就是从技术到管理、架构等等方向跟他乱扯一通。愉快地聊完之后,CTO应该也觉得我是个非常乐观善于沟通的人,至于技术能力前一个面试官应该也跟他说明了。 step4:最后就是HR跟我聊工资,聊为什么离职。针对为什么离职这个问题我是这么回答的——上家公司是一家很小的创业公司,从老板到员工一共就7个人。最后由于拉不到更多的投资,公司倒闭了,我只能另找工作了。(哈哈哈,是不是完美无缺,滴水不漏)他还问了一个很无语的问题,“如果工资不是很高,工作压力又大又要经常加班你是否会临阵退缩?”(废话,这种事情我会临阵退缩??我直接就不干了好不)不过我不会说的这么直接,我说这当然不会啊,我愿意为公司的发展尽我最大的努力,而且我的薪资要求也不高才18K。(估计HR听到我这句话心里是拔凉拔凉的啊)果不其然,他说他要和Boss及技术人员商量一下,结合我的技术能力到时候再通知我。 好吧,最后他们跟我来电话说他们最高能给15K,说18K太高了那个面试我android的都没有18K(果然不出我所料,哈哈哈)。不过维哥本来就没想过去他们公司上班呢。所以就以已经找到了合适的工作拒绝了他们。 其实面试很简单,今天就先给你们讲一下维哥的面试经历咯。在以后的帖子中会给大家总结一些面试的套路和方法,敬请期待吧!嘿嘿嘿
|