华顺信安Golang面试题

2023年2月27日晚六点面试,总共半小时(哎,还是我个人太菜了)。

第一题和切片相关题,考切片底层

    a := []int{1, 2, 3, 4, 5}
    b := a[:3]
    fmt.Println(cap(a))
    fmt.Println(len(a))

    fmt.Println(cap(b))
    fmt.Println(len(b))

运行结果:

5
5
5
3

然后在上面的代码上添加一行

b = append(b, 1, 2, 3)

运行结果

5
5
10
6

结论:刚开始切片b指向的是原来的数组a,所以cap是一致的,但是当给b后面添加元素后,直接重新分配新的地址了!


第二道题,考channel

package main

import "fmt"

func main() {
    c := make(chan int)
    for i := 0; i <= 10; i++ {
        c <- i
    }
    go func() {
        for item := range c {
            fmt.Println(item)
        }
    }()
}

问,这代码的功能,打印的效果

尴尬了,刚刚运行了一下,是死锁🤣


第三道题,考go面向对象的

首先是问我面向对象的三大特征:封装,继承和多态。然后问我go怎么实现继承和多态,我说不会(😭我怎么什么都不会呀),然后就考了我下面的代码

package main

import "fmt"

type P struct {
	name string
}

func (p P) setname(n string) string {
	p.name = n
	return n
}

func (p P) getname() string {
	return p.name
}

func main() {
	p := &P{name: "zhangsan"}
	fmt.Println(p.setname("lisi"))
	fmt.Println(p.getname())
}

问运行结果

lisi
zhangsan

具体怎么解释我也不会。哎


八股文的话问了http和https的异同(区别和联系),MVC框架MVC分别指什么?有什么作用。

#如何判断面试是否凉了##我的求职思考#
全部评论
很基础,有点忘了,我也思考一下。 第一题,go创建切片时,自带容量cap和长度len;b一开始赋值为cap = cao(a),len = len(3)(前三个元素); append后,len(B) = 3 + 3,cap(b)自动扩容成当前容量两倍所以是10。 第二题,这个太基础了不会确实很尴尬,因为第一个for已经把数据发完了,你之后再开协程当然什么都接收不到死锁。。。。 第三题,感觉是坑非坑吧,新手确实容易蒙。get方法没什么好说的。set方法虽然返回了lisi,但注意它这个方法不是用指针定义的方法,是值传递的,p.name赋值给了值传递的对象,真正的p属性没有变化,即使你返回p.name。正确的定义应该是: func (p *P) Setter(xxx)。。。
3 回复 分享
发布于 2023-02-27 23:47 广东
老哥半个小时只有这些吗
2 回复 分享
发布于 2023-02-28 19:20 山西
挺基础的,至少我看了go语言圣经、专家编程、101、修养之路等等go八股文,之后感觉很简单,要是考defer,套个几层,加上闭包引用才难
2 回复 分享
发布于 2023-03-02 16:47 上海
小米试试吗 https://www.nowcoder.com/feed/main/detail/791b94b856b848069adfa60bdce1cac4
2 回复 分享
发布于 2023-03-25 09:33 北京
楼主哪里投的
1 回复 分享
发布于 2023-02-28 10:43 四川
这些确实太基础了,不会很尴尬,楼主加油
1 回复 分享
发布于 2023-03-01 10:36 贵州
确实特别基础。楼主go特别不熟呀
1 回复 分享
发布于 2023-03-06 11:36 福建
一般啥企业会考这种代码题呀。。都没看过
点赞 回复 分享
发布于 2023-02-28 19:27 广东
约二面了嘛
点赞 回复 分享
发布于 2023-02-28 20:53 陕西
老哥啥时候投的,多久约面
点赞 回复 分享
发布于 2023-03-01 15:49 北京
m
点赞 回复 分享
发布于 2023-03-09 18:40 广西
第二题调换个顺序 ch := make(chan int) go func() { for v := range ch { fmt.Println(v) } }() for i := 0; i < 10; i++ { ch <- i } 这段代码大家觉得时输出0-9还是0-8.
点赞 回复 分享
发布于 2023-03-10 19:54 福建
这个看着挺简单的,只有不问我八股文一切OK
点赞 回复 分享
发布于 2023-10-20 19:45 湖南

相关推荐

联通 技术人员 总包不低于12
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
26 63 评论
分享
牛客网
牛客企业服务