对网上流传的JAVA面试题或笔试题其中几个题目答案的质疑

最近看了多遍网上流传的JAVA面试题或笔试题,发现有几个题目的答案有问题:

1、&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)

这道题回答不全面,&也可作为逻辑与运算符,作为逻辑运算符时与&&的区别是:

&&是短路逻辑与,在第一个条件已经为False的情况下,不会计算第二个条件;&是非短路逻辑与,不管第一个条件是不是false,都会执行第2个条件。所以&&比&效率高点。


2、heap和stack有什么区别
答:栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素


区别应该是这样的:

Java把内存划分成两种:一种是栈内存,一种是堆内存。

堆是一个运行时数据区, 堆内存用来存放由new创建的对象和数组,这些对象不需要程序代码来显式的释放,由Java虚拟机的自动垃圾回收器来管理。 

堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。缺点是,由于要在运行时动态分配内存,存取速度较慢。

 

栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄,存在栈中的数据可以共享。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

 

3、你所知道的集合类都有哪些?主要方法?
答:最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。 
Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。


问题问的是集合类, List 和 Map都是接口,不是类。

Map被列入了集合框架,但严格说来它不属于集合范围,Collection是所有集合接口或集合类的父接口,Map接口没有父接口。

常用的集合类应该是ArrayList、LinkedList、Vector、HashSet、Stack等,主要方法add()、remove()、clear()、isEmpty()、contains(Object o) 等。

 

4、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等
    equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值

 

这个答案明显不对,iterator()方法是用来迭代遍历Set集合的,区分重复与否应该是用equals()方法。先比较两个对象的hashCode()值是否相等,如果不相等就认为两个对象是不相等的,如果两个对象的hashCode相等就继续调用equals()方法进一步判断两个对象是否相等。Set里的元素对应的类需要实现hashCode()和equals()方法,如果没有实现,就会使用父类object类中的equals()方法比较,object类中的equals()方法中直接使用==比较了:

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

 

5、请说出你所知道的线程同步的方法。
回答:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由
JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

 

sleep()怎么会是线程同步的方法呢?跟线程同步没关系吧,Allnotity()也应该是notifyAll()吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值