日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

golang sdk后端怎么用_Golang资深后端工程师需要了解的知识点

發布時間:2023/11/27 生活经验 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang sdk后端怎么用_Golang资深后端工程师需要了解的知识点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前提:

因近段時間,我在考慮新的工作機會,并在自己的以往的工作內容做了一些簡單的總結,以及部分在面試過程當中遇到了一些新的問題,總結一篇關于Golang工程師針對后端開發的一些知識點。

本文僅作為參考,只是知識點,有些點不會說的很詳細,也有一些其他的工具或者知識沒有放入本文中,如您有意見或建議,請提出,后面會對文章內容進行更新。

本文會從以下幾個方面闡述數據結構

算法

網絡

系統內核

數據庫

架構

Golang本身

Linux常用工具計算機的主要組成就是算法和數據結構,所以開篇的重點就是數據結構和算法

一、數據結構

數據結構方面主要分為三方面:表、樹、圖表

常見的表有:數組、單鏈表、雙鏈表、循環鏈表、散列表

2. 樹

主要要解決的一個問題是:樹的插入和查找的問題。

樹主要有:B樹、B-樹、B+樹,字典樹,平衡二叉樹、紅黑樹、哈夫曼樹、堆 等

實戰例子:B+樹一般用于文件索引,如:Mysql的索引實現

字典樹,用于字符串多模式匹配

紅黑樹,用于搜索引擎

3. 圖

圖的組成主要有:有向圖、無向圖、帶權圖

一般場景,如:用于網絡流量的動態規劃、地理位置的路線分配等

二、算法排序算法

要記住常用的排序,以及時間和空間復雜度。

算法有:希爾、直插,冒泡、快排,簡單排序、堆排,歸并,基數

常考的為:快排,堆排

2. 查找二分查找:常用于小數據量集的內存查找,如:IP地址對應的省份

二叉排序樹查找,和數據結構的樹對應

B樹:常用于索引中

Hash

BloomFilter:常用于大數據量集中,判斷對象是否存在

3. 常用算法思路分治

歸并規劃

貪心

回溯

分支界定

4. 算法復雜度

時間和空間:主要是通過分析算法本身,了解到算法在空間和時間上的開銷。

5. 字符串匹配BF算法

BM算法

Sunday算法

KMP算法

Tire算法

三、網絡

計算機網絡,是不同計算機之間溝通的一個介質,這些內容是最基礎的,也是必須了解的部分。通訊協議TCP/ IP,要了解三次握手、四次揮手的過程,以及通過系統的一些命令去觀察這部分的鏈接問題

HTTP/HTTPS,還要包含 HTTP1.1 和 HTTP2.0,以及HTTPS在加密方面的過程

RPC/Socket

WebSocket

RTP

RESP

AMQP

2. DNS

以一個問題來闡述:一次瀏覽器請求外部鏈接,中間發生的過程有哪些?

四、系統內核

系統內核涉及的知識點非常多,這里僅列出了幾個比較常見的問題。Linux鎖的方式自旋鎖

信號量:內核信號量和IPC信號量

2. 內核模式和用戶模式

3. 如何申請內存vmalloc 大內存申請,線性地址連續,物理地址可能不連續

kmalloc 小內存申請,線性地址和物理地址都連續

4. 用戶進程的通訊方式管道(Pipe):某個進程與他共有祖先的進程可進行通訊

命名管道(Named Pipe):主要是對管道本身進行了命名,具有管道的所有功能。mkfifo來啟動,可用不同進程間的通訊。Erlang語言的內部多采用與此。

信號(Single)

消息隊列(Message Queue)

共享內存(Shared Memory)

信號量(Semaphore)

套接字(Socket)

五、數據庫

數據庫一般情況下分為,內存數據庫和關系型數據庫。以下用Redis和Mysql來作代表Redis持久化的方式AOF:按照一定時間間隔,將緩存的操作命令記錄到文件中

有一定的時間差,數據可能丟失比較多

RDBsave:阻塞當前進程,將內存備份到文件中

bgsave:folk一個子進程,與主線程共享內存,把內存寫入到文件中,再覆蓋原有的文件

數據類型字符串:有一定的內存大小限制

Hash

列表(List)

集合(Set)

有序集合(Zset)

過期策略定期刪除:每隔一段時間檢查抽樣

惰性刪除:在訪問Key的時候檢查,過期則刪除

集群管理主從設置與數據備份

數據的分割和有效管理:一般會用到一致性Hash

2. Mysql

這里沒有分引擎來說索引B+樹

搜索樹

數據量大的優化方向SQL語句本身

索引優化

自帶分庫分表

拆分集群的服務優化

事務特性一致性

原子性

隔離性

持久性

隔離級別未提交讀

提交讀

可重復讀

串行讀

六、架構

架構方面主要講微服務的內容異步微服務

如通過消息中間件,用于服務之間的溝通,達到服務本身沒有耦合的狀態

2. 同步微服務

如通過注冊發現機制,找到需要請求的服務對象,并從微服務A向B直接發起請求

3. 微服務主要要解決的幾個問題分布式事務XA-協議(2PC)

TCC,多用于電商和金融

一致性協調,多用于消息隊列的方式

阿里云GTS

分布式鏈路管理:路由管理

分布式鏈路問題追蹤

七、Golang本身CAP理論(分布式系統理論)一致性(Consistency)

可用性(Availability)

分區容錯性(Partition tolerance)

2. 內存回收

Golang在早期的版本是使用引用計數法,在1.4-1.7分別對引用計數改進,以及引入標記清除,再對標記清除做改進,到三色標記;在1.8以后引入分代回收。引用計數法:標記計數的次數頻繁,導致性能下降。同時無法解決循環引用的問題。

標記清除法:標記未引用的內存,在一定時間周期做消除。并發多的情況下,也會影響性能。

三色標記法

分代回收法:相當于多個堆,按照不同等級劃分

3. GMP原理Goroutine:Go攜程管理里面最小的單位。啟動Goroutine時,會自動放入一個Processor隊列中,包含Main函數

Processor:協調Machine來執行自己隊列中的Goroutine

Machine:可以理解為線程,所有Goroutine都在上面執行

4. 鎖的方式自旋鎖:如sync包中的鎖

互斥鎖

CLHLocker:基于隱式鏈表,沒有序節點屬性

MCSLocker:基于顯示鏈表,有序節點屬性

CAS算法:當且僅當 V 的值等于 A時,CAS通過原子方式用新值B來更新V的值,否則不會執行任何操作(比較和替換是一個原子操作)。一般情況下是一個自旋操作,即不斷的重試

5. 字符串的原理固定長度的Slice對象

bytes.Buffer的操作原理

Slice對象的內存分配問題

八、常用工具及操作命令命令行

只說重點,像rm, cp, mv不是重點top

lsof

netstat

iostat

free

ps

df / du

awk

2. 工程管理工具github

gitlab

svn

其他

3. IDE,IDE在各種語言開發都有不同,每個工程師也有不同。我采用的主要是Sublime Text或Visual Studio Code,這兩個主要是以文本編輯為主,所以基本沒有運行環境。但好處在于讓開發的每個細節都會印象深刻。

結題,本文如開篇所屬,僅做參考!

致謝

總結

以上是生活随笔為你收集整理的golang sdk后端怎么用_Golang资深后端工程师需要了解的知识点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。