做公司網(wǎng)站一般多少錢免費軟件下載網(wǎng)站有哪些
- 繼承:面相對象編程中的核心概念,子類可以使用父類的屬性和方法,無需重新編寫,子類還可以添加新的屬性和方法來提供特定的實現(xiàn)
- 多態(tài):同一件事,發(fā)生在不同的對象上,會產(chǎn)生不同的結(jié)果,傳遞不同的對象會調(diào)用對應(yīng)類中的方法
- 重載(Overload),同一個類中多個同名的方法,參數(shù)列表不同,提高代碼復(fù)用性
- 重寫(Override),是繼承中的一個概念,子類可以重寫父類的方法,以后默認(rèn)情況調(diào)用該方法都會執(zhí)行子類的重寫版本,如果還想執(zhí)行父類版本的方法,可以在重寫的方法里加上super.方法()
多態(tài)實現(xiàn)的必要條件:
-
繼承:多態(tài)性發(fā)生在有繼承關(guān)系的類之間。子類繼承自父類,能夠繼承父類的屬性和方法。
-
方法重寫:子類需要重寫父類中的方法(對于
private
和static
方法不適用多態(tài),因為它們不受繼承影響)。這樣,當(dāng)通過父類引用調(diào)用該方法時,可以執(zhí)行到子類中的實現(xiàn)。 -
父類引用指向子類對象:(Animal myDog = new Dog);在程序中,需要有父類類型的引用變量指向子類對象。這是實現(xiàn)多態(tài)的關(guān)鍵,因為它允許我們以統(tǒng)一的接口(即父類接口)來操作不同的子類對象。
實現(xiàn)多態(tài)的三個方法
通過繼承實現(xiàn)多態(tài)
// 父類
class Animal {void eat() {System.out.println("This animal eats food.");}
}// 子類 Dog
class Dog extends Animal {@Overridevoid eat() {System.out.println("Dog eats meat.");}
}// 測試類
public class TestInheritancePolymorphism {public static void main(String[] args) {Animal myDog = new Dog(); // 父類引用指向子類對象myDog.eat(); // 輸出: Dog eats meat.}
}
通過接口實現(xiàn)多態(tài)(Override)
// 接口
interface Speakable {void speak();
}// 實現(xiàn)接口的類 Dog
class Dog implements Speakable {@Overridepublic void speak() {System.out.println("Woof!");}
}// 測試類
public class TestInterfacePolymorphism {public static void main(String[] args) {Speakable myDog = new Dog(); // 接口引用指向?qū)崿F(xiàn)類對象myDog.speak(); // 輸出: Woof!}
}
?使用抽象類實現(xiàn)多態(tài)(雖然抽象類本身不直接實現(xiàn)多態(tài),但它與繼承一起使用時可以)
// 抽象類
abstract class Vehicle {abstract void move();
}// 繼承自抽象類的子類 Car
class Car extends Vehicle {@Overridevoid move() {System.out.println("Car is moving on wheels.");}
}// 測試類
public class TestAbstractClassPolymorphism {public static void main(String[] args) {Vehicle myCar = new Car(); // 抽象類引用指向子類對象myCar.move(); // 輸出: Car is moving on wheels.}
}
輸入一個URL的過程
輸入一個URL到瀏覽器并按下回車鍵后,瀏覽器會執(zhí)行一系列的操作來加載和顯示網(wǎng)頁,這個過程大致可以分為以下幾個步驟:
解析URL:瀏覽器首先會對輸入的URL進(jìn)行解析,以確定協(xié)議(如HTTP、HTTPS)、主機名(域名)、端口號(默認(rèn)為80或443)和路徑等。
DNS查詢:如果URL中的主機名是域名,瀏覽器會向DNS服務(wù)器發(fā)送請求,將域名解析為IP地址。
建立TCP連接:瀏覽器通過解析得到的IP地址和端口號,與服務(wù)器建立TCP連接。如果是HTTPS,則還會在TCP連接的基礎(chǔ)上建立SSL/TLS安全連接。
發(fā)送HTTP請求:瀏覽器向服務(wù)器發(fā)送HTTP請求,請求中包含了請求方法(如GET、POST)、URL、協(xié)議版本、請求頭等信息。
服務(wù)器處理請求:服務(wù)器接收到請求后,會根據(jù)請求的內(nèi)容進(jìn)行相應(yīng)的處理,如讀取文件、執(zhí)行數(shù)據(jù)庫查詢等。
服務(wù)器返回響應(yīng):服務(wù)器處理完請求后,會向瀏覽器返回HTTP響應(yīng),響應(yīng)中包含了狀態(tài)碼、響應(yīng)頭、響應(yīng)體(即網(wǎng)頁的內(nèi)容)等信息。
瀏覽器渲染網(wǎng)頁:瀏覽器接收到響應(yīng)后,會解析響應(yīng)體中的HTML、CSS、JavaScript等內(nèi)容,并渲染出網(wǎng)頁的視覺效果。
連接關(guān)閉:瀏覽器和服務(wù)器之間的TCP連接在完成數(shù)據(jù)傳輸后會被關(guān)閉。如果是HTTP/1.1協(xié)議,可能會使用持久連接(Keep-Alive)來復(fù)用連接。
死鎖產(chǎn)生的原理和條件
????????死鎖產(chǎn)生的原理主要涉及到多個進(jìn)程或線程在執(zhí)行過程中,因爭奪資源而陷入的一種相互等待的狀態(tài),其中每個進(jìn)程或線程都在等待對方釋放資源以繼續(xù)執(zhí)行,但因為沒有外力的干預(yù),它們都無法繼續(xù)推進(jìn),從而形成了死鎖。
死鎖產(chǎn)生的條件,也被稱為死鎖的四個必要條件,包括:
互斥條件(Mutual Exclusion):資源至少被一個進(jìn)程或線程所占用,且該資源在一段時間內(nèi)只能被一個進(jìn)程或線程占用。即,資源是互斥的,不能被多個進(jìn)程或線程同時訪問。
請求與保持條件(Hold and Wait):進(jìn)程或線程已經(jīng)保持了至少一個資源,但又提出了新的資源請求,而該資源已被其他進(jìn)程或線程占用。此時,請求的進(jìn)程或線程被阻塞,但它對已獲得的資源保持不放。
不剝奪條件(No Preemption):進(jìn)程或線程已獲得的資源,在未使用完之前,不能被其他進(jìn)程或線程強行剝奪。即,資源只能由持有它的進(jìn)程或線程自愿釋放。
循環(huán)等待條件(Circular Wait):系統(tǒng)中若干進(jìn)程或線程之間形成了一種頭尾相接的循環(huán)等待資源的關(guān)系。每個進(jìn)程或線程都在等待鏈中下一個進(jìn)程或線程所占有的資源。
????????當(dāng)這四個條件同時滿足時,就可能發(fā)生死鎖。為了避免死鎖的發(fā)生,可以采取一些預(yù)防措施,如破壞死鎖的四個必要條件中的至少一個,或者在檢測到死鎖后采取恢復(fù)措施,如撤銷一些進(jìn)程或線程,以解除死鎖狀態(tài)
進(jìn)程是資源調(diào)度的獨立單元:(很多app在后臺,互不影響),它確保了每個程序都有自己獨立的資源集合;
線程則是資源調(diào)度的基本單位:(其中一個瀏覽器里的一個標(biāo)簽頁,共享瀏覽器的內(nèi)存空間),它使得程序能夠高效地并發(fā)執(zhí)行多個任務(wù)。?
進(jìn)程和線程的定義及區(qū)別
- 進(jìn)程:是程序運行的實例,擁有獨立的資源空間,是系統(tǒng)資源分配和調(diào)度的基本單位。
- 線程:是進(jìn)程內(nèi)的實體,共享進(jìn)程資源,是CPU調(diào)度的基本單位,負(fù)責(zé)進(jìn)程中的具體執(zhí)行流。
區(qū)別:
- 進(jìn)程是包含線程的,每個進(jìn)程里最少有一個線程
- 進(jìn)程和進(jìn)程之間不共享內(nèi)存空間,同一個進(jìn)程里的線程共享同一個內(nèi)存空間
- 進(jìn)程是系統(tǒng)分配資源的最小單位,進(jìn)程是系統(tǒng)調(diào)度的最小單位
進(jìn)程通信的幾種方式?
在操作系統(tǒng)中,進(jìn)程之間需要進(jìn)行通信以實現(xiàn)協(xié)作和數(shù)據(jù)共享。以下是幾種常見的進(jìn)程通信方式:
1)管道(Pipe):管道是一種半雙工的通信方式,它可以在兩個進(jìn)程之間傳遞數(shù)據(jù)。管道的特點是數(shù)據(jù)只能單向流動,而且通常只用于具有親緣關(guān)系的進(jìn)程之間進(jìn)行通信,例如父子進(jìn)程之間。
2)命名管道(Named Pipe):命名管道與管道類似,但是它可以在不具有親緣關(guān)系的進(jìn)程之間進(jìn)行通信。與管道不同的是,命名管道具有一個唯一的名稱,可以在文件系統(tǒng)中進(jìn)行訪問。
3)信號(Signal):信號是一種異步通信方式,它允許一個進(jìn)程向另一個進(jìn)程發(fā)送一個信號。信號通常用于處理異步事件,例如鍵盤中斷、終端關(guān)閉等。
4)共享內(nèi)存(Shared Memory):共享內(nèi)存是一種高效的進(jìn)程通信方式,它允許多個進(jìn)程訪問同一塊物理內(nèi)存,從而實現(xiàn)數(shù)據(jù)共享。共享內(nèi)存的優(yōu)點是速度快,但是需要處理并發(fā)訪問和同步問題。
5)信號量(Semaphore):信號量是一種進(jìn)程間同步和互斥的機制,它可以用于控制進(jìn)程對共享資源的訪問。信號量通常用于進(jìn)程之間的同步和互斥,例如保護共享內(nèi)存中的數(shù)據(jù)。
6)消息隊列(Message Queue):消息隊列是一種進(jìn)程間通信方式,它允許進(jìn)程之間傳遞消息。消息隊列通常用于進(jìn)程之間傳遞結(jié)構(gòu)化的數(shù)據(jù),例如進(jìn)程之間傳遞命令和數(shù)據(jù)等。
7)套接字(Socket):套接字是一種進(jìn)程間通信方式,它可以在不同的計算機之間進(jìn)行通信。套接字通常用于實現(xiàn)分布式系統(tǒng)和網(wǎng)絡(luò)通信。