java及android基础⾯试题
java及android基础⾯试题
1. ⽅法重载与覆盖的区别?( Overload与Override的区别)
答
:
⽅法的重载属于编译时多态
,
⽅法名相同参数列表不同
,
返回值必须相同或都没有返回值类型。⽅法的覆盖属于运⾏时多态,⼦类覆盖⽗类的⽅法
,
⼦类指向⽗类引⽤
,
在调⽤⽅法的时候⽤⽗类的引⽤调⽤。
1. String 和StringBuffer的区别
答
: STRING
的长度是不可变的,
STRINGBUFFER
的长度是可变的。如果你对字符串中的内容经常进⾏操作,特别是内容要修改时,那么使⽤
StringBuffer
,如果最后需要
String
,那么使⽤
StringBuffer
的
toString()
⽅法。
1. 字符串“abcde”通过写⼀个函数不让调⽤第三⽅的字符串,实现⼀个字符串倒序,⽐如字符串“abcde” 变成“edcba”
答: String src = "ABCDEF ";
String dst = new StringBuffer(src).reverse().toString();
注:String常⽤⽅法:
1. 抽象类与接⼝的区别(abstract与interface的区别)
答:
abstract
可以修饰抽象⽅法,⽽⼀个类只要有⼀个抽象⽅法,就必须⽤
abstract
定义该类,即抽象类。
⽤interface
修饰的类,⾥⾯的⽅法都是抽象⽅法,因此在定义接⼝的时候,可以直接不加那些修饰,系统会默认的添上去。接⼝⾥⾯的字段都是公有常量,即
public static final
修饰的字段。
1. 集合的实现类与区别?
答
:Collection
接⼝,集合结构总的⽗接⼝,有两个⼦接⼝
list
和
set
L
ist接⼝元素有序可重复
.
实现类有:
ArrayList
数组实现轻量级,运⾏快,线程不安全。
JDK1.2
查询快
Vector 数组实现重量级,运⾏慢,线程安全。
JDK1.0
LinkedList链表实现常⽤堆栈与队列的实现增删操作快Set 接⼝元素⽆序不可重复
实现类有:
HashSet
,底层⽤
hashCode()
算法实现,保证元素的⽆序唯⼀,⾃定义对象存进HashSet
为了保证元素内容不重复需要覆盖
hashCode()
与
equals()
⽅法。
SortedSet(不重要
)
元素有序(
Unicode
升序)唯⼀
TreeSet要求元素有序,⾃定义的对象需要实现Comparable
接⼝的
compareTo
(
object o
)⽅法
Map(接⼝
):
与
Collection
接⼝⽆关
,
有⼀个⼦接⼝
SortedMap
特点
:
元素是
key-value, key
唯⼀
,
⽆序
; value
可重复
实现类
:
HashMap
轻量级线程不安全的
,
允许
key
或
value
为
null JDK1.2
HashTable 重量级线程安全的不允许
key
或
value
为
null JDK1.0
Properties是
HashTable
的⼦类
,
主键和值都是字符串
SortedMap:(不重要
)
特点
: key
唯⼀
,
有序
(Unicode
升序
)
实现类
:TreeMap
1. 线程有⼏种状态,分别是哪些?(调⽤run()和调⽤start()的区别)
答:
1
)
、新建状态(New)
:新创建了⼀个线程对象。
2
)
、就绪状态(Runnable)
:线程对象创建后,其他线程调⽤了该对象的
start()
⽅法。该状态的线程位于可运⾏线程池中,变得可运⾏,等待获取
的使⽤权。
3
)
、运⾏状态(Running)
:就绪状态的线程获取了
CPU
执⾏run()⽅法,
。
4
)
、阻塞状态(Blocked)
:
阻塞状态是线程因为某种原因放弃
CPU
使⽤权,暂时停⽌运⾏。直到线程进⼊就绪状态,才有机会转到运⾏状态。阻塞的情况分三种:
(
⼀
)
、等待阻塞:运⾏的线程执⾏
wait()
⽅法,
JVM
会把该线程放⼊等待池中。
(
⼆
)
、同步阻塞:运⾏的线程在获取对象的同步锁时,若该同步锁被别的线程占⽤,则
JVM
会把该线程放⼊锁池中。
(
三
)
、其他阻塞:运⾏的线程执⾏
sleep()
或
join()java重写和重载的区别
⽅法,或者发出了
I/O
请求时,
JVM
会把该线程置为阻塞状态。当
sleep()
状态超时、
join()
等待线程终⽌或者超时、或者
I/O
处理完毕时,线程重新转⼊就绪状态。
5
)
、死亡状态(Dead)
:线程执⾏完了或者因异常退出了
run()
⽅法,该线程结束⽣命周期。
当调⽤
start
⽅法的时候,该线程就进⼊就绪状态。等待
CPU
进⾏调度执⾏,此时还没有真正执⾏线程。
当调⽤
run
⽅法的时候,是已经被
CPU
进⾏调度,执⾏线程的主要任务。
1. 线程的实现⽅式
答:
线程的实现有两种⽅式,⼀是继承Thread
类,⼆是实现
Runnable
接⼝
1. sleep() 与 wait()的区别
答:
1.
这两个⽅法来⾃不同的类分别是,
sleep
来⾃
Thread
类,和
wait
来⾃
Object
类。
2.最主要是
sleep
⽅法没有释放锁,⽽
wait
⽅法释放了锁,使得其他线程可
以使⽤同步控制块或者⽅法。
sleep
不出让系统资源;
wait
是进⼊线程等待池
等待,出让系统资源,其他线程可以占⽤
CPU
。⼀般
wait
不会加时间限制,
因为如果
wait
线程的运⾏资源不够,再出来也没⽤,要等待其他线程调⽤
notify/notifyAll唤醒等待池中的所有线程,才会进⼊就绪队列等待OS
分配系
统资源。
sleep(milliseconds)
可以⽤时间指定使它⾃动唤醒过来,如果时间不到
只能调⽤
interrupt()
强⾏打断。
3.wait,
notify
和
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论