2025面試Go真題第一場

前幾天參加了一場面試,GoLang 后端工程師,他們直接給了我 10 道題,我留了一個截圖。

image-20250224133316933

在看答案之前,你可以先簡單做一下,下面我會對每個題目做一個說明。

文章目錄

      • 1、golang map 是否并發安全?
      • 2、協程泄漏的原因可能是什么?
      • 3、關于channel操作正確的可能是?
      • 4、Golang字符串轉成byte數組,會發生內存拷貝嗎?
      • 5、請說一說Golang 的 GC可以怎么觸發的?
      • 6、Channel是同步的還是異步的 ?
      • 7、defer在return返回前還是返回后執行?
      • 8、什么情況下可能會發生內存逃逸 ?
      • 9、Golang中有哪些方式可以安全讀寫共享變量?
      • 10、Golang協程為什么比線程輕量?
    • 最后

image-20250224144221700

1、golang map 是否并發安全?

Go 語言中的原生 map 并不是并發安全的。在多 goroutine 并發讀寫同一個 map 時,可能會導致數據競爭(race condition),從而引發程序崩潰。

可以用 sync.Map

Go標準庫中的 sync.Map 是一個并發安全的map實現。它內部通過讀寫分離的策略來減少鎖爭用,適用于讀多寫少的場景。例如:

var m sync.Map
m.Store("key", 42) // 存儲鍵值對
value, ok := m.Load("key") // 獲取值
m.Delete("key") // 刪除鍵值對

2、協程泄漏的原因可能是什么?

在 Go 語言中,協程泄漏(Goroutine Leak)是指啟動的協程無法正常退出,持續占用資源,最終可能導致程序崩潰或系統資源耗盡。

例如:

協程中存在無限循環,且沒有退出條件。多個協程之間存在死鎖,導致無法正常退出。總的來說就是協程沒有釋放、不受控制。

3、關于channel操作正確的可能是?

  • 從已關閉的 channel 接收數據:是可以的。
  • 向已關閉的 channel 發送數據:會導致運行時錯誤。
  • 關閉已關閉的 channel:會導致運行時錯誤。

4、Golang字符串轉成byte數組,會發生內存拷貝嗎?

不會。GoLang 底層字符串就是用 byte 數組存儲的。

5、請說一說Golang 的 GC可以怎么觸發的?

自動觸發:堆內存達到閾值、時間周期觸發、系統監控觸發。

手動觸發:調用 runtime.GC()

6、Channel是同步的還是異步的 ?

無緩沖通道:同步。

ch := make(chan int) // 創建一個無緩沖通道

有緩沖通道:異步。

ch := make(chan int, 2) // 創建一個緩沖大小為2的通道

7、defer在return返回前還是返回后執行?

在函數真正返回給調用者之前執行。

8、什么情況下可能會發生內存逃逸 ?

在Go語言中,內存逃逸(Memory Escape)是指變量被分配到堆上,而不是棧上。這通常發生在Go編譯器無法確定變量是否會在函數外部被引用時。以下是一些可能導致內存逃逸的常見場景:

  1. 返回局部變量的指針

如果函數返回了局部變量的指針,該變量會被分配到堆上,因為其生命周期需要超出函數的作用域。

func createPointer() *int {x := 42return &x // x逃逸到堆上
}
  1. 閉包引用局部變量

如果閉包引用了局部變量,這些變量可能會被分配到堆上。

func main() {f := func() int {x := 10return x}fmt.Println(f()) // f會導致x逃逸到堆上
}

還有多種情況,這個有一定難度,我會再單開一篇繼續講解。

9、Golang中有哪些方式可以安全讀寫共享變量?

  • 使用互斥鎖(sync.Mutex)
  • 使用讀寫鎖(sync.RWMutex)
  • 使用原子操作(sync/atomic)
  • 使用通道(channel)
  • 使用sync.Map進行并發訪問

10、Golang協程為什么比線程輕量?

  • 調度開銷更小,協程的切換由Go運行時管理,上下文切換的開銷非常小,通常只需要幾十納秒。
  • 協程的內存占用,Go協程:棧空間的初始大小非常小(通常為2KB),并且會根據需要動態擴展。這種動態棧分配機制使得協程的內存占用非常低。
  • 協程的輕量級結構:Go協程的內部結構簡單,主要包含協程狀態、棧指針等信息,而操作系統線程需要維護更多的內核資源。
  • Go運行時通過多路復用(Multiplexing)的方式將協程映射到少量的操作系統線程上,從而實現高效的并發執行。多路復用機制、高并發能力。
  • 阻塞處理:協程阻塞時,運行時會自動切換到其他協程,充分利用CPU。
  • Go協程:協程的創建和銷毀由Go運行時管理,開銷極小。創建和銷毀協程的成本非常低,因為它們不需要操作系統內核的介入。

最后

離線版PDF下載:
鏈接: https://pan.baidu.com/s/1zsffbsHj5CRC9whL7W-9aw?pwd=6666 提取碼: 6666 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70601.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript 簡單類型與復雜類型-堆和棧

深入理解JavaScript中的簡單類型(基本數據類型)與復雜類型(引用數據類型)如何在內存中存儲對于編寫高效、無誤的代碼至關重要。本文將探討這兩種類型的差異,以及它們在內存中的存儲機制——棧(Stack&#x…

騰訊SQL面試題解析:如何找出連續5天漲幅超過5%的股票

騰訊SQL面試題解析:如何找出連續5天漲幅超過5%的股票 作者:某七年數據開發工程師 | 2025年02月23日 關鍵詞:SQL窗口函數、連續問題、股票分析、騰訊面試題 一、問題背景與難點拆解 在股票量化分析場景中,"連續N天滿足條件"是高頻面試題類型。本題要求在單表stoc…

圖像處理、數據挖掘、數據呈現

目錄 圖像處理方法 閾值分割 圖像處理方法 圖像平滑 圖像銳化 圖像增強 閾值分割 邊緣檢測 閾值分割 特征提取 提取邊界 區域提取 主成分壓縮 POI 多源數據 數據挖掘 多源數據提取 關聯度提取 位置集群, 新聞事件, 權限 個人喜好 歷史…

嵌入式項目:STM32刷卡指紋智能門禁系統

本文詳細介紹基于STM32的刷卡指紋智能門禁系統。 獲取資料/指導答疑/技術交流/選題/幫助,請點鏈接: https://gitee.com/zengzhaorong/share_contact/blob/master/stm32.txt 1 系統功能 1.1 功能概述 本系統由STM32硬件端(下位機)…

計算機畢業設計 ——jspssm504springboot 職稱評審管理系統

作者:程序媛9688 開發技術:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 🌟文末獲取源碼數據庫🌟 感興趣的可以先收藏起來,還有大家在畢設選題(免費咨詢指導選題)&#xf…

安裝VM和Centos

安裝VM 一、打開虛擬機 二、選擇典型 三、選擇光盤 四、指定虛擬機位置 五、設置磁盤大小并拆分為多個文件 六、完成 安裝Centos 一、上述過程完成后我們直接打開虛擬機 二、語言選擇中文 三,默認安裝位置并點擊完成 四、點擊開始安裝 五、點擊設置密碼 等待安裝…

【AI應用】數字人涉及的一些主要 AI 技術

【AI論文解讀】【AI知識點】【AI小項目】【AI戰略思考】【AI日記】【讀書與思考】【AI應用】 在 數字人搭建 過程中,涉及多個 AI 技術,包括 訓練微調、算法、圖像合成、聲音克隆,每個部分都決定了最終效果的真實度、交互流暢度和個性化能力。…

【嘗試使用python調用Seismic unix】

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、代碼總結 前言 提示:這里可以添加本文要記錄的大概內容: 使用seismic unix嘗試建立界面,首先想到使用pyqt&#xff0c…

【安裝及調試舊版Chrome + 多版本環境測試全攻略】

👨💻 安裝及調試舊版Chrome 多版本環境測試全攻略 🌐 (新手友好版 | 覆蓋安裝/運行/調試全流程) 🕰? 【背景篇】為什么我們需要舊版瀏覽器測試? 🌍 🌐 瀏覽器世界的“…

2. EXCEL中函數和公式《AI賦能Excel》

歡迎來到滔滔講AI。今天我們來學習和討論下函數和公式是什么,以及它們之間的區別。 點擊圖片查看視頻 2、AI賦能EXCEL-函數和公式 一、什么是函數 首先,我們來了解一下函數。函數是Excel中預定義的計算工具,能夠幫助我們快速進行各種計算。 …

Python常見面試題的詳解16

1. 如何強行關閉客戶端和服務器之間的連接? 在網絡編程中,有時需要強行中斷客戶端和服務器之間的連接。對于基于 TCP 協議的連接,由于其面向連接的特性,需要采取特定的步驟來確保連接被正確關閉;而 UDP 是無連接協議&a…

【深度學習】矩陣的核心問題解析

一、基礎問題 1. 如何實現兩個矩陣的乘法? 問題描述:給定兩個矩陣 A A A和 B B B,編寫代碼實現矩陣乘法。 解法: 使用三重循環實現標準矩陣乘法。 或者使用 NumPy 的 dot 方法進行高效計算。 def matrix_multiply(A, B):m, n …

在CentOS 7下部署NFS的詳細教程

在CentOS 7下部署NFS的詳細教程 NFS(Network File System)是一種分布式文件系統協議,允許用戶在網絡中的不同主機之間共享文件和目錄。NFS廣泛應用于Linux和Unix系統中,特別適合在集群環境中共享存儲資源。本文將詳細介紹如何在C…

js中的await與async的使用

以下兩個方法,區別只在有沒有catch,使用的時候卻要注意 // 封裝請求方法,同步loading狀態出去 export const fetchWithLoading async (fn: Function, params: any, loading: Ref) > {loading.value true;try {return await fn(params);…

Ubuntu服務器 /data 盤需要手動掛載的解決方案

服務器 /data 盤需要手動掛載的解決方案 如果重啟服務器后,發現 /data 盤 沒有自動掛載,通常是因為: /etc/fstab 配置文件 沒有正確設置 自動掛載。該磁盤 沒有被正確識別,需要手動掛載。文件系統錯誤 導致掛載失敗。 下面是解…

輸入搜索、分組展示選項、下拉選取,全局跳轉頁,el-select 實現 —— 后端數據處理代碼,拋磚引玉展思路

詳細前端代碼寫于上一篇:輸入搜索、分組展示選項、下拉選取,el-select 實現:即輸入關鍵字檢索,返回分組選項,選取跳轉到相應內容頁 —— VUE項目-全局模糊檢索 【效果圖】:分組展示選項 >【去界面操作體…

【SpringBoot】_統一功能處理:統一數據返回格式

目錄 1. 對所有返回類型方法進行統一數據返回類型處理 2. 部分返回類型方法存在的問題 3. 對兩種有誤的方法進行處理 仍以圖書管理系統為例。 創建Result對后端返回給前端的數據進行封裝,增加業務狀態碼與錯誤信息,將原本的數據作為data部分&#xff…

智能交通系統(Intelligent Transportation Systems):智慧城市中的交通革新

智能交通系統(Intelligent Transportation Systems, ITS)是利用先進的信息技術、通信技術、傳感技術、計算機技術以及自動化技術等,來提升交通系統效率和安全性的一種交通管理方式。ITS通過收集和分析交通數據,智能化地調度、控制…

Unity百游修煉(1)——FootBall詳細制作全流程

一、引言 游玩測試: Football 游玩測試 1.項目背景與動機 背景:在學習 Unity 的過程中,希望通過實際項目來鞏固所學知識,同時出于對休閑小游戲的喜愛,決定開發一款簡單有趣的小游戲加深自己的所學知識點。 動機&#…

QQ登錄測試用例報告

QQ登錄測試用例思維導圖 一、安全性測試用例 1. 加密傳輸與存儲驗證 測試場景:輸入賬號密碼并提交登錄請求。預期結果:賬號密碼通過加密傳輸(如HTTPS)與存儲(如哈希加鹽),無明文暴露。 2. 二…