面試題之:java基礎1

可樂不可樂。發表於2020-09-27

請你談談java中是如何支援正規表示式操作的?

參考回答:
java中的String類提供了支援正規表示式的操作方法,包括matches()、replaceAll()、replaceFirst()、split()。此外,hava中可以用Pattern類表示正規表示式物件,踏提供了豐富的api進行各種正規表示式的操作。比如:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegExpTest {
    public static void main(String[] args) {
        String str = "成都市(成華區)(武侯區)(高新區)";
        Pattern p = Pattern.compile(".*?(?=\\()");
        Matcher m = p.matcher(str);
        if(m.find()) {
            System.out.println(m.group());
        }
    }
}

請你比較一下java和javaScript?

參考回答:
java和javascript是兩個公司開發的不同的兩個產品,java是sun microsystems公司推出的物件導向的程式設計語言,特別適合於網際網路應用程式的開發,而javascript是netscape公司的產品,為了擴充套件netscape瀏覽器功能而開發的一種可嵌入web頁面中執行的基於物件和時間驅動的解釋性語言,javascript的前身是LiveScript;而java的前身是Oak語言
下面對兩種語言間的異同進行一下比較:

  • 基於物件和麵向物件:java是一種很餓正的物件導向的語言,即使開發簡單的程式,必須設計物件;javascript是種指令碼語言,它可以用來製作與網路無關的,與使用者互動的作用的複雜軟體,它是一種基於物件和事件驅動的程式語言,因而它本身提供了非常豐富的內部物件供設計人員使用。
  • 解釋和編譯:java的原始碼在執行之前,必須經過編譯。javascript是一種解釋性程式語言,其原始碼不需要經過編譯,由瀏覽器解釋執行(目前幾乎所有的瀏覽器都使用了JIT(即時編譯器)技術來提升javascript的執行效率)
    • 強型別變數和型別弱變數:java採用強了性的變數檢查,即所有的變數在編譯之前必須做宣告;javascript中變數是弱型別的,甚至在使用變數之前可以不做宣告,javascript的直譯器在執行時檢查推斷其資料型別
  • 程式碼格式不一樣。

在java中如何跳出當前的多重巢狀迴圈?

參考回答:
在最外層迴圈前加一個標記A,然後用breakA;就可以跳出多重迴圈(java中支援帶標籤的break和continue,因為他不會讓你的程式變得更優雅,很多時候甚至會有相反的作用,所以這種語法其實不知道更好),根本不能進行字串的equals比較,否則會產生nullpointerException異常

int和Integer有什麼區別?

參考回答:
java設計一個近乎純潔的物件導向程式語言,但是為了程式設計的方便還是引入了基本的資料型別,但是為了能夠將這些基本資料型別當成物件操作,java為每一個基本資料累西ing都引入了對應了包裝型別(wrapper class),int的包裝型別就是integer,從java5開始引入了自動裝箱/拆箱機制,使得兩者可以互相轉換。

  • 原始型別:boolean,char,byte,short,int,long,float,double
  • 包裝型別:Boolean,Charcter,Byte,Short,Integer,Float,Double

請你說明String和StringBuffer的區別

參考回答:
JAVA平臺提供了兩個類,String和StringBuffer,他們可以儲存和操作字串,即包含了多個字元的字元資料,這個String類提供了數值不可以改變的字串,而這個StriingBuffer類提供的字串進行修改,當你知道字元資料要改變的時候,你就可以使用這個StringBuffer。典型的,你可以使用StringBuffers來動態的構造字元資料。

請你講講陣列(Array)和列表(ArrayList)的區別?什麼時候應該使用Array而不是ArrayList?

參考回答:
Array和ArrayList的不同點

  • Array可以包含基本型別和物件型別,而ArrayList只能包含物件型別
  • Array大小是固定的,ArrayList的大小是動態變化的。
  • ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。對於基本型別的資料,集合使用自動裝箱來減少編碼工作量,但是當處理固定大小的基本資料型別的時候這種方式相對比較慢

請你解釋一下什麼事值傳遞和引用傳遞?

參考回答:
值傳遞是對基本型別的變數而言的,傳遞的是該變數的一個副本,改變副本不影響原變數,引用傳遞一般是對於物件 型變數而言的,傳遞的是該物件地址的一個副本,並不是原物件本身,所以對引用物件進行操作會同時改變原物件
一般認為java內的傳遞都是值傳遞。

請你說說Lamda表示式的優缺點

優點:

  1. 簡潔
  2. 非常容易平行計算
  3. 可能代表未來的程式設計趨勢

缺點:

  • 若不用平行計算,很多時候計算速度沒有比傳統的for迴圈快(平行計算有時需要預熱才能顯示出效率優勢)
  • 不容易除錯
  • 若其他程式設計師沒有學過lambda表示式,程式碼不容器讓其他語言的程式設計師看懂。

java8的一些新特性

參考回答:

  • Lambda表示式-Lambda表示式允許把函式作為一個方法的引數(函式作為引數傳遞進方法中)
  • 方法引用-方法引用提供了非常有用的語法,可以直接引用已有的java類或物件(例項)的方法或構造器。與lambda聯合使用,方法引用可以使用語言的構造更緊湊簡潔。減少程式碼的冗餘。
  • 預設方法-預設方法就是一個在介面裡面有了一個實現的方法
  • 新工具-新的編譯工具,如:Nashorn引擎 JJS、;類依賴分析器jdeps
  • Stream API-新新增的Stream API(java.util.stream)把正真的函數語言程式設計風格引入到java中。
  • Data Time API -加強了對日期和時間的處理
  • Optional類,-Optional類已經成為了java8類庫的一部分,用來解決空指標異常
  • Nashorn、javaScript引擎-java8提供了一個新的Nashorn JavaScript引擎,他允許在JVM上執行特定的javascript應用。

請你解釋一下為什麼重寫了equals還要重寫hashcode?

HashMap中,如果要比較key是否相同,要同時使用這兩個函式,因為自定義的類的hashcode()方法繼承與Object類,其hashcode碼為預設的記憶體地址,這樣即便有相同含義的兩個物件,比較也是不相等的。HashMap中的比較key是這樣的:
先求出key的hashcod(),比較其值是否等,若相等再使用equals()不想等則認為他們不想等。如果知識重寫了hashcode()不重寫equals()方法,當比較equals()時沒知識看他們是是否是同一物件(即只是記憶體地址的比較),所以必須要兩個方法一起重寫,HashMap用來判斷key是否相等的方法,其實是呼叫了hashset判斷加入元素是否相等,過載hashcode()是為了同一個key,能得到相同的Hashcode,這樣hashMap就可以定義到我們的key上,過載equals()是為了向HashMap表明當前物件和key上所儲存的物件是相等的,這樣我們才真正的獲得了這個key所對應的這個鍵值對。

相關文章