第一篇:Java程序員面試中的多線程問題
很多核心Java面試題來源于多線程(Multi-Threading)和集合框架
(Collections Framework),理解核心線程概念時,嫻熟的實際經驗是必需的。這篇文章收集了Java線程方面一些典型的問題,這些問題經常被高級工程師所問到。
0、Java中多線程同步是什么?
在多線程程序下,同步能控制對共享資源的訪問。如果沒有同步,當一個Java線程在修改一個共享變量時,另外一個線程正在使用或者更新同一個變量,這樣容易導致程序出現錯誤的結果。
1、解釋實現多線程的幾種方法?
一Java線程可以實現Runnable接口或者繼承Thread類來實現,當你打算多重繼承時,優先選擇實現Runnable。
2、Thread.start()與Thread.run()有什么區別?
Thread.start()方法(native)啟動線程,使之進入就緒狀態,當cpu分配時間該線程時,由JVM調度執行run()方法。
3、為什么需要run()和start()方法,我們可以只用run()方法來完成任務嗎? 我們需要run()&start()這兩個方法是因為JVM創建一個單獨的線程不同于普通方法的調用,所以這項工作由線程的start方法來完成,start由本地方法實現,需要顯示地被調用,使用這倆個方法的另外一個好處是任何一個對象都可以作為線程運行,只要實現了Runnable接口,這就避免因繼承了Thread類而造成的Java的多繼承問題。
4、什么是ThreadLocal類,怎么使用它?
ThreadLocal是一個線程級別的局部變量,并非“本地線程”。ThreadLocal為每個使用該變量的線程提供了一個獨立的變量副本,每個線程修改副本時不影響其它線程對象的副本(譯者注)。
下面是線程局部變量(ThreadLocal variables)的關鍵點:
一個線程局部變量(ThreadLocal variables)為每個線程方便地提供了一個單獨的變量。
ThreadLocal實例通常作為靜態的私有的(private static)字段出現在一個類中,這個類用來關聯一個線程。
當多個線程訪問ThreadLocal實例時,每個線程維護ThreadLocal提供的獨立的變量副本。
常用的使用可在DAO模式中見到,當DAO類作為一個單例類時,數據庫鏈接(connection)被每一個線程獨立的維護,互不影響。(基于線程的單例)ThreadLocal難于理解,下面這些引用連接有助于你更好的理解它?!禛ood article on ThreadLocal on IBM DeveloperWorks 》、《理解
ThreadLocal》、《Managing data : Good example》、《Refer Java API Docs》
6、Sleep()、suspend()和wait()之間有什么區別?
Thread.sleep()使當前線程在指定的時間處于“非運行”(Not Runnable)狀態。線程一直持有對象的監視器。比如一個線程當前在一個同步塊或同步方法中,其它線程不能進入該塊或方法中。如果另一線程調用了interrupt()方法,它將喚醒那個“睡眠的”線程。
注意:sleep()是一個靜態方法。這意味著只對當前線程有效,一個常見的錯誤是調用t.sleep(),(這里的t是一個不同于當前線程的線程)。即便是執行t.sleep(),也是當前線程進入睡眠,而不是t線程。t.suspend()是過時的方法,使用suspend()導致線程進入停滯狀態,該線程會一直持有對象的監視器,suspend()容易引起死鎖問題。
object.wait()使當前線程出于“不可運行”狀態,和sleep()不同的是wait是object的方法而不是thread。調用object.wait()時,線程先要獲取這個對象的對象鎖,當前線程必須在鎖對象保持同步,把當前線程添加到等待隊列中,隨后另一線程可以同步同一個對象鎖來調用object.notify(),這樣將喚醒原來等待中的線程,然后釋放該鎖?;旧蟱ait()/notify()與sleep()/interrupt()類似,只是前者需要獲取對象鎖。
7、在靜態方法上使用同步時會發生什么事?
同步靜態方法時會獲取該類的“Class”對象,所以當一個線程進入同步的靜態方法中時,線程監視器獲取類本身的對象鎖,其它線程不能進入這個類的任何靜態同步方法。它不像實例方法,因為多個線程可以同時訪問不同實例同步實例方法。
8、當一個同步方法已經執行,線程能夠調用對象上的非同步實例方法嗎? 可以,一個非同步方法總是可以被調用而不會有任何問題。實際上,Java沒有為非同步方法做任何檢查,鎖對象僅僅在同步方法或者同步代碼塊中檢查。如果一個方法沒有聲明為同步,即使你在使用共享數據Java照樣會調用,而不會做檢查是否安全,所以在這種情況下要特別小心。一個方法是否聲明為同步取決于臨界區訪問(critial section access),如果方法不訪問臨界區(共享資源或者數據結構)就沒必要聲明為同步的。
9、在一個對象上兩個線程可以調用兩個不同的同步實例方法嗎?
不能,因為一個對象已經同步了實例方法,線程獲取了對象的對象鎖。所以只有執行完該方法釋放對象鎖后才能執行其它同步方法。
看下面代碼示例非常清晰:Common 類 有synchronizedMethod1()和synchronizedMethod2()方法,MyThread調用這兩個方法。
10、什么是死鎖
死鎖就是兩個或兩個以上的線程被無限的阻塞,線程之間相互等待所需資源。這種情況可能發生在當兩個線程嘗試獲取其它資源的鎖,而每個線程又陷入無限等待其它資源鎖的釋放,除非一個用戶進程被終止。就JavaAPI而言,線程死鎖可能發生在一下情況。
● 當兩個線程相互調用Thread.join()
● 當兩個線程使用嵌套的同步塊,一個線程占用了另外一個線程必需的鎖,互相等待時被阻塞就有可能出現死鎖。
11、什么是線程餓死,什么是活鎖?
線程餓死和活鎖雖然不想是死鎖一樣的常見問題,但是對于并發編程的設計者來說就像一次邂逅一樣。
當所有線程阻塞,或者由于需要的資源無效而不能處理,不存在非阻塞線程使資源可用。JavaAPI中線程活鎖可能發生在以下情形:
● 當所有線程在程序中執行Object.wait(0),參數為0的wait方法。程序將發生活鎖直到在相應的對象上有線程調用Object.notify()或者
Object.notifyAll()。
● 當所有線程卡在無限循環中。
這里的問題并不詳盡,我相信還有很多重要的問題并未提及,您認為還有哪些問題應該包括在上面呢?歡迎在評論中分享任何形式的問題與建議。
第二篇:Java程序員面試中的多線程問題
Java程序員面試中的多線程問題
摘要:很多核心Java面試題來源于多線程(Multi-Threading)和集合框架(Collections Framework),理解核心線程概念時,嫻熟的實際經驗是必需的。這篇文章收集了 Java 線程方面一些典型的問題,這些問題經常被高級工程師所問到。
很多核心Java面試題來源于多線程(Multi-Threading)和集合框架(Collections Framework),理解核心線程概念時,嫻熟的實際經驗是必需的。這篇文章收集了 Java 線程方面一些典型的問題,這些問題經常被高級工程師所問到。
0.Java 中多線程同步是什么?
在多線程程序下,同步能控制對共享資源的訪問。如果沒有同步,當一個 Java 線程在修改一個共享變量時,另外一個線程正在使用或者更新同一個變量,這樣容易導致程序出現錯誤的結果。
1.解釋實現多線程的幾種方法?
一 Java 線程可以實現 Runnable 接口或者繼承 Thread 類來實現,當你打算多重繼承時,優先選擇實現 Runnable。
2.Thread.start()與 Thread.run()有什么區別?
Thread.start()方法(native)啟動線程,使之進入就緒狀態,當 cpu 分配時間該線程時,由 JVM 調度執行 run()方法。
3.為什么需要 run()和 start()方法,我們可以只用 run()方法來完成任務嗎?
我們需要 run()&start()這兩個方法是因為 JVM 創建一個單獨的線程不同于普通方法的調用,所以這項工作由線程的 start 方法來完成,start 由本地方法實現,需要顯示地被調用,使用這倆個方法的另外一個好處是任何一個對象都可以作為線程運行,只要實現了 Runnable 接口,這就避免因繼承了 Thread 類而造成的 Java 的多繼承問題。
4.什么是 ThreadLocal 類,怎么使用它?
ThreadLocal 是一個線程級別的局部變量,并非“本地線程”。ThreadLocal 為每個使用該變量的線程提供了一個獨立的變量副本,每個線程修改副本時不影響其它線程對象的副本(譯者注)。
下面是線程局部變量(ThreadLocal variables)的關鍵點:
一個線程局部變量(ThreadLocal variables)為每個線程方便地提供了一個單獨的變量。
ThreadLocal 實例通常作為靜態的私有的(private static)字段出現在一個類中,這個類用來關聯一個線程。
當多個線程訪問 ThreadLocal 實例時,每個線程維護 ThreadLocal 提供的獨立的變量副本。
常用的使用可在 DAO 模式中見到,當 DAO 類作為一個單例類時,數據庫鏈接(connection)被每一個線程獨立的維護,互不影響。(基于線程的單例)
ThreadLocal 難于理解,下面這些引用連接有助于你更好的理解它。
《Good article on ThreadLocal on IBM DeveloperWorks 》、《理解 ThreadLocal》、《Managing data : Good example》、《Refer Java API Docs》
5.什么時候拋出 InvalidMonitorStateException 異常,為什么?
調用 wait()/notify()/notifyAll()中的任何一個方法時,如果當前線程沒有獲得該對象的鎖,那么就會拋出 IllegalMonitorStateException 的異常(也就是說程序在沒有執行對象的任何同步塊或者同步方法時,仍然嘗試調用 wait()/notify()/notifyAll()時)。由于該異常是 RuntimeExcpetion 的子類,所以該異常不一定要捕獲(盡管你可以捕獲只要你愿意).作為 RuntimeException,此類異常不會在 wait(),notify(),notifyAll()的方法簽名提及。
6.Sleep()、suspend()和 wait()之間有什么區別?
Thread.sleep()使當前線程在指定的時間處于“非運行”(Not Runnable)狀態。線程一直持有對象的監視器。比如一個線程當前在一個同步塊或同步方法中,其它線程不能進入該塊或方法中。如果另一線程調用了 interrupt()方法,它將喚醒那個“睡眠的”線程。
注意:sleep()是一個靜態方法。這意味著只對當前線程有效,一個常見的錯誤是調用t.sleep
(),(這里的t是一個不同于當前線程的線程)。即便是執行t.sleep(),也是當前線程進入睡眠,而不是t線程。t.suspend()是過時的方法,使用 suspend()導致線程進入停滯狀態,該線程會一直持有對象的監視器,suspend()容易引起死鎖問題。
object.wait()使當前線程出于“不可運行”狀態,和 sleep()不同的是 wait 是 object 的方法而不是 thread。調用 object.wait()時,線程先要獲取這個對象的對象鎖,當前線程必須在鎖對象保持同步,把當前線程添加到等待隊列中,隨后另一線程可以同步同一個對象鎖來調用 object.notify(),這樣將喚醒原來等待中的線程,然后釋放該鎖?;旧?wait()/notify()與 sleep()/interrupt()類似,只是前者需要獲取對象鎖。
7.在靜態方法上使用同步時會發生什么事?
同步靜態方法時會獲取該類的“Class”對象,所以當一個線程進入同步的靜態方法中時,線程監視器獲取類本身的對象鎖,其它線程不能進入這個類的任何靜態同步方法。它不像實例方法,因為多個線程可以同時訪問不同實例同步實例方法。
8.當一個同步方法已經執行,線程能夠調用對象上的非同步實例方法嗎?
可以,一個非同步方法總是可以被調用而不會有任何問題。實際上,Java 沒有為非同步方法做任何檢查,鎖對象僅僅在同步方法或者同步代碼塊中檢查。如果一個方法沒有聲明為同步,即使你在使用共享數據 Java 照樣會調用,而不會做檢查是否安全,所以在這種情況下要特別小心。一個方法是否聲明為同步取決于臨界區訪問(critial section access),如果方法不訪問臨界區(共享資源或者數據結構)就沒必要聲明為同步的。
下面有一個示例說明:Common 類有兩個方法 synchronizedMethod1()和 method1(),MyThread 類在獨立的線程中調用這兩個方法。
public class Common {
public synchronized void synchronizedMethod1(){
System.out.println(“synchronizedMethod1 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“synchronizedMethod1 done”);
}
public void method1(){
System.out.println(“Method 1 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“Method 1 done”);
}
}
public class MyThread extends Thread {
private int id = 0;
private Common common;
public MyThread(String name, int no, Common object){
super(name);
common = object;
id = no;
}
public void run(){
System.out.println(“Running Thread” + this.getName());
if(id == 0){
common.synchronizedMethod1();
} else {
common.method1();
}
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
Common c = new Common();
MyThread t1 = new MyThread(“MyThread-1”, 0, c);
MyThread t2 = new MyThread(“MyThread-2”, 1, c);
t1.start();
t2.start();
}
}
這里是程序的輸出:
Running ThreadMyThread-1
synchronizedMethod1 called
Running ThreadMyThread-2
Method 1 called
synchronizedMethod1 done
Method 1 done
結果表明即使 synchronizedMethod1()方法執行了,method1()也會被調用。
9.在一個對象上兩個線程可以調用兩個不同的同步實例方法嗎?
不能,因為一個對象已經同步了實例方法,線程獲取了對象的對象鎖。所以只有執行完該方法釋放對象鎖后才能執行其它同步方法??聪旅娲a示例非常清晰:Common 類有 synchronizedMethod1()和 synchronizedMethod2()方法,MyThread 調用這兩個方法。
public class Common {
public synchronized void synchronizedMethod1(){
System.out.println(“synchronizedMethod1 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
System.out.println(“synchronizedMethod1 done”);
}
public synchronized void synchronizedMethod2(){
System.out.println(“synchronizedMethod2 called”);
try {
Thread.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(“synchronizedMethod2 done”);
}
}
public class MyThread extends Thread {
private int id = 0;
private Common common;
public MyThread(String name, int no, Common object){
super(name);
common = object;
id = no;
}
public void run(){
System.out.println(“Running Thread” + this.getName());
try {
if(id == 0){
common.synchronizedMethod1();
} else {
common.synchronizedMethod2();
}
} catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
Common c = new Common();
MyThread t1 = new MyThread(“MyThread-1”, 0, c);
MyThread t2 = new MyThread(“MyThread-2”, 1, c);
t1.start();
t2.start();
}
10.什么是死鎖
死鎖就是兩個或兩個以上的線程被無限的阻塞,線程之間相互等待所需資源。這種情況可能發生在當兩個線程嘗試獲取其它資源的鎖,而每個線程又陷入無限等待其它資源鎖的釋放,除非一個用戶進程被終止。就 JavaAPI 而言,線程死鎖可能發生在一下情況。
當兩個線程相互調用 Thread.join()
當兩個線程使用嵌套的同步塊,一個線程占用了另外一個線程必需的鎖,互相等待時被阻塞就有可能出現死鎖。
11.什么是線程餓死,什么是活鎖?
線程餓死和活鎖雖然不想是死鎖一樣的常見問題,但是對于并發編程的設計者來說就像一次邂逅一樣。
當所有線程阻塞,或者由于需要的資源無效而不能處理,不存在非阻塞線程使資源可用。JavaAPI 中線程活鎖可能發生在以下情形:
當所有線程在程序中執行 Object.wait(0),參數為 0 的 wait 方法。程序將發生活鎖直到在相應的對象上有線程調用 Object.notify()或者 Object.notifyAll()。
當所有線程卡在無限循環中。
這里的問題并不詳盡,我相信還有很多重要的問題并未提及,您認為還有哪些問題應該包括在上面呢?歡迎在評論中分享任何形式的問題與建議。
第三篇:JAVA程序員面試技巧
java程序員面試題 第一部分:選擇題 question no: 1
1、public class test { public static void changestr(string str){ } public static void main(string[] args){ string str=1234;changestr(str);system.out.println(str);} } please write the output result : question no:2 1.public class test { 2.static boolean foo(char c){ 3.system.out.print(c);4.return true;5.} 6.public static void main(string[] argv){ 7.int i =0;8.for(foo(a);foo(b)&&(i<2);foo(c)){ 9.i++;10.foo(d);12.} 13.} 14.} what is the result? a.abdcbdcb b.abcdabcd d.an exception is thrown at runtime.question no: 3 1.class a { 2.protected int method1(int a, int b){ return 0;} 3.} which two are valid in a class that extends class a?(choose two)a.public int method1(int a, int b){ return 0;} b.private int method1(int a, int b){ return 0;} c.private int method1(int a, long b){ return 0;} d.public short method1(int a, int b){ return 0;} e.static protected int method1(int a, int b){ return 0;} question no: 4 1.public class outer{ 2.public void someoutermethod(){ 3.// line 3 4.} 5.public class inner{} 6.public static void main(string[]argv){ 7.outer o = new outer();8.// line 8 9.} 10.} which instantiates an instance of inner? a.new inner();// at line 3 b.new inner();// at line 8 c.new o.inner();// at line 8 d.new outer.inner();// at line 8//new outer().new inner()question no: 5 which method is used by a servlet to place its session id in a url that is written to the servlet’s response output stream? question no: 6 which two are equivalent?(choose two)a.b.c.d.e.f.g.question no: 7 which of the following statements regarding the lifecycle of a session bean are correct? 1.java.lang.illegalstateexception is thrown if sessioncontext.getejbobject()is invoked when a stateful session bean instance is passivated.2.sessioncontext.getrollbackonly()does not throw an exception when a session bean with bean-managed transaction demarcation is activated.3.an exception is not thrown when sessioncontext.getusertransaction()is called in the afterbegin method of a bean with container-managed transactions.5.accessing resource managers in the sessionsynchronization.afterbegin method of a stateful session bean with bean-managed transaction does not throw an exception.第二部分:概念題
1.描述struts體系結構?對應各個部分的開發工作主要包括哪些? 3.jsp有哪些內置對象和動作?它們的作用分別是什么?
4、sql問答題
select * from table 和
select * from table where name like %% and addr like %% and(1_addr like %% or 2_addr like %% or 3_addr like %% or 4_addr like %%)的檢索結果為何不同?
5、sql問答題
表結構:
1、表名:g_cardapply 字段(字段名/類型/長度): g_applyno varchar 8;//申請單號(關鍵字)g_applydate bigint 8;//申請日期 g_state varchar 2;//申請狀態
2、表名:g_cardapplydetail 字段(字段名/類型/長度): g_applyno varchar 8;//申請單號(關鍵字)g_name varchar 30;//申請人姓名 g_idcard varchar 18;//申請人身份證號 g_state varchar 2;//申請狀態
其中,兩個表的關聯字段為申請單號。
題目:
1、查詢身份證號碼為***的申請日期
2、查詢同一個身份證號碼有兩條以上記錄的身份證號碼及記錄個數
3、將身份證號碼為***的記錄在兩個表中的申請狀態均改為07
4、刪除g_cardapplydetail表中所有姓李的記錄
華為java筆試題
一、單項選擇題
1.java是從()語言改進重新設計。a.ada b.c++ c.pasacal d.basic篇二:java程序員面試注意事項
一、回答問題的思路
先正面敘述一些基本的核心知識,然后描述一些特殊的東西,最后再來一些錦上添花的東西。要注意有些不是錦上添花,而是畫蛇添足的東西,不要隨便寫上。把答題像寫書一樣寫。我要回答一個新技術的問題大概思路和步驟是:我們想干什么,干這個遇到了什么問題,現在用什么方式來解決。其實我們講課也是這樣一個思路。
答題時,先答是什么,再答有什么作用和要注意什么(這部分最重要,展現自己的心得)。答案的層次分明,條理清楚都非常重要,從這些表面的東西也可以看出一個人的習慣、辦事風格、條理等。要講你做出答案的思路過程,或者說你記住答案的思想都寫下來。把答題想著是辯論賽。答題就是給別人講道理、擺事實。答題不局限于什么格式和形式,就是要將自己的學識展現出來!
另外,不要因為人家題目本來就模棱兩可,你就心里膽怯和沒底氣了,不敢回答了。你要大膽地指出對方題目很模糊和你的觀點,不要把面試官想得有多高,其實他和你就是差不多的,你想想,如果他把你招進去了,你們以后就是同事了,可不是差不多的嗎?
二、關于就業薪水
如果你是應屆生,那不能要高工資,好比大餅的故事,要拿高工資,就去中關村!少數人基礎確實很好,在校期間確實又做過一些項目,那仍然是可以要到相對高的工資的。
初級程序員薪水:2000-4500 中級程序員薪水:4000-7000 高級程序員薪水:7000以上
公司招聘程序員更看重的要用到的編碼技術、而不是那些業務不太相關的所謂項目經歷:
三、公司想招什么樣的人
對于一些公司接到了一些項目,想招聘一些初中級的程序員過來幫助寫代碼,完成這個項目,你更看重的是他的專業技術功底,還是以前做過幾個項目的經歷呢?我們先排除掉那些編碼技術功底好,又正好做過相似項目的情況,實際上,這種魚和熊掌兼得的情況并不常見。其實公司很清楚,只要招聘進來的人技術真的很明白,那他什么項目都可以做出來,公司招人不是讓你去重復做你以前的項目,而是做一個新項目,業務方面,你只要進了項目團隊,自然就能掌握。所以,大多數招聘單位在招聘那些編碼級別的程序員時也沒指望能招聘到做過類似項目的人,也不會刻意去找做過類似項目的人,用人單位也不是想把你招進,然后把你以前做過的項目重做一遍,所以,用人單位更看重招進來的人對要用到的編碼技術的功底到底怎樣,技術扎實不扎實,項目則只要跟著開發團隊走,自然就沒問題。除非是一些非常專業的行業,要招聘特別高級的開發人員和系統分析師,招聘單位才特別注重他的項目經驗和行業經驗,要去找到行業高手,公司才關心項目和與你聊項目的細節,這樣的人通常都不是通過常規招聘渠道去招聘進來的,而是通過各種手段挖過來的,這情況不再我今天要討論的范圍中。
四、公司面試會問什么,.技術學得明白不明白,人家幾個問題就把你的深淺問出來了,只要問一些具體的技術點,就很容易看出你是真懂還是假懂,很容看出你的技術深度和實力,所以,技術是來不得半點虛假的,必須扎扎實實。
由于項目的種類繁多,涉及到現實生活中的各行各業,什么五花八門的業務都有,例如,酒店房間預定管理,公司車輛調度管理,學校課程教室管理,超市進銷存管理,知識內容管理,等等……成千上萬等等,但是,不管是什么項目,采用的無非都是我們學習的那些目前流行和常用的技術。技術好、經驗豐富,則項目做出來的效率高些,程序更穩定和更容易維護些;技術差點,碰碰磕磕最后也能把項目做出來,無非是做的周期長點、返工的次數多點,程序代碼寫得差些,用的技術笨拙點。如果一個人不是完完全全做過某個項目,他是不太關心該項目的業務的,對其中的一些具體細節更是一竅不知,(如果我招你來做圖書管理,你項目經歷說你做過汽車調度,那我能問你汽車調度具體怎么回事嗎?不會,所以,你很容易蒙混過去的)而一個程序員的整個職業生涯中能實實在在和完完整整做出來的項目沒幾個,更別說在多個不同行業的項目了,有的程序員更是一輩子都只是在做某一個行業的項目,結果他就成了這個行業的專家(專門干一件事的家伙)。所以,技術面試官通常沒正好親身經歷過你簡歷寫的那些項目,他不可能去問你寫的那些項目的具體細節,而是只能泛泛地問你這個項目是多少人做的,做了多長時間,開發的過程,你在做項目的過程中有什么心得和收獲,用的什么技術等面上的問題,所以,簡歷上的項目經歷可以含有很多水分,很容易作假,技術面試官也無法在項目上甄別你的真偽。
五、簡歷怎么寫
簡歷該怎么寫:精通哪些技術,有一些什么項目經歷
六、怎樣達到簡歷上的標準(培訓中心教項目的目的)教項目是為了鞏固和靈活整合運用技術,增強學習的趣味性,熟悉做項目的流程,或得一些專業課程中無法獲得的特有項目經驗,增強自己面試的信心。講的項目應該真實可靠才有價值,否則,表面上是項目,實際上還是知識點的整合,對鞏固技術點和增強學習的趣味性,但無法獲得實際的項目經驗。
第四篇:java程序員面試必讀
Java程序員,面試必讀
☆★☆★快來!10月25日讀者見面會☆★☆★
清華大學出版社《Java程序員,上班那點事兒》作者:鐘聲 章節:1.2.2:
面試是一個“簡單”而又“復雜”的事情,正因為它具有“簡單”和“復雜”的雙重性質,才使我們對這個問題不敢掉以輕心。介紹如何面試,有時候甚至可以寫一本書,而有時候,你什么都不準備卻可以面試成功。
因為,面試的成功與否完全取決于主考官,因此,這門學問的主要科目就是研究主考官的招聘心理。
我們研究好主考官的招聘心理,自然就可以做到“知己知彼”了。
本小節只是說說面試的“心理戰”,而想真正的能夠對答如流,需要的是“真功夫”,要想具備“真功夫”還是需要真正的技術水平作為前提的,本小節的內容只是給那些已經具備相應技術水平的應聘者提供一定的應聘技巧而已,以避免沒有把自己的“真功夫”完全展示出來從而喪失工作機會。
面試前對自己的心理暗示:
面試并不是考試,只是和未來的同事聊聊天。
“心理戰”對象,可能出現的主考官如下幾類:
人物1,人力資源部主管(HR)
人物2,你未來的主管
人物3,你未來主管的主管
我們分別來分析遇到不同類型的主考官的不同情況。
人物1:人力資源部主管(HR)
“人物1”的出現往往是進行該職位的初審,給出一個概觀定論,如果合格將會提交給“人物2”?!叭宋?”他們所要進行的是對人的心理和基本技能方面的一個判斷。
不過,也有一些公司,首次面試仍然是由業務主管來進行,然后再將初審合格的人交給人力部門來復試,如果,是這種情況,你應該就算90%入職成功了,因為,這個復試往往是走個形式,看看此人有沒有被主管忽略的大問題,如果沒有,基本就差不多了。
那么,我們僅僅以第一種情況為例,看看“人物1”大多提出的是哪些問題。
常見提問1:請你自我介紹一下
這個問題,是人力部主考官必問的問題,這個問題的提問并不是真的想了解你的個人情況,因為,你的情況基本上在簡歷上都寫著呢。他提出這個問題的主要目的是來考察你的語言表達能力,和你在表達過程中的一些細節表現。
所以,我們應該怎么回答呢?
看看如下對話:
HR:“請你自我介紹一下”
A君:“您看簡歷吧,基本上我都寫在簡歷上了?!?/p>
HR:汗?
HR:“請你自我介紹一下”
B君:“我叫XXX,年齡24,性別男,籍貫??”
HR:倒?
HR:“請你自我介紹一下”
C君:“這話從何說起呢?話說10年前??”
HR:暈?
首先,不要認為主考官沒有認真的看你的簡歷,沒有看你的簡歷就讓你來面試,是在浪費他自己的時間,所以絕對是首先認為簡歷比較合適,才約你來的。
第二,自我介紹并不是讓你重復一下你簡歷上的所有內容,那些內容簡歷上都有,主考官主要是想聽聽你如何表達和語言的邏輯能力。
第三,這個表達不要滔滔不絕,要有張有弛,有收有放,主要將自己的想說的優勢部分分別道來,能夠通過你的介紹讓人感覺到你的“親和力”為佳。
“語言表達能力”并非我們日常所說的“能侃”或者“口才”,這是片面的理解,在面試過程中,我們要展現的“語言表達能力”是指,“語言親和力”,能夠讓人感受到你的“溝通”能力。
回答范例:
您好!我來自XXX大學,是應屆畢業生,所學專業是計算機應用技術,我在校期間參加多項課余工作,參與了多個應用系統的開發與設計,熟練掌握Java開發工具和應用系統的各種開發方法。在學習與工作期間,總結與實踐了各種技術實現手段,有了一些小的積累。
近期已經畢業,看到您公司的招聘信息,感覺自己的技術與能力非常合適,就投遞了簡歷。希望能過了您這關,呵呵??(注:最后的微笑最好不要太牽強,目的是緩和氣氛)
大家看到了,這個回答范例的自我介紹非常簡練,但是,什么也沒有落下。既實事求是的說了自己是應屆畢業生,又說明了自己雖然是應屆畢業生,但是參加了很多的課余工作,并且具有實際的項目開發經驗,而且有了一些小的積累。
既說了自己的對這份工作和自己能力之間的考量,又表達了自己對主考官的期望。
意思表達時不卑不亢,言簡意賅,讓人聽起來就感覺很舒服。
這時候你的目的就達到了,展現出自己的“語言表達能力”和“語言親和力”,同時又能夠讓人感受到你的“溝通”能力。
常見提問2:你最大的優點是什么?
這個問題如果是HR問,則最好回答了。
回答這個問題的關鍵是“圍繞自己的技術特長”展開話題,為什么這樣?
因為,往往HR都不懂技術,圍繞技術說自己的特長很容易給他說暈(當然,個別懂技術的HR除外)。這里要注意的是,在說技術問題的時候,不要讓HR感覺自己什么都不懂,要注意說話的節奏,不要太快,不要太驕傲。
常見提問3:你最大的缺點是什么?
這個問題是HR的殺手锏,可以說這是HR的狠招,這個問題最難回答,一般應聘者都本著“揚長避短”的心態去面試,冷不防冒出這么一個問題,還真是挺棘手的。
需要清楚HR問這個問題的目的,其目的仍然不是要真的需要知道你的缺點是什么,還是看看你的表達能力,尤其是需要考察應聘者面對危機的時候的處理能力。所以,我們不要用下列方式作答:
1、說出自己的真實缺點,尤其是在前面談話中沒有暴露出來的缺點
2、認為說說某些大眾化的缺點即可,認為說一兩個無妨
3、說自己沒有缺點,強調自己比較完美
總之,HR心里想的是:需要了解他面前的這個人在面對困難的時候,是如何處理問題的,從處理危機的方法來判斷此人的處理事情的靈活性。當然,如果此人自己暴露出自己的缺點當然更好,省得需要去想辦法問更多的問題去發現了。
所以,在回答這個問題的時候,要看起來“真誠”、“坦白”,同時,說出來的并非自己的缺點,而是最好在別人看來是優點的那些方面。
這個問題問的概率很大,通常如果求職者說自己小心眼、愛忌妒人、非常懶、脾氣大、工作效率低,肯定不會錄用你。HR喜歡求職者從自己的優點說起,中間加一些小缺點,最后再把問題轉回到優點上,目的還是突出自己優點的部分。
HR喜歡聰明的求職者。
這一點比較難掌握,我們也給出范例:
回答范例:
呵呵,這個問題好難回答?。∥蚁胂??(親和力表現,也緩解了自己的緊張情緒)
我的缺點是,比較執著,比如在技術方面比較愛鉆研,有的時候會為一個技術問題加班到深夜。還有就是,工作比較按部就班,總是按照主管的要求完成任務。另外的缺點是,總在自己的工作范圍內有創新意識,并沒有擴展給其他同事。這些問題我想我可以進入公司以后以最短的時間來解決,我的學習能力很強,我相信可以很快融入公司的企業文化,進入工作狀態。
嗯??,我想就這些吧。
這個回答范例開頭第一句話就讓人覺得很自然,因為這個求職者所說的話恰恰表達了一般人聽到這個問題后的心理狀態,還有你一定會有一個思考的時間,因為,誰也不會立刻說出自己的缺點。
后面說出的幾個缺點都是一環套一環的,說了自己“比較執著”,但又說自己其實是“比較愛鉆研”,說自己總是“按部就班”,但又補充了其實那是“按照主管的要求完成任務”,這時候,如果用人單位覺得,此人是不是沒有“創新思維”的時候,馬上就補充道“在自己的范圍內有創新意識”,至于“沒有擴展給其他同事”這件事,其實無關緊要,干脆就賣給HR吧。
以上回答確實賣弄了些“技巧”,相信HR也一定能看的出來,但是,即使看出來了也無妨,HR也會心領神會,知道你是一個比較善于溝通并且善于表達的人。
人物2:你未來的主管
當見到未來主管的時候,往往是應聘者已經過了HR那一關,或者應聘者已經過了筆試的那一關,因此見到這位人物意味著距離成功已經向前進了一步。
“人物2”的面試也有他的目的,他是和你在日常工作中接觸最多的人,作為你的直接上司,他需要在工作中經常給你分配任務,他需要對他的主管負責,因此,他招聘的這個人選必須是可以幫助他完成他整個Team的目標的人。
往往那個吸引你來面試的“招聘啟示”就是這個人物所撰寫的,因此,其實在你和他見面以前,早已經通過“招聘啟示”和他有過交往了。因此,從“招聘啟示”中就可以初顯這位主管的端倪。
注意,主管同志并不是人事領域的高手,不會用各種語言技巧去發掘你身上的缺點或者優點,往往問題都是實打實的,或者比較一針見血的,而且,更偏重于日常工作。
那么,我們下面和他過過招。
常見提問1:請你自我介紹一下
這個問題,HR也問過了,到他那里有可能還會問,主管問這個問題和HR雖然問的問題一致,但是,其目的并不是完全相同的。
他不僅僅想考察一下你的表達能力,同時還想考察一下你思路的清晰程度。
我們在回答他的問題前,一定要想清楚一件事:他是該技術領域的高手,就是我們“程序員修煉三境界”中描述的“第二層境界”的那個人物,如果還想更清楚的了解這個人物,可以去重新看看前面的那個章節。
這個自我介紹最好說的較為簡潔,不要過分炫耀自己的技術如何如何強,免得引起這位主管的興趣,引起他的技術興趣沒有什么好處,只會帶來更多的技術問題的發問。
常見提問2:你最引以為自豪的項目是什么?
他問這個問題的意圖是想考察你的成長路徑和編程習慣,因為,最讓你自豪的項目往往是你成長最快的項目,那個成長最快的項目往往會給你今后的編程習慣留下很多痕跡。
所以,通過你對那個引以為豪的項目的描述,有經驗的他會很快鎖定你技術成長中的缺陷和閃光點,從而判斷是否能夠“為我所用”。
你最好拿出一個自己最擅長技術的那個項目進行介紹,這個項目最好能夠比較貼近招聘要求的那些指標。如果,沒有做過什么有規模的正規項目,你就拿些自己非常擅長或者有創意的開發作品來說。這樣做的好處是,他聽完你的介紹后,會接下來進行提問,他所有發問,你都成竹在胸了。
切忌拿一個別人的項目,或者自己參與很少的項目來介紹,如果這樣的話,一旦他深入的詢問這個項目的問題,很可能你會所答非所問,反而造成更嚴重的影響。你大可以和他大談特談你在那個項目中獲得的經驗,那會引起此君的共鳴,有可能的話,說出一些你自己的小技巧,他會很高興。
常見提問3:如果我錄用你,你將怎樣開展工作
他問這個問題的意圖是,希望看看你對這個職位工作展開的一些設想,仍然是“實打實”從工作出發來提問的。所以,你在回答這個問題的時候也要“實打實”,切忌虛無縹緲的一通“高、大、全”。
一般要列出自己的入職之后的工作計劃,而這些計劃需要詳盡,同時需要體現出你工作的嚴謹性,也不能是想當然的說出一些與工作無關的計劃,這都有可能適得其反。
回答范例:
針對這個如何展開工作的問題,我目前僅僅是對咱們公司的大體情況有一個了解,因此,對這個職位的工作性質僅僅是自己的一個理解。
所以呢,我也不知道是否合適,我只能說一個大概。
作為這個職位而言,我想我首先要對本公司的主營業務要有一個相當的了解,了解我們公司的業務組成部分、業務的發展方向、我們面向的客戶性質等等。
第二,我要了解所屬部門在公司中的地位,以及部門的工作目標,從而確定自身的工作努力方向。
第三,了解我參與項目的開發方式,架構方式,緊密配合領導工作,盡快投入具體的開發工作。
這就是我開展工作的計劃。
從大到小的方式進行了解,這么說可以讓領導知道你不是一個盲目工作的人,而是一個按部就班,穩扎穩打的人,使人覺得和你合作很踏實。另外,一定要強調所屬項目或部門的目標,因為這關系到面試你的主管的切身利益。最后,強調“盡快”投入開發工作,這樣,領導就放心了,你不是一個“只了解,不工作”的人。
面對主管唯一要盡量表現的就是,你看起來非常像一個“工具”,入職后馬上就可以發揮作用。
人物3:主管的主管
遇到“主管的主管”的時,往往已經是復試,這說明基本上已經是最后一關了。但要注意,這個最后一關是非常關鍵的一“關”。因為,往往如果你未來的主管在公司中某個專業夠權威的話,他的主管一般不會管招聘的事情。因此,你看到這位“老大”的原因,多半是你未來的那位主管的專業地位還沒有“穩定”。
最后的“搏殺”
過程大概是這樣的,一般會將兩個或三個人提交給“老大”,讓“老大”定奪,去選擇其中的一個人,因此,這個階段是一個最后的“搏殺”關鍵階段。老大”關注的問題:成本+人員素質
所以,我們在和“老大”過招的時候,一定要注意自己的言行,切忌不要穿“奇裝異服”,或者男士留有個性的頭發或胡子,總之一定要讓人看起來特別的“平常”,雖然不是“西裝革履”但也要“衣冠整潔”。
因為,老板們最不喜歡“個性”員工,而最喜歡的是“優秀”的普通員工。
清華大學出版社《Java程序員,上班那點事兒》作者:鐘聲 章節:1.2.2。
本文來自CSDN博客,轉載請http://blog.csdn.net/useway/archive/2009/08/02/4402385.aspx
標
明
出
處
:
第五篇:java程序員面試要點
第一,談談final, finally, finalize的區別。
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。finally是異常處理語句結構的一部分,表示總是執行。finalize是 Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。
第二,Anonymous Inner Class(匿名內部類)是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?
可以繼承其他類或完成其他接口,在swing編程中常用此方式。
第三,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Static Nested Class是被聲明為靜態(static)的內部類,它可以不依賴于外部類實例被實例化。而通常的內部類需要在外部類實例化后才能實例化。
第四,&和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and).第五,HashMap和Hashtable的區別。
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable.第六,Collection 和 Collections的區別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。
第七,什么時候用assert。
1.4新增關鍵字(語法),用于測試boolean表達式狀態,可用于調試程序。使用方法 assert,表示如果表達式為真(true),則下面的語句執行,否則拋出AssertionError。另外的使用方式assert < boolean表達式>:,表示如果表達式為真,后面的表達式忽略,否則后面表達式的值用于AssertionError的構建參數。注意編譯時要增加-source 1.4 參數,否則報錯。]運行時要增加 –ea參數,否則assert行被忽略
第八,GC是什么? 為什么要有GC?
GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。
第九,String s = new String(“xyz”);創建了幾個String Object?
兩個
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12Math.round(-11.5)==-11round方法返回與參數最接近的長整數,參數加1/2后求其floor.第十一,short s1 = 1;s1 = s1 + 1;有什么錯? short s1 = 1;s1 += 1;有什么錯?
short s1 = 1;s1 = s1 + 1;(s1+1運算結果是int型,需要強制轉換類型)short s1 = 1;s1 += 1;(可以正確編譯)
第十二,sleep()和 wait()有什么區別?
sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時后會自動恢復。調用 sleep不會釋放對象鎖。wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
第十三,Java有沒有goto?
沒有
很十三的問題,如果哪個面試的問到這個問題,我勸你還是別進這家公司。
第十四,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
第十五,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
第十六,Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
Set里的元素是不能重復的,那么用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
第十七,給我一個你最常見到的runtime exception。
參考如下:
ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException
第十八,error和exception有什么區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
第十九,List, Set, Map是否繼承自Collection接口?
List,Set是
Map不是
第二十,abstract class和interface有什么區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用于要創建一個體現某些基本行為的類,并為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個 有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現了該接口的類的任何對象上調用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。
第二十一,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
第二十二,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
第二十三,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處于可運行狀態,這意味著它可以由JVM調度并執行。這并不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
第二十四,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
第二十五,是否可以繼承String類?
String類是final類故不可以繼承。
第二十六,當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
第二十七,try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?
會執行,在return前執行。
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。< < 3
第二十九,兩個對象值相同(x.equals(y)== true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
第三十,當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、short、char 或者 byte。long,string 都不能作用于swtich。
第三十二,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance(){
return instance;
} }
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if(instance==null)
instance=new Singleton();
return instance;} }
其他形式:
定義一個類,它的構造函數為private的,所有方法為static的。
一般認為第一種形式要更加安全些
其中也存在一些問題,下面補充一下.希望大家繼續補充
1.最好介紹一下final修飾變量的情形(分開說明基本類型變量和引用類型變量)。
2.不知道如何描述比較好,匿名內部類本身是一個實現了特定接口或繼承了其他類的類。
3.非靜態類不能有static的方法。參考一下java collections framework的代碼,還能說出很多東西來。
4.&既是位運算符,也是邏輯操作符。
&和&&都是邏輯運算符,它們的區別是,&&進行短路計算。
6.可以補充一下,參考文檔。
11.說一下具體的原因可能更好。
13.java有goto這個keyword,不過還沒有使用。
15.overload和多態沒有任何關系。多態是面向對象的基本特征,是和繼承、overriding相關的。原來以為把overload當作多態的一種是從C++來的,后來翻了基本c++的經典的書,也強調多態只是和繼承,虛函數,overriding相關,所以不知道這個錯誤思想從哪來的了.16.public interface Set
看文檔就是了.22.“抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數?!笔裁匆馑?誰規定的?
27.這個比較復雜,例如
public class Main {
public static void main(String[] args){
System.out.println(test());}
public static boolean test(){
boolean b = false;
try {
return b = 4 > 3;
} finally {
System.out.println(b);
//return false;} } }
這個例子中可以看出,return后面的表達式已經計算了,感覺return語句這里被掛起了,如果finally中沒有return,這個return就返回.如果finally也有return,那么就是finally中的return返回了.29.碰上不守規矩的程序員誰也沒辦法.31.還有枚舉呢
32.注釋有問題.