1. 程式人生 > 其它 >Java自學教程!Java基礎面試題

Java自學教程!Java基礎面試題

Java自學教程!Java基礎面試題

// 2 讀取檔案

// fis.read();

// 3 關閉

fis.close();

===============================================================

// 1 建立檔案位元組輸出流

FileOutputStream fos = new FileOutputStream("路徑", true);// true表示不覆蓋 接著寫

// 2 寫入檔案

fos.write(97);

fos.write('a');

// 3 關閉

fos.close();




**位元組緩衝流**



緩衝流:BufferedInputStream/ BufferedOutputStream



*   提高IO效率,減少訪問磁碟次數

*   資料儲存在緩衝區中,flush是將緩衝區的內容寫入檔案中,也可以直接close



// 1 建立BufferedInputStream

FileInputStream fis = new FileInputStream("路徑");

BufferedInputStream bis = new BufferedInputStream(fis);

// 3 關閉

bis.close();




[白嫖資料](https://gitee.com/vip204888/java-p7)



### [](https://gitee.com/vip204888/java-p7)物件流



> ObjectOutputStream / ObjectInputStream



*   增強了緩衝區功能

*   增強了讀寫8種基本資料型別和字串的功能

*   增強了讀寫物件的功能  

    readObject() 從流中讀取一個物件  

    writeObject(Object obj) 向流中寫入一個物件



#### [](https://gitee.com/vip204888/java-p7)使用流傳輸物件的過程稱為序列化、反序列化



**序列化**



// 使用objectoutputStream實現序列化

psvm(String[] args){

// 1. 建立物件流

FileOutputStream fos = new FileOutputStream("d:\st.bin");

ObjectOutputSream oos = new objectOutputSream(fos);

// 2. 序列化(寫入操作)

Student zhangsan = new Student("zs", 20);

oos.WriteObject(zhangsan);

// 3. 關閉

oos.close();

sout("序列化完畢");

}




反序列化



// 使用ObjectInputSteam實現反序列化(讀取重構物件)

psvm(String[] args){

// 1. 建立物件流

FileInputStream fis = new FileInputStream("d:\stu.bin");

ObjectInputStream ois = new ObjectInputStream(fis);

// 2. 讀取檔案(反序列化)

Student s = (Student)ois.readObject();

// 3. 關閉

ois.close();

sout("執行完畢");

sout(s.toString());

}




**序列化注意事項**  

[白嫖資料](https://gitee.com/vip204888/java-p7)



*   某個類要想序列化必須實現Serializable介面

*   序列化類中物件屬性要求實現Serializable介面

*   序列化版本號ID,保證序列化的類和反序列化的類是同一個類

*   使用transient修飾屬性,這個屬性就不能序列化

*   靜態屬性不能序列化

*   序列化多個物件,可以藉助集合來實現



#### [](https://gitee.com/vip204888/java-p7)**字元流**



// 傳統位元組流讀取

psvm(String[] args){

// 1. 建立FileInputStream物件

FileInputSteam fis = new FileInputStream("路徑");

// 2. 讀取

int data = 0;

while((data = fis.read()) != -1){

sout((char)data); 

}

// 3. 關閉

fis.close();

}




### [](https://gitee.com/vip204888/java-p7)字元緩衝流



[白嫖資料](https://gitee.com/vip204888/java-p7)



BufferedReader / BufferedWriter




高效讀寫、支援輸入換行符、可一次寫一行讀一行



psvm(String[] args) throws Exception{

// 建立緩衝流

FileReader fr = new FileReader("..");

BufferedReader br = new BufferedReader(fr);

// 讀取

// 1. 第一種方式

char[] buf = new char[1024];

int count = 0;

while((count = br.read(buf)) != -1){

sout(new String(buf, 0, count));

}

// 2. 第二種方式 一行一行讀取

String line = null;

while((line = br.readLine()) != null){

sout(line);

}

// 關閉

br.close();

}

psvm(String[] args){

// 1. 建立BufferedWriter物件

FileWriter fw = new FileWriter("..");

BufferedWriter bw = new BufferedWriter(fw);

// 2. 寫入

for(int i = 0; i < 10; i ++){

bw.write("寫入的內容");

vw.newLine(); // 寫入一個換行符

bw.flush();

}

// 3. 關閉

bw.close(); // 此時會自動關閉fw

}




**轉換流**



橋轉換流 `InputStreamReader / OutputStreamWriter`



可將位元組流轉換為字元流



可設定字元的編碼方式



psvm(String[] args) throws Exception{

// 1 建立InputStreamReader物件

FileInputStream fis = new FisInputStream("..");

InputStreamReader isr = new InputStreamReader(fis, "utf-8");

// 2 讀取檔案

int data = 0;

while((data = isr.read()) != -1){

sout((char)data);

}

// 3 關閉

isr.close();

}


psvm(String[] args) throws Exception{

  // 1 建立OutputStreamReader物件

  FileOutputStream fos = new FisOutputStream("..");

  OutputStreamWRITER osw = new OutputStreamReader(fos, "utf-8");

  // 2 寫入

  for(int i = 0; i < 10; i ++){

    osw.write("寫入內容");

    osw.flush();

  }

  // 3 關閉

  osw.close();

} 

```



File類



```

/*

File類的使用

1. 分隔符

2. 檔案操作

3. 資料夾操作

*/

public class Demo{

  psvm(String[] args){

    separator();

  }

  // 1. 分隔符

  public static void separator(){

    sout("路徑分隔符" + File.pathSeparator);

    sout("名稱分隔符" + File.separator);



# 總結

螞蟻面試比較重視基礎,所以Java那些基本功一定要紮實。螞蟻的工作環境還是挺讚的,因為我面的是穩定性保障部門,還有許多單獨的小組,什麼三年1班,很有青春的感覺。面試官基本水平都比較高,基本都P7以上,除了基礎還問了不少架構設計方面的問題,收穫還是挺大的。

**[資料領取方式:戳這裡](https://gitee.com/vip204888/java-p7)**

* * *

**經歷這次面試我還通過一些渠道發現了需要大廠真實面試主要有**:螞蟻金服、拼多多、阿里雲、百度、唯品會、攜程、豐巢科技、樂信、軟通動力、OPPO、銀盛支付、中國平安等初,中級,高階Java面試題集合,附帶超詳細答案,希望能幫助到大家。

![螞蟻金服5面,總結了49個面試題,遇到的面試官都是P7級別以上](https://upload-images.jianshu.io/upload_images/24616006-2b976d3b5a750638?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)