`
苗振忠
  • 浏览: 56618 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java android面试题分析总结

 
阅读更多

本文参考多处,一并感谢!

http://www.blogjava.net/fanyingjie/archive/2007/06/27/126467.aspx

http://baike.baidu.com/view/1788559.htm

http://honda418.iteye.com/blog/315893

http://jeff-tang.blog.163.com/blog/static/141686909201022010522906/

http://www.cnblogs.com/mgod/archive/2007/08/05/844011.html

参考过的书籍

深入理解Java虚拟机:JVM高级特性与最佳实践》

12.ArrayList,Vector,LinkedList的区别

 

  ArrayList Vector LinkedList
实现原理 数组 数组 双向链表
线程安全
优点 1.数组实现优于遍历
2.非线程安全,效率较高
1.数组实现优于遍历
2.线程安全
1.节点的增删无需对象的重建
2.空间利用毫无浪费
缺点 1.非线程安全
2.数组中未使用元素照成了空间的浪费
3.扩容可能引起对象的重建
4.增删有可能引起数组元素的移动
1.数组中未使用的元素造成空间的浪费
2.扩容可能引起对象的重建
3.线程安全,效率相对低
4.增删有可能引起数组元素的移动
1.遍历效率较低
2.非线程安全
扩容 0.5倍增量 1倍增量 按需增删
使用场景 1.无线程的要求。
2.遍历较多,增删较少
1.有线程安全的要求
2.遍历场景较多,增删场景较少
增删场景较多的时候

11.int与Integer的区别

 

  int Integer
类型 基本类型 复合类型
默认值 0 null
存储 栈(局部变量)
堆(成员变量,有待进一步确认)
堆上(只能通过new创建)
方法 基本类型无方法
速度 快(栈上 的操作相对快)
泛型支持 否(java中的泛型不支持,C++中的模板支持) 支持
容器类支持 否(直接使用通常会进行装箱操作) 支持
存在意义 1.历史原因(顺延C/C++中存在)
2.方便快速(无需new)
基本类型int的包装类
提供了对泛型,容器类的支持

9.向一个List<Integer>的容器里放入String对象

需要了解的一些知识

  • Java中的泛型是伪泛型。(可参见周志明的《深入理解Java虚拟机:JVM高级特性与最佳实践》)
    • 泛型是编译器的语法糖,并非产生了实际类型List<Integer>。
    • 对于List<Integer>和List<String>都是在编译之后,都是作为List<Object>类型来使用的。
    • 在Java虚拟机中,没有泛型的概念。
  • 通过反射可以把一些强制性的检查推迟到运行期。
    • 如果直接向List<Integer>中插入String对象,肯定会得到编译器的检查,并提示错误。
    • 而反射机制可以把这种错误的检查延迟到运行期。(这是反射的一个缺点,会把编译期能够检查到的问题,推迟到了运行期发现)
  • 由于List<Integer>对象在运行期,本身就是以List<Object>的形式存在,故其在运行期不会产生错误。
  • 反射机制,通过编译期的检查骗过了我们。而我们又可以通过反射骗过了编译器的检查。
实现代码
  1. packagecom.jue.test;
  2. importjava.lang.reflect.InvocationTargetException;
  3. importjava.lang.reflect.Method;
  4. importjava.util.ArrayList;
  5. importjava.util.List;
  6. publicclassTestMain{
  7. List<Integer>mIntList=newArrayList<Integer>();
  8. publicstaticvoidmain(String[]args)throwsSecurityException,
  9. NoSuchFieldException,IllegalArgumentException,
  10. IllegalAccessException,InvocationTargetException,
  11. NoSuchMethodException{
  12. TestMaintm=newTestMain();
  13. MethodaddMethod=List.class.getMethod("add",
  14. newClass[]{Object.class});
  15. //使用反射,我们避免了编译期的强制检查
  16. addMethod.invoke(tm.mIntList,newObject[]{newString("abc")});
  17. addMethod.invoke(tm.mIntList,newObject[]{newString("123")});
  18. addMethod.invoke(tm.mIntList,newObject[]{newString("cde")});
  19. addMethod.invoke(tm.mIntList,newObject[]{newString("fgh")});
  20. for(Objecto:tm.mIntList){
  21. System.out.println(o);
  22. }
  23. }
  24. }

输出结果:

abc
123
cde
fgh

10.List<Integer>与List<String>在编译后都是List<Object>形式存在

  1. packagecom.jue.test;
  2. importjava.util.List;
  3. publicclassTestMain{
  4. publicvoidtestList(List<Integer>list){
  5. }
  6. publicvoidtestList(List<String>list){
  7. }
  8. }

结果:编译失败!

分析:

  • 如上所述,Java的泛型是编译器的语法糖,在编译后,统一使用List<Object>代替。
  • 对于重载,方面名相同,而签名不同,由于参数都将是List<Object>,故编译失败,因为不可能产生签名一样的两个方法。

1.short转换相关的

其一,

  1. packagecom.jue.test;
  2. publicclassTestMain{
  3. publicstaticvoidmain(Stringargs[]){
  4. shorts1=1;
  5. s1=s1+1;
  6. }
  7. }

编译结果

DescriptionResourcePathLocationType
Type mismatch: cannot convert from int to short TestMain.java/TestShort/src/com/jue/testline 6Java Problem

分析:

s1+1会自动转换成int类型,导致s1= s1+1;损失精度。

其二,

  1. packagecom.jue.test;
  2. publicclassTestMain{
  3. publicstaticvoidmain(Stringargs[]){
  4. shorts2=2;
  5. s2+=2;
  6. }
  7. }

编译结果:成功

分析:

反编译之后

  1. packagecom.jue.test;
  2. publicclassTestMain
  3. {
  4. publicstaticvoidmain(String[]args)
  5. {
  6. shorts2=2;
  7. s2=(short)(s2+2);
  8. }
  9. }

故猜测:这可能是java编译器的语法糖。

2.RuntimeException与普通异常,error的区别。

Checked Exception:在编译时就能够被Java编译器所检测到的。

UncheckedException:则是编译时,java编译器不能检查到。

 

  RuntimeException 普通Exception Error
受控异常
产生原因 开发者的编程错误 由于外界环境所限,
本身潜在的一些问题
Java运行时的系统错误,资源耗尽,是一种严重的,
程序无法修复的问题
例子 NullPointerException
ArrayOutOfIndexException
ClassCastException
ArithmeticException
UnsupportedOperationException
ClassNotFoundException
IOException
FileNotFoundException
VirtualMachineError
StackOverflowError
OutOfMemoryError

 

3.finally的一个面试题

  1. packagecom.jue.test;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. publicclassTestMain{
  5. publicstaticvoidmain(String[]args){
  6. test();
  7. }
  8. privatestaticvoidtest(){
  9. Listlist=newArrayList();
  10. try{
  11. System.out.println("return!!");
  12. return;
  13. }catch(Exceptione){
  14. System.out.println("catchException!!");
  15. }finally{
  16. System.out.println("finally!!");
  17. }
  18. }
  19. }


结果:

return!!
finally!!

分析:即便在try中return;finally总会被执行的意义不变,仍然会执行。

 

4.final,finalize,finally的区别

final:关键字,表不变

修饰:

  • 方法:方法不可Override
  • 类:不可被继承
  • 基本类型量:常量,值不可变
  • 符合类型量:引用不可变,即引用的值不可变
  1. finalObjecto1=newObject();
  2. o1=newObject();

finally:关键字,Java异常处理机制的一部分,在异常发生时,用来提供一个必要的清理的机会。

finalize:Object类的方法(参考自百度百科

意义:Java技术允许使用finalize()方法在垃圾回收器将对象回收之前,做一些必要的清理操作。

调用前提:这个对象确定没有被引用到。

工作原理:

  • 垃圾收集器准备好释放对象占用的空间。
  • 首先调用其finalize方法。
  • 下一次垃圾收集过程中,真正回收内存。

不确定性:

  • finalize的执行时间是不缺定的。
  • 一个对象引用另一个对象,并不能保证finalize的方法按照特定的执行顺序。

5.Override,Overload

 

  Override Overload
签名+返回值 相同 方法名相同,签名不同
关系 父子类继承关系 通常是同一类层次中
识别 运行时多态
根据具体的对象,
查询对象的虚方法表,确定调用关系
编译时多态
由对象的外观类型(即声明类型)决定
修饰符限制 非private
非static
非final
无特别
异常关系 子类方法不能抛出被父类方法更多的异常 无特别
可见性关系 子类不能比父类访问权限更窄
(里氏替换原则决定)
无特别

6.Collection Collections

Collection:接口,集合类的接口,一个契约,提供了集合基本的大小,添加,清除,遍历方法等。

Collections:工具类,提供了很多静态方法,给集合提供一些查询,比较,排序,交换,线程安全化等方法。

7.Integer 缓存

  1. packagecom.jue.test;
  2. publicclassTestMain{
  3. publicstaticvoidmain(String[]args){
  4. Integeri1=1;
  5. Integeri11=1;
  6. System.out.println(i1==i11);
  7. Integeri2=200;
  8. Integeri22=200;
  9. System.out.println(i2==i22);
  10. }
  11. }

结果 :

true

false

分析:反编译结果为

  1. packagecom.jue.test;
  2. importjava.io.PrintStream;
  3. publicclassTestMain
  4. {
  5. publicstaticvoidmain(String[]args)
  6. {
  7. Integeri1=Integer.valueOf(1);
  8. Integeri11=Integer.valueOf(1);
  9. System.out.println(i1==i11);
  10. Integeri2=Integer.valueOf(200);
  11. Integeri22=Integer.valueOf(200);
  12. System.out.println(i2==i22);
  13. }
  14. }

可以看出,对于Integer i = 1;编译器做了额外的处理,即Integer.valueof();

Integer source code

  1. publicstaticIntegervalueOf(inti){
  2. assertIntegerCache.high>=127;
  3. if(i>=IntegerCache.low&&i<=IntegerCache.high)
  4. returnIntegerCache.cache[i+(-IntegerCache.low)];
  5. returnnewInteger(i);
  6. }

可以看出Integer对于一定 范围内的数字从Cache中取得,对于额外的,调用new创建。

IntegerCache源码如下:

  1. privatestaticclassIntegerCache{
  2. staticfinalintlow=-128;
  3. staticfinalinthigh;
  4. staticfinalIntegercache[];
  5. static{
  6. //highvaluemaybeconfiguredbyproperty
  7. inth=127;
  8. StringintegerCacheHighPropValue=sun.misc.VM
  9. .getSavedProperty("java.lang.Integer.IntegerCache.high");
  10. if(integerCacheHighPropValue!=null){
  11. inti=parseInt(integerCacheHighPropValue);
  12. i=Math.max(i,127);
  13. //MaximumarraysizeisInteger.MAX_VALUE
  14. h=Math.min(i,Integer.MAX_VALUE-(-low));
  15. }
  16. high=h;
  17. cache=newInteger[(high-low)+1];
  18. intj=low;
  19. for(intk=0;k<cache.length;k++)
  20. cache[k]=newInteger(j++);
  21. }
  22. privateIntegerCache(){
  23. }
  24. }
故可以知道Integer的大小,默认是从-128到127,对于这个范围内的数组做了缓存的处理。

8.sleep方法和wait方法的区别

 

  wait sleep
所属类 Object Thread
意义 让线程挂起 让线程休眠指定的时间
释放锁 否(这个跟锁本来就没有关系)
恢复 1.有参:wait指定时间
2.无参:等待其他线程notify
1.根据参数长度自动恢复。
2.异常打断
使用限制 wait,notify必须持有当前对象锁的情况下调用 无特别
抛出异常
静态方法

 

 

分享到:
评论

相关推荐

    常见的java,android面试题整理

    Java和Android面试题涵盖了许多核心概念,以下是这些知识点的详细说明: 1. **面向对象** (Object-Oriented Analysis and Design Principle, OOADP): 面向对象编程是Java和Android开发的基础,它涉及类、对象、继承...

    JAVAAndroid面试题讲解视频

    资源名称:JAVA Android面试题讲解视频资源目录:【】2012黑马程序员01_面试题【】2012黑马程序员02_面试题【】2012黑马程序员03_面试题【】2012黑马程序员04_面试题【】225ce844c6c817e9614d8f17ea70a640【】...

    Java基础+Android面试题

    在给定的内容中,我们可以看到提到了大量的知识点,这些内容覆盖了Java基础和Android面试题的核心主题。以下是根据文件内容整理出的知识点: Java基础知识: 1. Java集合框架:涉及ArrayList、LinkedList、HashMap...

    Java+Android面试题大全

    Java和Android面试题大全的知识点主要包括Java基础部分和Android相关技术。以下是对部分知识点的详细解读: 1. Java源文件中的类定义限制:在Java编程中,一个.java文件可以定义多个类,但是只能有一个类声明为...

    【批量下载】约1K道经典Java&Android面试题和答案打包下载.zip

    约1000道经典Java&Android面试题和答案打包下载 约1000道经典Java&Android面试题和答案打包下载 约1000道经典Java&Android面试题和答案打包下载 约1000道经典Java&Android面试题和答案打包下载 约1000道经典Java...

    阿里巴巴Android面试题集(答案解析)1

    阿里巴巴的Android面试题集主要涵盖了计算机基础、数据结构与算法、Java编程、Android技术以及一些扩展领域的知识。以下是对这些知识点的详细解析: **第一章 计算机基础面试题** 这部分通常包括网络、操作系统和...

    android和java面试大全集

    2012java面试题分析大全.doc JAVA面试题集合(项目2部).chm JAVA经典算法50题1.doc Java工程师试题(机构招聘)20100526.doc Java23种设计模式(总结)1.doc 实施人员初试题20091009.doc 框架图.png struts...

    Android面试题(详细答案).pdf

    在准备 Android 面试时,了解和掌握各种知识...以上是部分 Android 面试题及对应知识点的详细解释,涵盖了 Java 基础、Android 系统特性、编程实践等多个方面。在准备面试时,应全面复习这些知识,并通过实践加深理解。

    71道经典Android面试题和答案

    根据提供的文件内容,以下是详细的知识点总结: 1. 内存回收说明: - 在Android中,程序员不能直接控制内存的释放,内存回收是由垃圾回收器(Garbage Collector)来完成的。因此,选项A(程序员必须创建一个线程来...

    Android面试题汇总

    2.BAT Android面试20题详解 3.设计模式面试专题及答案 4.2019Android面试 常见58题 5.初级面试专题(中小厂) 7.设计模式面试专题 8.数据结构面试专题 9.多线程面试专题及答案 10.网络编程面试专题 11.腾讯Android...

    java相关面试题.zip

    Android面试题大全.pdf Hibernate面试题分析.pdf JavaWeb面试题.pdf Java程序员的10道XML面试题.pdf java面试题.pdf Java面试题以及答案.pdf Spring 面试题分析.pdf sql面试题.pdf Struts2面试题分析.pdf ...

    java和android面试题总结

    ### Java和Android面试题总结知识点 #### Java基础知识 1. **单个`.java`源文件中的类数量及其限制** - 在一个`.java`源文件中可以定义多个类,但其中只能有一个公共(`public`)类,并且这个公共类的名字必须与...

    2017-2020字节跳动Android面试历年真题解析_04cba.pdf

    Android面试题涵盖范围广泛,包括但不限于:Activity生命周期、Intent机制、BroadcastReceiver、Service、ContentProvider、Fragment、四大组件间通信、UI布局优化、性能调优(如内存泄漏检测、ANR避免、耗电优化)...

    2020 java经典面试题总汇.zip

    在2020年,Java依然在企业级应用、云计算、大数据、Android开发等领域占据主导地位,因此Java面试题的汇总对于求职者来说至关重要。这份"2020 Java经典面试题总汇"很可能包含了各种难度层次的问题,旨在测试候选人在...

    Android+Java面试题

    【Android面试知识点】 1. **Android基础知识** - Android架构:了解Android系统的分层结构,包括Linux内核、硬件抽象层、系统库、应用程序框架和应用程序。 - Activity生命周期:理解并能绘制各个状态间的转换图...

    Android+JAVA【面试题】精编汇总(25份).zip

    Android+JAVA【面试题】精编汇总(25份): 2019Android面试 常见58题.docx Android常见原理性面试专题.docx Android面试常问基础知识点.docx BAT Android面试20题详解.docx Java基础面试题.pdf Java;基础知识点面试...

    Android面试题大全(中高级)

    《Android面试题大全(中高级)》涵盖了一系列深度的技术问题,这些问题旨在考察面试者在Android开发、网络通信、数据结构与算法、Java编程等关键领域的专业能力和实践经验。 在第一章网络面试题中,从HTTP协议到...

    Android面试题.doc

    【Android面试题解析】 1. 流的分类:在Java中,流主要按照功能分为输入流和输出流,用于处理数据的输入与输出。如果需要对读取的内容进行处理后再输出,应该使用处理流(Processing Stream),如Filter stream,它...

    android面试题整理

    以上就是“android面试题整理”中可能涵盖的主要知识点,每个话题都值得深入探讨和实践,以确保在面试中能够全面展示自己的专业能力。通过持续学习和项目实践,开发者可以不断提高自己的技术水平,为面试做好充分...

Global site tag (gtag.js) - Google Analytics