请选择 进入手机版 | 继续访问电脑版
JAVEN

某公司面试题以及答案

所在版块: 面试分享 2016-05-26 15:42   [复制链接] 查看: 6566|回复: 922

选择题

1Math.round(11.5)等于多少,Math.round(-11.5)等于多少( C )

A11-11

B11-12

C12-11

D12-12


2、对一些资源以及状态的操作保存,最好的保存方式是在生命周期的哪个函数中进行( A

AonPause()

BonCreate()

ConResume()

DonStart()


3、在android中使用Menu的时候,可能需要重写的方法有(多选)(AC

AonCreateOptionsMenu()

BonCreateMenu()

ConOptionsItemSelected()

DonItemSelected()


4Android中下列属于Intent的作用的是(C

A、实现应用程序间的数据共享

B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失。

C、可以实现界面间的切换,可以包含动作和动作数据,连接4大组建的纽带。

D、处理一个应用程序整体性的工作


5android 关于service生命周期的onCreate()onStartCommand()说法正确的是 (多选题) ( AD )

A、当第一次启动的时候先后调用onCreate()onStartCommand ()方法

B、当第一次启动的时候只会调用onCreate()方法

C、如果service已经启动,将先后调用onCreate()onStartCommand ()方法

D、如果service已经启动,只会执行onStartCommand ()方法,不在执行onCreate()方法


问答题
1、 请介绍下Android的数据存储方式?

1)使用SharedPreferences存储数据;它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。只能在同一个包内使用,不能在不同的包之间使用。

2)文件存储数据;文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()openFileOutput()方法来读取设备上的文件。

3SQLite数据库存储数据;SQLiteAndroid所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。

4)使用ContentProvider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。

5)网络存储数据;通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。



2、 如何优化ListView?

1Item布局复用

2、使用ViewHodler对控件进行复用

3、布局采用match_parent

4、采用分页


3、 描述Android中的4大组件有哪些,以及他们各自的特点。

  
Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
  
service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的指令,定义好需要接受的Intent提供同步和异步的接口
  
BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型
  
  



4、 请介绍下ContentProvider是如何实现数据共享的(即ContentProvider的使用步骤)?

1、创建一个ContentProvider的子类,重写其中的6个抽象方法
·2、在androidManifest.xml文件中注册Provider,并且配置<intent-filter>内容,包括action和category。
3、在需要访问Provider的地方使用getContentResolver访问。


5、注册广播有几种方式,以及说明其各自的特点。

两种。一种是通过代码注册(动态注册),这种方式注册的广播会跟随程序的生命周期。二种是在AndroidManifest.xml(静态注册)中配置广播,这种常驻型广播当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。



改错题
1、请查看下面代码,是否有错,如果错误,请指出并改正。

abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
}





2、请查看下面代码,是否有错,如果错误,请指出并改正。

public class Something {
void doSomething () {
private String s = “”;
int l = s.length();
}
}





3、请查看下面代码,是否有错,如果错误,请指出并改正。

abstract class Something {
private abstract String doSomething ();
}





4、请查看下面代码,是否有错,如果错误,请指出并改正。

public class Something {
public int addOne(final int x) {
return ++x;
}
}




5、请查看下面代码,是否有错,如果错误,请指出并改正。

public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}




6、请查看下面代码,是否有错,如果错误,请指出并改正。

class Something {
int i;
public void doSomething() {
System.out.println(“i = ” + i);
}
}




答案:

1、答案: 错。abstractmethod必须以分号结尾,且不带花括号。

2、答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。

3、答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎 么可以用private把abstract method封锁起来呢? (同理,abstract method前不能加final)。

4、答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。

5、答案: 正确。在addOne method中,参数o被修饰成final。如果在addOnemethod里我们修改了o的reference(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable (成员变量),而o的reference并没有改变。

6、答案: 正确。输出的是”i = 0″。inti属於instant variable (实例变量,或叫成员变量)。instant variable有defaultvalue。int的default value是0。

程序题
请继承SQLiteOpenHelper实现:

1).创建一个版本为1“diaryOpenHelper.db”的数据库,

2).同时创建一个 “diary” (包含一个_id主键并自增长,topic字符型100长度, content字符型1000长度)

3).在数据库版本变化时请删除diary表,并重新创建出diary





publicclass DBHelper extendsSQLiteOpenHelper{


  public final static String DATABASENAME="diaryOpenHelper.db";

  public final static int DATABASEVERSION=1;

  //创建数据库

  public DBHelper(Contextcontext,Stringname,CursorFactory factory,int version)

  {

  super(context, name, factory,version);

  }


  //创建表等机构性文件

  public void onCreate(SQLiteDatabase db)

  {

  String sql ="createtablediary"+

  "("+

  "_idinteger primary keyautoincrement,"+

  "topicvarchar(100),"+

  "contentvarchar(1000)"+

  ")";

  db.execSQL(sql);

  }


  //若数据库版本有更新,则调用此方法

  public voidonUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion)

  {

  String sql = "drop table ifexistsdiary";

  db.execSQL(sql);

  this.onCreate(db);

  }

  }

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我的博客

QQ|Archiver|手机版|小黑屋|课堂笔记  

GMT+8, 2018-12-12 10:34 , Processed in 0.091968 second(s), 30 queries .

快速回复 返回列表