1. 程式人生 > >java校招一些面試的題目

java校招一些面試的題目

陣列和連結串列的區別

  • 陣列靜態分配記憶體,連結串列動態分配記憶體;
  • 陣列在記憶體中連續,連結串列不一定連續;
  • 陣列元素在棧區,連結串列元素在堆區;
  • 陣列利用下標定位,時間複雜度為O(1),連結串列定位元素時間複雜度O(n)
  • 陣列插入或刪除元素的時間複雜度O(n),連結串列的時間複雜度O(

TCP和UDP的特性和區別

TCP:

  • 優點:可靠 穩定

  • TCP的可靠體現在TCP在傳輸資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認. 視窗. 重傳. 擁塞控制機制,在資料傳完之後,還會斷開來連線用來節約系統資源。

  • 缺點:慢,效率低,佔用系統資源高,易被攻擊

  • 在傳遞資料之前要先建立連線,這會消耗時間,而且在資料傳遞時,確認機制. 重傳機制. 擁塞機制等都會消耗大量時間,而且要在每臺裝置上維護所有的傳輸連線。然而,每個連線都會佔用系統的CPU,記憶體等硬體資源。因為TCP有確認機制. 三次握手機制,這些也導致TCP容易被利用,實現DOS. DDOS. CC等攻擊。

UDP:

  • 優點:快,比TCP稍安全

  • UDP沒有TCP擁有的各種機制,是一種無狀態的傳輸協議,所以傳輸資料非常快,沒有TCP的這些機制,被攻擊利用的機會就少一些,但是也無法避免被攻擊。

  • 缺點:不可靠,不穩定

  • 因為沒有TCP的這些機制,UDP在傳輸資料時,如果網路質量不好,就會很容易丟包,造成資料的缺失。

適用場景:

TCP:當對網路質量有要求時,比如HTTP,HTTPS,FTP等傳輸檔案的協議;POP,SMTP等郵件傳輸的協議

UDP:對網路通訊質量要求不高時,要求網路通訊速度要快的場景

事務的四個特性

  • 一致性
  • 原子性
  • 永續性
  • 隔離性

列印連結串列的思路

/**
 * 〈一句話功能簡述〉<br>
 *
 * @author hjsjy
 * @create 2018/10/17
 * @since 1.0.0
 */
class
Node<E> {//節點實現 private E data;//連結串列儲存的資料 private Node next;//下一個結點 public Node(E data){ this.data=data; } public E getData() { return data; } public void setData(E data) { this.data = data; } public Node<E> getNext() { return next; } public void setNext(Node next) { this.next = next; } } public class HjsjyList<E>{ private Node<E> head; public Node<E> getHead() { return head; } public void setHead(Node<E> head) { this.head = head; } public HjsjyList(E data){//連結串列的初始化 this.head = new Node<>(data); } public void headInsert(E data){//頭結點插入 Node<E> node = new Node<>(data); node.setNext(head.getNext()); head.setNext(node); } public void tailInsert(E data){//尾節點插入 Node<E> node = new Node<>(data); if (head.getNext() == null) { head.setNext(node); }else{ Node<E> p = head; while(p.getNext() != null){ p = p.getNext(); } p.setNext(node); } } public void show(){ Node<E> node = head.getNext(); while(node != null){ System.out.print(node.getData() + " "); node = node.getNext(); } System.out.println(); } public boolean delete(E data){ Node<E> p = head.getNext(); Node<E> s = head; while(p != null){ if(p.getData().equals(data)){ s.setNext(p.getNext()); return true; } s = p; p = p.getNext(); } return false; } public static void main(String[] args) { HjsjyList<Integer> list = new HjsjyList<Integer>(-1); for(int i = 0; i < 5; i++){ list.tailInsert(i); } list.delete(3); list.show(); } }

java靜態變數存放在哪裡

方法區

實現字串轉數字

string 和int之間的轉換

  • string轉換成int :Integer.valueOf(“12”)
  • int轉換成string : String.valueOf(12)

char和int之間的轉換

  • 首先將char轉換成string

  • String str=String.valueOf(‘2’)

  • Integer.valueof(str) 或者Integer.PaseInt(str)

  • Integer.valueof返回的是Integer物件,Integer.paseInt返回的是int

實現字串的裡面抽取連續的數字

程序有哪幾種狀態

程序有三個狀態,即就緒狀態,執行狀態,阻塞狀態

程序有哪些通訊方式

管道 命名管道 訊號 訊息佇列 共享記憶體 訊號量 套接字

(1)管道(Pipe):管道可用於具有親緣關係程序間的通訊,允許一個程序和另一個與它有共同祖先的程序之間進行通訊。

(2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkfifo或系統呼叫mkfifo來建立

(3)訊號(Signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援Unix早期訊號語義函式sigal外,還支援語義符合Posix.1標準的訊號函式sigaction(實際上,該函式是基於BSD的,BSD為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式).

(4)訊息(Message)佇列:訊息佇列是訊息的連結表,包括Posix訊息佇列System V訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

(5)共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用IPC形式。是針對其他通訊機制執行效率低而設計的。往往與其他通訊機制,如訊號量結合使用,來達到程序間的同步互斥。

(6)訊號量(semaphore):主要作為程序間以及同一個程序不同執行緒之間的同步手段。

(7)套接字(Socket):更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上:Linux和System V的變種都支援套接字