最近阿里开始招2016春季实习生了,打算试一试Android开发实习生,特此开篇,记录我这几天的复习生活,基本都是些基础知识。希望能帮到大家。
试题来源:http://www.nowcoder.com/discuss/3043
byte | int | short | long | float | double | char | boolean | void |
---|---|---|---|---|---|---|---|---|
Byte | Integer | Short | Long | Float | Double | Character | Boolean | Void |
不能,switch..case语句只能接收:
byte,int,char,short,Byte,Int,Character,Short,String,Enum(枚举)
equals是Object的方法,默认为:
public boolean equals(Object o) {
return this == o;
}
在String类里进行了重写,这里主要比较String中二者的区别:
在String中,equals只要两个字符串的值一样就返回true,而==则表示当两个字符串完全一样才表示true,一般字符串比较用equals
列举一下,都很简单:
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());
}
Java四种引用:
虚引用
hash表,即散列表,数据结构中就学过,目的是在确保唯一性的前提下,提高数据查询速度。
哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以 直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了;不相同,也就是发生了Hash key相同导致冲突的情况,那么就在这个Hash key的地方产生一个链表,将所有产生相同hashcode的对象放到这个单链表上去,串在一起。所以这里存在一个冲突解决的问题(很少出现)。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
1、如果两个对象相等,那么它们的hashCode值一定要相等;
2、如果两个对象的hashCode相等,它们并不一定相等。
上面说的对象相等指的是用eqauls方法比较。
(这里讲得挺不错的:http://blog.csdn.net/softwave/article/details/4166598)
StringBuffer 线程安全,速度较慢
StringBuilder 线程不安全,速度较快
略。。。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
区别是一个同步,一个不同步,源码自己看。。
略。。
会执行。测试过了
答案在这里。。http://mcmoo.blog.51cto.com/692320/657678
这个没啥好说的。。。
面向对象的三个基本特征是:封装、继承、多态。
封装:从现实世界中的事物中抽象出一个模型,封装成一个类。
继承 :在已有的类上进行功能的扩展
多态:允许将子类类型的指针赋值给父类类型的指针。
多态的实现方式有两种:Override和Overload
Overload:顾名思义,就是Over(重新)——load(加载),所以中文名称是重载。它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名、返回值、类型不能相同;或者说可以改变参数、类型、返回值但是函数名字依然不变。
Override:就是ride(重写)的意思,在子类继承父类的时候子类中可以定义某方法与其父类有相同的名称和参数,当子类在调用这一函数时自动调用子类的方法,而父类相当于被覆盖(重写)了。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
略。。。
这个也简单。。。
考不到吧。。。
1.实现runnable接口
2.继承Thread类,实run方法:
这个我以前看过。。http://blog.csdn.net/hello_chillax/article/details/44992771
不难吧。。。
这个也不难。。。
以上三个是在考线程池方面的知识。。。
foreach比正常for循环效率要高,编译器会对foreach做优化。。
这个是基础。。
。。。
可以。