java作為面試官如何提問
作為面試官如果要面試一個(gè)java員,那么該如何提問呢?下面是學(xué)習(xí)啦小編給大家整理的java作為面試官如何提問,供大家參閱!
java作為面試官如何提問
1、連串式提問
即人力資源主考官向面試者提出一連串相關(guān)的問題,要求應(yīng)試者逐個(gè)回答。這種提問方式主要是考察面試者的反應(yīng)能力、思維的邏輯性和條理性。
例如:“你在過去的工作中出現(xiàn)過什么重大失誤?如果有,是什么?從這件事本身你吸取的教訓(xùn)是什么?如果今后在遇到此類情況,你會如何處理?”
回答這個(gè)問題,首先要保持鎮(zhèn)靜,不要被一連串的問題嚇住,要聽清主考官問了哪些問題,這些問題一般都是相關(guān),要回答后一個(gè)必須以前一個(gè)問題的回答為基礎(chǔ),這就更要求應(yīng)試者聽清題目及其順序,逐一回答。
2、開放式提問
所謂開放式提問,就是指提出的問題應(yīng)聘者不能使用簡單的“是”或“不是”來回答,而必須另加解釋才能回答圓滿。因此,主考官提出的問題如果能引發(fā)面試者給予詳細(xì)的說明,則符合“開放式提問”的要求。面試的提問一般都應(yīng)該用開放式的提問,以便引出應(yīng)試者的思路,真實(shí)考察其水平。
那么,什么樣的題目是開放式的題目,以下舉幾個(gè)的例子:
你在大學(xué)期間,從事過那些社會工作?
你的專業(yè)課開了多少門?你認(rèn)為這些課將對工作有什么幫助嗎?
什么原因促使你在二年內(nèi)換了三次工作?這類提問的目的是為了從應(yīng)試者那里獲得大量豐富的訊息;并且鼓勵(lì)應(yīng)試者回答問題,避免被動。提問方式常用“如何……”“什么……”“為什么……”“哪個(gè)……”等。
回答這類問題,應(yīng)試者應(yīng)該開闊思路,對主考官提出的問題盡量給予圓滿的回答,同時(shí)要注意做到條理清晰、邏輯性強(qiáng),說理透徹,充分展現(xiàn)各方面的能力。這樣才能讓主考官盡可能多的了解自己,這是一個(gè)被錄用的前提條件,如果應(yīng)試者不能被主考官所了解,就根本談不上被錄用。
3、非引導(dǎo)式提問
對于非引導(dǎo)式提問,應(yīng)試者可以充分發(fā)揮,盡量說服自己心中的感受、意見、看法和評論。這樣的問題沒有“特定”的回答方式,也沒有“特定”的答案。
例如,主考官問:“請你談一談?chuàng)螌W(xué)生干部時(shí)的經(jīng)驗(yàn)。”這就是“非引導(dǎo)式”談話。主考官提出問題之后,便可靜靜的聆聽對方的敘述,而不必再有其他的表示。與引導(dǎo)式談話相比,非引導(dǎo)式談話中,應(yīng)試者可以盡量多說,該說什么就說什么,因此可以提供豐富的資料。應(yīng)試者的閱歷、經(jīng)驗(yàn)、語言表達(dá)能力、分析概括能力都得到了充分的展現(xiàn),這樣有利于主考官作出客觀的評價(jià)。
4、封閉式提問
這是一種可以得到具體回答問題。這類問題比較簡單、常規(guī),涉及范圍較小。關(guān)于下面的一些情況常用封閉式提問:工作經(jīng)歷:包括過去的工作職位、成就、工作成績、個(gè)人收入、工作滿意與否以及調(diào)動原因。學(xué)歷:包括專業(yè)、學(xué)習(xí)成績、突出的學(xué)科、最討厭的學(xué)科、課程設(shè)置等。早期家庭狀況:包括父母的職業(yè)、家庭收入、家庭成員等。個(gè)性與追求:包括性格、愛好、愿望、需求、情緒、目標(biāo)設(shè)置與人生態(tài)度等。
Java程序員經(jīng)典面試題
1.Java 中能創(chuàng)建Volatile 數(shù)組嗎?
能,Java 中可以創(chuàng)建 volatile 類型數(shù)組,不過只是一個(gè)指向數(shù)組的引用,而不是整個(gè)數(shù)組。我的意思是,如果改變引用指向的數(shù)組,將會受到 volatile 的保護(hù),但是如果多個(gè)線程同時(shí)改變數(shù)組的元素,volatile 標(biāo)示符就不能起到之前的保護(hù)作用了。
2.volatile 能使得一個(gè)非原子操作變成原子操作嗎?
一個(gè)典型的例子是在類中有一個(gè)long 類型的成員變量。如果你知道該成員變量會被多個(gè)線程訪問,如計(jì)數(shù)器、價(jià)格等,你最好是將其設(shè)置為 volatile。為什么?因?yàn)?Java 中讀取long 類型變量不是原子的,需要分成兩步,如果一個(gè)線程正在修改該 long 變量的值,另一個(gè)線程可能只能看到該值的一半(前 32 位)。但是對一個(gè) volatile 型的 long 或double 變量的讀寫是原子。
3.volatile 修飾符的有過什么實(shí)踐?
一種實(shí)踐是用 volatile 修飾 long 和 double 變量,使其能按原子類型來讀寫。
double 和 long 都是64位寬,因此對這兩種類型的讀是分為兩部分的,第一次讀取第一個(gè) 32 位,然后再讀剩下的 32 位,這個(gè)過程不是原子的,但Java 中 volatile 型的 long 或 double 變量的讀寫是原子的。volatile 修復(fù)符的另一個(gè)作用是提供內(nèi)存屏障(memory barrier),例如在分布式框架中的應(yīng)用。簡單的說,就是當(dāng)你寫一個(gè) volatile 變量之前,Java 內(nèi)存模型會插入一個(gè)寫屏障(writebarrier),讀一個(gè)volatile 變量之前,會插入一個(gè)讀屏障(read barrier)。意思就是說,在你寫一個(gè)volatile 域時(shí),能保證任何線程都能看到你寫的值,同時(shí),在寫之前,也能保證任何數(shù)值的更新對所有線程是可見的,因?yàn)閮?nèi)存屏障會將其他所有寫的值更新到緩存。
4.volatile 類型變量提供什么保證?
volatile 變量提供順序和可見性保證,例如,JVM或者 JIT為了獲得更好的性能會對語句重排序,但是 volatile 類型變量即使在沒有同步塊的情況下賦值也不會與其他語句重排序。 volatile 提供 happens-before 的保證,確保一個(gè)線程的修改能對其他線程是可見的。某些情況下,volatile 還能提供原子性,如讀 64 位數(shù)據(jù)類型,像 long 和 double 都不是原子的,但 volatile 類型的 double 和 long 就是原子的。
5.10個(gè)線程和2個(gè)線程的同步代碼,哪個(gè)更容易寫?
從寫代碼的角度來說,兩者的復(fù)雜度是相同的,因?yàn)橥酱a與線程數(shù)量是相互獨(dú)立的。但是同步策略的選擇依賴于線程的數(shù)量,因?yàn)樵蕉嗟木€程意味著更大的競爭,所以你需要利用同步技術(shù),如鎖分離,這要求更復(fù)雜的代碼和專業(yè)知識。
6.你是如何調(diào)用wait()方法的?使用if 塊還是循環(huán)?為什么?
wait() 方法應(yīng)該在循環(huán)調(diào)用,因?yàn)楫?dāng)線程獲取到CPU 開始執(zhí)行的時(shí)候,其他條件可能還沒有滿足,所以在處理前,循環(huán)檢測條件是否滿足會更好。下面是一段標(biāo)準(zhǔn)的使用 wait 和 notify 方法的代碼:
// The standard idiom for using the waitmethodsynchronized (obj) {while (condition does not hold)
obj.wait(); // (Releases lock, andreacquires on wakeup)... // Perform action appropriate to condition}
7.什么是多線程環(huán)境下的偽共享(false sharing)?
偽共享是多線程系統(tǒng)(每個(gè)處理器有自己的局部緩存)中一個(gè)眾所周知的性能問題。偽共享發(fā)生在不同處理器的上的線程對變量的修改依賴于相同的緩存行。
Java 中應(yīng)該使用什么數(shù)據(jù)類型來代表價(jià)格?
如果不是特別關(guān)心內(nèi)存和性能的話,使用BigDecimal,否則使用預(yù)定義精度的 double 類型。
8.怎么將byte轉(zhuǎn)換為String?
可以使用 String 接收 byte[] 參數(shù)的構(gòu)造器來進(jìn)行轉(zhuǎn)換,需要注意的點(diǎn)是要使用的正確的編碼,否則會使用平臺默認(rèn)編碼,這個(gè)編碼可能跟原來的編碼相同,也可能不同。
我們能將int強(qiáng)制轉(zhuǎn)換為byte 類型的變量嗎?如果該值大于byte 類型的范圍,將會出現(xiàn)什么現(xiàn)象?
是的,我們可以做強(qiáng)制轉(zhuǎn)換,但是Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果強(qiáng)制轉(zhuǎn)化是,int 類型的高 24 位將會被丟棄,byte 類型的范圍是從 -128 到 128。
9.哪個(gè)類包含 clone 方法?是 Cloneable 還是 Object?
java.lang.Cloneable 是一個(gè)標(biāo)示性接口,不包含任何方法,clone 方法在 object 類中定義。并且需要知道 clone() 方法是一個(gè)本地方法,這意味著它是由 c 或 c++ 或其他本地語言實(shí)現(xiàn)的。
10.Java 中++ 操作符是線程安全的嗎?
不是線程安全的操作。它涉及到多個(gè)指令,如讀取變量值,增加,然后存儲回內(nèi)存,這個(gè)過程可能會出現(xiàn)多個(gè)線程交差。
a = a + b 與a += b 的區(qū)別+= 隱式的將加操作的結(jié)果類型強(qiáng)制轉(zhuǎn)換為持有結(jié)果的類型。如果兩這個(gè)整型相加,如byte、short 或者int,首先會將它們提升到int 類型,然后在執(zhí)行加法操作。如果加法操作的結(jié)果比a 的最大值要大,則a+b 會出現(xiàn)編譯錯(cuò)誤,但是a += b 沒問題,如下:
byte a = 127;byte b = 127;b = a + b; // error : cannot convert from int to byteb += a; // ok(譯者注:這個(gè)地方應(yīng)該表述的有誤,其實(shí)無論 a+b的值為多少,編譯器都會報(bào)錯(cuò),因?yàn)?a+b 操作會將 a、b 提升為 int 類型,所以將 int 類型賦值給 byte 就會編譯出錯(cuò))。