javaandroid的面试题都是亲身经历的文档格式.docx

上传人:b****6 文档编号:20332235 上传时间:2023-01-22 格式:DOCX 页数:14 大小:29.92KB
下载 相关 举报
javaandroid的面试题都是亲身经历的文档格式.docx_第1页
第1页 / 共14页
javaandroid的面试题都是亲身经历的文档格式.docx_第2页
第2页 / 共14页
javaandroid的面试题都是亲身经历的文档格式.docx_第3页
第3页 / 共14页
javaandroid的面试题都是亲身经历的文档格式.docx_第4页
第4页 / 共14页
javaandroid的面试题都是亲身经历的文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

javaandroid的面试题都是亲身经历的文档格式.docx

《javaandroid的面试题都是亲身经历的文档格式.docx》由会员分享,可在线阅读,更多相关《javaandroid的面试题都是亲身经历的文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

javaandroid的面试题都是亲身经历的文档格式.docx

指示信息--表示请求已接收,继续处理

2xx:

成功--表示请求已被成功接收、理解、接受

3xx:

重定向--要完成请求必须进行更进一步的操作

4xx:

客户端错误--请求有语法错误或请求无法实现

5xx:

服务器端错误--服务器未能实现合法的请求

Intent的基本用法

Intent主要用来在各个界面之间实现跳转及数据传递等意图,也可用来访问android系统提供一些功能。

Intentintent=newIntent();

intent.setClass(this,OtherActivity.class);

this.startActivity(this);

还可以用来得到界面之间的返回值,然后从中取出Boundle对象。

进行数据的处理等。

SurfaceView编写简单的开发框架

publicclassGameSurfaceViewextendsSurfaceView 

 

implementsSurfaceHolder.Callback

{

publicGameSurfaceView(Contextcontext)

{

super(context);

//实例化SurfaceHolder

SurfaceHolder 

mSurfaceHolder=this.getHolder();

//添加回调

mSurfaceHolder.addCallback(this);

this.setFocusable(true);

}

//在surface的大小发生改变时激发

publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight)

//在surface创建时激发

publicvoidsurfaceCreated(SurfaceHolderholder)

//在surface销毁时激发

publicvoidsurfaceDestroyed(SurfaceHolderholder)

}

把apk文件安装到手机上

adbinstallc:

\abc.apk

Handler机制的简单原理

因为androidUI界面不是线程安全的,不允许子线程更新主UI线程,为了达到主界面的更新操作,此时便有了Handler对象,handler对象首先在主界面中进行声明,并覆盖其中的handlMessage(msg)方法。

该方法用来接收子线程传递来的Message对象。

子线程启动后,首先创建Message对象。

然后将待发送的数据放入Message对象中,并使用handler的sendMessage(msg)来发送msg对象,发送成功够,handleMessage(msg)拿到msg对象,并用这个msg对象里面的数据来在主线程中更新手机界面。

创建数据库的过程,使用SQLiteOpenHelper实现。

privatestaticclassDBOpenHelperextendsSQLiteOpenHelper{

publicDBOpenHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){

super(context,name,factory,version);

}

privatestaticfinalStringDB_CREATE="

createtable"

+DB_TABLE+"

("

+KEY_ID+"

integerprimarykeyautoincrement,"

+KEY_NAME+"

textnotnull,"

+KEY_AGE+"

integer,"

+KEY_HEIGHT+"

float);

"

;

@Override

publicvoidonCreate(SQLiteDatabase_db){

db.execSQL(DB_CREATE);

调用getReadableDatabase()或getWriteableDatabase()方法,你可以得到SQLiteDatabase实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

db.execSQL("

CREATETABLEmytable(_idINTEGERPRIMARYKEY

AUTOINCREMENT,titleTEXT,valueREAL);

);

INSERTINTOwidgets(name,inventory)"

+"

VALUES('

Sprocket'

5)"

ContentValuescv=newContentValues();

cv.put(Constants.TITLE,"

exampletitle"

cv.put(Constants.VALUE,SensorManager.GRAVITY_DEATH_STAR_I);

db.insert("

mytable"

getNullColumnHack(),cv);

Cursorc=db.rawQuery(

SELECTnameFROMsqlite_masterWHEREtype='

table'

ANDname='

mytable'

null);

不管你如何执行查询,都会返回一个Cursor,这是Android的SQLite数据库游标,使用游标,你可以:

通过使用getCount()方法得到结果集中有多少记录;

通过moveToFirst(),moveToNext(),和isAfterLast()方法遍历所有记录;

通过getColumnNames()得到字段名;

通过getColumnIndex()转换成字段号;

通过getString(),getInt()等方法得到给定字段当前记录的值;

通过requery()方法重新执行查询得到游标;

通过close()方法释放游标资源;

例如,下面代码遍历mytable表

Cursorresult=db.rawQuery("

SELECTID,name,inventoryFROMmytable"

result.moveToFirst();

while(!

result.isAfterLast()){

intid=result.getInt(0);

Stringname=result.getString

(1);

intinventory=result.getInt

(2);

result.moveToNext();

}

result.close();

什么是流?

字节流与字符流的区别?

流是个抽象的概念,当程序需要从某个数据源读入数据的时候,就会开启一个数据流,数据源可以是文件、内存或网络等等。

相反地,需要写出数据到某个数据源目的地的时候,也会开启一个数据流,这个数据源目的地也可以是文件、内存或网络等等。

这个时候,你就可以想象数据好像在其中流动一样。

FileInputStream

FileOutputStream(f,true)

ObjectInputStream序列化

BufferedReaderreadline缓冲区

ByteArrayInputStreamtoByteArray()

BufferedInputStream字节流和字符流之间的桥梁

InputStreamReader和InputStreamWriter

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。

String,StringBuffer与StringBuilder的区别?

?

String字符串常量

StringBuffer字符串变量(线程安全)

StringBuilder字符串变量(非线程安全)

String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String。

而如果是使用StringBuffer类则结果就不一样了,每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。

StringBuffer上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。

每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。

append方法始终将这些字符添加到缓冲区的末端;

而insert方法则在指定的点添加字符。

在大部分情况下StringBuilder>

StringBuffer

Java中线程实现的两种方法?

线程的基本状态以及他们之间的关系?

方法一:

继承自Thread类方法二:

实现Runnable接口

状态:

就绪,运行,synchronize阻塞,wait和sleep挂起,结束。

wait必须在synchronized内部调用。

调用线程的start方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞转为运行,在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态。

两个Activity之间怎么传递数据?

通过intentputExtra 

方法基本数据类型都传递

Bundlebundle=new 

Bundle();

 

bumdle.putShort(key,value);

intent.putExtras(bundle);

获取到激活他的 

getIntent();

Intentintent=getIntent();

Bundlebundle=intent.getExtras();

intent.getStringExtra("

key"

"

value"

android中Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:

AndroidUI操作并不是线程安全的,并且这些操作必须在UI线程中调用。

 Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。

1,利用invalidate()刷新界面

  实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;

而在线程中通过sendMessage发送界面更新消息。

2,使用postInvalidate()刷新界面

使用postInvalidate则比较简单,不需要handler,直接在线程中调用postInvalidate即可。

MVC的理解

M:

Model模型

V:

View视图

C:

Controller控制器

Menu

MenuItemdeleteMenu=menu.add(1,2,3,”删除联系人”);

1表示序号2表示编号3表示排序

冒泡排序

publicclassMp{

publicstaticvoidmain(String[]args){

int[]age=newint[]{3,0,87,98,45,2345,6};

for(intj=0;

j<

age.length;

j++){

for(inti=0;

i<

age.length-1;

i++){

if(age[i]>

age[i+1]){

mid=age[i+1];

age[i+1]=age[i];

age[i]=mid;

System.out.println(age[i]);

JAVA多线程编程。

用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。

publicclassDxc{

publicstaticvoidmain(String[]args){

System.out.println("

计算开始了"

Xnum=newX();

num.x=5;

ThreadjiaThread=newJia(num);

jiaThread.setPriority(Thread.MAX_PRIORITY);

jiaThread.start();

加法执行完了"

ThreadjianThread=newJian(num);

jianThread.start();

System.out.println("

减法执行完了"

classX{

intx;

classJiaextendsThread{

Xnum=newX();

publicJia(Xnumber){

super();

this.num=number;

publicvoidrun(){

for(inti=1;

10;

i=i+2){

num.x++;

try{

Thread.sleep(1000);

System.out.println("

x++"

+num.x);

}catch(Exceptione){

e.printStackTrace();

}

classJianextendsThread{

publicJian(Xnumber){

this.num=number;

num.x--;

try{

Thread.sleep(1000);

System.out.println("

x--"

}catch(Exceptione){

e.printStackTrace();

}

}

JDBC的连接

Class.forName("

com.mysql.jdbc.Driver"

Stringurl="

jdbc:

mysql:

//localhost:

3306/数据库"

Connectionconn=DriverManager.getConnection(url,"

用户名"

密码"

if(conn==null)System.out.println("

连接失败"

elseSystem.out.println("

连接成功"

游标

一个游标(cursor)可以被看作指向结果集(asetofrows)中一行的指针(pointer)。

游标每个时间点只能指向一行,但是可以根据需要指向结果集中其他的行。

gc()与finalize的区别

其工作原理:

一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。

所以如果用finalize()就能在垃圾回收时刻做一些重要的清理工作。

而System.gc()则是启动一个垃圾回收器,在释放new分配内存空间之前,将会通过finalize()释放用其他方法分配的内存空间(如本地方法调用C中用new分配的内存空间)。

静态

中国十六亿人有一个共同的属性,那就是中国人,然后有一天,胡锦涛把国籍改成了美国,然后十六亿人的国籍都跟着改变了。

多态

父类的引用指向子类的对象

编译的时候看引用执行的时候看对象。

封装

考虑到代码的安全性,类成员变量不应被直接被访问,应该声明成private;

小王在atm机取钱、火车拉货

public和private,protected作用域范围

public公共的。

权限最大,外界可以引用

private私有的。

只能被本类自己调用,类外都不可以调用,子类也不可以

protected受保护的。

只能被子类(子类可以在其他包下面)或者同一个包下的其他类引用。

其他的都不可以

抽象类的概念

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。

并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

比如:

如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。

正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。

ArrayList,Vector,HashTable,Hashmap区别

ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而ArrayList和HashMap并不是线程安全的。

因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList和HashMap

Collection是List和Set两个接口的基接口

List在Collection之上增加了"

有序"

Set在Collection之上增加了"

唯一"

而ArrayList是实现List的类...所以他是有序的.

它里边存放的元素在排列上存在一定的先后顺序

而且ArrayList是采用数组存放元素另一种ListLinkedList采用的则是链表

编程:

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。

但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

publicstaticStringmSubString(Stringstr,intbyteCount){

for(inti=0;

byteCount;

if((str.charAt(i)+"

).getBytes().length>

1)

byteCount--;

returnstr.substring(0,byteCount);

Android的存储方式有哪些

Android提供了5种方式存储数据:

  

(1)使用SharedPreferences存储数据;

它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。

只能在同一个包内使用,不能在不同的包之间使用。

  

(2)文件存储数据;

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

  (3)SQLite数据库存储数据;

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

  (4)使用ContentProvider存储数据;

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

  (5)网络存储数据;

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

android和i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1