程序员挑战高薪,你必须了解的十大面试题-IT蓝豹

标签: 程序员 挑战 面试 | 发表时间:2015-10-06 11:42 | 作者:wuchengyi
出处:http://www.iteye.com

1:Android中五种数据存储方式分别是什么?他们的特点?    (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中
    (2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库
    (3) File文件,通过读取写入方式生成文件存放数据
    (4) ContentProvider,主要用于让其他应用程序使用保存的数据
    (5) 通过网络获取数据和写入数据到网络存储空间    答:Android提供了五种存取数据的方式 


2:说说 android 中 mvc 的具体体现mvc是model,view,controller的缩写,mvc包含三个部分:
模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:
(1)视图(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入。
(2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写过多的代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
(3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。 


3: 简述SharedPreferences存储方式以及SharedPreferences与SQLite数据库的区别     SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能读取数据而不支持写入数据,存储修改是通过Editor对象实现。SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。
  

4:描述handler 机制的原理andriod提供了 Handler 和 Looper 来满足线程间的通信。
Handler 先进先出原则。
Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。
(1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。
(2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。
(3) Message Queue(消息队列):用来存放线程放入的消息。
(4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。
  

5:显式intent和隐式intent的区别是什么(android)答:Intent定义:Intent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。
显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。
隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。
说明:Android系统使用IntentFilter 来寻找与隐式Intent相关的对象。


6:如何优化ListView
1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。
2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。
3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。


7:简述通过contentResolver获取ContentProvider内容的基本步骤
   第一:得到ContentResolver类对象:ContentResolver cr = getContentResolver();
   第二:定义要查询的字段String数组。
   第三:使用cr.query();返回一个Cursor对象。
   第四:使用while循环得到Cursor里面的内容。


8:描述4 种 activity 的启动模式
(1)standard :系统的默认模式,一次跳转即会生成一个新的实例。假设有一个activity命名为MainActivity,执行语句:
startActivity(new Intent(MainActivity.this, MainActivity.class))后,MainActivity将跳转到另外一个MainActivity,也就是现在的Task栈里面有MainActivity的两个实例。按返回键后你会发现仍然是在MainActivity(第一个)里面。
(2)singleTop:singleTop 跟standard 模式比较类似。如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。例:当MainActivity为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。
(3)singleTask: singleTask模式和后面的singleInstance模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。这种模式相当有用,在以后的多activity开发中,经常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的activity声明为 singleTask 模式,这种问题将不复存在。
(4)singleInstance: 设置为 singleInstance 模式的 activity 将独占一个task(感觉task可以理解为进程),独占一个task的activity与其说是activity,倒不如说是一个应用,这个应用与其他activity是独立的,它有自己的上下文activity。


9:Android中如何访问自定义ContentProvider?
通过ContentProvider的Uri访问开放的数据。
(1)ContenResolver对象通过Context提供的方法getContenResolver()来获得。
(2)ContenResolver提供了以下方法来操作:insert  delete  update  query这些方法分别会调用ContenProvider中与之对应的方法并得到返回的结果。


10:android中的动画有哪几类,它们的特点和区别是什么?
答:Android中动画可以分为两大类:帧动画、补间动画
(1)补间动画:你定义一个开始和结束,中间的部分由程序运算得到。主要有:旋转、平移、放缩和渐变;AlphaAnimation(渐变型动画)、scaleAnimation(缩放型动画)、 TranslateAnimation(平移型动画)、 RotateAnimation(旋转型动画)、
(2)逐帧动画:Frame(把一连串的图片进行系列化连续播放,如同放电影的效果),它是通过播放一张一张图片来达到动画的效果;


6:如何优化ListView
1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。
2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。
3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。


7:简述通过contentResolver获取ContentProvider内容的基本步骤
   第一:得到ContentResolver类对象:ContentResolver cr = getContentResolver();
   第二:定义要查询的字段String数组。
   第三:使用cr.query();返回一个Cursor对象。
   第四:使用while循环得到Cursor里面的内容。


8:描述4 种 activity 的启动模式
(1)standard :系统的默认模式,一次跳转即会生成一个新的实例。假设有一个activity命名为MainActivity,执行语句:
startActivity(new Intent(MainActivity.this, MainActivity.class))后,MainActivity将跳转到另外一个MainActivity,也就是现在的Task栈里面有MainActivity的两个实例。按返回键后你会发现仍然是在MainActivity(第一个)里面。
(2)singleTop:singleTop 跟standard 模式比较类似。如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。例:当MainActivity为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。
(3)singleTask: singleTask模式和后面的singleInstance模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。这种模式相当有用,在以后的多activity开发中,经常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的activity声明为 singleTask 模式,这种问题将不复存在。
(4)singleInstance: 设置为 singleInstance 模式的 activity 将独占一个task(感觉task可以理解为进程),独占一个task的activity与其说是activity,倒不如说是一个应用,这个应用与其他activity是独立的,它有自己的上下文activity。


9:Android中如何访问自定义ContentProvider?
通过ContentProvider的Uri访问开放的数据。
(1)ContenResolver对象通过Context提供的方法getContenResolver()来获得。
(2)ContenResolver提供了以下方法来操作:insert  delete  update  query这些方法分别会调用ContenProvider中与之对应的方法并得到返回的结果。


10:android中的动画有哪几类,它们的特点和区别是什么?
答:Android中动画可以分为两大类:帧动画、补间动画
(1)补间动画:你定义一个开始和结束,中间的部分由程序运算得到。主要有:旋转、平移、放缩和渐变;AlphaAnimation(渐变型动画)、scaleAnimation(缩放型动画)、 TranslateAnimation(平移型动画)、 RotateAnimation(旋转型动画)、
(2)逐帧动画:Frame(把一连串的图片进行系列化连续播放,如同放电影的效果),它是通过播放一张一张图片来达到动画的效果;

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [程序员 挑战 面试] 推荐:

程序员挑战高薪,你必须了解的十大面试题-IT蓝豹

- - 行业应用 - ITeye博客
1:Android中五种数据存储方式分别是什么.     (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中.     (2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库.     (3) File文件,通过读取写入方式生成文件存放数据.

如何面试程序员?

- bluesnail - 阮一峰的网络日志
你要面试一个程序员,应该问他什么问题. 有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人. 众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章. 首先,最重要的是,你自己一开始就应该想清楚:. 哪些途径和方法可以发现这样的人. 只有明确这些根本性的问题,才能正确高效地完成面试.

“火柴棍式”程序员面试题

- Hao - 酷壳 - CoolShell.cn
有时候,有些面试题是很是无厘头,这不,又有一个,还记得小时候玩的的“火柴棍游戏”吗,就是移动一根火柴棍改变一个图或字的游戏. 程序面试居然也可以这么玩,看看下面这个火柴棍式的程序面试题吧. 下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案.

ABC: Always Be Coding——程序员面试必读

- - 36氪 | 关注互联网创业
@guitardave24">David Byttow是一名程序员,曾在Google和Square等公司工作过. 在正文之前,先让我们回答几个简单的问题:第一,你面试过多少家公司;第二,这些公司中,录取你的有多少. 记下这两个数字,然后代入下面这个算式中(为我自己发明,仅供参考,不具有其他意义):.

如何面试一名程序员?

- - 标点符
STAR面试法中“STAR”是SITUATION(背景)、TASK(任务)、ACTION(行动)和RESULT(结果)四个英文字母的首字母组合. 在招聘面试中,仅仅通过应聘者的简历无法全面了解应聘者的知识、经验、技能的掌握程度及其工作风格、性格特点等方面的情况. 而使用STAR技巧则可以对应聘者做出全面而客观的评价.

程序员面试中什么最重要?

- - CSDN博客研发管理推荐文章
相信和不少朋友一样,有了几年工作经验成为Senior后就开始了面试别人的经历. 我在最初这个阶段只是按照自己的想象把“找到基础好的程序员”、“找到算法能力优秀的程序员”、“找到有Android开发经验的程序员”等作为面试的目标. 但是, 实际的经历告诉我,尤其是按“基础好”,“算法好”这些目标招到的人最终效果并不好.

程序员的10大成功面试技巧

- - ITeye博客
1.给自己写一份非常专业的简历.   我的建议是,如果你想增加自己的入选机会,那最好还是花点钱制作一份专业的简历. 相较于你将来可能得到的巨大收获,这真的只是一个小小的投资.   当我联系程序员来面试的时候,我总是会事先发电子邮件给他,并附上我的名字和博客地址. 但是让我惊讶的是,当我给他面试的时候,他竟然对我还是一无所知.

[原]程序员如何快速准备面试中的算法

- - 结构之法 算法之道
    程序员如何快速准备面试中的算法.     我决定写篇短文,即为此文. 之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法. 尽管在 微博上简单梳理过,如下图所示:.     但因字数限制,特撰此文着重阐述下:程序员如何快速准备面试中的算法,顺便推荐一些相关的书籍或资料.

10个我最喜欢问程序员的面试问题

- - 博客园_新闻
英文原文: 10 Programmer Interview Questions I’d like to be asked . 最近我拜读很多文章,都是介绍面试问题的,我真心不理解,面试官代表公司想要聘用的是最优秀的程序员,那就意味着需要想出一些有意义的面试问题. 如果你就提一些毫无用处的垃圾问题,那么很容易遗漏很多能干的程序员.

招聘面试程序员的一些心得

- - 博客园_新闻
最近雅虎北研解散的消息触动了各大互联网公司 HR 的神经. 公司里一下子面试的任务多了起来. 正好借机会总结一下自己毕业后作面试官以来参与若干场技术面试的一点心得,分享一下. 当好一个面试官其实也很不容易,不但要练就一双火眼金睛,把优秀的人才和水货在短短的面试的几十分钟里分辨出来,同时面试官本身就是候选人观察公司的一个窗口.