java_android面试题整理_第1页
java_android面试题整理_第2页
java_android面试题整理_第3页
java_android面试题整理_第4页
java_android面试题整理_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深圳东方拓宇-笔试题目1、如果定义一个 Test 类,那么 Test.class 是什么,Test.class.getInstance(仅是什么?Test.class 是编译之后生成的类文件,Test,.class.getInstance()是获得这个类的实例。2、重载、重写、隐藏的区别。方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载 Overloading 是一个类中多态性的一种表现。父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。3、J

2、ava 如何封闭多态?封装-也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中, 才可以访问其内部状态。 每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。多态性一组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。继承性-允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组, 而且还可以定义新类为现存的类的扩展, 这样就可以将类组织成树形或网状结构,这体现了动作的通用性4、Linux 命令 cd.和 cd.的区别。#cd/

3、第一级目录/第二级目录;进入 root 目录下的/第一级目录/第二级目录#cd./第一级目录/第二级目录;进入当前目录下的/第一级目录/第二级目录5、编写代码:定义一个子线程,在子线程中返回一个“ok”消息到主线程。importjava.util.concurrent.*;/*Java 线程:有返回值的线程*/publicclassTestpublicstaticvoidmain(String 口 args)throwsExecutionException,InterruptedException创建一个线程池ExecutorServicepool=Executors.newFixedThre

4、adPool(2);/创建 1 个有返回值的任务Callablec1=newMyCallable(OK);/做行任务并获取 Future 对象Futuref1=pool.submit(c1);从 Future 对象上获取任务的返回值,并输出到控制台System.out.println(f1.get().toString();关闭线程池 pool.shutdown();classMyCallableimplementsCallableprivateStringoid;MyCallable(Stringoid)this.oid=oid;OverridepublicObjectcall()throw

5、sExceptionreturnoid;6、你用过的设计模式及其使用范围。1.factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。2.singleton 单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的单一实例”的需求时才可使用。7、什么是 JNI。JNI是JavaNativeInterface的缩写,中文为JAVA本地调用。从Java1.1开始,JavaNativeInterfa

6、ce(JNI)标准成为java平台的一部分, 它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C+而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。8、Service 是单例的吗?是的。使用单例的优点:只用一个实例,不需要重复 new 一个对象,浪费资源。单例的缺点,一般无法继承,需要做好同步以免多线程访问产生问题,9、Handle 机制。消息机制,1、handler 应该由处理消息的线程创建。2、handler 与创建它的线程相关联,而且也只与创建它的线程相关联。handler 运行在创建它的线程中,所以,如果在handler 中进

7、行耗时的操作,会阻塞创建它的线程。Android 的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个 Looper。主线程(UI 线程)就是一个消息循环的线程。2、Looper.myLooper();获得当前的 LooperLooper.getMainLooper()/获得 UI 线程的 Lopper3、Handle 的初始化函数(构造函数),如果没有参数,那么他就默认使用的是当前的 Looper,如果有Looper 参数,就是用对应的线程的 Looper。4、如果一个线程中调用 Looper.prepare(),那么系统就会自动的为该线程建立一个消息队列,然后调用

8、 Looper.loop();之后就进入了消息循环,这个之后就可以发消息、取消息、和处理消息。江苏颂歌动漫科技术有限公司-笔试题目一、选择题a)short 数据类型的取值范围是( (2A15 至 2A15-1)b)下面哪一个是正确的( (A)Strings1=Hello;Strings2=Hello;Stringstr1=newString(Hello);Stringstr2=newString(Hello);As1=str1.equals(str1)Bstr1=str2Cs1=str1Ds1=s2C)下面哪一个不是 Java 中关键字( (A)AconstBtrueCfalseDthisd)

9、Stringstr=HSllo”下面哪一个是不正确的( (A)Aints=str.lengthBints=str.lentth()Cstr=”Hello”Dstr+=”Hello”二、填空题1.publicintresult()try(inti=5/0;)catch(Exceptione)(return6;)finally(return3;)当调用这个方法时输出结果是:2.staticintx=3;staticbytey=4;static1- if(x=y)2x=x+y;)else3y=y-4;)上面哪一行有错误:二、编程1 .传入一个整数(int),返回一个中文字符串,例如:传入 2010,

10、返回二千零一h 传入 20010,返回二万零一-bo。(用伪代码)2 .实现输入一个正整数 N,输出所有和为 N 的所有连续正整数元素的序列,例如:输入 15,返回1,2,3,4,5,4,5,6,7,8这 3 个序列文思创新-笔试题目1.一个字符串如何去掉头部和尾部的空格?trim()方法2.一个字符串如何变成 ascll 码?charc=a;System.out.println(int)c);3.service 的生命周期?voidonCreate()voidonStart(Intentintent)voidonDestroy()4.broadcast 的生命周期?Broadcast 的生命

11、周期只有一个回调方法:voidonReceive(ContextcurContext,IntentbroadcastMsg)当 broadcast 消息到达接收者时,Android 会调用他的 onReceive()方法,并且传递包含这个信息的 intent 对象。broadcast 接收者在执行这个方法时,被认为是活动的。当 onReceive()方法返回时,它停止的活动状态。5.service 的 2 种启动方式是什么?这 2 种方式有什么区别,请说明。1 通过 startServiceService 会经历 onCreate-onStartstopService 的时候直接 onDest

12、roy如果是调用者( (TestServiceHolder)自己直接退出而没有调用 stopService 的话,Service 会一直在后台运行。下次 TestServiceHolder 再起来可以 stopService2 通过 bindServiceService 只会运行 onCreate,这个时候 TestServiceHolder 和 TestService 绑定在一起TestServiceHolder 退出了,Srevice 就会调用 onUnbind-onDestroyed所谓绑定在一起就共存亡了。6 .android 的四大组件是什么?一般表现在哪些功能上?Android 有

13、四大组件:ActivityService、BroadcastReceiver、ContentProviderActivity做一个完整的 Android 程序,不想用到 Activity,真的是比较困难的一件事情,除非是想做绿叶想疯了。因为 Activity 是 Android 程序与用户交互的窗口, 在我看来, 从这个层面的视角来看, Android 的 Activity特像网站的页面。Activity,在四大组件中,无疑是最复杂的,这年头,一样东西和界面挂上了勾,都简化不了,想一想,独立做一个应用有多少时间沦落在了界面上,就能琢磨清楚了。从视觉效果来看,一个 Activity 占据当前的窗

14、口,响应所有窗口事件,具备有控件,菜单等界面元素。从内部逻辑来看,Activity 需要为了保持各个界面状态,需要做很多持久化的事情,还需要妥善管理生命周期,和一些转跳逻辑。对于开发者而言,就需要派生一个 Activity 的子类,然后埋头苦干上述事情。对于 Activity 的更多细节,先可以参见:reference/android/app/Activity.html。后续,会献上更为详尽的剖析。Service服务,从最直白的视角来看,就是剥离了界面的 Activity,它们在很多 Android 的概念方面比较接近,都是封装有一个完整的功能逻辑实现,只不过 Service 不抛头露脸,只是

15、默默无声的做坚实的后盾。但其实,换个角度来看,Android 中的服务,和我们通常说的 Windows 服务,Web 的后台服务又有一些相近,它们通常都是后台长时间运行,接受上层指令,完成相关事务的模块。用运行模式来看, Activity 是跳, 从一个跳到一个, 呃.,这有点像模态对话框 (或者还像 web 页面好了.) ,给一个输入(抑或没有.),然后不管不顾的让它运行,离开时返回输出(同抑或没有)。而 Service 不是,它是等,等着上层连接上它,然后产生一段持久而缠绵的通信,这就像个用了 Ajax 页面,看着没啥变化,偷偷摸摸的和 Service 不知眉来眼去多少回了。但和一般的 S

16、ervice 还是有所不同, Android 的 Service 和所有四大组件一样, 其进程模型都是可以配置的,调用方和发布方都可以有权利来选择是把这个组件运行在同一个进程下,还是不同的进程下。这句话,可以拿把指甲刀刻进脑海中去,它凸显了 Android 的运行特征。如果一个 Service,是有期望运行在于调用方不同进程的时候,就需要利用 Android 提供的RPC 机制,为其部署一套进程间通信的策略。Android 的 RPC 实现,如上图所示(好吧,也是从 SDK 中拿来主义的.),无甚稀奇,基于代理模式的一个实现,在调用端和服务端都去生成一个代理类,做一些序列化和反序列化的事情,使

17、得调用端和服务器端都可以像调用一个本地接口一样使用 RPC 接口。Android 中用来做数据序列化的类是 Parcel,参见:/reference/android/os/Parcel.html,封装了序列化的细节,向外提供了足够对象化的访问接口,Android 号称实现非常高效。还有就是 AIDL(AndroidInterfaceDefinitionLanguage),一种接口定义的语言,服务的 RPC接口,可以用 AIDL 来描述,这样,ADT 就可以帮助你自动生成一整套的代理模式需要用到的类,都是想起来很乏力写起来很苦力的那种。更多内容,可以再看看:guide/developing/to

18、ols/aidl.html,如果有兴致,可以找些其他 PRC 实现的资料 lou 几眼。关于 Service 的实现,还强推参看 APIDemos 这个 Sample 里面的 RemoteService 实现。它完整的展示了实现一个 Service 需要做的事情:那就是定义好需要接受的 Intent,提供同步或异步的接口,在上层绑定了它后,通过这些接口(很多时候都是 RPC 的.)进行通信。在RPC 接口中使用的数据、回调接口对象,如果不是标准的系统实现(系统可序列化的),则需要自定义 aidl,所有一切,在这个 Sample 里都有表达,强荐。Service 从实现角度看,最特别的就是这些

19、RPC 的实现了,其他内容,都会接近于 Activity的一些实现,也许不再会详述了。BroadcastReceiver在实际应用中,我们常需要等,等待系统抑或其他应用发出一道指令,为自己的应用擦亮明灯指明方向。而这种等待,在很多的平台上,都会需要付出不小的代价。比如,在 Symbian 中,你要等待一个来电消息,显示归属地之类的,必须让自己的应用忍辱负重偷偷摸摸的开机启动,消隐图标隐藏任务项,潜伏在后台,监控着相关事件,等待转瞬即逝的出手机会。这是一件很发指的事情,不但白白耗费了系统资源,还留了个流氓软件的骂名,这真是卖力不讨好的正面典型。在 Android 中,充分考虑了广泛的这类需求,于

20、是就有了 BroadcastReceiver 这样的一个组件。每个 BroadcastReceiver 都可以接收一种或若干种 Intent 作为触发事件(有不知道 Intent的么,后面会知道了.),当发生这样事件的时候,系统会负责唤醒或传递消息到该 BroadcastReceiver,任其处置。在此之前和这以后,BroadcastReceiver 是否在运行都变得不重要了,及其绿色环保。这个实现机制,显然是基于一种注册方式的,BroadcastReceiver 将其特征描述并注册在系统中,根据注册时机,可以分为两类,被我冠名为冷热插拔。所谓冷插拔,就是 BroadcastReceiver

21、的相关信息写在配置文件中(求配置文件详情?稍安,后续奉上.),系统会负责在相关事件发生的时候及时通知到该 BroadcastReceiver,这种模式适合于这样的场景。某事件方式-通知 Broadcast-启动相关处理应用。比如,监听来电、邮件、短信之类的,都隶属于这种模式。而热插拔,顾名思义,插拔这样的事情,都是由应用自己来处理的,通常是在 OnResume事件中通过 registerReceiver 进行注册,在 OnPause 等事件中反注册,通过这种方式使其能够在运行期间保持对相关事件的关注。比如,一款优秀的词典软件(比如,有道词典.),可能会有在运行期间关注网络状况变化的需求,使其可

22、以在有廉价网络的时候优先使用网络查询词汇,在其他情况下,首先通过本地词库来查词,从而兼顾腰包和体验,一举两得一石二鸟一箭双雕(注,真实在有道词典中有这样的能力,但不是通过 BroadcastReceiver 实现的,仅以为例.)。而这样的监听,只需要在其工作状态下保持就好,不运行的时候,管你是天大的网路变化,与我何干。其模式可以归结为:启动应用-监听事件-发生时进行处理。除了接受消息的一方有多种模式,发送者也有很重要的选择权。通常,发送这有两类,一个就是系统本身,我们称之为系统 Broadcast 消息,在 referenceZandroidZcontentZIntent.html 的Stan

23、dardBroadcastActions,可以求到相关消息的详情。除了系统,自定义的应用可以放出 Broadcast 消息,通过的接口可以是 Context.sendBroadcast,抑或是 Context.sendOrderedBroadcast。前者发出的称为 Normalbroadcast,所有关注该消息的Receiver,都有机会获得并进行处理; 后者放出的称作 Orderedbroadcasts,顾名思义, 接受者需要按资排辈,排在后面的只能吃前面吃剩下的,前面的心情不好私吞了,后面的只能喝西北风了。当 BroadcastReceiver 接收到相关的消息, 它们通常做一些简单的处

24、理, 然后转化称为一条 Notification,一次振铃,一次震动,抑或是启动一个 Activity 进行进一步的交互和处理。所以,虽然 Broadcast 整个逻辑不复杂,却是足够有用和好用,它统一了 Android 的事件广播模型,让很多平台都相形见细了。更多 BroadcastReceiver 相关内容,参见:ZreferenceZandroidZcontentZBroadcastReceiver.html。ContentProviderContentProvider,听着就和数据相关,没错,这就是 Android 提供的第三方应用数据的访问方案。在Android 中,对数据的保护是很

25、严密的,除了放在 SD 卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的,但有时候,沟通是必要的,不仅对第三方很重要,对应用自己也很重要。比如,一个联系人管理的应用。如果不允许第三方的应用对其联系人数据库进行增删该查,整个应用就失去了可扩展力,必将被其他应用抛弃,然后另立门户,自个玩自个的去了。Andorid 当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是ContentProvidero应用想对外提供的数据,可以通过派生 ContentProvider 类,封装成一枚ContentProvider,每个 ContentProvider 都用

26、一个 uri 作为独立的标识,形如:content:ZZcom.xxxxx。所有东西看着像 REST 的样子,但实际上,它比 REST 更为灵活。和 REST 类似,uri 也可以有两种类型,一种是带 id 的,另一种是列表的,但实现者不需要按照这个模式来做,给你 id 的 uri 你也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的 REST。另外,ContentProvider 不和 REST 一样只有 uri 可用,还可以接受 Projection,Selection,OrderBy 等参数,这样,就可以像数据库那样进行投影,选择和排序。查询到的结果,以 Cursor(参见

27、:referenceZandroidZdatabaseZCursor.html)的形式进行返回,调用者可以移动 Cursor 来访问各列的数据。ContentProvider 屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次,大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。ContentProvider内部,常用数据库来实现,Android 提供了强大的 Sqlite 支持,但很多时候,你也可以封装文件或其他混合的数据。在 Android 中,ContentResoker 是用来发起 ContentProvider 的定位和访问的。不过它仅提供了同步访问的 C

28、ontentProvider 的接口。但通常,ContentProvider 需要访问的可能是数据库等大数据源,效率上不足够快,会导致调用线程的拥塞。因此 Android 提供了一个AsyncQueryHandler(参见:reference/android/content/AsyncQueryHandler.html),帮助进行异步访问ContentProvidero在各大组件中,Service 和 ContentProvider 都是那种需要持续访问的。Service 如果是一个耗时的场景,往往会提供异步访问的接口,而 ContentProvider 不论效率如何,都提供的是约定的同步访问

29、接口。我想这遵循的就是场景导向设计的原则,因为 ContentProvider 仅是提供数据访问的,它不能确信具体的使用场景如何,会怎样使用它的数据;而相比之下,Service包含的逻辑更复杂更完整,可以抉择大部分时候使用某接口的场景,从而确定最贴切的接口是同步还是异步,简化了上层调用的逻辑。7 .多线程的 2 种启动方式是什么?在 android 里面,能不能在子线程里更新 UI,如果能请说明理由,如果不能,那用什么方法可以解决这个问题?两种启动方式:run()start()不能在子线程更新 UI解决方法1.Activity 中声明一个 android.os.Handler 类的变量,假设是

30、 handler。2.onCreate 函数中加入 handler 的初始化:OverridepublicvoidonCreate(BundlesavedInstanceState)/其他代码,/,/,handler=newHandler()publicvoidhandleMessage(Messagemsg)Stringmessage=(String)msg.obj;/对主线程的 UI 进行改动/,;3.在子线程中,创建一个 android.os.Message 类的对象,将要传送的值或对象加入message,通过 Handler 发布传送给主线程 Stringstr_temp=要传给主线程

31、的对象Messagemessage=Message.obtain();message.obj=str_temp;/通过 Handler 发布传送消息 handler.sendMessage(message);8 .你们做项目的时候,是如何进行人员分配的?9 .在进行一个项目之前,需要做哪些工作?代码放在什么库里面?给客户的就是项目的介绍,操作说明等需求分析-总体规划-详细设计CMMI10 .连接服务器端可以用什么机制?Socket 编程机制11 .编码规范,遇到异常的时候,要如何去检查异常?try(资源占用)catch()(/异常处理)finally(/资源释放写在这里,无论异常是否发生,这些

32、代码均会执行)瞬联-笔试题目1.Whichofthefollowingexpressionswillproduceerrorsuponcompilation?A)booleana=(boolean)1B)booleanb=(false&true)C)floaty=22.3aA&CbAcA&BaC2.Whichsequencewillbeprintedwhenthefollowingprogramisrun?Importjava.util.*publicclassTestpublicstaticvoidmain(Stringstr)Listl=newArrayList()

33、;l.add(1);l.add(2);l.add(1,3”);System.out.println(l)A)1,2,3B)1,3,2C)1,1,2D)1,2,2E)抛异常3.ThestaticmethodThread.currentThread()returnsareferencetothecurrentlyExecutingThreadobject,Whatistheresultofthiscode?A)EachStringinthearraylineswilloutput,whichnopauseinbetweenbecausethismetexecutedinaThread.B)Ecah

34、Stringinthearraylineswilloutput,witha1-secondpausebetweenlines.C)EachStringinthearraylineswilloutput,andthereisnoguaranteetherewillbeapausecurrentThread()maynotretrievethisthread.D)ThiscodewillnotcompileE)EachStringinthelinesarraywillprint,withatleastaone-secondpausebetweenlines4.PublicinterfaceStat

35、us/*insertcodehere*/intMY_VALUE=10;Whichtherearevalidonline2?A)protectedB)privateC)nativeD)publicE)staticF)abstractG)final5.classNavpublicenumDirectionNORTH,SOUTH,EAST,WESTpublicclassSprite/insertcodehereWhichcode,insertatline4,allowstheSpriteclasstocompile?A)Directiond=NORTH;B)Nav.Directiond=NORTH;

36、C)Directiond=NORTHD)Nav.Directiond=Nav.Direction.NORTH判断题(英语回答,先判断对错,错的话怎么改,说出原因)1.PassByReferencemeansthepassingacopyofthevalueitself.()Yourexplanation:2.instanceof()isusedtochecktoseeifanobjectcanbecastintoaspecifiedtypewithoutthrowingacastclassexception.()Yourexplanation:3.Importingapackageimport

37、sthesubpackagesaswell.e.g.Importingcom.MyTest.*alsoimportcom.MyTest.UnitTest()Yourexplanation:4.primitivedatatypesarepassedbyeitherreferenceorvalue()Yourexplanation:5.whenanbojectiscreatedinJavamemory.Itisalloactedfromheap,orfromstackifheapisfull.()Yourexplanation:简答题(英语)1.Whatiswrongwiththefollowingcode?FinalclassFirstprivateinta=1;intb=2;classSecondextendsFirstpublicvoidmethod()System.out.println

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论