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的變種都支援套接字