2019独角兽企业重金招聘Python工程师标准>>>

41.执行下面的代码发生什么?

package maintype Param map[string]interface{}type Show struct {*Param
}func main() {s := new(Show)s.Param["RMB"] = 10000
}

考点:map初始化

map需要初始化后才能使用。
编译错误:invalid operation: s.Param["RMB"] (type *Param does not support indexing)

42.执行下面的代码发生什么?

package main
import "fmt"type student struct {Name string
}func zhoujielun(v interface{}) {switch msg := v.(type) {case *student, student:msg.Name = "qq"fmt.Print(msg)}
}

考点:类型转换

msg不属于student类型,所以没有Name字段。
改为:

s := v.(student)
s.Name = "qq"

43.执行下面的代码发生什么?

package main
import ("encoding/json""fmt"
)type People struct {name string `json:"name"`
}func main() {js := `{"name":"11"}`var p Peopleerr := json.Unmarshal([]byte(js), &p)if err != nil {fmt.Println("err: ", err)return}fmt.Println("people: ", p)
}

考点:结构体访问控制

这道题坑很大,很多同学一看就以为是p的初始化问题,实际上是因为name首字母是小写,导致其他包不能访问,所以输出为空结构体。
改为:

type People struct {Name string `json:"name"`
}

44.以下代码有什么问题?

package mainfunc Stop(stop <-chan bool) {close(stop)
}

考点:close channel

有方向的channel不可被关闭

45.实现一个函数可以根据指定的size切割切片为多个小切片

解析

func main() {lenth := 11size := 5list := make([]int, 0, lenth)for i := 0; i < lenth; i++ {list = append(list, i)}SpiltList(list, size)
}func SpiltList(list []int, size int) {lens := len(list)mod := math.Ceil(float64(lens) / float64(size))spliltList := make([][]int, 0)for i := 0; i < int(mod); i++ {tmpList := make([]int, 0, size)fmt.Println("i=", i)if i == int(mod)-1 {tmpList = list[i*size:]} else {tmpList = list[i*size : i*size+size]}spliltList = append(spliltList, tmpList)}for i, sp := range spliltList {fmt.Println(i, " ==> ", sp)}
}

46.实现两个go轮流输出:A1B2C3.....Z26

解析

方法一:有缓冲chan

func ChannelFunc() {zimu := make(chan int, 1)suzi := make(chan int, 1)zimu <- 0// zimugo func() {for i := 65; i <= 90; i++ {<-zimufmt.Printf("%v", string(rune(i)))suzi <- i}return}()go func() {for i := 1; i <= 26; i++ {<-suzifmt.Printf("%v", i)zimu <- i}return}()time.Sleep(1 * time.Second)fmt.Println()
}

方法二:无缓冲chan

func Channel1Func() {zimu := make(chan int)suzi := make(chan int)// zimugo func() {for i := 65; i <= 90; i++ {fmt.Printf("%v", string(rune(i)))zimu <- i<-suzi}return}()go func() {for i := 1; i <= 26; i++ {<-zimufmt.Printf("%v", i)suzi <- i}return}()time.Sleep(10 * time.Second)fmt.Println()
}

方法三:使用锁

大家可以自己实现,把结果留言给我,答案后续公布。

47.执行下面代码输出什么?

package main// 47.执行下面代码输出什么?
import "fmt"func main() {five := []string{"Annie", "Betty", "Charley", "Doug", "Edward"}for _, v := range five {five = five[:2]fmt.Printf("v[%s]\n", v)}
}

考点:range副本机制

循环内的切片值会缩减为2,但循环将在切片值的自身副本上进行操作。 这允许循环使用原始长度进行迭代而没有任何问题,因为后备数组仍然是完整的。
结果:

v[Annie]
v[Betty]
v[Charley]
v[Doug]
v[Edward]

48.for 和 for range有什么区别?

考点:for range

  1. 使用场景不同 for可以

    • 遍历array和slice
    • 遍历key为整型递增的map
    • 遍历string for range可以完成所有for可以做的事情,却能做到for不能做的,包括
    • 遍历key为string类型的map并同时获取key和value
    • 遍历channel
  2. 实现不同 for可以获取到的是被循环对象的元素本身,可以对其进行修改; for range使用值拷贝的方式代替被遍历的元素本身,是一个值拷贝,而不是元素本身。

49.解决下面问题:输出MutilParam= [ssss [1 2 3 4]]如何做到输出为[ssss 1 2 3 4]?

package mainimport "fmt"func MutilParam(p ...interface{}) {fmt.Println("MutilParam=", p)
}
func main() {MutilParam("ssss", 1, 2, 3, 4) //[ssss 1 2 3 4]iis := []int{1, 2, 3, 4}MutilParam("ssss", iis) //输出MutilParam= [ssss [1 2 3 4]]如何做到输出为[ssss 1 2 3 4]
}

考点:函数变参

这样的情况会在开源类库如xorm升级版本后出现Exce函数不兼容的问题。 解决方式有两个:

方法一:interface[]

tmpParams := make([]interface{}, 0, len(iis)+1)
tmpParams = append(tmpParams, "ssss")
for _, ii := range iis {tmpParams = append(tmpParams, ii)
}
MutilParam(tmpParams...)

方法二:反射

f := MutilParam
value := reflect.ValueOf(f)
pps := make([]reflect.Value, 0, len(iis)+1)
pps = append(pps, reflect.ValueOf("ssss"))
for _, ii := range iis {pps = append(pps, reflect.ValueOf(ii))
}
value.Call(pps)

50.编译并运行如下代码会发生什么?

package main// 50.编译并运行如下代码会发生什么?
import "fmt"func main() {mmap := make(map[map[string]string]int, 0)mmap[map[string]string{"a": "a"}] = 1mmap[map[string]string{"b": "b"}] = 1mmap[map[string]string{"c": "c"}] = 1fmt.Println(mmap)
}

考点:map key类型

golang中的map,的 key 可以是很多种类型,比如 bool, 数字,string, 指针, channel , 还有 只包含前面几个类型的 interface types, structs, arrays。
显然,slice, map 还有 function 是不可以了,因为这几个没法用 == 来判断,即不可比较类型。 可以将map[map[string]string]int改为map[struct]int

转载于:https://my.oschina.net/qiangmzsx/blog/2052285

Golang面试题解析(五)相关推荐

  1. 100道MySQL数据库面试题解析

    1. MySQL索引使用有哪些注意事项呢? 可以从三个维度回答这个问题:索引哪些情况会失效,索引不适合哪些场景,索引规则 索引哪些情况会失效 查询条件包含or,可能导致索引失效如何字段类型是字符串,w ...

  2. 闭关30天,献上【Java一线大厂高岗面试题解析合集】,冲刺金九银十!

    概述 时间不等人,2022年转眼就要过去大半了,春招在疫情中度过,不知有多少人还在惋惜... 马上又是秋招的高峰"金九银十",估计现在就已经有不少的程序猿(媛)朋友早就踏上提前批之 ...

  3. 华清远见-重庆中心-JAVA基础阶段技术总结/知识点梳理/个人总结/关于JAVA技术的解析(看法)/面试题解析

    Java基础知识 概述 什么是java:1.是边编译边解释的面向对象的编程语言. 2.java语言是1995年发布的,发布语言公司是:Sun 3.下载安装Java时从Oracle官网下载,最好下载LT ...

  4. 闭关28天,奉上[Java一线大厂高岗面试题解析合集],备战金九银十

    前言 时间不等人,2022年转眼就要过去大半了,春招在疫情中度过,不知有多少人还在惋惜... 马上又是秋招的高峰"金九银十",估计现在就已经有不少的程序猿(媛)朋友早就踏上提前批之 ...

  5. 万字长文,冲刺备战金九银十,奉上[Java一线大厂高岗面试题解析合集]

    时间不等人,2022年转眼就要过去大半了,春招在疫情中度过,不知有多少人还在惋惜... 马上又是秋招的高峰"金九银十",估计现在就已经有不少的程序猿(媛)朋友早就踏上提前批之路了吧 ...

  6. 中高级Java面试题解析,剑指BATJ,提前祝大家程序员节快乐

    本文转载自:中高级Java面试题解析,剑指BATJ,提前祝大家程序员节快乐 为什么大多数程序员相进BAT工作? 在中国互联网技术发展过程中,BAT带给我们程序员太多的回忆,20年发展过程中,他们各自形 ...

  7. Python面试题解析之前端、框架和其他

    python面试题解析(前端.框架和其他) 答: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善 ...

  8. c语言红酒编程题,葡萄酒基础知识试题解析一

    原标题:葡萄酒基础知识试题解析一 单项选择题: 1.下列哪一组完全属于酿造红葡萄酒的品种?(B) A.霞多丽.赤霞珠.梅洛.品丽珠 B.赤霞珠.品丽珠.梅洛.黑比诺 C.雷司令.龙眼.天帕尼洛.桑娇维 ...

  9. 2021年高处作业安装拆除维护证考试题库及高处安装、维护、拆除试题解析

    题库来源:特种作业模考题库小程序 2021年安装拆除维护证考试题库及安装拆除维护试题解析是结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的安装拆除维护在线模拟 ...

最新文章

  1. Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」...
  2. C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
  3. 深度学习(四十七)DSD正则化训练方法
  4. 简用计算机,你真的会使用“计算器”吗?
  5. VMware中让虚拟机支持虚拟化
  6. 基于卷积神经网络的微表情识别研究需要注意的一些问题【未完待续】
  7. Java类获取Spring容器的bean
  8. 年终盘点丨2021边缘计算大事记
  9. Excel阳历转农历VBA函数
  10. windows下载安装ElasticSearch
  11. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper
  12. vue中使用echarts词云
  13. 3DMAX 9 角色建模3 uv展开
  14. python支持使用字典的键作为下标,Python 支持使用字典的“键”作为下标来访问字典中的值。...
  15. 笔记本电脑触控板突然失灵的解决办法
  16. C++异常(异常的基本语法、栈解旋unwinding、异常接口声明、异常变量的生命周期、异常的多态使用、C++系统标准异常库)
  17. codeforces 348A Mafia
  18. 浅谈电磁学——高斯定理 环路定理
  19. 动态代理:1 个经纪人如何代理 N 个明星
  20. 使用System Center DPM 2012 SP1保护企业关键数据(一)部署SCDPM

热门文章

  1. AngularJs-指令和指令之间的交互(动感超人)
  2. 2012年7月份第4周51Aspx源码发布详情
  3. MySQL学习笔记——显示数据库信息
  4. 今天英雄联盟服务器维护要到好久,lol今天维护时间是多久 lol维护公告2020最新...
  5. uniapp怎么解析html字符串,uniapp富文本解析插件的详细使用教程
  6. mongoose mysql_mongoose入门
  7. 磁盘管理来安装linux,Linux_在CentOS系统中安装quota来管理磁盘配额,在网络管理的工作中,由于硬 - phpStudy...
  8. 各种门锁的内部结构图_便宜超好用:小米智能门锁 E上手体验报告
  9. 计算机平面设计专业有哪些课程,计算机平面设计专业课程有哪些?
  10. 求两条轨迹间的hausdorff距离_题型 | 圆上有n个点到直线距离为d?