范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

golang面试题

  1. golang 中 make 和 new 的区别
  make和new是两个内置函数,主要用来创建并分配内存。
  make只用于分配或初始化map、slice、 channel的数据类型,返回不是指针类型。
  new用来分配内存,new函数只接受一个参数,这个参数是一个类型,并且返回一个指向该类型内存地址的指针。同时new函数会把分配的内存置为零,也就是类型的零值。
  区别make只能用来分配及初始化类型slice、map、channel、的数据,new可以分配任意类型;make返回是该类型的引用,new返回指向该类型内存地址的指针;make分配空间后,会进行初始化,new分配的空间为被置为零;2. 数组和切片的区别
  数组是一组同类型数据的集合,它是值类型,通过下标从0开始访问元素。在初始化后长度固定,无法修改。当作为方法的参数传入时是复制一份数据而不是引用的指针。数组的长度也是其类型的一部分,通过内置函数len()获取。有两种类型初始化方式 [2]T{"a", "b"}, [...]T{"a","b"}
  切片是不定长数组,可以追加元素,追加容量不够时,会进行扩容。切片有两个概念:一是len长度,二是cap容量;长度是指赋值最大下标+1,容量是指切片目前可容纳的最多元素个数。切片是引用类型,传递时将引用指针进行传递的,修改会影响其他的对象。
  区别声明数组,需要指定数组的长度,切片可看成动态的数组;数组是值类型,切片是引用类型切片比数组多个容量属性切片低层是数组3. for range的时候它的地址会发生变化么
  不会,for range创建每个元素的副本,而不是返回每个元素的引用
  func main(){
  slice := []int{1,2,3}
  myMap := make(map[int]*int, len(slice))
  for idx, v := range slice{
  fmt.Printf("%p ",&v)
  myMap[idx]=&v
  }
  fmt.Println("=======")
  for k, v := range myMap{
  fmt.Println("index=",k, "===>", "value="v)
  }
  }
  0xc0000ae008
  0xc0000ae008
  0xc0000ae008
  =======
  index= 0 ===> value= 3
  index= 1 ===> value= 3
  index= 2 ===> value= 3
  原因分析: for range每次产生的key,value是对应遍历对象里面值的拷贝,不是对应遍历对象的值引用。v是slice在for循环申请的局部变量,迭代遍历之后,v每次都会被重新赋值,而在myMap这个map中记录的value是v的内存地址。4. go defer,多个 defer 的顺序,defer 在什么时机会修改返回值多个defer执行顺序是后进先出defer、return、返回值三者的执行逻辑是:return最先执行,结果写入返回值中,接着defer,最后函数携带返回值退出
  A. 有名返回值的情况
  func c()(i int){
  defer func(){i++}()
  return 1
  }
  输出结果2 defer是在return调用之后执行。这段代码defer的作用域是在c函数之内,可以读取c函数内的变量,当执行return 1之后,i的值就是1,defer代码块执行,对i自增操作,输出2
  B. 无名返回值的情况
  func n() int{
  var i int
  defer func(){
  i++
  fmt.Println("i=", i)
  }()
  return i
  }
  输出结果0
  原因分析:n函数的返回值没有被提前声明,其值来自其他变量的赋值,而defer修改也是其他变量,而非返回值本身,因此函数退出时返回值并没有改变;c函数的返回值提前声明,defer可以调用真实返回值,defer在return赋值返回值i之后,再一次修改了i的值,函数退出后的返回值时defer修改之后的。
  C. 声明一个指针返回值
  func prt() *int{
  var i int
  defer func(){
  i++
  fmt.Println("i=",i)
  }()
  return &i
  }
  输出结果:1 prt函数没有提前声明,但是返回的是指针变量,return将变量i的地址赋值给返回值后,defer再次修改了i在内存中的实际值,函数退出时返回值时原来的指针的地址,但其指向的内存实际值已被修改。5. uint类型溢出
  func main(){
  //a, b uint8 = 0, 1
  //fmt.Println(a - b)
  c := uint8(0) - uint8(1)
  fmt.Println(c)
  }
  输出结果:constant -1 overflows uint
  uint类型溢出会报错,中止服务的进行。但在赋值的时候会做隐适类型转换,会转成有符号整型。6. 介绍rune类型
  int32的别名,几乎在所有方面等同于int32
  它是用来区分字符值和整数值
  例如:
  var str = "hello 您好"
  fmt.Println("len=",len(str)) # len=12
  fmt.Println("len=",len([]rune(str))) # len=8golang中string底层时通过byte数组实现的,中文字符在unicode占2个字节,在utf-8占3个字节,golang默认utf-8rune与byte相似,用来表示字符的变量类型。它们区别:byte等同int8,处理ascii字符rune等同int32,处理unicode和utf-8字符7. golang中解析tag是怎么实现的?反射原理是什么获取字段fieldfield := reflect.TypeOf(obj).FieldByName("Name结构体属性名称")
  field := reflect.ValueOf(obj).Type().Field(i) // i 表示第几个字段
  field := reflect.ValueOf(&obj).Elem().Type().Field(i) // i 表示第几个字段获取标签tagtag := field.Tag获取键值对key:valuelabelValue := tag.Get("label")
  labelValue,ok := tag.Lookup("label")
  反射原理:是在运行时,能够动态知道给定数据对象的类型和结构,并有机会修改它给定一个数据对象,可以将数据对象转化为反射对象Type和Value。给定的反射对象,可以转化为某种类型的数据对象通过反射对象,可以修改原数据中的内容。8. 调用函数传入结构体时,应该传值还是指针
  传值会拷贝整个对象,而传指针只会拷贝指针地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(GC)的负担。在对象频繁创建和删除的场景下,传递指针导致的 GC 开销可能会严重影响性能。
  一般情况下,对于需要修改原对象值,或占用内存比较大的结构体,选择传指针。对于只读的占用内存较小的结构体,直接传值能够获得更好的性能。

打造这个奖杯的蔚来,不是多数人想象中的样子12月1号的蔚来,干了两件大事。第一件估计大家都知道了,ES6正式开启预订。另一件事,估计知道的人会相对少很多蔚来杯中国大学生电动方程式大赛(FSEC),在12月1号的珠海,举办了还买蔚来这是一个临时决定的选题,原本打算发条微博就过了。但在看到沈大越发到群里的一张截图后,还是决定写一下。光看这张截图,很多人可能摸不清头脑,先说说来龙去脉。视频加载中苏州蔚来ES6撞击海外媒体试驾蔚来ES8之后,说终于有家赶上特斯拉了关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革出品电动星球News翻译毓肥原创图片cleantechnica。com按照蔚来官方的说法,首批蔚来ES8欧标版,本月就将靠自媒体养家糊口,是开玩笑?还是太认真?大家好我是小宋,关于做自媒体能不能养家糊口这个问题,我感觉做自媒体不但能养家糊口,如果做好了完全可以发家致富,但是做自媒体必须得坚持,持续的发布优质内容,刚开始没有拍摄技巧也没有剪鹏博士北京企业云网事业部总经理宋春生先生对话C114媒体2020年中国国际信息通信展期间,鹏博士北京企业云网事业部总经理宋春生接受了C114通信网媒体专访。01hrQ今年,鹏博士集团将企业云网的战略定位提升到了一个层次,上半年也取得了很为自动驾驶而生,蔚来ET7NEDC续航破千加速3。9S大概一个小时之前,蔚来在成都2020NIODAY上正式发布了旗下首款旗舰轿车ET7。不知道看完直播的你们,是否感觉和我一样这是一款蔚来充分展现自己自动驾驶野心的旗舰车型。无论是33走进XPT工厂看蔚来硬核一面,秦力洪说蔚来可以超越特斯拉大家可能会有个误解,会觉得蔚来是个能力不强的暖男,觉得你们都是靠服务好。我们最近这一系列走进蔚来的活动,就是希望跟大家讲,我们其实是用技术改变人的体验,蔚来也有很硬核的一面。大概8比亚迪发布DMi混动家族,王传福说要降维打击燃油车?昨天晚上,比亚迪在深圳正式发布了旗下全新混动产品线DMi超级混动家族。首批产品包括秦PlusDMi宋PlusDMi,以及唐DMi。其中秦PlusDMi车型及定价为NEDC55km尊毛利转正营收翻倍亏损收窄,小鹏首份年报的含金量有多少?今天下午,小鹏汽车发布了2020Q4季度财报以及2020年未经审计的财务数据,并在两个小时前召开了财报电话会议。从数字来看,最显眼的是毛利率,无论是单季还是全年。小鹏2020全年毛恒大汽车同时发布9款车型明年将大规模交付关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革4月19日,恒大集团旗下新能源汽车品牌恒驰汽车在十九届上海国际车展上发布了旗下九款车型,恒驰1到恒驰9。覆盖A到D所有级比亚迪汉DM同样花25万买插混轿车,我是唯一有四驱的作为王朝家族的轿车旗舰,从概念车阶段开始,汉DM一直都是舆论热点。从造型内饰,再到动力系统,几乎每一次曝光都是头条。上个月汉DM价格公布,成为比亚迪迈向25万价位的作品。但我们的疑
曲面屏救星!华为Mate40pro曲面手机保护钢化膜贴膜我相信不止我一个人面对曲面屏保护膜的选择很头疼边胶钢化膜,水凝膜,尝试过,真的就是贴一张坏一张,整的我都想换手机了还好没放弃,让我发现了曲面屏终结者青盾晶刻镀膜拿到手不要太好!卖家买前必看!不踩雷!一加99pro手机保护贴膜钢化膜作为一加8的老用户。一加机器做的还是不错的。屏幕素质很好。续航也够可以。一加9出后果断入手。但原厂膜是真的渣。还是一样的塑料膜。用了几天就有划痕了。而且塑料膜还不能保护膜屏幕。本来3分钟!涨姿势!远离智商税!苹果12promax手机保护贴膜钢化膜苹果12一时裸奔一时爽,手机裸奔了两个月,屏幕上满是划痕,无奈下只好贴膜,路边10块的也用过,淘宝里100多的也用过,可谓是我交智商税的一段心酸史,下面就跟朋友们讲述一下我踩过的雷华为nova4发布了,国产第一部屏下镜头手机戳到你哪个点了?2018年12月17日,国产第一部屏下镜头手机在汪涵何炅的老家湖南长沙正式发布没错,就是华为Nova4!正面采用一块6。4英寸挖孔全面屏,屏占比高达91。8采用4。5mm孔径盲孔方特朗普签署新法案,禁止美政府相关机构使用华为中兴8月14日,美国总统特朗普签署了一项新法案,禁止美国政府及政府承包商使用华为和中兴部分技术。今年6月,美国参议院以压倒性多数通过了一项修正案,恢复对中兴的贸易禁令。然而,众议院没有荣耀8X官方曝光7。12寸的美人尖全面屏今天下午荣耀官方正式宣布了手机新品荣耀8X,这款手机搭载了7。12英寸美人尖全面屏,分辨率为22441080,电池的容量也达到了4900mAh。小编已经查到,这款手机现身工信部网站英伟达RTX2080今日凌晨发布,国行6299起8月21日英伟达正式发布了全新的20系显卡,其中包括RTX2080TiRTX2080以及RTX2070。RTX2080Ti和RTX2080将会在9月20日正式发售,而RTX2070罗永浩发话坚果Pro2S明天上午10点全网现货今天上午,罗永浩微信公众号宣布,坚果Pro2S将于明日(8月28日)1000起,全网现货开售。坚果Pro2S正面采用6。01英寸OLED材质(分辨率2160x1080),整机相对PColorOS6正式开启公测R15快速体验今日,OPPO官方宣布,R15正式开启ColorOS6公测。R15的公测用户可以在设置软件更新中检测升级。OPPO称,版本将会分批推送,请耐心等待版本更新。ColorOS6是OPP新款iPhoneX最新参数曝光双卡双待,4G运存,支持手写笔6。1英寸iPhoneX6。06英寸LCD屏幕结构光人脸识别3G64256G存储双卡双待售价58886。5英寸iPhoneX6。46英寸AMOLED屏幕结构光人脸识别4G64256勒索病毒竟然要求微信,支付宝支付!感染用户超2万勒索病毒竟然要求微信,支付宝支付!感染用户超2万勒索病毒是一种新型电脑病毒,主要以邮件程序木马网页挂马的形式进行传播。该病毒性质恶劣危害极大,一旦感染将给用户带来无法估量的损失。被