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资深后端工程师需要了解的知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: floquet端口必须沿z轴设置_金秀友
- 下一篇: spark 序列化错误 集群提交时_【问