最新公告
  • 新注册用户请前往个人中心绑定邮箱以便接收相关凭证邮件!!!点击前往个人中心
  • golang面试精编1

    √ 简单介绍一下Golang
    谷歌开发的一种系统编程语言;
    它具有内置的垃圾收集机制;
    支持高并发
    代码可以编译成单个可执行二进制文件,不需要添加库或运行时环境即可在服务器上执行;

    √ Golang是否可以声明一个类?
    可以,type Person struct{…}
    TODO:复习面向对象的所有相关问题

    √ Go是否支持泛型?(陷阱问题)
    否,泛型是方便的,但是它们在类型系统和运行时的复杂性方面付出了代价。
    Go语言的解决方案就是使用interface{}替代任意类型,简单有效;
    TODO:拓展一下泛型的概念

    √ 从GitHub或者bitbucket导入代码的命令是什么?
    go get和go install命令

    √ 比较一下go run/build/get/install几个命令的异同?
    go run xxx.go:直接编译并运行go文件,产生的可执行程序在临时文件夹中;
    go build xxx.go:在当前目录产生同名的可执行程序;
    go get mypack:下载包源码到当前GOPATH/src目录下;
    go install mypack:对指定包进行编译安装;
    如果mypack是一个类库包,则在当前GOPATH/pkg下生成对应的包文件,
    如果mypack是一个含有main主程序的包,则在当前GOPATH/bin下生成可执行程序;

    √ 一个通过make()命令创建的缓冲区被分配了一块内存后。如何销毁缓冲区并收回内存?
    buffer = nil
    在运行时,buffer = nil将启动垃圾回收。
    make()能创建的类型包括:切片,map,管道,三者都是引用类型;(追问:Go语言的引用类型)
    引用类型的值的内存分配是在堆中的,栈中使用一个地址指向之;
    需要回收时,将栈中的指针/引用指向即可nil;
    TODO:拓展一下堆栈内存分配,复习值类型和引用类型

    √ 什么是值传递和引用传递
    Go语言中的引用类型:切片,map,管道,指针,接口;其它都是值类型;
    在变量传递(函数传参)时,值类型是拷贝传递,引用类型是地址传递;
    在函数传参中,如果是值传递,修改被传递的参数,不会影响原有变量,如果是引用传参,函数内修改参数会影响外界;

    √ 切片和数组的显著差异是什么?
    数组大小是固定的,切片大小不是。
    切片在运行时可以动态地增加切片的大小,但数组不可以。
    使用了内置的添加、复制功能对切片操作。
    TODO:追问,切片的双倍扩容机理

    √ cap()和len()函数的区别是什么?
    len()返回切片中的元素个数。
    cap()返回切片的容量即切片可以容纳的元素数量。

    √ 哈希表或哈希映射允许快速查找。GO如何实现哈希映射?(陷阱问题)
    哈希表在Golang中相当于map,也就是哈希映射。
    hash_table := make(map[string]string)

    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » golang面试精编1

    常见问题FAQ

    如果资源链接失效了怎么办?
    本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
    如果用户分享的资源与描述不符怎么办?
    可以联系客服QQ:2580505920,如果要求合理可以安排退款或者退赞助积分。
    如何分享个人资源获取赞助积分或其他奖励?
    本站用户可以分享自己的资源,但是必须保证资源没有侵权行为。点击个人中心,根据操作填写并上传即可。资源所获收益完全归属上传者,每周可申请提现一次。
    如果您发现了本资源有侵权行为怎么办?
    及时联系客服QQ:2580505920,核实予以删除。

    参与讨论

    • 176会员总数(位)
    • 3737资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 542稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多
    成为赞助用户享有更多特权立即升级