2016年 1月 面试题



1月12日面试总结

1,​​你们整个项目是基于什么框架搭建的?(直接蒙蔽了,不过我还算淡定一些的)

mvc

MVC(Model_view_contraller)”模型视图控制器”。 MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Contro ​

1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对Android了解的比较的多了话,就一定可以想到在android中也可以使用JavaScript+html等的方式作为view层,当然这里需要进行Java和javascript之间的通信,幸运的是,android提供了它们之间非常方便的通信实现。

2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

2,说说内存泄漏怎么处理?

a) 查询数据库没有关闭游标

b) 构造Adapter时,没有使用缓存的 convertView

c) Bitmap对象不在使用时调用recycle()释放内存

d) 不用的对象没有及时释放对象的引用

  1. android内存的优化

答:android内存泄露容易导致内存溢出,又称为OOM。

Android内存优化策略:

1)在循环内尽量不要使用局部变量2)不用的对象即时释放,即指向NULL

3)

数据库的cursor

即时关闭。4)

构造adapter

时使用缓存contentview

5)

调用registerReceiver()后

在对应的生命周期方法中调用unregisterReceiver()

6)即时

关闭InputStream/OutputStream。

7)

android系统

给图片分配的内存只有8M

, 图片尽量使用软引用, 较大图片可通过BitmapFactory

8)

尽量避免static成员变量引用资源耗费过多的实例。

  1. 加载大图片的时候如何防止内存溢出

答:

android系统

给图片分配的内存只有8M

,当加载大量图片时往往会出现OOM。

Android加载大量图片内存溢出解决方案:

1)

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存

,可以通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source

2)

使用BitmapFactory.Options对图片进行压缩

InputStream is = this.getResources().openRawResource(R.drawable.pic1); BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds = false; options.inSampleSize = 10; //width,hight设为原来的十分一

Bitmap btp =BitmapFactory.decodeStream(is,null,options); 3)运用Java软引用,进行图片缓存,将需要经常加载的图片放进缓存里,避免反复加载

及时销毁不再使用的Bitmap对象

if(!bmp.isRecycle() ){ bmp.recycle() //回收图片所占的内存

system.gc() //提醒系统及时回收

}

3,socket通信是否运用过?(这家公司就是做通信相关的产品,结果我不了解也没接触过这块)​

4,android存储有哪些?具体述说下?(这都对答自如,因为昨天晚上看了并且之前项目中也用的过)​

SharedPreferences方式

用来存储”key-value paires”格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型,可以通过它保存一些上次用户所做的修改操作

文件存储方式

它通过FileInputStream和FileOutputStream对文件进行操作。但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件,如果要共享数据就用Content Providers

SQLite数据库方式

Android提供的一个标准的数据库,支持SQL语句

内容提供器(Content provider)方式

是所有应用程序之间数据存储和检索的桥梁,它的作用是使得各个应用程序之间实现数据共享

网络存储方式

通过网络来存储和获取数据

5,数据存储你是用的框架还是自己写的?(我说是自己写的,然后就问我怎么避免内存泄漏,我直接答在查询或者操作完的地方关闭cursor游标,然后面试官有深入的问 具体怎样避免呢?)​

6,网络请求数据你是用的框架还是自己的?(我说用自己封装好的,他又问我:你能说下怎么避免发生请求数据异常或者数据泄漏吗)​

7,​你的职业规划是?

跟随公司晋升自己的职位,或者一直从事技术方面的工作 不断地成长为技术大牛​

8,​多线程问题?同时下载会出现的问题有哪些?

9,AIDL的全称是什么?如何工作?能处理哪些类型的数据?

AIDL全称Android Interface Definition Language(AndRoid接口描述语言)是一种借口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.理论上, 参数可以传递基本数据类型和String, 还有就是Bundle的派生类, 不过在Eclipse中,目前的ADT不支持Bundle做为参数,

​10,HashMap与HashSet的区别?

Set的集合里不允许对象有重复的值,List允许有重复​,

什么是HashSet

HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。

什么是HashMap

HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许重复的键。Map接口有两个基本的实现,HashMap和TreeMap。TreeMap保存了对象的排列次序,而HashMap则不能。HashMap允许键和值为null。HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map。

public Object put(Object Key,Object value)方法用来将元素添加到map中。

你可以阅读这篇文章

看看HashMap的工作原理,以及这篇文章看看HashMap和HashTable的区别

hashmap与hashset的区别

40 描述一下android的系统架构

android系统架构分从下往上为Linux 内核层、运行库、应用程序框架层、和应用程序层

linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。

libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责 android网页浏览器的运行,例如标准的c函数库libc、openssl、sqlite等,当然也包括支持游戏开发2dsgl和 3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等众多的多媒体文件格式。android的runtime负责解释和执行生成的dalvik格式的字节码。

applicationframework(应用软件架构),java应用程序开发人员主要是使用该层封装好的api进行快速开发。

applications:该层是java的应用程序层,android内置的googlemaps、e-mail、即时通信工具、浏览器、mp3播放器等处于该层,java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。

  上面的四个层次,下层为上层服务,上层需要下层的支持,调用下层的服务,这种严格分层的方式带来的极大的稳定性、灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发。

android应用程序使用框架的api并在框架下运行,这就带来了程序开发的高度一致性,另一方面也告诉我们,要想写出优质高效的程序就必须对整个 applicationframework进行非常深入的理解。精通applicationframework,你就可以真正的理解android的设计和运行机制,也就更能够驾驭整个应用层的开发。

  1. SQLite支持事务吗? 添加删除如何提高性能?

    SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考虑通过原始经过优化的SQL查询语句方式处理。

1, 联想公司android面试题
点击查看
2,2016年1月Android最新面试题汇总
点击查看

1月15日面试题:

1)android与js交互用到的方法和具体实现?

2)推送分为群推送,个推送,指定推送,你具体描述下?

3)做下自我介绍?

4)为什么从上家公司离职?

5)xutils有哪些框架,说说具体你用过哪些,说下Httputils底层采用什么方式请求数据的?

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭