[面经]腾讯一面
昨天晚上在图书馆自习。突然接到了来自广东深圳的电话,想到了是腾讯打来的,内心非常忐忑。接上了。
面试官一听就是广东人。人非常好。
就问我能不能进行大概二十分钟的面试。我说能够。然后就開始了。首先让我自我介绍,我就简介了一下自己,说到了自己的技术经历。然后他问我说看到简历上有写创业经历,好像面试官对于这段经历非常感兴趣,大概聊了几分钟。详细就不说了。
然后就说能帮我推荐到虚拟现实部门。我说不用。想先做好移动开发。然后他又问我实验室负责人的一些事项。问我给实验室成员讲课从头到尾是怎样进行的。
我给他详细说了下流程,怎样准备,上课的思路。之后就開始环绕项目来说了,他问我简历里面的一个项目,寻书,是怎样的一个应用。
我就说了一下大概是什么应用。然后问我团队分工。然后问我在里面负责哪些工作,我说了自己写的部分,当中有注冊登陆,他就问我注冊登陆怎样实现,有没有使用开源的库。
我说没有,基本都是自己的逻辑实现的。先写好界面。用户输入的一些边界条件的推断。利用SharedPreference实现应用的自己主动登录。然后他问我SharedPreference的底层实现,我说是存在本地。详细的没有了解过。他说怎样实现username和password传到server,我说我用到是第三方的封装好的server接口,比較简单。那他问我你写的全部的都仅仅是用的接口吗,我说我写新闻client的是从server端获取数据。使用Http协议。
利用 Gson进行解析。将数据显示在ListView上。接着他问你实用到什么开源框架吗?我说XUtils,那你了解过源代码实现吗?我说大概了解过,然后说了一下XUtils的一些源代码,通过注解方式等。接着他问那你了解过内存泄漏吗?我说了解,就是无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放。从而造成的内存空间的浪费。
然后紧张了,就把Android的OOM给扯出来了,然后他提示我仅仅是问我内存泄漏。接着问我对于GC有什么理解吗?我晚上刚准备看GC,没来得及看,就仅仅能说了解一点点。然后说了解Java中的强软弱虚引用,并且自Android2.3之后谷歌官方不再推荐使用软引用。非常easy被垃圾回收。接着他问我平时是怎么学习Java的,我说看经典的书籍,比方《Java编程思想》、《EffectiveJava》等。还有就是多写代码,看别人的博客,看一些设计模式,提高自己的代码质量。接着他问那你了解哪些设计模式,我说单例,工厂,策略等。那你说说单例模式吧,我说了一下单例模式的简单实现,然后说我看网上一种比較好的方式是用到内部类来实现单例,能够避免线程安全等问题。
然后他问我为什么会有线程安全问题,我说须要同一时候须要保证getInstance是同步的,否则不同的线程会导致多个实例的创建。违背了单例模式的设计思想。接着他问你对图片缓存了解多少?我说我在做新闻client的时候用到了三级缓存,然后用的是谷歌推荐的LruCache,最久近期未使用算法。他问我你了解LruCache底层吗。我说了解,是用LinkedHashMap来实现的,维护着一个执行于全部条目的双重链接列表。当内存超出预定值。就会将最久未使用的对象回收掉。同一时候我在应用中为了提高性能。还用到了图片压缩,由于图片的清晰度是足够的,用的BitmapFactory.Options来进行压缩。接着他问我看你简历上攻克了事件分发,你能说说怎么解决的吗,我说到我用的UI框架是RadioButton+ViewPager+SliidingMenu。当我滑动ViewPager的时候,SlidingMenu就会被划出来。那么我就重写了ViewPager,将onTouch()返回false。
还有就是实现右滑返回的时候,我写Demo的时候没有问题。可是用到实际project中子view有ListView的时候就会将事件分发下去,右滑就没有响应了,我查阅资料,原来是事件分发的原理,我接着详细和面试官讲了一下事件分发。包含那三个重要的方式。事件分发,事件拦截等,详细的分发机制说了一下。说得不错。所以我就在onInterceptTouchEvent里面加入了onTouch方法。无论有没有拦截,都能够实现右滑返回。
面试官说基本完了,还有什么要问我的吗我就问他安卓方面怎样向架构师发展,他说太宽泛,一时说不清晰。接着问了些招聘的事情,他说了非常多。
详细就不说了,基本情况大家也都知道。看了下时间30分钟多一点。
基本就是这样,问的非常基础非常深。
学习还是要扎实~