美團雲計算方面面試題


1、Linux進程間的通信方式?兩個進程是如何來共享內存的?兩個進程如何通過信號量通信?

(1)Linux下進程間通信的方式有: 管道(有名/無名) 、消息、信號、信號量、共享內存、郵箱、socket。

(2)Linux下共享內存是進程間通信的方式之一,共享內存允許兩個或多個進程訪問同一塊內存,比如像 malloc函數 向不同的進程返回執行同一塊物理內存區域的指針。當一個進程改變了這塊地址中的內容的時候,其他擁有這塊物理內存指針的進程也會察覺到這個更改。在進程間的通信方式中,共享內存是通信效率最高的,訪問共享內存區域和訪問進程獨有的內存區域一樣快,並不需要通過系統調用或者其他通過內核的過程來完成,同時也避免了各種不必要的複製。對共享內存的操作涉及到多個進程間的同步問題,數據應該先寫,在讀,通常採用用信號量來協調這個過程。


進程與線程的區別?回答方式:

線程是進程中的一個邏輯執行單元,也是進程中可調度的實體;一個進程中可以包含多個線程,但是一個線程只能隸屬於一個進程

與進程的區別:

1、CPU調度方面:CPU調度是以線程爲基本單位進行的;

2、擁有資源方面:進程是擁有資源的基本單位,線程不擁有系統的資源,但是可以使用隸屬於進程的資源;

3、併發方面: 線程 和 進程都支持併發;

4、系統開銷方面: 創建進程的時候需要爲進程分配資源,銷燬進程時需要回收資源,所以使用進程的開銷要大於使用線程的開銷。


進程控制塊?

操作系統通過進程控制塊來對進程控制和管理的。PCB通常在系統內存中佔用一塊連續的分區,它存放着操作系統用於描述進程情況以及控制進程運行情況所需的全部信息,

爲什麼要CPU調度?

CPU調度的目標是在任何時候都有某些進程在運行,是CPU使用率最大化。  同一時刻 只有一個進程佔有CPU資源,但一個進程在等待IO時等等一些阻塞進程的動作時,CPU就回空閒出來,這時候,我們應該讓這個阻塞的進程讓出CPU資源,讓其他已經處於就緒狀態的進程執行。這樣就可以使CPU使用率最大化。

什麼是死鎖?

在多道程序環境下,多個進程可能競爭一定數量的資源,某個進程申請資源,如果這時這個資源不可用,那麼這個進程就進入等待狀態。如果所申請的資源被其他等待進程佔有,那麼該等待進程可能再也無法改變其狀態,一直等待下去,這種情況稱之爲 死鎖。


cache的作用?

cache是處於 CPU寄存器 和 內存之間的一層緩存,用來加快CPU的取指速率, 使用時: CPU需要數據時,首先會查找cache中有沒有需要的數據,如果有,則取走,如果沒有,則查詢內存,並將數據更新到緩存中,以供下次取指。


2、DNS (Domain name system)域名系統,簡單描述其工作原理。

DNS客戶機需要在程序中使用名稱時,它會查詢DNS服務器來解析該名稱。客戶機發送的每條查詢信息包括三條信息:包括:指定的DNS域名,指定的查詢類型,DNS域名指定的類別。它是基於UDP的服務,端口是53,該應用一般不直接爲用戶使用,而是爲其他應用服務 如 HTTP、SMTP等在其中需要完成主機名到IP地址轉換。


在瀏覽器地址欄內敲 www.baidu.com 到這個頁面顯示在瀏覽器上,這個過程中都發生了什麼?

(1) 當我們在瀏覽器上敲入一個url是, 瀏覽器會解析出該url的域名,接下來的動作,是將域名轉化爲 ID 地址,依次查詢 瀏覽器DNS緩存、系統緩存、路由器緩存、如果沒有找到 則一直查詢到 根域名服務器緩存,找到域名所對應的的 IP地址。

(2)向IP所對應的的服務器發送請求數據,

(3)服務器響應請求,發回網頁內容;

(4)客戶端瀏覽器獲取網頁內容,解析,並顯示在瀏覽器上。

這就是我們所看到的的 百度頁面顯現的過程。


3、TCP/UDP的區別?

(1)TCP是面向連接的、可靠數據傳輸協議,UDP是不面向連接的,非可靠數據傳輸協議;(2) 從傳輸速度上考慮: TCP 由於要建立連接、保證數據傳輸的可靠性等造成數據傳輸速度比較慢,UDP不需要這些,數據傳輸速度相對比較快;(3)從安全方面考慮,TCP的安全性能更高,UDP的安全性能比較低 (4)從傳輸數據的格式來比較,TCP傳輸的單位稱爲報文段,UDP傳輸的數據單位被稱爲 數據報

4、ICMP協議

ICMP (Internet Control Message Protocol) ,因特網控制消息協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳輸控制消息。控制消息包括:網絡不同、主機是否可達、路由器是否可用等網絡本身的消息。這些控制消息雖然並不傳輸用戶數據,但對用戶數據的傳遞起着很重要的作用。ICMP報文格式兩種: 差錯報告報文和詢問報文。


5、數據庫

數據庫 一個 邏輯執行單元 如何才能被稱的上是一個事務? 必須滿足的性質?

數據庫的事務是指 一個邏輯單元,這個邏輯單元可包含一系列的執行操作, 一個邏輯單元要想成爲一個事務,必須滿足所謂的 ACID (原子性、隔離性、一致性、持久性);

原子性:指的是 一個事務執行,要麼全部執行成功,要麼執行失敗回滾到執行之前的狀態;

一致性:事務執行過後,數據庫中數據的狀態都必須是一致的,必須遵從數據庫的完整性約束;

隔離性:對於多個事務併發的時候,

持久性: 事務的完成後對系統的影響是持久的,任何一個事務的操作不會對其他事務造成干擾;比如一個事務在讀數據庫,一個事務在寫數據庫,讀數據庫的這個事務讀到的數據,要麼是這個寫數據庫事務 寫前的狀態,要麼爲寫後的狀態,不存在 讀到的數據是 另一個事務寫的過程中的一個狀態。

數據庫索引?


6、內存管理

內存的段頁式管理的優缺點?

分段:

在段式存儲管理中,將程序的地址空間(進程地址空間)劃分爲若干個段(segment),這樣每個進程都有一個二維的地址空間,相互獨立,互不干擾。程序通過分段來劃分爲多個模塊,如代碼段、數據段、共享段等,這樣做的優點是:可以分別編譯源程序的一個文件,並且可以針對不同類型的段採取不同的保護,也可以按段爲單位進行共享。段式存儲管理的優點是:沒有內碎片,外碎片可以通過內存緊縮來消除,便於實現內存共享。


分頁:將程序的邏輯地址空間劃分爲固定大小的頁 (page),而物理內存劃分爲同樣大小的頁框(pageframe)。程序加載時,可以將任意一頁放入內存中的任意一個頁框,這些頁框不必連續,從而實現了離散分配。這種管理的優勢是:沒有外碎片,且一個程序不必連續存放,這樣就便於更改程序佔用的空間大小。

頁式 和 段式系統有許多相似之處,比如,兩者都採用離散的分配方式,都通過地址映射機構來實現地址變換。但概念上兩者是有很多區別的,主要表現在:

[1]、頁是信息的物理單位, 段是信息的邏輯單位,每個邏輯單元分爲一個段。

[2]、頁大小固定由系統決定,把邏輯地址劃分爲頁號和頁內地址兩部分,段的長度不固定,且決定於用戶編寫的程序

[3]、頁式系統地址空間是一維的,即爲單一的線性地址空間,程序員只需利用一個標識符,即可表示一個地址。分段的作業地址空間是二維的,程序員在標識一個地址時,既需給出段名,又需給出段內地址。

http://dongxicheng.org/os/linux-memory-management-basic/


內存:

(1)虛擬內存: 計算機系統內存管理的一種技術。它使得應用程序認爲它擁有連續可用的內存(一塊連續完整的地址空間),而實際上,他/她通常被分割成多個物理內存碎片,還有部分佔時存儲在外部磁盤存儲器上,在需要時進行交換數據。與沒有虛擬內存技術的系統相比,使用這種技術的系統使得大型程序編寫變得更容易,對真正的物理內存使用的更有效率。

(2)物理內存:實際的內存,物理地址被分成離散的單元,稱爲頁,頁面大小是跟操作系統的位數有關係,一般爲4K


7、程序內存分區

5個分區:

堆區:用戶在這進行動態內存分配區,

棧區:系統自動分配,自動回收,速度快,效率高,但是棧區比較小,小心 棧溢出

全局區:  存儲全局變量和靜態變量,

文字常量區:常量字符串就存儲在這,程序結束後,由系統同一釋放。

程序代碼區:存放程序的二進制代碼。
























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章