java初中級工程師面試筆試題目及心得(全部實戰經驗)(答案)
阿新 • • 發佈:2019-01-04
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 的那些異常?(可以寫中文)
不知道