2015年9月23日,一大早接到電話,約我6點面試。開始準備了一天的面試。下午五點多到了交大南洋大酒店,面試官打來電話,讓我再等一會,面試可能推遲。
七點十分接到電話,進去面試。
這是我見過的最Nice的面試官,整個面試的過程非常愉快,雖然面試結果並不好。
問題一:(昨晚筆試過的最後第一道大題)用兩個Stack實現一個雙向隊列,Stack有pop、push、size三個方法。
Class<T> DequeBy2Stack{
Stack stack1;
Stack stack2;
DequeBy2Stack();
int size();
T popFront();
void pushFront(T o);
T popBack();
viod pushBack(T o);
}
問題二、(昨晚筆試過的最後第二道大題)定義並實現一個DomainSearcher的類,用於搜索一個整數是否在已經添加的任何一個區間。要實現以下兩個方法。
/*添加一個從from到to的閉區間,返回成功與否*/
boolean AddDomain(int from,int to);
/*查找整數n是否在任意一個區間內*/
boolean Search(int n);
問題三、(簡歷上的技能)說一說你對Java反射機制的理解,平時是怎麼用的?
問題四、你做了這麼多項目,請問你們的項目中用哪些什麼技術,用的什麼容器?
答:SpringMVC+Hibernate+Tomcat
問題四、那你說說SpirngMVC爲什麼比直接用Servlet好用,原理、流程是什麼樣的?
問題五、(簡歷上的)你提到了會多線程編程,請說一說多線程創建的方式有哪幾種?
問題六、現在有一個隊列,給定線程A,執行以下操作:如果隊列非空,打印隊裏的東西;否則線程處於等待狀態。那麼怎麼可以讓線程A的操作"優雅地"關閉(ps:不採用強制
的Thread.interrupted()關閉線程A;)
import java.util.Stack;
public class ThreadQuestion {
private Stack stack;
class A implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
if (stack.isEmpty()) {
// 線程等待
} else {
// 打印一下隊列裏的字符串
System.out.println(stack.pop());
}
}
}
}
}
如上、面試官在紙上給我寫出了代碼,讓我做做一下改進,怎麼讓線程A"優雅的"關閉?答案:
import java.util.Stack;
public class ThreadQuestion {
private static Stack<String> stack;
private static Boolean flag = true;
class A implements Runnable {
@Override
public void run() {
while (flag) {
if (stack.isEmpty()) {
// 線程等待
} else {
// 打印一下隊列裏的字符串
System.out.println(stack.pop());
}
}
}
}
class B implements Runnable {
@Override
public void run() {
// 定義開關量,讓線程A的操作“優雅的”關閉,不採用強制的Thread.interrupted()關閉線程A;
flag = false;
}
}
}
問題六、你提到了會Socket,關於一個Socket的多線程投票問題: