搜狗2015校招(社區搜索:Java工程師)一面經歷

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的多線程投票問題:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章