日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

「Go面經」算法 并發模型 緩存落盤 etcd actor模型

來源: 責編: 時間:2023-08-14 22:01:51 9516觀看
導讀Hello,大家好,我是陽哥。失蹤人口回歸,最近太忙,好久沒有更文啦。本文先分享2段面經,文末總結了關鍵問題的復盤筆記。一定要看到最后!求職者情況分享一下好友的最新面經。簡單說下這位好友的情況:坐標成都,游戲行業,3年開發經

Hello,大家好,我是陽哥。失蹤人口回歸,最近太忙,好久沒有更文啦。eXW28資訊網——每日最新資訊28at.com

本文先分享2段面經,文末總結了關鍵問題的復盤筆記。一定要看到最后!eXW28資訊網——每日最新資訊28at.com

求職者情況

分享一下好友的最新面經。eXW28資訊網——每日最新資訊28at.com

簡單說下這位好友的情況:坐標成都,游戲行業,3年開發經驗,最近2年做Go語言開發,1年Java/PHP工作經驗。eXW28資訊網——每日最新資訊28at.com

手撕CSAPP選手,半年前堅持打卡手寫的學習筆記。(最近半年被公司摧殘,沒時間了....)eXW28資訊網——每日最新資訊28at.com

面經分享

第一家

Golang后端,3年+經驗,游戲行業,成都,15~25KeXW28資訊網——每日最新資訊28at.com

下面以對話的方式大概描述問題:eXW28資訊網——每日最新資訊28at.com

A--->面試官eXW28資訊網——每日最新資訊28at.com

B--->我eXW28資訊網——每日最新資訊28at.com

A:自我介紹eXW28資訊網——每日最新資訊28at.com

B:巴拉巴拉eXW28資訊網——每日最新資訊28at.com

A:Actor 模型你是怎么理解的?eXW28資訊網——每日最新資訊28at.com

B:無鎖的并發計算模型,Actor 有自己的狀態,只能通過 mailBox 去收發消息、異步消息傳遞~eXW28資訊網——每日最新資訊28at.com

A:你不是百度了吧?eXW28資訊網——每日最新資訊28at.com

B:沒有。因為我覺得它的一部分思想和 Go 的 GMP 挺像的,好記(這里我就給自己挖坑了,擦嘞~)eXW28資訊網——每日最新資訊28at.com

A:你能說說它們哪里像嗎?eXW28資訊網——每日最新資訊28at.com

B:Go 的調度器全局隊列和它的 MailBox 挺像的eXW28資訊網——每日最新資訊28at.com

A:那你的意思是,實現 MailBox,你會使用隊列嗎?eXW28資訊網——每日最新資訊28at.com

B:是的,用 chan 關鍵字,元素類型為 InterfaceeXW28資訊網——每日最新資訊28at.com

A:這樣是可以,那么我給你一個場景,在同一時刻,有 1 萬個消息打進來呢?eXW28資訊網——每日最新資訊28at.com

B:增加緩沖區大小、無鎖隊列、批量處理消息、背壓機制eXW28資訊網——每日最新資訊28at.com

A:能從數據結構的角度說說嗎?eXW28資訊網——每日最新資訊28at.com

B:chan 底層是數組,線性結構,我想用非線性結構紅黑樹接收消息eXW28資訊網——每日最新資訊28at.com

A:為什么?eXW28資訊網——每日最新資訊28at.com

B:因為 epoll 模型就是這么做的eXW28資訊網——每日最新資訊28at.com

A:優勢是什么eXW28資訊網——每日最新資訊28at.com

B:忘了...eXW28資訊網——每日最新資訊28at.com

A:你再想想,比如動態調整緩沖區,可是是一瞬間打進來的,你怎么知道調整的多大,預留也不好做,巴拉巴拉eXW28資訊網——每日最新資訊28at.com

B:額,不知道eXW28資訊網——每日最新資訊28at.com

A:用環形隊列eXW28資訊網——每日最新資訊28at.com

B:啊?我沒想到,因為我的印象里,它的特定是固定大小,消息太多了,不是會覆蓋嗎,會導致消息丟失。(我提出這個疑問的時候,他沒有繼續給我聊了,如果只用環形隊列肯定有這個問題)我確實沒有想到,很少用到它...eXW28資訊網——每日最新資訊28at.com

A:你能聊聊分布式嗎?eXW28資訊網——每日最新資訊28at.com

B:巴拉巴拉,有擴展性、容錯、很多節點,不同地域、數據共享,巴拉巴拉eXW28資訊網——每日最新資訊28at.com

A:你提到了數據共享,那你說說一致性你怎么做?eXW28資訊網——每日最新資訊28at.com

B:我會先想到用 etcd 吧,因為它的 raft 可以保證一致性eXW28資訊網——每日最新資訊28at.com

A:繼續...eXW28資訊網——每日最新資訊28at.com

B:etcd Leader選舉、數據復制、心跳、然后讀取,保證一致性,巴拉巴拉它們的細節eXW28資訊網——每日最新資訊28at.com

A:etcd 是鍵值數據庫呀,主要場景是配置之類的吧,那我現在有一個場景,就是 10w qps 如何承載 50w qps 的場景,同時保證它們的數據一致性eXW28資訊網——每日最新資訊28at.com

B:啥?(我有點沒聽懂這個問題,硬來)首先是能夠承載這個量級吧,考慮主從復制,然后用分片技術水平擴展、異步處理、加緩存巴拉巴拉eXW28資訊網——每日最新資訊28at.com

A:主從同步你能說說典型的應用嗎?eXW28資訊網——每日最新資訊28at.com

B:(我已經被前面那個問題問蒙蔽了,想說 Redis 的,有點開不了口)額...eXW28資訊網——每日最新資訊28at.com

A:Redis 就是主從吧!eXW28資訊網——每日最新資訊28at.com

B:是....是的eXW28資訊網——每日最新資訊28at.com

然后就下來就是 Redis 拷打小皮鞭了,不多說了,謝謝大家。eXW28資訊網——每日最新資訊28at.com

第二家

Golang后端,坐標成都,游戲行業,15~20keXW28資訊網——每日最新資訊28at.com

先說感受,總體不是很難。下面聽我慢慢聊:eXW28資訊網——每日最新資訊28at.com

A -> 面試官eXW28資訊網——每日最新資訊28at.com

B -> 我eXW28資訊網——每日最新資訊28at.com

A:自我介紹eXW28資訊網——每日最新資訊28at.com

B:巴拉巴拉eXW28資訊網——每日最新資訊28at.com

A:我看你簡歷上提到力扣做了挺多題的。eXW28資訊網——每日最新資訊28at.com

B:是的,但是已經有段時間沒做了,做過的題我都有基本思路。eXW28資訊網——每日最新資訊28at.com

A:你能說說你知道哪些排序嗎?eXW28資訊網——每日最新資訊28at.com

B:冒泡、選擇、插入、快速、歸并、堆、桶eXW28資訊網——每日最新資訊28at.com

A:快排你能說一下它的思路嗎?eXW28資訊網——每日最新資訊28at.com

B:通過選擇一個基準元素,將數組分割成左右兩個子數組,再對子數組進行遞歸排序,直到整個數組有序。eXW28資訊網——每日最新資訊28at.com

A:穩定排序和不穩定排序的概念能換說一下嗎?eXW28資訊網——每日最新資訊28at.com

B:假如排序前后兩個元素的相對順序在排序后仍然不變,那么這種算法就是穩定排序。不穩定排序反之。(這里答的其實不太好,可以結合前面提到的排序算法說一下,哪些具體的算法是穩定的)eXW28資訊網——每日最新資訊28at.com

A:你對二叉樹了解嗎?eXW28資訊網——每日最新資訊28at.com

B:了解的,樹形結構,有根節點、父節點、子節點、葉子節點、度、高度、深度這些概念。eXW28資訊網——每日最新資訊28at.com

A:常見的二叉樹有哪些?eXW28資訊網——每日最新資訊28at.com

B:平衡二叉樹、二叉搜索樹,巴拉巴拉。eXW28資訊網——每日最新資訊28at.com

A:能說一下前序遍歷和后序遍歷嗎?eXW28資訊網——每日最新資訊28at.com

B:前序遍歷,遍歷順序是根節點、左子樹、右子樹。后序遍歷是左子樹、右子樹、根節點。eXW28資訊網——每日最新資訊28at.com

A:前序遍歷和后續遍歷能夠構建一顆二叉樹嗎?eXW28資訊網——每日最新資訊28at.com

B:額,這個問題我不太理解。。。eXW28資訊網——每日最新資訊28at.com

A:沒事,換一個問題。Go 語言中的 Map 是如何實現的,你能聊一聊嗎?eXW28資訊網——每日最新資訊28at.com

B:Map 是使用哈希表、鏈表來實現的。然后我從散列函數、解決哈希沖突、動態擴容、并發安全性聊eXW28資訊網——每日最新資訊28at.com

A:Go 的并發模式你了解嗎?eXW28資訊網——每日最新資訊28at.com

B:請問是指的扇入扇出模式、for select 循環模式這種嗎?(后來回憶一下,面試官想讓我聊的應該是CSP并發模型)eXW28資訊網——每日最新資訊28at.com

A:不是,你可以說一說你了解的 Go 的并發原語eXW28資訊網——每日最新資訊28at.com

B:好的,我從兩個部分簡單說一下,一個就是關鍵字,另一個是包。像關鍵字有 go,創建協程。channel,進行通信。select,處理 channel 的收發。mutex,鎖。context,上下文。包的話 atomic。eXW28資訊網——每日最新資訊28at.com

A:你知道 csp 嗎,能簡單說一下嘛?eXW28資訊網——每日最新資訊28at.com

B:(我腦子里第一時間和 cap 搞混了,但還是拉回來了)csp 是一種通信協作模型。在 Go 里面有一句很經典的話,不要用共享內存來通信,要用通信來共享內存。eXW28資訊網——每日最新資訊28at.com

A:(露出了滿意的笑容,扭頭看向旁邊的同事)我沒什么問的了,你有什么問的嗎?eXW28資訊網——每日最新資訊28at.com

B:你之前用過 mongodb,存儲在 mongodb 中的索引你是怎么設計的?eXW28資訊網——每日最新資訊28at.com

A:不好意思,我之前沒有關注過這個部分,因為之前的整體架構都是將需要落盤的數據放在內存,然后標記臟位,通過一些策略來異步落盤,而需要查詢數據時,也是直接從內存查詢,因為項目啟動時,會把所有的玩家數據加載到內存中。eXW28資訊網——每日最新資訊28at.com

B:沒事,那我們聊一下 redis 吧,你知道 redis 的落盤方案嗎?eXW28資訊網——每日最新資訊28at.com

A:知道,AOF、RDB(然后開始介紹它們的特點)巴拉巴拉eXW28資訊網——每日最新資訊28at.com

B:你會如何評估 redis 的落盤方案?eXW28資訊網——每日最新資訊28at.com

A:我會從數據安全性、可恢復性、性能、硬盤空間成本、使用場景來評估。eXW28資訊網——每日最新資訊28at.com

B:硬盤空間成本?你能具體說說嗎?eXW28資訊網——每日最新資訊28at.com

A:AOF占用空間大等....巴拉巴拉。eXW28資訊網——每日最新資訊28at.com

B:redis 的 Key 過長會影響性能嗎?eXW28資訊網——每日最新資訊28at.com

A:額,我覺得應該會影響性能,因為你問了這個問題,但是這個我沒太關注過,對于 Key 我更在意的是可讀性。eXW28資訊網——每日最新資訊28at.com

最后聊了一些 Redis 的數據結構,又繼續聊了一下一些特定二叉樹的概念,還問了我對于矩陣、向量的理解,我就圍繞以前做過的天賦系統聊了一下矩陣。eXW28資訊網——每日最新資訊28at.com

復盤!復盤!

為了對大家更有幫助,我把面試中回答的關鍵問題,做了復盤和調研,總結如下:eXW28資訊網——每日最新資訊28at.com

Actor模型

Actor模型是一種并發計算模型,用于描述并發系統中的實體和它們之間的通信。在Actor模型中,系統中的每個實體被稱為一個Actor,每個Actor都有自己的狀態和行為,并且可以通過消息傳遞與其他Actor進行通信。eXW28資訊網——每日最新資訊28at.com

在Actor模型中,每個Actor都是獨立的,它們之間沒有共享的內存。Actor之間通過異步消息傳遞進行通信,一個Actor可以向其他Actor發送消息,也可以接收其他Actor發送的消息。當一個Actor接收到消息時,它可以根據消息內容和自身的狀態來決定如何處理消息,并可能改變自身的狀態或向其他Actor發送消息。eXW28資訊網——每日最新資訊28at.com

Actor模型的特點包括:eXW28資訊網——每日最新資訊28at.com

1. 并發性: 每個Actor都可以獨立地執行,不受其他Actor的影響,從而實現并發執行。eXW28資訊網——每日最新資訊28at.com

2. 無共享狀態: 每個Actor都有自己的狀態,不與其他Actor共享內存,避免了共享狀態帶來的并發問題。eXW28資訊網——每日最新資訊28at.com

3. 異步消息傳遞: Actor之間通過異步消息傳遞進行通信,消息的發送和接收是非阻塞的,提高了系統的響應性能。eXW28資訊網——每日最新資訊28at.com

4. 面向對象: 每個Actor都可以看作是一個對象,具有自己的狀態和行為,可以封裝數據和方法。eXW28資訊網——每日最新資訊28at.com

總結一下:通過使用Actor模型,可以簡化并發系統的設計和實現,提高系統的可擴展性和可維護性。同時,Actor模型也能夠有效地處理并發問題,避免了傳統并發編程中常見的共享狀態和鎖競爭的問題。eXW28資訊網——每日最新資訊28at.com

對比Go的GMP模型和Actor模型

Go的GMP(Goroutine, M, P)模型和Actor模型都是用于并發編程的模型,但在一些方面有所不同。eXW28資訊網——每日最新資訊28at.com

Go的GMP模型是Go語言并發編程的基礎,它通過goroutine(輕量級線程)和調度器(scheduler)來實現并發。GMP模型中的goroutine是Go語言中的并發執行單元,它可以獨立地執行函數或方法。調度器負責將goroutine分配給線程(P),以便并行執行。線程(P)是操作系統線程的抽象,它負責執行goroutine。M(Machine)是Go語言運行時系統的一部分,它管理線程的創建和銷毀,并提供與操作系統的交互。GMP模型的優點是輕量級的goroutine和高效的調度器,使得并發編程變得簡單且高效。eXW28資訊網——每日最新資訊28at.com

Actor模型是一種并發編程模型,它通過將并發執行的單元(稱為actor)之間的通信和狀態封裝在一起來實現并發。在Actor模型中,每個actor都是獨立的實體,它們通過消息傳遞進行通信。每個actor都有自己的狀態和行為,并且只能通過接收和發送消息來與其他actor進行通信。Actor模型的優點是提供了一種結構化的方式來處理并發,避免了共享狀態和鎖的問題。eXW28資訊網——每日最新資訊28at.com

雖然GMP模型和Actor模型都是用于并發編程,但它們在實現方式和語義上有所不同。GMP模型更加底層,直接操作線程和goroutine,適用于需要更細粒度控制的場景。而Actor模型更加高級,通過消息傳遞來實現并發,適用于需要更結構化和可擴展的場景。eXW28資訊網——每日最新資訊28at.com

總結起來,GMP模型適用于Go語言中的并發編程,提供了輕量級的goroutine和高效的調度器;而Actor模型適用于一般的并發編程,通過消息傳遞來實現并發。eXW28資訊網——每日最新資訊28at.com

epoll模型

epoll是一種在Linux系統中用于高效處理大量并發連接的I/O事件通知機制。它具有以下特點:eXW28資訊網——每日最新資訊28at.com

  1. 支持高并發:epoll使用事件驅動的方式,能夠同時處理大量的并發連接,適用于高并發的網絡應用場景。
  2. 高效的事件通知機制:epoll采用了基于事件驅動的方式,當有事件發生時,內核會將事件通知給應用程序,而不需要應用程序輪詢檢查事件是否發生,從而減少了系統資源的消耗。
  3. 支持邊緣觸發和水平觸發:epoll提供了兩種工作模式,邊緣觸發(EPOLLET)和水平觸發(EPOLLIN/EPOLLOUT)。邊緣觸發模式只在狀態發生變化時通知應用程序,而水平觸發模式則在狀態可讀或可寫時都會通知應用程序。
  4. 支持多種I/O事件類型:epoll可以同時監控多種I/O事件類型,包括讀事件、寫事件、錯誤事件等。
  5. 高效的內核數據結構:epoll使用紅黑樹和雙向鏈表等高效的數據結構來管理大量的文件描述符,提高了事件的處理效率。

總之,epoll模型具有高并發、高效的事件通知機制和多種I/O事件類型的支持,適用于處理大量并發連接的網絡應用場景。eXW28資訊網——每日最新資訊28at.com

etcd保證數據一致性

etcd通過使用Raft一致性算法來保證數據的一致性。 Raft是一種分布式一致性算法,它將集群中的節點分為Leader、Follower和Candidate三種角色,通過選舉機制選出Leader節點來處理客戶端的請求。eXW28資訊網——每日最新資訊28at.com

當客戶端向etcd發送寫請求時,Leader節點會將該請求復制到其他節點的日志中,并等待大多數節點確認接收到該日志條目。一旦大多數節點確認接收到該日志條目,Leader節點會將該請求應用到自己的狀態機中,并將結果返回給客戶端。同時,Leader節點會通知其他節點將該請求應用到自己的狀態機中。eXW28資訊網——每日最新資訊28at.com

如果Leader節點失去連接或崩潰,剩余的節點會通過選舉機制選出新的Leader節點。新的Leader節點會根據自己的日志和其他節點的日志進行比較,保證自己的日志是最新的,并將缺失的日志條目復制給其他節點,以保持數據的一致性。eXW28資訊網——每日最新資訊28at.com

通過Raft算法,etcd能夠保證數據在集群中的一致性,并且在Leader節點失效時能夠快速選舉出新的Leader節點,保證系統的可用性和數據的一致性。eXW28資訊網——每日最新資訊28at.com

redis的落盤方案

Redis的落盤方案主要有兩種:RDB(Redis Database)和AOF(Append Only File)。eXW28資訊網——每日最新資訊28at.com

  1. RDB(Redis Database):RDB是Redis默認的持久化方式。它通過將Redis的內存數據快照保存到磁盤上的二進制文件中來實現持久化。RDB的優點是快速和緊湊,適合用于備份和恢復數據。RDB的缺點是在發生故障時可能會丟失一部分數據,因為RDB是定期進行持久化的,而不是實時的。
  2. AOF(Append Only File):AOF是另一種持久化方式,它通過將Redis的寫操作追加到文件末尾來記錄數據的變化。AOF的優點是可以提供更好的數據安全性,因為它記錄了每個寫操作,可以在發生故障時進行恢復。AOF的缺點是相對于RDB來說,文件體積較大,恢復數據的速度較慢。

在實際應用中,可以根據需求選擇適合的落盤方案。如果對數據的安全性要求較高,可以選擇AOF方式;如果對數據的實時性要求較高,可以選擇RDB方式。另外,也可以同時使用RDB和AOF兩種方式,以提供更好的數據保護和恢復能力。eXW28資訊網——每日最新資訊28at.com

本文轉載自微信公眾號「 程序員升級打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關注。eXW28資訊網——每日最新資訊28at.com

eXW28資訊網——每日最新資訊28at.com

轉載本文請聯系「 程序員升級打怪之旅」公眾號。eXW28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5769-0.html「Go面經」算法 并發模型 緩存落盤 etcd actor模型

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 每個前端開發者都應知道的14個實用網站

下一篇: Go-Zero 是如何實現令牌桶限流的?

標簽:
  • 熱門焦點
  • 容量越大越不壞?24萬塊硬盤故障率報告公布 這些產品零故障

    8月5日消息,云存儲服務商Backblaze發布了最新的硬盤故障率報告,年故障率有所上升。Backblaze發布的硬盤季度統計數據,其中包括故障率等重要方面。這些結
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁“充值中心”入口上線了本機生活界面。壹覽商業發現,該界面目前主要
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對“勢”的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 華為發布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發者大會2023(HDC.Together)大會上,HarmonyOS 4正式發布。自2019年發布以來,HarmonyOS一直以用戶為中心,經歷四年多的發展HarmonyOS已
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發布

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • 微軟發布Windows 11新版 引入全新任務欄狀態

    近日,微軟發布了Windows 11新版,而Build 22563更新主要引入了幾周前曝光的平板模式任務欄等,系統更流暢了。更新中,Windows 11加入了專門針對平板優化的任務欄
Top 主站蜘蛛池模板: 仙桃市| 高唐县| 同德县| 新邵县| 五台县| 滨海县| 武隆县| 邢台市| 广平县| 南汇区| 措勤县| 赤峰市| 新建县| 响水县| 广河县| 镇沅| 安乡县| 东兴市| 盐边县| 台安县| 清河县| 阿克陶县| 长沙市| 大悟县| 尤溪县| 宁武县| 许昌市| 麻栗坡县| 诸城市| 平山县| 错那县| 呼图壁县| 淅川县| 辽阳市| 临朐县| 曲松县| 肇源县| 全州县| 南岸区| 东莞市| 阳山县|