当前位置:网站首页>golang之笔试题&面试题01
golang之笔试题&面试题01
2022-04-23 11:26:00 【runscript.sh】
就是几个简单的笔试题目,也可能面试的时候直接给看让说结果。
1, 用不同的goroutine去操作map的时候会存在线程同步的问题,把map换成int ,这个问题同样存在。在go里是这样。
2,下面这段代码输出的值为:
func t(){
jsonStr:=[]byte(`{"age":1}`)
var value map[string]interface{
}
json.Unmarshal(jsonStr,&value)
age:=value["age"]
fmt.Println(reflect.TypeOf(age))
//float64
}
区别:
func t() {
jsonStr := []byte(`{"age":1}`)
var value map[string]int
json.Unmarshal(jsonStr, &value)
age := value["age"]
fmt.Println(reflect.TypeOf(age))
//int
}
3,下边代码是否有问题,问题在哪里
import (
"sync"
"fmt"
)
type UserAges struct {
ages map[string] int
sync.Mutex
}
func (u *UserAges)Add(name string,age int) {
u.Lock()
defer u.Unlock()
u.ages[name] = age
}
func (u *UserAges)Get(name string)int{
if age,ok:=u.ages[name];ok{
return age
}
return -1
}
问题在于,ages没有暴露背外部的包,导致调用者无法初始化ages。
然后在调用add函数时,就会报错。考察函数的作用域问题。
4,下边代码的输出结果是什么?
func TestArrayAndSlice(){
s1:=[]int{
1,2,3}
s2:=s1[1:]
for i:=range s2{
s2[i]+=10
}
fmt.Println(s2)
s2=append(s2, 4)
for i:=range s2{
s2[i]+=10
}
fmt.Println(s2)
}
输出结果如下:这个是在考察数组和切片用s2截取s1的下边为1及之后;而后执行操作。
[12 13]
[22 23 14]
5,下边代码输出什么
func TestDoit(){
doit:= func(arg int) interface{
}{
var result *struct{
}=nil
if (arg>0) {
result = &struct{
}{
}
}
return result
}
//输出结果。
//-1:result: <nil> 为空的匿名结构体
//1://result: &{} 匿名结构体的地址
if res:=doit(1);res!=nil{
fmt.Println("result:",res)
}
}
output:
result: &{
}
6,下边代码的输出结果是什么
//放在main里边
//指定只能用一个逻辑处理器,方便看调度顺序。
func t2(){
runtime.GOMAXPROCS(1)
wg:=sync.WaitGroup{
}
wg.Add(20)
//step 1
for i:=0;i<10 ;i++ {
go func() {
fmt.Println("i",i)
wg.Done()
}()
}
fmt.Println("--------------------")
//step 2
for j:=0;j<10 ;j++ {
go func(j int) {
fmt.Println("j",j)
wg.Done()
}(j)
}
wg.Wait()
}
output:
--------------------
j 9
i 10
i 10
i 10
i 10
i 10
i 10
i 10
i 10
i 10
i 10
j 0
j 1
j 2
j 3
j 4
j 5
j 6
j 7
j 8
这个要注意,第一个for里没有传参数,第二个传参数了。
所以第一个for里启动的goroutine用的i其实是主线程里的i;
之所以都是10,(也有可能前面几个<10);是因为调用i的时候,i在主线程内已经加到10了。
而第二个for里的i是通过参数传递,所以会打印0~9;
版权声明
本文为[runscript.sh]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zhangh571354026/article/details/124359368
边栏推荐
- Advanced file IO of system programming (13) -- IO multiplexing - Select
- My creation anniversary
- 2022爱分析· 工业互联网厂商全景报告
- 探究机器人教育的器材与教学
- 详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
- map<QString, bool> 的使用记录
- PyTorch 神经网络训练器
- 初探 Lambda Powertools TypeScript
- MySQL Router重装后重新连接集群进行引导出现的——此主机中之前已配置过的问题
- Significance of actively participating in middle school robot competition
猜你喜欢
随机推荐
Share two practical shell scripts
Mysql database transaction example tutorial
学习 Go 语言 0x08:《Go 语言之旅》中 练习使用 error
Advanced file IO of system programming (13) -- IO multiplexing - Select
Detailed explanation of MySQL creation stored procedure and function
R-Drop:更强大的Dropout正则方法
MySQL对数据表已有表进行分区表的实现
mysql分表之后如何平滑上线详解
C#的学习笔记【八】SQL【一】
2022爱分析· 工业互联网厂商全景报告
解读2022机器人教育产业分析报告
Learning go language 0x01: start from the official website
Laravel admin time range selector daterange default value problem
Usage Summary of datetime and timestamp in MySQL
qt 64位静态版本显示gif
采用百度飞桨EasyDL完成指定目标识别
Who said you should know PS? This open-source artifact can also be pulled in batch, and the effect is outstanding!
Exploring the equipment and teaching of robot education
分享两个实用的shell脚本
分享两个实用的shell脚本