本文目錄一覽:
面試問題總結(一)Golang
使用go語言的好處: go語言的設計是務實的, go在針對並發上進行了優化, 並且支持大規模高並發, 又由於單一的碼格式, 相比於其他語言更具有可讀性, 在垃圾回收上比java和Python更有效, 因為他是和程序同時執行的.
1. 進程, 線程, 協程的區別, 協程的優勢
2. 講一下GMP模型(重點)
3. Go的GC, 混合寫屏障(重點)
4. go的Slice和數組的區別, slice的擴容原理(重點)
5. 講一下channel,實現原理(重點)
6. 講一下Go的Map的實現原理, 是否線程安全, 如何實現安全(重點)
7. new 和 make 的區別
8. 說一下內存逃逸
9. 函數傳指針和傳值有什麼區別
10. goroutine之間的通信方式
11. 測試是怎麼做的(單元測試, 壓力測試)
12. 堆和棧的區別
golang排序問題求助
如果是只有這幾個的話 我們可以考慮自定義一個排序類型
func TestSort(t *testing.T) {
data := []string{“三級”, “一級”, “二級”}
rule := map[string]int{
“一級”: 1,
“二級”: 2,
“三級”: 3,
}
self := SelfSort{
Rule: rule,
Data: data,
}
sort.Sort(self)
fmt.Println(self.Data)
}
type SelfSort struct {
Rule map[string]int
Data []string
}
func (p SelfSort) Len() int { return len(p.Data) }
func (p SelfSort) Less(i, j int) bool { return p.Rule[p.Data[i]] p.Rule[p.Data[j]] }
func (p SelfSort) Swap(i, j int) { p.Data[i], p.Data[j] = p.Data[j], p.Data[i] }
如過很多 就是真的要比較中文的話, 就用這種
package mainimport ( “bytes”
“fmt”
“io/ioutil”
“sort”
“golang.org/x/text/encoding/simplifiedchinese”
“golang.org/x/text/transform”)//ByPinyin is customized sort interface to sort string by Chinese PinYintype ByPinyin []stringfunc (s ByPinyin) Len() int { return len(s) }func (s ByPinyin) Swap(i, j int) { s[i], s[j] = s[j], s[i] }func (s ByPinyin) Less(i, j int) bool {
a, _ := UTF82GBK(s[i])
b, _ := UTF82GBK(s[j])
bLen := len(b) for idx, chr := range a { if idx bLen-1 { return false
} if chr != b[idx] { return chr b[idx]
}
} return true}//UTF82GBK : transform UTF8 rune into GBK byte arrayfunc UTF82GBK(src string) ([]byte, error) {
GB18030 := simplifiedchinese.All[0] return ioutil.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))
}//GBK2UTF8 : transform GBK byte array into UTF8 stringfunc GBK2UTF8(src []byte) (string, error) {
GB18030 := simplifiedchinese.All[0]
bytes, err := ioutil.ReadAll(transform.NewReader(bytes.NewReader(src), GB18030.NewDecoder())) return string(bytes), err
}func main() {
b := []string{“哈”, “呼”, “嚯”, “ha”, “,”}
sort.Strings(b) //output: [, ha 呼 哈 嚯]
fmt.Println(“Default sort: “, b)
sort.Sort(ByPinyin(b)) //output: [, ha 哈 呼 嚯]
fmt.Println(“By Pinyin sort: “, b)
}
copy from 網頁鏈接
golang面試題2之判斷字元串中字元是否全都不同
請實現 個演算法,確定 個字元串的所有字元【是否全都不同】。這 我們要求【不允
許使 額外的存儲結構】。 給定 個string,請返回 個bool值,true代表所有字元全都
不同,false代表存在相同的字元。 保證字元串中的字元為【ASCII字元】。字元串的
度 於等於【3000】。
這 有 個重點,第 個是 ASCII字元 , ASCII字元 字元 共有256個,其中128個是常
字元,可以在鍵盤上輸 。128之後的是鍵盤上 法找到的。
然後是全部不同,也就是字元串中的字元沒有重複的,再次,不準使 額外的儲存結
構,且字元串 於等於3000。
如果允許其他額外儲存結構,這個題 很好做。如果不允許的話,可以使 golang內置
的 式實現。
通過 strings.Count 函數判斷:
使 的是golang內置 法 strings.Count ,可以 來判斷在 個字元串中包含
的另外 個字元串的數量
還有不同的方法同樣可以實現,你了解嗎?
推薦go相關技術 專欄
gRPC-go源碼剖析與實戰_帶你走進gRPC-go的源碼世界-CSDN博客
golang 100題中的問題但是只有答案,想知道為什麼。
只把最終的函數放到defer棧中,因此
defer s.Add(1).Add(2) 等價於下面2句了
s..Add(1)
defer s.Add(2)
你可以試試
defer s.Add(2).Add(1).Add(4)
s.Add(3)
看看執行的結果是不是 2134
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/160956.html