2019年一篇靠谱的面试题Java,请老师改卷

Owen Jia 2019年09月04日 1,607次浏览

Java面试题

题库来自:瑞阙文化 请哪位老师改卷点评

1) 请问equals() 与 == 的区别是什么?

==比较的是对象生成的hashcode,equals比较的是对象值内容;String类型比较字符串值,一般对象需要手动编写比较逻辑。

2) 一个队列类中调用了java.lang.Object.notify() 方法后,请问此类中还将可能调用哪一对象方法?

obj.wait() 这是个成对的方法;调用wait方法的线程进入等待,直到有线程调用该对象的notify方法才能唤醒等待的线程;notifyAll()可以唤醒所有等等的线程。

3) 请问以下代码片断的输出结果是什么?

// A.java
// ------

class A {
  A() { i = (j++ != 0) ? ++j : --j; }
  public int i;
  public static int j = 0;
}

// M.java
// ------

class M {
  public static void main(String[] args) {
    A a1 = new A();

    System.out.println(a1.i);
    System.out.println(a2.i);
  }
  
  static A a2 = new A();
}

0
0

4) 实现方法int FindNextPrime(int i),使其返回下一个大于i的质数.

int FindNextPrime(int i) {

i++;
boolean isOnly = true;

while(isOnly){

for(int j=2; j<i; j++){
if(i%j==0){//不是质数判断
isOnly = false;
break;
}
}//for

if(isOnly){
return i;
}
i++;

}//while

return i;
}//all

int FindNextPrime(int i) {
i++;
boolean isOnly = true;

for(int j=2; j<i; j++){
if(i%j==0){
isOnly =false;
break;
}//if
}//for

if(isOnly){
return i;
}else{
return FindNextPrime(i++);
}
}//all

5) 请简述你将如何使用一款你所熟悉的调试工具来调试一个服务器死锁进程

Linux 常用的查看命令,可以看到进程状态 ps aux|grep [pthread] top

通过jdk自带的工具包jvisualvm 可以查看到进程内具体细节,支持本地和远程连接

At 2019-09-04 答:

先用top查到进程的pid号,在用top -H -p ,查看进程卡的线程ID号,再用jstack -l ,列出所有线程运行状态,并查找卡的线程ID(jstack输出中为16进制)运行的内容。

6) 请简述对于HashTable, HashMap 和 ConcurrentHashMap 你将如何选取调用.

HashTable相对于HashMap来说是线程安全的;
HashMap在扩容时会rehash导致所有数据引用改变,并行时会出现死循环状况;
HashTable修改数据时会锁住整个hashTable,效率很低并且不允许null存储;
ConcurrentHashMap相对于HashTable也是线程安全的,但采用分段锁允许并行修改数据,性能远高于HashTable。

基本原则:

HashTable比较老旧,现在基本抛弃不使用。一般不需要并发操作时使用HashMap,需要并发操作则使用ConcurrentHashMap。

7)MYSQL数据库中有一张学生成绩表

表名:table 字段: student(学生), class(班级), total(总分) 字段说明: 班级取值范围 1-10,一共10个班。 请用SQL查出每个班级的前三名

Select student,class total From table where class = ‘1’ order by total desc limit 3
Union all
Select student,class total From table where class = ‘2’ order by total desc limit 3
Union all
…
Union all
Select student,class total From table where class = ‘10’ order by total desc limit 3

或者

Select *
From (
Select a.class, a.student, count(*) rank
From table a
Inner join table b on a.class = b.class and a.total <= b.tatol
Group by a.class, a.student
) c
Where c.rank <= 3

8)有一个单链表,现在仅有该链表中间一个节点的引用,如何把这个节点从这个链表中移除,或者等价移除

单链表的结构是值和下一个节点的引用,所以只要把中间这个节点的值和引用用下一个节点的值和引用覆盖掉就可以到达移除的效果。

20190903 答

用已有的中间节点找到下一个节点的值和引用来覆盖当前中间节点值和引用,递归执行到最后一个引用为null即可。

推荐

作者:Owen Jia
他的博客:Owen Blog