这些是我最近整理的面试题,难度不分先后,其实也算不上面试题,都是开发过程中遇到的坑,之前发布的几道面试题,本来是想公布答案的,但是想了想如果公布了就没什么意思了
1 写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出(什么手写代码??? )
package main
func main() {
go func() {
// 1 在这里需要你写算法
// 2 要求每秒钟调用一次proc函数
// 3 要求程序不能退出
}()
select {}
}
func proc() {
panic("ok")
}
2 为sync.WaitGroup中Wait函数支持WaitTimeout功能( )
package main
import (
"fmt"
"sync"
"time"
)
func main() {
wg := sync.WaitGroup{}
c := make(chan struct{})
for i := 0; i < 10; i++ {
wg.Add(1)
go func(num int, close <-chan struct{}) {
defer wg.Done()
<-close
fmt.Println(num)
}(i, c)
}
if WaitTimeout(&wg, time.Second*5) {
close(c)
fmt.Println("timeout exit")
}
time.Sleep(time.Second * 10)
}
func WaitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool {
// 要求手写代码
// 要求sync.WaitGroup支持timeout功能
// 如果timeout到了超时时间返回true
// 如果WaitGroup自然结束返回false
}
3 写出以下代码出现的问题
package main
import (
"fmt"
)
func main() {
var x string = nil
if x == nil {
x = "default"
}
fmt.Println(x)
}
4 写出以下打印内容
package main
import (
"fmt"
)
const (
a = iota
b = iota
)
const (
name = "menglu"
c = iota
d = iota
)
func main() {
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
5 这道题是上次面试题的第10题,我曾经写过类似的bug所以。。。,说明以下代码资源泄露的原因
type query func(string) string
func exec(name string, vs ...query) string {
ch := make(chan string)
fn := func(i int) {
ch <- vs[i](name)
}
for i, _ := range vs {
go fn(i)
}
return <-ch
}
func main() {
ret := exec("111", func(n string) string {
return n + "func1"
}, func(n string) string {
return n + "func2"
}, func(n string) string {
return n + "func3"
}, func(n string) string {
return n + "func4"
})
fmt.Println(ret)
}
6 写出以下代码输出内容
package main
import (
"encoding/json"
"fmt"
)
type Girl struct {
Name string `json:"name"`
DressColor string `json:"dress_color"`
}
func (g Girl) SetColor(color string) {
g.DressColor = color
}
func (g Girl) JSON() string {
data, _ := json.Marshal(&g)
return string(data)
}
func main() {
g := Girl{Name: "menglu"}
g.SetColor("white")
fmt.Println(g.JSON())
}
7 写出以下打印结果,并解释下为什么这么打印的。
package main
import (
"fmt"
)
func main() {
str1 := []string{"a", "b", "c"}
str2 := str1[1:]
str2[1] = "new"
fmt.Println(str1)
str2 = append(str2, "z", "x", "y")
fmt.Println(str1)
}
8 写出以下打印结果
package main
import (
"fmt"
)
type Student struct {
Name string
}
func main() {
fmt.Println(&Student{Name: "menglu"} == &Student{Name: "menglu"})
fmt.Println(Student{Name: "menglu"} == Student{Name: "menglu"})
}
9 写出以下代码的问题
package main
import (
"fmt"
)
func main() {
fmt.Println([...]string{"1"} == [...]string{"1"})
fmt.Println([]string{"1"} == []string{"1"})
}
10 下面代码写法有什么问题?
package main
import (
"fmt"
)
type Stduent struct {
Age int
}
func main() {
kv := map[string]Stduent{"menglu": {Age: 21}}
kv["menglu"].Age = 22
s := []Stduent{{Age: 21}}
s[0].Age = 22
fmt.Println(kv, s)
}
今天的分享就到这里,感谢大家的反馈和建议,如果希望看到更多这样的内容,请关注我吧,同时我做一个小广告,我司最近招聘golang高级开发工程师,有想找工作的小伙伴可以发简历到我的邮箱noawayer@gmail.com,我们造数科技专注于金融大数据方向,造数团队具备来自IBM 阿里巴巴 Intel Goldman Sachs 及Morgan Stanley等企业专业人才,golang工程师了解一下?