
1、go的排程
2、go struct能不能比較
因為是強類型語言,是以不同類型的結構不能作比較,但是同一類型的執行個體值是可以比較的,執行個體不可以比較,因為是指針類型
3、go defer(for defer),先進後出,後進先出
func b() {
for i := 0; i < 4; i++ {
defer fmt.Print(i)
}
}
4、select可以用于什麼,常用語gorotine的完美退出
golang 的 select 就是監聽 IO 操作,當 IO 操作發生時,觸發相應的動作
每個case語句裡必須是一個IO操作,确切的說,應該是一個面向channel的IO操作
5、context包的用途
Context通常被譯作上下文,它是一個比較抽象的概念,其本質,是【上下上下】存在上下層的傳遞,上會把内容傳遞給下。在Go語言中,程式單元也就指的是Goroutine
6、client如何實作長連接配接
server是設定逾時時間,for循環周遊的
7、主協程如何等其餘協程完再操作
使用channel進行通信,context,select
8、slice,len,cap,共享,擴容
append函數,因為slice底層資料結構是,由數組、len、cap組成,是以,在使用append擴容時,會檢視數組後面有沒有連續記憶體快,有就在後面添加,沒有就重新生成一個大的素組
9、map如何順序讀取
map不能順序讀取,是因為他是無序的,想要有序讀取,首先的解決的問題就是,把key變為有序,是以可以把key放入切片,對切片進行排序,周遊切片,通過key取值。
10、實作set
type inter interface{}
type Set struct {
m map[inter]bool
sync.RWMutex
}
func New() *Set {
return &Set{
m: map[inter]bool{},
}
}
func (s *Set) Add(item inter) {
s.Lock()
defer s.Unlock()
s.m[item] = true
}
11、實作消息隊列(多生産者,多消費者)
使用切片加鎖可以實作
12、大檔案排序
歸并排序,分而治之,拆分為小檔案,在排序
13、基本排序,哪些是穩定的
14、http get跟head
HEAD和GET本質是一樣的,差別在于HEAD不含有呈現資料,而僅僅是HTTP頭資訊。有的人可能覺得這個方法沒什麼用,其實不是這樣的。想象一個業務情景:欲判斷某個資源是否存在,我們通常使用GET,但這裡用HEAD則意義更加明确。
15、http 401,403
400 bad request,請求封包存在文法錯誤
401 unauthorized,表示發送的請求需要有通過 HTTP 認證的認證資訊
403 forbidden,表示對請求資源的通路被伺服器拒絕
404 not found,表示在伺服器上沒有找到請求的資源
16、http keep-alive
client發出的HTTP請求頭需要增加Connection:keep-alive字段
Web-Server端要能識别Connection:keep-alive字段,并且在http的response裡指定Connection:keep-alive字段,告訴client,我能提供keep-alive服務,并且"應允"client我暫時不會關閉socket連接配接
17、http能不能一次連接配接多次請求,不等後端傳回
http本質上市使用socket連接配接,是以發送請求,接寫入tcp緩沖,是可以多次進行的,這也是http是無狀态的原因
18、tcp與udp差別,udp優點,适用場景
tcp傳輸的是資料流,而udp是資料包,tcp會進過三次握手,udp不需要
19、time-wait的作用
20、資料庫如何建索引
21、孤兒程序,僵屍程序
22、死鎖條件,如何避免
23、linux指令,檢視端口占用,cpu負載,記憶體占用,如何發送信号給一個程序
24、git檔案版本,使用順序,merge跟rebase
25、Slice與數組差別,Slice底層結構
26、項目裡的微信支付這塊,在支付完微信通知這裡,收到兩次微信相同的支付通知,怎麼防止重複消費(類似接口的幂等性),說了借助Redis或者資料庫的事務
27、項目裡的消息推送怎麼做的(業務有關)
28、Go的反射包怎麼找到對應的方法(這裡忘記怎麼問的,直接說不會,隻用了DeepEqual,簡單講了DeepEqual)
29、Redis基本資料結構
30、Redis的List用過嗎?底層怎麼實作的?知道但是沒用過,不知道怎麼實作
31、Mysql的索引有幾種,時間複雜度
32、InnoDb是表鎖還是行鎖,為什麼(這裡答不出來為什麼,隻說了行鎖)
34、退出程式時怎麼防止channel沒有消費完,這裡一開始有點沒清楚面試官問的,然後說了監聽中斷信号,做退出前的處理,然後面試官說不是這個意思,然後說發送前先告知長度,長度要是不知道呢?close channel下遊會受到0值,可以利用這點(這裡也有點跟面試官說不明白)
35、用過什麼消息中間件之類嗎?沒有
36、有什麼問題嗎?評價?後面還有面試,後面再問吧
37、生産者消費者模式,手寫代碼(Go直接使用channel實作很簡單,還想着面試官會不會不讓用channel實作,不用channel的可以使用數組加條件變量),channel緩沖長度怎麼決定,怎麼控制上遊生産速度過快,這裡沒說出解決方案,隻是簡單說了channel長度可以與上下遊的速度比例成線性關系,面試官說這是一種解決方案
38、手寫循環隊列
39、寫的循環隊列是不是線程安全,不是,怎麼保證線程安全,加鎖,效率有點低啊,然後面試官就提醒Go推崇原子操作和channel
40、寫完代碼面試官說後面問的問題回答就可以,不知道的話沒關系
41、Linux會不會,隻會幾個指令,面試官就說一共也就一百多個指令
42、TimeWait和CloseWait原因
43、線段樹了解嗎?不了解,字典樹?了解
44、看過啥源碼,nsq(Go的消息中間件),簡單問了我裡面的waitgroup包證明我看過
45、sync.Pool用過嗎,為什麼使用,對象池,避免頻繁配置設定對象(GC有關),那裡面的對象是固定的嗎?不清楚,沒看過這個的源碼
46、有什麼問題嗎?評價?基礎不錯,Linux尚缺,Go的了解不夠深入,進階資料結構不了解,優點是看源碼
47、後面面試官講了他們做的東西,主要是廣告部分,說日均資料量至少百萬以上,多達上億,高并發使用Go支撐,有微服務,服務治理,說我需要學的東西挺多的
48、證明二叉樹的葉子節點跟度數為2的節點的關系
49、唯一索引和主鍵索引
50、智能指針
51、字元串解析為數字(考慮浮點型)
52、單點登入,tcp粘包
53、手寫洗牌
54、處理粘包斷包實作,面試官以為是negle算法有關,解釋了下negle跟糊塗視窗綜合征有關,然後面試官覺得其他項目是crud就沒問了
55、goroutine排程用了什麼系統調用,這個不會,面試官想從go問到作業系統,然後以為*作系統基礎不好,就問了作業系統問題
56、程序虛拟空間分布,全局變量放哪裡?答上來57、有沒有網絡程式設計,有,怎麼看連接配接狀态?netstat,有哪些?ESTABLISHED,LISTEN等等,有異常情況嗎?TIME_WAIT很多,為什麼?大量短連結
58、幾種基本排序算法說一下,問了堆的時間複雜度,穩定性,為什麼不穩定
59、 topk問題,海量資料topk(回答成切分多次加載記憶體,然後用維持k長度的有序連結清單,然後被說時間複雜度不好,提示說還是用堆,然後哦哦哦對)
最長連續字串和,這裡我說的解決方案沒用dp(對dp不熟),面試官一直引導我dp,還是不會
60、什麼是主鍵
61、聯合索引和唯一索引
62、越多的索引越好嗎?
63、建立索引要注意什麼?
64、程序和線程差別?
65、死鎖?
66、tcp三次握手
67、http,https
68、狀态碼401,301,302,201
69、項目我說隻有一台機子,是以用的單機部署,面試官說單機也可以部署多個,有什麼方法嗎?我說docker,問docker有哪些網絡,不熟,
dockerfile關鍵字,隻答幾個。順便扯了下nginx轉發。
70、資料庫隔離級别,送出讀會造成什麼
71、go排程
72、 goroutine洩漏有沒有處理,設定timeout,select加定時器
73、mysql高可用的方案
74、程序線程差別
75、排序算法以及時間複雜度
76、怎麼學習go
77、go的線程,給他講了跟goroutine排程
78、io模型,同步阻塞,同步非阻塞,異步
79、cookie和session
80、接口kps測試
81、redis排行榜資料結構(跳躍表),查詢時間複雜度
82、redis分布式,如何減少同步延遲
83、mysql能實作redis的功能嗎
84、平時怎麼學習?
85、看什麼書?
86、興趣愛好
87、看過google四篇分布式論文嗎,沒看過
89、cap理論,舉例
90、LRU算法,LFU
91、講講怎麼了解網絡程式設計
92、go使用踩過什麼坑(for range,資料庫連接配接defer close)
93、go優缺點
95、go的值傳遞和引用
96、慢查詢
97、為什麼使用pg
98、redis的資料類型
99、所有左葉子節點的和
100、m個n大小的有序數組求并集,一開始是2路歸并,求時間複雜度,後來在面試官提醒直接m路歸并,求時間複雜度
101、static關鍵字,還有其他關鍵字嗎
102、hash表設計,線程安全?
103、 線程自己獨享什麼
104、網絡程式設計過程
105、select、epoll
106、看什麼書
107、排行榜怎麼實作
108、go的鎖如何實作,用了什麼cpu指令
109、go的runtime如何實作
110、看過sql的連接配接池實作嗎
111、ctx包了解嗎?有什麼用?
112、go什麼情況下會發生記憶體洩漏?(他說ctx沒有cancel的時候,這個真不知道)
113、怎麼實作協程完美退出?
114、智力題:1000瓶酒中有1瓶毒酒,10隻老鼠,7天後毒性才發作,第8天要賣了,怎麼求那瓶毒酒?
115、簡單dp題,n*n矩陣從左上角到右下角有多少種走法(隻限往下和往右走)
116、用channel實作定時器?(實際上是兩個協程同步)
117、go為什麼高并發好?講了go的排程模型
118、作業系統記憶體管理?程序通訊,為什麼共享存儲區效率最高
119、實作一個hashmap,解決hash沖突的方法,解決hash傾斜的方法
120、怎麼了解go的interface
121、100億個數選top5,小根堆
122、數組和為n的數組對
123、最大連續子數組和
124、redis容災,備份,擴容
125、跳躍表,為什麼使用跳躍表而不使用紅黑樹
126、輸入url後涉及什麼
127、tcp怎麼找到哪個套接字
128、ipc方式,共享存儲區原理
130、程序虛拟空間布局
131、程序狀态轉換
132、線程的棧在哪裡配置設定
133、多個線程讀,一個線程寫一個int32會不會有問題,int64呢(這裡面試官後來說了要看資料總線的位數,32位的話寫int32沒問題,int64就有問題)
134、判斷二叉樹是否為滿二叉樹
135、lru實作
136、一個大整數(字元串形式表示的),移動字元求比它大的數中最小的
137、點贊系統設計
更多GOLAND學習内容,掃描二維碼,直接進群交流,阿裡雲的各界大佬等着你哦~~~