您的位置:首页 > 移动开发 > Android开发

备战Android实习(Java基础知识篇)

2016-03-14 15:48 351 查看
最近阿里开始招2016春季实习生了,打算试一试Android开发实习生,特此开篇,记录我这几天的复习生活,基本都是些基础知识。希望能帮到大家。

试题来源:http://www.nowcoder.com/discuss/3043

J2SE基础

1. 九种基本数据类型的大小,以及他们的封装类。

byteintshortlongfloatdoublecharbooleanvoid
ByteIntegerShortLongFloatDoubleCharacterBooleanVoid

2.switch..case能否用string做参数?

不能,switch..case语句只能接收:
byte,int,char,short,Byte,Int,Character,Short,String,Enum(枚举)

3. equals与==的区别。

equals是Object的方法,默认为:

public boolean equals(Object o) {
return this == o;
}


在String类里进行了重写,这里主要比较String中二者的区别:

在String中,equals只要两个字符串的值一样就返回true,而==则表示当两个字符串完全一样才表示true,一般字符串比较用equals

4. Object有哪些公用方法?

列举一下,都很简单:

public boolean equals(Object o) {
return this == o;
}


public final Class<?> getClass() {
return shadow$_klass_;
}


public int hashCode() {
int lockWord = shadow$_monitor_;
final int lockWordStateMask = 0xC0000000;  // Top 2 bits.
final int lockWordStateHash = 0x80000000;  // Top 2 bits are value 2 (kStateHash).
final int lockWordHashMask = 0x0FFFFFFF;  // Low 28 bits.
if ((lockWord & lockWordStateMask) == lockWordStateHash) {
return lockWord & lockWordHashMask;
}
return System.identityHashCode(this);
}


public final native void notify();
public final native void notifyAll();
public final native void wait() throws InterruptedException;
public final void wait(long millis) throws InterruptedException {
wait(millis, 0);
}
public final native void wait(long millis, int nanos) throws InterruptedException;


public String toString() {
return getClass().getName() + '@' + Integer.toHexString(hashCode());
}


5.Java的四种引用,强弱软虚,用到的场景。

Java四种引用:

强引用

软引用

弱引用

虚引用

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。

“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。这个类通常用于在某处保存对象引用,而又不干扰该对象被GC回收,通常用于Debug、内存监视工具等程序中。因为这类程序一般要求即要观察到对象,又不能影响该对象正常的GC过程。

6. hashCode的作用?

hash表,即散列表,数据结构中就学过,目的是在确保唯一性的前提下,提高数据查询速度。

哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以 直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了;不相同,也就是发生了Hash key相同导致冲突的情况,那么就在这个Hash key的地方产生一个链表,将所有产生相同hashcode的对象放到这个单链表上去,串在一起。所以这里存在一个冲突解决的问题(很少出现)。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。

所以,Java对于eqauls方法和hashCode方法是这样规定的:

1、如果两个对象相等,那么它们的hashCode值一定要相等;

2、如果两个对象的hashCode相等,它们并不一定相等。

上面说的对象相等指的是用eqauls方法比较。

7. ArrayList、LinkedList、Vector的区别。

(这里讲得挺不错的:http://blog.csdn.net/softwave/article/details/4166598

8. String、StringBuffer与StringBuilder的区别。

StringBuffer 线程安全,速度较慢

StringBuilder 线程不安全,速度较快

9. Map、Set、List、Queue、Stack的特点与用法。

略。。。

10. HashMap和HashTable的区别。

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

11. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

区别是一个同步,一个不同步,源码自己看。。

12. TreeMap、HashMap、LindedHashMap的区别。

略。。

13. try catch finally,try里有return,finally还执行么?

会执行。测试过了

14. Collection包结构,与Collections的区别。

答案在这里。。http://mcmoo.blog.51cto.com/692320/657678

15. Exception与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。

这个没啥好说的。。。

16. Java面向对象的三个特征与含义。

面向对象的三个基本特征是:封装、继承、多态。

封装:从现实世界中的事物中抽象出一个模型,封装成一个类。

继承 :在已有的类上进行功能的扩展

多态:允许将子类类型的指针赋值给父类类型的指针。

多态的实现方式有两种:Override和Overload

17. Override和Overload的含义去区别。

Overload:顾名思义,就是Over(重新)——load(加载),所以中文名称是重载。它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名、返回值、类型不能相同;或者说可以改变参数、类型、返回值但是函数名字依然不变。

Override:就是ride(重写)的意思,在子类继承父类的时候子类中可以定义某方法与其父类有相同的名称和参数,当子类在调用这一函数时自动调用子类的方法,而父类相当于被覆盖(重写)了。

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

18. Interface与abstract类的区别。

略。。。

19.Static class 与non static class的区别。

这个也简单。。。

20. java多态的实现原理。

考不到吧。。。

21. 实现多线程的两种方法:Thread与Runnable。

1.实现runnable接口

2.继承Thread类,实run方法:

22. 线程同步的方法:sychronized、lock、reentrantLock等。

这个我以前看过。。http://blog.csdn.net/hello_chillax/article/details/44992771

23. 锁的等级:方法锁、对象锁、类锁。

不难吧。。。

24. 写出生产者消费者模式。

这个也不难。。。

25. ThreadLocal的设计理念与作用。

26. ThreadPool用法与优势。

27. Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。

以上三个是在考线程池方面的知识。。。

29. foreach与正常for循环效率对比。

foreach比正常for循环效率要高,编译器会对foreach做优化。。

30. Java IO与NIO。

这个是基础。。

31. 反射的作用于原理。

。。。

32. 泛型常用特点,List能否转为List。

可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java