聊聊Golang開發工程師

誕生背景


Go由Google三位頂尖工程師(Ken Thompson、Rob Pike、Robert Griesemer)設計,目標是解決兩大行業痛點:

  • 硬件利用率不足:多核CPU普及,但C/C++等語言難以高效利用并發能力;

  • 開發效率低下:C++編譯慢、Java冗長,且內存泄漏問題頻發

現狀:

隨著云計算(Docker/K8s)、高并發中間件(消息隊列、數據庫)等場景依賴Go,以及字節跳動等大廠從python遷移到了Go,進一步推動了Go語言的繁榮。 尤其是字節出來的各類技術人員,又進一步把Go的技術棧帶到了各家公司。隨手翻閱一下求職網站,我們可以發現各個大廠,包括字節、拼多多、騰訊都會有golang開發工程師的招聘

面試概述

從一個面試官的角度出發,一名合格的Golang后臺開發工程師我們需要具備哪些的能力,這一個專欄的文章我們就來聊一聊這塊,核心能力大概分這么幾塊:

1.? Golang的基礎知識

2. 項目的掌握情況

3. 架構的理解

4. 算法的能力

5. 管理能力

第四點算法的能力,如果是找中小廠的話,一般是不考察的。 但是如果想去字節等大廠,一般是會考察算法題的。

第五點從ld的角度出發的一個考察。

面試題初探

我們第一篇先略微提一些面試題,這些面試題是從網上收集的一些案例,可以看看各大廠究竟在面試哪些問題。

騰訊

一方面是通過電話直接溝通

  • go的調度
  • go struct能不能比較
  • go defer(for defer)
  • select可以用于什么
  • context包的用途
  • client如何實現長連接
  • 主協程如何等其余協程完再操作
  • slice,len,cap,共享,擴容
  • map如何順序讀取
  • 實現set
  • 實現消息隊列(多生產者,多消費者)
  • 大文件排序
  • 基本排序,哪些是穩定的
  • http get跟head
  • http 401,403
  • http keep-alive
  • http能不能一次連接多次請求,不等后端返回
  • tcp與udp區別,udp優點,適用場景
  • time-wait的作用
  • 數據庫如何建索引
  • 孤兒進程,僵尸進程
  • 死鎖條件,如何避免
  • linux命令,查看端口占用,cpu負載,內存占用,如何發送信號給一個進程
  • git文件版本,使用順序,merge跟rebase

字節一面(教育部門)
自我介紹,項目介紹
1.說說mysql的隔離級別
2.mysql的索引類型
3.項目里用了sqs,sns,有什么區別
4.mongo為什么不支持事務,mongo的速度,mongo的查詢機制
5.redis的cluster內部是怎么高可用的,怎么選主
6.熟悉raft嗎
7.算法題:有紅黃藍三種球,分別用123標識,每種顏色的球有n個,每種顏色的球數量相同,如122331213排列,要求123123123排列,要求時間O(n),空間O(1)
?

米哈游

一面摘錄

  • Go 里面使用 Map 時應注意問題和數據結構?

    • 可以通過定義 value 為 struct 來節約內存;
    • 哈希分桶的結構,用哈希值的高八位和低八位分別來做桶內定位的依據和分桶的依據等;
  • Map 擴容是怎么做的?

    • 依照 Redis 漸進式 rehash 的思路說了一版;
  • Map 的 panic 能被 recover 掉嗎?了解 panic 和 recover 的機制嗎?

    • 不懂,但是實際上是不可以的,具體原因可以看看 Map 并發讀寫的時候拋出的是什么,是不是普通的 panic;
  • Map 怎么知道自己處于競爭狀態?是 Go 編碼實現的還是底層硬件實現的?

    • 通過結構體中的標記位實現的,可能是通過 CAS 操作的;
  • CAS 具體是怎么實現的呢?

  • 并發使用 Map 除了加鎖還有什么其他方案嗎?

  • 有對比過 sync.Map 和加鎖的區別嗎?

  • 說一下(Redis)分布式鎖的實現?

    • setnx / 唯一 value / ttl
  • 基于 Redis 的分布式鎖會有什么問題?

    • 主從模型下同步不保證一致會導致鎖失效
  • Redis 分布式鎖超時可以超時時間設長一點可以嗎?不可以的話需要怎么解決?

    • 不根本解決問題,可以考慮旁路的 goroutine 不斷自旋續期
  • 對 Redis 鎖續期這個怎么實現呢?

  • 日常在用的 Redis 集群都是什么架構?在主從模式和 Redis Cluster 中分布式鎖會有什么問題?

總結

我們對于Golang面試有了一個初步的概念,后面我們會逐步展開來看一看一些核心面試的考察點,并展開介紹一下這些技術點。

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

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

相關文章

機器學習6——線性分類函數

線性分類函數 分類問題的兩種決策方法: 概率方法:通過計算后驗概率進行分類。優點是在概率分布已知的情況下可以得到最優解,缺點是實際中概率密度通常未知,需要通過大量數據估計。判別方法:假設判別函數的形式已知&…

Sentinel(三):Sentinel熔斷降級

一、Sentinel熔斷概念介紹 官方文檔網址:circuit-breaking | Sentinel 1、Sentinel熔斷基本介紹 除了流量控制以外,對調用鏈路中不穩定的資源進行熔斷降級也是保障高可用的重要措 施之一。一個服務常常會調用別的模塊,可能是另外的一個遠程服…

PostgreSQL 主從集群搭建

下面是 PostgreSQL 主從復制(Streaming Replication)環境的安裝與配置指南,適合在兩臺或多臺服務器之間構建一主一從(或一主多從)的高可用讀寫分離系統。 環境準備 角色主機名/IP說明主庫192.168.1.10可讀寫&#xff…

STM32安全固件升級:使用自定義 bootloader 實現SD卡固件升級,包含固件加密

前言 在 STM32 嵌入式開發中,Bootloader 是一個不可或缺的模塊。ST 公司為 STM32 提供了功能完備的官方 Bootloader,支持多種通信接口(如 USART、USB DFU、I2C、SPI 等),適用于標準的固件更新方案。 然而&#xff0c…

一步部署APache編譯安裝腳本

接下來我來介紹以下編譯安裝的好處 編譯安裝的優點與缺點 一、優點 高度可定制 可根據實際需求啟用或關閉特性(如 Apache 的模塊、MySQL 的引擎等)。 靈活控制編譯參數、優化性能(如 --enable-xxx、--with-xxx)。 更高的性能…

[Linux]mmap()函數內存映射原理及用法

一、內存映射 內存映射,簡而言之就是將用戶空間的一段內存區域映射到內核空間,映射成功后,用戶對這段內存區域的修改可以直接反映到內核空間,同樣,內核空間對這段區域的修改也直接反映用戶空間。那么對于內核空間和用…

通信無BUG,ethernet ip轉profinet網關,汽車焊接設備通信有心機

在運用“激光釬焊”對汽車車頂、側面板、后行李箱蓋等位置進行接合時,必須配備能夠沿著復雜車身線條,對細窄焊接線實施高精度快速檢測及模仿控制的“焊縫跟蹤控制”。 那么汽車生產線的系統升級改造迫在眉睫,當西門子PLC和庫卡機器人無法通信…

python腳本ETH獲取最新發行版本并將是否更新信息發送到釘釘

import requests import json import time import hmac import hashlib import base64 import urllib.parse# 1. 配置釘釘機器人 webhook "https://oapi.dingtalk.com/robot/send?access_tokenXXX" secret "XXX" # 如果沒有加簽驗證,請設…

【Docker基礎】Docker容器管理:docker ps及其參數詳解

目錄 1 docker ps命令概述 1.1 命令定位與作用 1.2 命令基本語法 2 基礎參數詳解 2.1 默認輸出解析 2.2 核心參數解析 2.2.1 -a, --all 2.2.2 -q, --quiet 2.2.3 --no-trunc 3 高級過濾與格式化 3.1 過濾器(--filter)詳解 3.1.1 常用過濾條件 3.1.2 實際應用示例 …

應急響應-感染Neshta病毒

病毒確定: 根據感染現象確定為Virus/Win32.Neshta家族病毒 病毒表現: 該病毒為感染式病毒。該病毒會在系統%SystemRoot%目錄下釋放svchost.com文件,并通過添加注冊表的方式確保每個exe文件執行的時候都會先執行這個文件。該病毒還會收集系統信…

Hyperledger Fabric 入門筆記(二十)Fabric V2.5 測試網絡進階之Tape性能測試

文章目錄 前言一、介紹二、架構三、安裝說明四、使用方法4.1. 修改配置文件4.2. 啟動測試網絡4.3. 運行測試 前言 本文介紹由Hyperledger中國技術工作組提供的另一款區塊鏈網絡性能測試工具Tape的架構、安裝和在Fabric測試網絡中的使用。 一、介紹 Tape是一款輕量級的、可以快…

怎樣在 VS Code 中快速創建 Vue 單文件組件(SFC)的基礎模板結構?

問題 在Vue項目的開發中&#xff0c;我們經常遇到一個問題&#xff0c;創建新組件時要自己輸入基本的框架&#xff0c;比如&#xff1a; <template><div class"page-box"></div> </template><script> export default {name: ,data()…

高防IP在服務器中的作用都有哪些?

高防IP作為一種通過技術手段讓用戶網絡服務更加安全的一種IP地址&#xff0c;有著更高的防御能力&#xff0c;有著強大的流量清洗中心和防御系統&#xff0c;幫助企業實時監控網絡流量&#xff0c;將惡意的用戶請求識別并過濾掉&#xff0c;保護目標服務器不會受到網絡攻擊&…

實戰 X-AnyLabeling:構建高效自動標注系統的工程實踐

文章目錄 一、項目背景與目標二、系統架構與模塊劃分2.1 模塊組成說明2.2 架構圖 三、模型封裝與平臺對接3.1 模型封裝接口3.2 接入 X-AnyLabeling 平臺 四、可視化與預測驗證4.1 UI 預測標簽預覽 五、性能優化與工程經驗5.1 模型加速與推理優化5.2 經驗總結5.3 實際效果 本文將…

UC3842/UC3843反激教程教學開關電源 反激設計步驟,每一關鍵元器件計算

資料下載地址&#xff1a;UC3842/UC3843反激教程教學開關電源 反激設計步驟&#xff0c;每一關鍵元器件計算 1、原理圖 2、PCB圖 3、變壓器設計資料 4、開關電源設計資料 5、主要元器件說明書 6、系統整體資料 7、說明文檔 7.1、電源設計概述 電源規格&#xff1a;設計一款 2…

Docker 入門教程(二):Docker 的基本原理

文章目錄 &#x1f433; Docker 入門教程&#xff08;二&#xff09;&#xff1a;Docker 的基本原理1. Docker 架構總覽&#xff1a;三大核心角色2. 鏡像與容器的關系3. 容器啟動流程&#xff1a;docker run 背后發生了什么&#xff1f; &#x1f433; Docker 入門教程&#xf…

21.安卓逆向2-frida hook技術-HookOkHttp的攔截器

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

小程序入門:swpier 和 swpier-item 的基本使用

在前端開發中&#xff0c;創建交互式的用戶界面組件是至關重要的。今天&#xff0c;我們將深入探討 swpier 和 swpier-item 的基本使用方法&#xff0c;這兩個組件在構建輪播圖等滑動效果的場景中非常實用。 一、swpier 組件概述 swpier 組件是實現滑動效果的核心容器。它負責…

SQL學習筆記4

約束 1、約束 約束&#xff0c;是指作用在表中字段上的規則&#xff0c;用于限制字段輸入的數據&#xff0c;使得表格式統一&#xff0c;數據內容正確。同一個字段的約束可以有多個 約束包括&#xff1a; 非空約束&#xff0c;限制表中的值不為null:not null 唯一約束&…

力扣刷題(第七十天)

靈感來源 - 保持更新&#xff0c;努力學習 - python腳本學習 比特位計數 解題思路 對于任意整數 x&#xff0c;其 1 的個數等于 x // 2 的 1 的個數加上 x % 2。狀態轉移方程&#xff1a;dp[x] dp[x // 2] (x % 2)。 class Solution:def countBits(self, n: int) ->…