Android开发面试经——3.常见Java基础笔试题

 

关注finddreams博客:http://blog.csdn.net/finddreams/article/details/44403041 
由于Androd使用Java语言来编程的,因此咱们作Android开发全面的掌握Java基础是必须的。在面试的过程当中,咱们发现不少公司发的笔试题有不少知识点都是Java的,搞安卓久了,Java基础的一些知识点也都快忘了,今天就让咱们来一块儿复习一些Java基础,但愿能在面试中用到;面试

一、Overload和Override的区别。Overloaded的方法是否能够改变返回值的类型? 
方法的重写Overriding和重载Overloading是Java多态性的不一样表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。若是在子类中定义某方法与其父类有相同的名称和参数,咱们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被”屏蔽”了。若是在一个类中定义了多个同名的方法,它们或有不一样的参数个数或有不一样的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是能够改变返回值的类型。编程

二、String和StringBuffer,StringBuilder的区别 
String 字符串常量 
StringBuffer 字符串变量(线程安全) 
StringBuilder 字符串变量(非线程安全) 
String的长度是不可变的,StringBuffer,StringBuilder的长度是可变的。若是你对字符串中的内容常常进行操做,特别是内容要修改时,那么使用StringBuffer,若是最后须要String,那么使用StringBuffer的toString()方法。设计模式

三、说出ArrayList,Vector, LinkedList的存储性能和特性 
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,它们都容许直接按序号索引元素,可是插入元素要涉及数组元素移动等内存操做,因此索引数据快而插入数据慢,Vector因为使用了synchronized方法(线程安全),一般性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据须要进行前向或后向遍历,可是插入数据时只须要记录本项的先后项便可,因此插入速度较快。数组

4.字符串“abcde”经过写一个函数不让调用第三方的字符串,实现一个字符串倒序,好比字符串“abcde”变成“edcba” 
String src = “abcde”; 
String dst = new StringBuffer(src).reverse().toString();安全

五、Collection 和 Collections的区别。 
Collection是集合类的上级接口,继承与他的接口主要有Set 和List. 
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各类集合的搜索、排序、线程安全化等操做markdown

六、final, finally, finalize的区别。 
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 
finally是异常处理语句结构的一部分,表示老是执行。 
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,能够覆盖此方法提供垃圾收集时的其余资源回收,例如关闭文件等。异步

七、sleep() 和 wait() 有什么区别? 
1.这两个方法来自不一样的类分别是,sleep来自Thread类,和wait来自Object类。 
2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其余线程可使用同步控制块或者方法。sleep不出让系统资源;wait是进入线程等待池等待,出让系统资源,其余线程能够占用CPU。通常wait不会加时间限制,由于若是wait线程的运行资源不够,再出来也没用,要等待其余线程调用notify/notifyAll唤醒等待池中的全部线程,才会进入就绪队列等待OS分配系统资源。sleep(milliseconds)能够用时间指定使它自动唤醒过来,若是时间不到只能调用interrupt()强行打断。 
3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep能够在任何地方使用 
4. Sleep须要捕获异常,而wait不须要ide

八、同步和异步有何异同,在什么状况下分别使用他们?举例说明。 
若是数据将在线程间共享。例如正在写的数据之后可能被另外一个线程读到,或者正在读的数据可能已经被另外一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 
当应用程序在对象上调用了一个须要花费很长时间来执行的方法,而且不但愿让程序等待方法的返回时,就应该使用异步编程,在不少状况下采用异步途径每每更有效率。异步编程

9,抽象类与接口的区别(abstract与interface的区别) 
abstract能够修饰抽象方法,而一个类只要有一个抽象方法,就必须用abstract定义该类,即抽象类。 
用interface修饰的类,里面的方法都是抽象方法,所以在定义接口的时候,能够直接不加那些修饰,系统会默认的添上去。接口里面的字段都是公有常量,即public static final修饰的字段。

十、线程中wait,join,sleep,yield, notify,notifyall,synchronized,区别及联系 
1).sleep()方法 
在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。sleep()使当前线程进入阻塞状态,在指定时间内不会执行。 
2).wait()方法 
在其余线程调用对象的notify或notifyAll方法前,致使当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。 
唤醒当前对象锁的等待线程使用notify或notifyAll方法,waite() 和notify()必须在synchronized函数或synchronized block中进行调用。 
yield方法暂停当前正在执行的线程对象。yield()只是使当前线程从新回到可执行状态,因此执行 
3)yield()的线程有可能在进入到可执行状态后立刻又被执行。yield()只能使同优先级或更高优先级的线程有执行的机会。 
4).join方法 
等待该线程终止。等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,致使结果不可预测。

十一、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 
接口能够继承接口。抽象类能够实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

十二、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

1三、是否能够继承String类? 
String类是final类故不能够继承。

1四、java switch支持的数据类型: 
java支持的数据类型有五种 
他们分别是: 
byte、char、short、int、枚举 
以上是JDK1.6之前的版本。JDK1.7时,又增长了String,因此相对于JDK1.7而言就是六种了

1五、什么是单例模式,请写出一个来: 
Singleton模式主要做用是保证在Java应用程序中,一个类Class只有一个实例存在。 
通常Singleton模式一般有几种种形式: 
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,经过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton { private Singleton(){} //注意这是private 只供内部调用 private static Singleton instance = new Singleton(); //这里提供了一个供外部访问本class的静态方法,能够直接访问 public static Singleton getInstance() { return instance; } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
第二种形式:
public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提升了效率! if (instance==null) instance=new Singleton(); return instance; } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

其余形式: 
定义一个类,它的构造函数为private的,全部方法为static的。 
通常认为第一种形式要更加安全些

1六、Java经常使用的设计模式?说明工厂模式。 
Java中的23种设计模式: 
Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), 
Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), 
Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), 
Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), 
Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), 
Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), 
Observer(观察者模式), State(状态模式), Strategy(策略模式), 
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) 
工厂模式:工厂模式是一种常常被使用到的模式,根据工厂模式实现的类能够根据提供的数据生成一组类中某一个类的实例, 
一般这一组类有一个公共的抽象父类而且实现了相同的方法,可是这些方法针对不一样的数据进行了不一样的操做。 
首先须要定义一个基类,该类的子类经过不一样的方法实现了基类中的方法。而后须要定义一个工厂类,工厂类能够根据条件 
生成不一样的子类实例。当获得子类的实例后,开发人员能够调用基类中的方法而没必要考虑到底返回的是哪个子类的实例。

 
4
0
相关文章
相关标签/搜索