1. 程式人生 > >java初中級工程師面試筆試題目及心得(全部實戰經驗)(答案)

java初中級工程師面試筆試題目及心得(全部實戰經驗)(答案)

JAVA SE部分:

1.string類的常用方法有哪些?
這裡寫圖片描述

2.String,StringBuffer,StringBuilder的區別。

  String 字串常量 執行緒安全  操作少量資料
  StringBuffer 字串變數 執行緒安全 操作大量資料 速度慢  多執行緒適合用
  StringBuilder 字串變數  執行緒不安全  操作大量資料  速度快  單執行緒適合用

3.String str = new String(“xyz”);建立了幾個物件。

    如果String常量池中,已經建立了"xyz",則不會繼續建立,此時直建立了一個物件new String("xyz");
    如果String常量池中沒有建立"xyz",則會建立兩個物件,一個物件的值是"xyz",一個物件是new String("xyz");

4.說幾個你常見到的異常。
這裡寫圖片描述

Throwable是所有異常的根,java.lang.Throwable
Error是錯誤,java.lang.Error
Exception是異常,java.lang.Exception
一般分為Checked異常和Runtime異常,所有RuntimeException類及其子類的例項被稱為Runtime異常,不屬於該範疇的異常則被稱為CheckedException。
NullPointerException 空指標異常
ArithmeticException 除0異常
ClassCastException  型別轉換
ArrayIndexOutOfBoundsException 陣列越界異常

5.hashtable和hashmap的區別是什麼?
這裡寫圖片描述

6.hashmap的底層實現方式是什麼?

HashMap是一個“連結串列的陣列”的資料結構,每個元素存放連結串列頭結點的陣列,即陣列和連結串列的結合體。

7.Vector 和 ArrayList 的區別?

Vector是執行緒安全的,執行速度較ArrayList慢
ArrayList執行緒不安全,執行速度快
相同點:都是順序儲存,底層陣列實現。

8.怎麼遍歷一個map?

遍歷map的三種方法:
public class Collection_Map {
    public static void main(String[] args) {
        Map<String, Student> hm = new HashMap<String,Student>();
Student stu1 = new Student(1,"MapTom"); Student stu2 = new Student(2,"MapJack"); Student stu3 = new Student(3,"MapKoby"); hm.put("1", stu1); hm.put("2", stu2); hm.put("3", stu3); /*第一種 先將map物件轉成set,然後再轉為迭代器*/ Iterator<Entry<String, Student>> it = hm.entrySet().iterator(); while (it.hasNext()) { //System.out.println(it.next().getKey()); System.out.println(it.next().getValue().getName()); } /*第二種 先將map轉為set型別的key值集合,然後轉為迭代器*/ Iterator<String> it2 = hm.keySet().iterator(); while(it2.hasNext()){ /* System.out.println(it2.next());*/ System.out.println(hm.get(it2.next()).getName()); } /*第三種*/ for(Map.Entry<String, Student> entry : hm.entrySet()){ String key = entry.getKey(); String value = entry.getValue().getName(); System.out.println(value); } /*第四種*/ for(String key : hm.keySet()){ System.out.println(hm.get(key).getName()); } } }

9.說一下list,set,map的區別。

List特點:元素有放入順序,元素可重複 
Map特點:元素按鍵值對儲存,無放入順序 
Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的
        HashCode決定的,其位置其實是固定的) 
List介面有三個實現類:LinkedList,ArrayList,Vector 
LinkedList:底層基於連結串列實現,連結串列記憶體是散亂的,每一個元素儲存本身記憶體地址的同時還儲存下一個元素的
           地址。連結串列增刪快,查詢慢 
ArrayList和Vector的區別:ArrayList是非執行緒安全的,效率高;Vector是基於執行緒安全的,效率低 
Set介面有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet 
SortedSet介面有一個實現類:TreeSet(底層由平衡二叉樹實現) 
Query介面有一個實現類:LinkList 
Map介面有三個實現類:HashMap,HashTable,LinkeHashMap 
HashMap非執行緒安全,高效,支援null;HashTable執行緒安全,低效,不支援null 
SortedMap有一個實現類:TreeMap 
其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,儲存的是鍵值對 
set 一般無序不重複.map kv 結構 list 有序 

10.你的專案中用的是多執行緒還是單執行緒?

一般是多執行緒,不清楚了,根據特定情況用嗎?等查清楚再說!

11.多執行緒會遇到那些問題?怎麼解決死鎖?

併發,死鎖
可以通過加同步、上鎖解決死鎖問題。

12.用java寫一個多執行緒程式,如寫四個執行緒,二個加1,二個對一變數減一,輸出:

java
    package test;   
    /** 
     * 加一執行緒與減一執行緒共同操作一個數 
     * 兩個問題:   
     * 1、執行緒同步--synchronized   
     * 2、執行緒之間如何共享同一個j變數--內部類   
     * @author liuwei 
     */  
    public class TMain {  
          int j=1;  
          public synchronized void inc(){     
                    j++;     
                     System.out.println(Thread.currentThread().getName()+"-inc:"+j);     
                }  

      class T1 implements Runnable{  
        public void run(){  
            inc();  
        }  
      }  
      public synchronized void dec(){     
            j--;     
             System.out.println(Thread.currentThread().getName()+"-dec:"+j);     
        }  

    class T11 implements Runnable{  
        public void run(){  
            dec();  
        }  
    }  
    public static void main(String[] args) {  
        TMain t = new TMain();  
        T1 t1 =t.new T1();  
        T11 t11 =t.new T11();  
        for(int i=0;i<20;i++){  
         Thread thread=new Thread(t1);     
         thread.start();  

         Thread thread1=new Thread(t11);     
         thread1.start();  
        }   

    }  
    }  

13.至少說六點interface和abstract的區別。

1.相同點 
A. 兩者都是抽象類,都不能例項化。 
B. interface實現類及abstrctclass的子類都必須要實現已經宣告的抽象方法。

2. 不同點 
A. interface需要實現,要用implements,而abstract class需要繼承,要用extends。 
B. 一個類可以實現多個interface,但一個類只能繼承一個abstract class。 
C. interface強調特定功能的實現,而abstractclass強調所屬關係。 
D. 儘管interface實現類及abstrct class的子類都必須要實現相應的抽象方法,但實現的形式不同。
    interface中的每一個方法都是抽象方法,都只是宣告的(declaration,沒有方法體),實現類必須要實
    現。而abstractclass的子類可以有選擇地實現。 
這個選擇有兩點含義: 
    一是Abastract class中並非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子類
    必須實現。那些沒有abstract的方法,在Abstrct class中必須定義方法體。 
    二是abstract class的子類在繼承它時,對非抽象方法既可以直接繼承,也可以覆蓋;而對抽象方法,
    可以選擇實現,也可以通過再次宣告其方法為抽象的方式,無需實現,留給其子類來實現,但此類必須
    也宣告為抽象類。既是抽象類,當然也不能例項化。 
E. abstract class是interface與Class的中介。 
interface是完全抽象的,只能宣告方法,而且只能宣告pulic的方法,不能宣告private及protected的方
法,不能定義方法體,也不能宣告例項變數。然而,interface卻可以宣告常量變數,並且在JDK中不難找
出這種例子。但將常量變數放在interface中違背了其作為介面的作用而存在的宗旨,也混淆了interface與
類的不同價值。如果的確需要,可以將其放在相應的abstractclass或Class中。 
abstract class在interface及Class中起到了承上啟下的作用。一方面,abstract class是抽象的,可以宣告
抽象方法,以規範子類必須實現的功能;另一方面,它又可以定義預設的方法體,供子類直接使用或覆
蓋。另外,它還可以定義自己的例項變數,以供子類通過繼承來使用。

3. interface的應用場合 
A. 類與類之前需要特定的介面進行協調,而不在乎其如何實現。 
B. 作為能夠實現特定功能的標識存在,也可以是什麼介面方法都沒有的純粹標識。 
C. 需要將一組類視為單一的

14.怎麼把陣列放到物件裡面?

    java
    String[] dataArray = new String[]{"123","234","345"};
    List<String> dataList = new ArrayList<String>();
    for(String s : dataArray){
        dataList.add(s);
    }

15.給你一組字串如:7i8hy4jjnb2.讓你程式設計輸出裡面的數字:7842.

    java
    String str = "7i8hy4jjnb2";
    char[] ch = str.toCharArray();
    int bytes = ch.length;
    for(int i=bytes;i--;){
        if(ch[i]>255){
            bytes++;
            System.out.println(ch[i]);
        }
    }

16.多執行緒有幾種實現方式?都是什麼?同步有幾種實現方式?都是什麼?

    **多執行緒實現方式:**
    1.extends Thread 類
    2.implements Runnable 介面

    **同步實現兩種方式:**
    1.在返回型別上加 synchronized
    2.使用wait() 和 notify()

17.java類實現序列化有幾種實現方式?都是什麼?(二種)

實現介面Serializable
實現介面Externalizable

18.java開發中“==” 和 “equals” 有何區別?

equals()是個方法,繼承類Object
== 是個運算子,表示記憶體地址是否相同
==比較的是2個物件的地址,而equals比較的是2個物件的內容。顯然,當equals為true時,==不一定為true。
==操作比較的是兩個變數的值是否相等,對於引用型變量表示的是兩個變數在堆中儲存的地址是否相同,即棧中的內容是否相同。       

19.static區域性變數與全域性變數的區別,編譯後對映檔案是否包含此類變數的地址。

  static全域性變數只初使化一次,防止在其他檔案單元中被引用;
 static區域性變數和普通區域性變數有什麼區別:static區域性變數只被初始化一次,下一次依據上一次結果值;
 static函式與普通函式有什麼區別:static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝;

20.在日常工作中,使用過哪些 java core 包,遇到java core 的那些異常?(可以寫中文)

不知道