您的位置:

golang题目,下面属于golang的关键字的是

本文目录一览:

面试问题总结(一)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