golang工程師面試第一天

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。**1**.求兩個字串的交集,並寫出該程式時間複雜度```gopackage mainimport "fmt"func main() {str1 :="abcde"str2 :="cdefg"/*將字串遍曆,比較位元組相同則輸出*/for _,v1:=range str1 {for _,v2:=range str2 {if v1==v2 {fmt.Printf(string(v1))}}}}```時間複雜度為O(n²)**2** .未知邏輯運算子優先等級```gopackage mainimport "fmt"/*未知 && ||邏輯運算優先順序通過代碼求優先順序*/func main() { a :=true b :=false c :=falseif a&&b||c{fmt.Println("&&優先")}else {fmt.Println("||優先")}}```**3**.linux查看被佔用連接埠命令`lsof -i:port`**4**.協程線程進程的區別,為什麼說協程是輕量級的進程?**協程** :是一種輕量級的線程,協程的調度完全由使用者控制,協程擁有自己的寄存器上下文和棧,當協程調度切換時,將寄存器上下文和棧儲存到其他地方,調度切換回來的時候,恢複之前儲存的寄存器上下文和棧,直接操作棧則基本沒有核心切換的開銷,可以不加鎖的訪問全域變數,所有環境切換非常快。**線程**:線程是進程的一個實體,是CPU指派和調度的基本單位,它是比進程更小的能獨立啟動並執行基本單位,線程自己基本上不用有系統資源,只有一點運行必不可少的資源(程式計數器,寄存器和棧),但是它可以和同屬一個進程內的線程共用所擁有的全部資源,線程間通訊主要通過共用記憶體,環境切換很快,資源開銷較少,但相比進程不夠穩定容易遺失資料。**進程**:是具有一定獨立功能的程式關於某個資料集合上的一次運行活動,進程是系統進行資源分派和調度的一個獨立單位,每個進程都有自己的獨立記憶體空間,處理序間通訊有多種方法,例如管道,有名管道,訊號量,訊息佇列,訊號,共用記憶體,通訊端。由於進程比較重量級,上下文進程間的切換開銷較大,但相對穩定安全。**5**.互斥鎖以及什麼情況下會死結**互斥鎖**是傳統並發程式對共用資源進行存取控制的手段,在golang中用sync.Mutex定義,其中只有兩個公開方法:lock()和Unlock(),前者用於鎖定當前互斥量,後者用於對當前互斥量進行解鎖。**死結的定義**:如果一組進程(或線程)中的每一個進程(或線程)都在等待僅由該組進程中的其他進程(或線程)才能引發的事件,那麼該組進程(或線程)是死結的(Deadlock)。 典型的兩種死結情形: (一)線程自己將自己鎖住 一般情況下,如果同一個線程先後兩次調用lock,在第二次調⽤用時,由於鎖已經被佔用,該線程會掛起等待佔用鎖的線程釋放鎖,然而鎖正是被自己佔用著的,該線程又被掛起而沒有機會釋放鎖,因此 就永遠處於掛起等待狀態了,於是就形成了死結(Deadlock)。 (二)多線程搶佔鎖資源被困 又如線程A獲 得了鎖1,線程B獲得了鎖2,這時線程A調用lock試圖獲得鎖2,結果是需要掛起等待線程B釋放 鎖2,而這時線程B也調用lock試圖獲得鎖1,結果是需要掛起等待線程A釋放鎖1,於是線程A和B都 永遠處於掛起狀態了,死結再次形成。**產生死結的必要條件 **(1)互斥條件。進程(線程)所申請的資源在一段時間內只能被一個進程(線程)鎖佔用。 (2)請求和保持條件。進程(線程)已經佔有至少一個資源,但又提出了新的資源請求,而該資源卻被其他進程(線程)佔用。 (3)不可搶佔條件(不可剝奪條件)。進程(線程)已獲得的資源在未使用完之前不能被搶佔。 (4)迴圈等待條件(環路等待條件)。在發生死結時,必然存在一個進程(線程)—-資源的迴圈鏈。 **6**.DNS協議DNS協議提供DNS解析服務,DNS是網域名稱系統(DomainNameSystem)的縮寫,該系統用於命名組織到域階層中的電腦和網路服務。網域名稱是由圓點分開一串單詞或縮寫組成的,每一個網域名稱都對應一個惟一的IP地址,在Internet上網域名稱與IP地址之間是一一對應的,**7**.資料庫事務**事務**在資料庫中事務是工作的邏輯單元,一個事務是由一個或多個完成一組的相關行為的SQL語句組成,通過事務機制確保這一組SQL語句所作的操作要麼都成功執行,完成整個工作單元操作,要麼一個也不執行。如:網上轉帳就是典型的要用事務來處理,用以保證資料的一致性。**事務特性**SQL92標準定義了資料庫事務的四個特點:**原子性(Atomicity)**:一個事務裡面所有包含的SQL語句是一個執行整體,不可分割,要麼都做,要麼都不做。**一致性(Consistency)**:事務開始時,資料庫中的資料是一致的,事務結束時,資料庫的資料也應該是一致的。**隔離性(Isolation)**:是指資料庫允許多個並發事務同時對其中的資料進行讀寫和修改的能力,隔離性可以防止事務的並發執行時,由於他們的操作命令交叉執行而導致的資料不一致狀態。**持久性 (Durability)** : 是指當事務結束後,它對資料庫中的影響是永久的,即便系統遇到故障的情況下,資料也不會丟失。一組SQL語句操作要成為事務,資料庫管理系統必須保證這組操作的原子性(Atomicity)、一致性(consistency)、隔離性(Isolation)和持久性(Durability),這就是ACID特性。635 次點擊  ∙  1 贊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.