去哪兒網java面試
型變量中能不能存貯一箇中文漢字?爲什麼?
char型變量是用來存儲Unicode編碼的字符的,unicode編碼字符集中包含了漢字,所以,char型變量中當然可以存儲漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字符集中,那麼,這個char型變量中就不能存儲這個特殊漢字。補充說明:unicode編碼佔用兩個字節,所以,char類型的變量也是佔用兩個字節。
備註:後面一部分回答雖然不是在正面回答題目,但是,爲了展現自己的學識和表現自己對問題理解的透徹深入,可以回答一些相關的知識,做到知無不言,言無不盡。
2.、"=="和equals方法究竟有什麼區別?
(單獨把一個東西說清楚,然後再說清楚另一個,這樣,它們的區別自然就出來了,混在一起說,則很難說清楚)
==操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。
如果一個變量指向的數據是對象類型的,那麼,這時候涉及了兩塊內存,對象本身佔用一塊內存(堆內存),變量也佔用一塊內存,例如Objet obj = new Object();變量obj是一個內存,new Object()是另一個內存,此時,變量obj所對應的內存中存儲的數值就是對象佔用的那塊內存的首地址。對於指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。
equals方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:
String a=new String("foo");
String b=new String("foo");
兩條new語句創建了兩個對象,然後用a,b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數值是不相同的,所以,表達式a==b將返回false,而這兩個對象中的內容是相同的,所以,表達式ls(b)將返回true。
在實際開發中,我們經常要比較傳遞進行來的字符串內容是否等,例如,String input = …;ls(“quit”),許多人稍不注意就使用==進行比較了,這是錯誤的,隨便從網上找幾個項目實戰的教學視頻看看,裏面就有大量這樣的錯誤。記住,字符串的比較基本上都是使用equals方法。
如果一個類沒有自己定義equals方法,那麼它將繼承Object類的equals方法,Object類的equals方法的實現代碼如下:
boolean equals(Object o){
return this==o;
}
這說明,如果一個類沒有自己定義equals方法,它默認的equals方法(從Object 類繼承的')就是使用==操作符,也是在比較兩個變量指向的對象是否是同一對象,這時候使用equals和使用==會得到同樣的結果,如果比較的是兩個獨立的對象則總返回false。如果你編寫的類希望能夠比較該類創建的兩個實例對象的內容是否相同,那麼你必須覆蓋equals方法,由你自己寫代碼來決定在什麼情況即可認爲兩個對象的內容是相同的。
ymous Inner Class (匿名內部類)是否可以 extends(繼承)其它類,
是否可以 implements(實現)interface(接口)?
可以繼承其他類或實現其他接口。不僅是可以,而是必須!
ng 和 StringBuffer 的區別
JAVA 平臺提供了兩個類:String 和 StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個 String 類提供了數值不可改變的字符串。而這個 StringBuffer 類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用 StringBuffer。典型地,你可以使用 StringBuffers 來動態構造字符數據。另外,String 實現了 equals 方法,newString(“abc”)ls(newString(“abc”)的結果爲 true,而 StringBuffer 沒有實現equals 方法,所以,new StringBuffer(“abc”)ls(newStringBuffer(“abc”)的結果爲 false。
接着要舉一個具體的例子來說明,我們要把1到100的所有數字拼起來,組成一個串。
StringBuffer sbf = new StringBuffer();
for(int i=0;i<100;i++)
{
nd(i);
}
上面的代碼效率很高,因爲只創建了一個 StringBuffer 對象,而下面的代碼效率很低,因爲
創建了101個對象。
String str = new String();
for(int i=0;i<100;i++)
{
str = str + i;
}
在講兩者區別時,應把循環的次數搞成10000,然後用 endTime-beginTime 來比較兩者執行的時間差異,最後還要講講 StringBuilder 與 StringBuffer 的區別。
String 覆蓋了 equals 方法和 hashCode 方法,而 StringBuffer 沒有覆蓋 equals 方法和hashCode 方法,所以,將 StringBuffer 對象存儲進 Java 集合類中時會出現問題。
中有幾種方法可以實現一個線程?用什麼關鍵字修飾同步方法? stop()和 suspend()方法爲何不推薦使用?
java5以前,有如下兩種:
第一種:
new Thread(){}t();這表示調用 Thread 子類對象的 run 方法,new Thread(){}表示一個
Thread 的匿名子類的實例對象,子類加上 run 方法後的代碼如下:
new Thread(){
public void run(){
}
}t();
第二種:
new Thread(new Runnable(){})t();這表示調用Thread對象接受的Runnable對象的run
方法,new Runnable(){}表示一個 Runnable 的匿名子類的實例對象,runnable 的子類加上
run 方法後的代碼如下:
new Thread(new Runnable(){
public voidrun(){
}
}
)t();
從 java5開始,還有如下一些線程池創建多線程的方式:
ExecutorService pool = ixedThreadPool(3)
for(int i=0;i<10;i++)
{
ute(newRunable(){public void run(){}});
}
achedThreadPool()ute(new Runable(){publicvoid run(){}});
ingleThreadExecutor()ute(new Runable(){publicvoid run(){}});
有兩種實現方法,分別使用 new Thread()和 new Thread(runnable)形式,第一種直接調用
thread 的 run 方法,所以,我們往往使用 Thread 子類,即 new SubThread()。第二種調用
runnable 的 run 方法。
有兩種實現方法,分別是繼承 Thread 類與實現 Runnable 接口用 synchronized 關鍵字修飾同步方法反對使用stop(),是因爲它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處於一種不連貫狀態,那麼其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用 suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復運行。對任何線程來說,如果它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用 suspend(),而應在自己的 Thread 類中置入一個標誌,指出線程應該活動還是掛起。若標誌指出線程應該掛起,便用 wait()命其進入等待狀態。若標誌指出線程應當恢復,則用一個 notify()重新啓動線程。
6.同步和異步有何異同,在什麼情況下分別使用他們?舉例說明。
如果數據將在線程間共享。例如正在寫的數據以後可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。
7.多線程有幾種實現方法?同步有幾種實現方法?
多線程有兩種實現方法,分別是繼承 Thread 類與實現 Runnable 接口同步的實現方面有兩種,分別是 synchronized,wait 與 notifywait():使一個線程處於等待狀態,並且釋放所持有的對象的 lock。sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException 異常。notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由 JVM 確定喚醒哪個線程,而且不是按優先級。Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢?是用==還
是 equals()?它們有何區別?Set 裏的元素是不能重複的,元素重複與否是使用 equals()方法進行判斷的。equals()和==方法決定引用值是否指向同一對象 equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
-
面試邀請函【精品】
邀請函是商務禮儀與世俗禮儀的其中一部分。在快速變化和不斷變革的今天,邀請函在活動中的使用越來越廣泛,那麼相關的邀請函到底怎麼寫呢?下面是小編爲大家整理的面試邀請函,僅供參考,歡迎大家閱讀。面試邀請函1您好!現誠邀您於4月29日下午來我司參加業務員崗位面試,如...
-
實習護士面試彙編15篇
實習護士面試1我叫xxx,今年xx歲,畢業於xxxx學校,護理專業,今天能站在這裏向大家介紹自己真是感到萬分榮幸!在生活中我是個活潑開朗、熱情大方、樂觀上進、獨立自主、自信要強人,我會把我積極一面在工作中繼續發揚,認真負責對待工作,積極溝通、協調,注重團隊精神,我在醫院...
-
面試崗位崗位職責精選8篇
隨着社會一步步向前發展,很多情況下我們都會接觸到崗位職責,制定崗位職責可以有效規範操作行爲。崗位職責到底怎麼制定才合適呢?下面是小編收集整理的面試崗位崗位職責,歡迎閱讀,希望大家能夠喜歡。面試崗位崗位職責11、負責公司銷售的安全設備調試,維護及售後等服務...
-
【推薦】面試心得體會
當我們受到啓發,對生活有了新的感悟時,常常可以將它們寫成一篇心得體會,通過寫心得體會,可以幫助我們總結積累經驗。很多人都十分頭疼怎麼寫一篇精彩的心得體會,下面是小編精心整理的面試心得體會,希望能夠幫助到大家。面試心得體會1自去年參加選調生考試以後,一直有...