Java面試之前複習總結(一)
阿新 • • 發佈:2019-01-09
1、String類都有那些常用的方法。
- length(); split(); replace();
- equals(); subString(); charAt();
- concat(); 大小寫轉換; indexOf();
- trim(); isEmpty(); contains();
- startWith()
- clone、 equals finalize getClass
- hashCode notify notifyAll toString
- wait
- 算數異常 型別轉換異常 非法引數異常
- 下標越界異常 空指標異常 安全性檢查異常
- 根本區別就是StringBuilder是執行緒不安全的,而StringBuffer是執行緒安全的。
- 速度,StringBuilder > StringBuffer > String
- String是不可變的,其他兩個是可變的
- 按照效能排序 String(大姐,jdk1.0) < StringBuffer(二姐,jdk1.0) <StringBuilder(小妹,jdk1.5).
- StringBuffer很多方法都被synchronized修飾了,而StringBuilder沒有,所以StringBuilder速度比StringBuffer快。建議用StringBuilder。
- JVM執行程式主要時間都是浪費在建立物件和回收物件上。
- eg:String s = “this is”+“only”“simple test”;等同於 String s = “this is only simple test”。
key | value | ||
TreeMap | 不允許 | 允許 | 執行緒不安全 |
HashMap | 允許 | 允許 | 執行緒不安全 |
- for(Iterator<A> it = list.iterator(); it.hasNext();) {
- ......
- }
- for(A a : list) {
- ......
- }
- for(int i = 0; i < list.size(); i++) {
- A a = list.get(i);
- ......
- }
型別 | private | 無 | protected | public |
同一類 | √ | √ | √ | √ |
同一包中子類 | √ | √ | √ | |
同一包非子類 | √ | √ | √ | |
不同包子類 | √ | √ | ||
不同包非子類 | √ |
- HashMap有兩個引數影響效能,初始容量和載入因子(裝填因子)。
- 連結串列法就是將相同hash值的物件組織成一個連結串列放在hash值對應的槽位中。
- 開放地址法是通過一個探測演算法,當某個槽位已經被佔據的情況下繼續尋找下一個可以使用的槽位,很顯然,HashMap解決衝突的方法是拉鍊法,也叫鏈地址法。
- Java.lang,包含如下
- Object:是所有類的父類。
- 基礎型別包裝類
- 數學類
- String和StringBuilder
- 系統和執行時類:System.in 和out 是標準的輸入類和輸出類,System所有成員變數和方法都是靜態的。
- Cat cat1=new Cat("xiaohua",3);//源物件
- System.out.println("源物件地址"+cat1);
- //呼叫clone方法,複製物件
- Cat cat2=(Cat)cat1.clone();
- Cat cat3=(Cat)cat1;//複製引用
- System.out.println("複製物件地址:"+cat2);
- System.out.println("複製引用地址:"+cat3);
- return:直接退出迴圈
- break:跳出本層迴圈
- continue:跳過本次迴圈
- Java5之前,switch(expr)。expr只能是byte,short,int,char
- Java5之後,enum,
- Java7,String
- long,目前還不支援
- 修飾類,表示該類不能被繼承。
- 修飾方法
- 修飾變數
- 傳入的物件實現了Comparable
- 不強制要求傳入元素必須課比較,但如要傳入第二個引數,引數時實現Comparable介面的子型別,相關於臨時定義了一個排序規則。
- list列表中所有元素必須實現Comparable介面,實現Comparable需要重寫comparTo方法。
- 使用Comparable有很大侷限性,實現此介面只能按compareTo(T t)定義的方法。
- 一個類的兌現更要實現多種排序方式,可以為該介面定義不同的比較器,實現comparator介面
- 呼叫了sleep時執行緒類休眠的靜態方法,呼叫此方法會讓當前執行緒暫停執行指定事件,將執行機會(CPU)讓給其他執行緒,但物件的鎖依然保持,因此休眠結束後自動恢復。
- wait是Object的方法,呼叫wait方法導致當前執行緒放棄物件所進入執行緒池,只有呼叫物件的notify()方法,才能被重新喚醒。
- 繼承Thread
- 實現Runnable
- 使用Callable和FUTURE(2、3實現方式相同,所以歸結到一類)
sleep與yield
- sleep()方法暫停後,會給其他執行緒機會,不會理會優先順序,
- sleep()方法會將執行緒轉入阻塞狀態,然後進入就緒狀態,而yield()不會將執行緒轉入阻塞,只是i強制當前程序進入就緒,因此完全有可能某個執行緒呼叫yield()方法暫停後,立即再次獲得處理器資源執行
- sleep()方法丟擲一個InterruptedExecption異常。
- sleep(0放比yield()方法具有更好的一致性,通常不建議使用yield()方法來控制併發執行緒執行。
- synchronized:用於方法或程式碼塊前,使此方法或者程式碼塊程式設計同步的。
- static:用於宣告靜態變數,static關鍵字可以修飾變數,方法,靜態程式碼塊。
- abstract:用於定義抽象類或者方法
- final:用於宣告常量,即只能賦一次值
- volatile:用來確保將變數的跟新操作通知到其他執行緒,當把變數宣告為volatile型別後,編譯器與執行時都會注意到這個變數是共享的,因此不會將該變數上的操作與其他記憶體操作一起重排序。然而,在訪問volatile變數時不會執行加鎖操作,因此也就不會使執行執行緒阻塞,因此volatile變數是一種比 synchronized關鍵字更輕量級的同步機制。
- serialize:Java 物件序列化為二進位制檔案
- 載入驅動,Class.forName("com.mysql.jdbc.");
- 建立連結,Connention conn = DriverManager.getConnection("")
- 建立語句:PrepareStatement ps = conn.prepareStatement("");
- 執行語句:ResultSet rs = ps.executeQuery()
- 處理結果
- 關閉資源
- A.class()
- a.getClass()
- Class.forName()
- 介面中的方法都是抽象的,而抽象類則可以同時包含抽象和非抽象方法。
- 類可以實現多個介面,但只能繼承一個抽象類。
- 類可以不實現抽象類和介面中宣告的方法,當然在這種情況下類也必須是抽象的。
- 抽象類可以在比提供介面實現的情況下實現介面。
- 介面中宣告的變數預設都是final的,抽象類可以包含非final的
- 介面中的成員函式預設都是public的,抽象類的成員函式可以是private、protected或者public
- 介面是絕對抽象的,不可以被例項化,抽象類也是不可以被例項化的
- Array可以包括基本資料型別和物件,ArrayList只能包含物件。
- Array是固定大小的,ArrayList的大小是動態變化的。
- ArrayList提供了更多的方法和特性。
- 讀寫鎖
- 自族鎖
- 樂觀鎖
- person.getClass
- Person.class
- Class.forName("")
- Java中不採用指標訪問記憶體單元
- 無用記憶體自動回收機制(垃圾回收機制)