经朋友推荐,昨天下午去网易杭州公司参加了考拉海淘android客户端的面试。今天回忆一下面试题目,做个整理进行备案。

1、说说JVM垃圾回收机制。

1.1、画了JVM分代回收的图,大致说了下垃圾分代回收的机制,并且说了年轻代和年老代GC的算法分别是“停止-复制”法和“标记-整理”法。

1.2、这时面试官问我年轻代中survivor0和survivor1之间的复制是如何进行的?我说当survivor0区域也满了的时候,仍然存活下来的对象直接复制到survivor1中,这个答案他并不满意,不过我也说不出具体复制的策略,所以这个问题翻篇了。

1.3、面试官又问我你觉得这三个内存区里哪几个可能会发生内存溢出?我说方法区不可能,年老代会发生内存溢出。他反问我年轻代不会发生内存溢出吗?我急忙说也会。。。其实仔细想想三个区都有可能发生内存溢出。

1.4、方法区中的static变量什么时候分配内存什么时候被回收?分配是在类加载的时候,回收是在该类的Class对象被回收了,static变量才会被回收,因为static变量始终会有一个Class 对象的句柄指向它,static变量是属于类级别的。

参考资料。

2、让我选自己做过的项目中的一个,问我这个项目涉及到哪些安卓相关技术?

我选了自己最有把握的一个,说涉及到的安卓相关技术有Activity.....没说完,他就让我说一下Activity的生命周期,我画了个完整的Activity生命周期图。他问我如果一个位于前台的Activity,执行finish方法,会触发哪些生命周期的方法?我说OnPause()->OnStop()->OnDestory()。然后他让我再说一下Activity的启动模式。。对于singleInstance这种启动模式我没解释清楚,其实也是没有理解。

参考资料。

3、遇到过ANR吗?

Android not responding。我说在主线程中进行比较耗时的操作会造成ANR,比如网络请求和数据库操作等耗时的操作,给用户一种界面假死的错觉。如何解决ANR?将耗时的操作放在子线程中执行,通过handler来实现主线程和子线程的通讯,比如对UI界面进行刷新。

4、安卓网络请求的方式?

主要有两个类来完成,一个是HttpURLConnection,另一个是HttpClient。他问我我这个项目中的网络请求是怎么实现的?我说通过开启一个子线程来完成网络请求操作,用HttpClient来执行HttpPost对象以实现http post请求,当服务器端成功返回数据后,将返回的json格式的数据封装成json类,然后用主线程的handler执行sendMessage(Message msg)方法,主线程中handler执行handleMessage(Message msg)方法对json类进行处理。另一个面试官问到handler是在哪个线程中执行的?我回答道是主线程。他又说handler可能导致内存泄漏,你如何解决?我说道可以在Activity的OnDestory()方法中加入handler.removecallbacks(Runnable Thread)来结束线程。

5、多线程并发问题,如何实现同时从服务器端下载20张图片(不用异步下载的框架,就用handler实现)?

1、第一种方法效率比较低:开启20个下载图片的线程,每个线程下载完毕后用,创建一个Message msg = handler.obtainMessage(id,bitmap)(hanlder为主线程的中定义的handler),然后handler.sendMessage(msg);主线程中handler.handleMessage(Message msg)根据msg的id,将bitmap赋予对应的imageView;

2、显然第一种方法虽然实现了线程并发,但要开启20个线程,显然占用很大的系统资源和内存,容易出现OOM。下面说一下一个带有下载功能的缓存框架的实现思路:

2.1、将url和imageView封装成一个类叫做ImageRef.

2.2、定义一个图片加载栈mImageStack,一个请求更新UI的队列mImageQueue.

2.3、下载20个图片,可以用一个循环依次将20个封装好的ImageRef对象加入到mImageStack中.

2.4、定义一个加载图片的handler,实现图片下载。

2.5、如果handler为空,则创建一个HanlderThread,并将其Looper给予handler,由handler来负责处理Looper从该线程中抽取的Message。

2.6、从mImageStack中pop一个imageRef,handler.sendMessage(new Message(id,imageRef)),handler.handleMessage(Msg)在handler线程中下载图片,下载得到bitmap后,由ui线程的handler,取名为handler2发送封装了bitmap的message.并且将用来标记图片加载线程是否可用的isLoading设置为false,表示图片加载线程不可用。

2.7、在handler2.handleMessage(Message msg)中从mImageQueue中取出对头元素imageRef,然后更新其中的mageView,并将isLoading设置为ture.

2.8、重复第6步。

6、项目中有没有自定义的view?

我说了两个,一个是首页的瀑布流效果的scrollView,是由左右两个LinearLayout实现的;还有一个是流布局FlowLayout,这个view其中有一个面试官问我是继承自哪个类的,我说是LinearLayout,他说应该是ViewGroup。回来一看还果真是ViewGroup,确实牛。。。

7、知道的设计模式有哪些?

有两类,一类是创建者模式,还有一类是结构型模式。创建者模式:多个方法工厂模式、静态方法工厂模式、抽象方法工厂模式、单例模式、原型模式;结构型模式:装饰器模式、适配器模式和代理模式。然后他问我知道观察者模式吗?这个。。。我知道在ContentProvider中的运用,并不知道其实现原理。然后起身走开,让我单独写一下观察者模式的结构。。。

详情点击。

安卓中的设计模式。

2015年网易考拉海淘android面试的更多相关文章

  1. 网易考拉Android客户端网络模块设计

    本文来自网易云社区 作者:王鲁才 客户端开发中不可避免的需要接触到访问网络的需求,如何把访问网络模块设计的更具有扩展性是每一个移动开发者不得不面对的事情.现在有很多主流的网络请求处理框架,如Squar ...

  2. megalo -- 网易考拉小程序解决方案

    megalo 是基于 Vue 的小程序框架(没错,又是基于 Vue 的小程序框架),但是它不仅仅支持微信小程序,还支持支付宝小程序,同时还支持在开发时使用更多 Vue 的特性. 背景 对于用户而言,小 ...

  3. 考拉Android统一弹框

    作者:钱成杰 背景 在快速开发的背景下,经历了n个版本后的考拉Android App中已经存在了各种各样看似相同却各有差别的弹框样式.其中包括系统弹框和自定义弹框,并且在线上时常会出现IllegalA ...

  4. 阿里、腾讯、百度、网易、美团Android面试经验分享,拿到了百度、腾讯offer

    基本情况 2021届普通本科,Android开发岗. 此文主要是2020年秋招面试经验汇总,最终拿到了百度.腾讯的offer. 主要包括阿里三面,腾讯四面,百度三面,网易三面,美团一场面完. 阿里(由 ...

  5. 考拉定时任务框架kSchedule

    此文已由作者杨凯明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.背景 目前项目中使用的定时任务框架存在下面这些问题 没有统一的定时任务管理平台 目前项目中使用定时任务的 ...

  6. 百度的android面试总结分析

    今天就是今天上午10点,我接到了百度的电话面试,当然提前和我说了,我的拖延症是有多强烈,以至于我没怎么准备,当然我也想着看看自己的真实水平,在此检讨一下!!!!!!!!!!!!!!!!!!!!!!!! ...

  7. Android面试优雅地介绍自己的项目

    本文转载:m.blog.csdn.net/iamsamzhang/article/details/51916584 先说句题外话,很多公司16年秋招的内推已经开始啦,我目前知道的在北京有网易.百度和微 ...

  8. 只要套路对,薪资直接翻一倍!保姆级Android面试葵花宝典,肝完面试犹如开挂

    跳槽,这在 IT 互联网圈是非常普遍的,也是让自己升职加薪,走上人生巅峰的重要方式.那么作为一个普通的Android程序猿,我们如何才能斩获大厂offer 呢? 疫情向好.面试在即,还在迷茫踌躇中的后 ...

  9. Android面试一天一题(1Day)

    写在前面 该博客思路源于在简书看到goeasyway博主写的Android面试一天一题系列,无copy之意,仅为让自己总结知识点,成长一点点.先感谢各位大神的无私分享~! 关于题目,大部分则出自And ...

随机推荐

  1. AngularJS中的控制器示例

    <!doctype html> <html ng-app="myApp"> <head> <script src="C:\\Us ...

  2. hdu 2473 Junk-Mail Filter

    http://acm.hdu.edu.cn/showproblem.php?pid=2473 并查集设置虚拟父节点. #include <cstdio> #include <cstr ...

  3. AltiumDesignerSummer9Build9.3.1.19182破解图文教程

    一.下载 AltiumDesignerSummer9Build9.3.1.19182 下载地址 http://www.verycd.com/topics/2769819/ 二.安装 一路确定啥的傻瓜式 ...

  4. 使用ownCloud搭建你的个人云服务(ubuntu 14.04 server)(ownCloud对文件不切片,Seafile对文件切片),owncloud没有存储的功能 只能同步 本地删除了服务器也会删除

    ownCloud是什么 ownCloud是一个自由且开源的个人云存储解决方案(类似百度网盘或者Dropbox),包括两个部分:服务器和客户端. ownCloud在客户端可通过网页界面,或者安装专用的客 ...

  5. hadoop 2.3 集群总结

    用了近两个礼拜的摸索终于搭建好了hadoop集群,测试性能也符合预期. centos6.4下hadoop2.3集群总结如下: 关于环境的设置: 1.关闭selinux (反复折腾了好多次) vi /e ...

  6. 【转】ubuntu下安装及设置FTP服务器!!

    原文网址:http://hujizhou.blog.51cto.com/514907/1290915 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...

  7. 【czy系列赛】czy的后宫6 && bzoj1044 [HAOI2008]木棍分割

    题目描述 众所周知的是丧尸czy有很多妹子(虽然很多但是质量不容乐观QAQ),今天czy把n个妹子排成一行来检阅.但是czy的妹子的质量实在--所以czy看不下去了.检阅了第i个妹子会增加czy a[ ...

  8. /etc/fstab 文件详解 及 /etc/mtab

    /etc/fstab 文件解释 文件fstab包含了你的电脑上的存储设备及其文件系统的信息.它是决定一个硬盘(分区)被怎样使用或者说整合到整个系统中的唯一文件. 这个文件的全路径是/etc/fstab ...

  9. 微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记

    微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记 微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏 之前有写过几篇关于微信内置浏览器(WebView) ...

  10. PPT去掉图片白色背景

    双击图片,点击菜单栏“删除背景”,用矩形框选中想要的区域,然后将鼠标焦点移到图片外,单击鼠标即可.