• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hzzhzzdogee
V2EX  ›  程序员

Go 面试: 面试官问在 Go 语言的使用过程中, 遇到过什么样的问题

  •  
  •   hzzhzzdogee · Oct 28, 2024 · 5020 views
    This topic created in 741 days ago, the information mentioned may be changed or developed.

    最近在尝试看找找新的机会, 连着面试了几家, 几乎都问了上述问题.

    可能是我比较菜, 资历尚浅吧, 我好像没遇到过什么值得大书特书的情况.

    面试过程中, 我试着从 Go 语言的特性入手回答:

    1. 避免运行过程中不可 recover 的 fatal error, 例如 map 的并发读写.
    2. 资源泄露的问题, context 的使用方面.
    3. 一些性能敏感场景的注意点, 例如序列化/反序列化, map/slice 的扩容等等.

    听了我的回答后, 显然面试官并不满意.

    想问问万能的 v 友, 这样的问题到底想问什么呢, 该如何回答才能让人满意呢?

    26 replies  •  2024-10-29 23:21:41 +08:00
    R4rvZ6agNVWr56V0
    R4rvZ6agNVWr56V0
    Oct 28, 2024❤️1
    1
    更想听到 go 应用在工程上的弱势/问题以及相应的解决方案实践, 而非语言特征。
    deplives
    deplives
    Oct 28, 2024❤️1
    2
    谁会问你语言特性上的问题啊,遇到问题还能怎么办,你能修复么?
    不都是问工程问题么?
    fffq
    fffq
    Oct 28, 2024
    3
    Go is boring
    ninjashixuan
    ninjashixuan
    Oct 28, 2024
    4
    But useful
    tbxark
    tbxark
    Oct 28, 2024❤️1
    5
    直接回答 《 100 个 Go 语言典型错误》 中 100 个典型错误.
    jorneyr
    jorneyr
    Oct 28, 2024❤️1
    6
    { "age": 10 },反序列化得到 map[string]any 的时候,不能 value.(int32),不能 value.(float32),需要 value.(float64),这个比较坑。
    PTLin
    PTLin
    Oct 28, 2024❤️1
    7
    xxx 场景遇到了 xxx 瓶颈,使用了 pperf 等分析工具发现是语言 xxx 的问题,通过阅读 runtime 源码定位到了是 xxx 的问题,根据 a 以及 b 还有 c 优化了代码解构,解决了这个问题。
    caola
    caola
    Oct 28, 2024
    8
    @jorneyr #6 照你这么说,两个整数相除结果永远是整数,想要小数还必须得把整数转为 float64 才能相除
    Felldeadbird
    Felldeadbird
    Oct 28, 2024❤️1
    9
    我遇到最典型就是 前端和 go 对接,前端如果提交了对象,因为 go map 是无序的。如果我也跟着返回一样的结构,前端去处理的话,渲染页面的顺序可能会有变化。 要么和前端说好,统一返回数组,非对象。
    beyondsoft
    beyondsoft
    Oct 28, 2024
    10
    这个时候就得吐槽下 golang 的泛型
    keakon
    keakon
    Oct 28, 2024
    11
    @jorneyr 印象中 []uint8 会被当成字符串,需要声明成 []uint16 ,然后需要用到 uint8 和 []uint8 时得来回转换格式。
    zhujinliang
    zhujinliang
    Oct 28, 2024❤️1
    12
    感觉面试官就随便一问,想引个话题或者混一下时间。这种问题太宽泛了,也考验面试官反应能力,你说一个,他找不到继续话题的点,那就下一个话题呗
    qq135449773
    qq135449773
    Oct 28, 2024❤️1
    13
    面试是双向的,我觉得这种面试官也挺无聊的
    BKH3h4F
    BKH3h4F
    Oct 28, 2024❤️1
    14
    感觉有点打哑谜,看你猜不猜得中,就挺无聊的,换下一个(开玩笑
    itIsUnbelievable
    itIsUnbelievable
    Oct 28, 2024
    15
    @PTLin 是 pprof ,《通过阅读 runtime 源码定位到了》看起来很高级,实际上 pprof 都指明了是业务代码哪一行的问题。
    shadowyue
    shadowyue
    Oct 28, 2024❤️3
    16
    这种开放性问题,还是比较麻烦的,除非你提前做了准备。
    现实是你可能真的遇到问题了,结果很棘手,一直没用搞明白为什么,这种肯定没法回答。
    另外一种可能是你解决了问题,然后这个经验变成你开发的一部分,就抛之脑后了。
    除非专门去总结整理,否则的话经验会让你主动避免再次遇到相同问题,你再也遇不到了就没印象了。

    如果你没准备这种问题的答案,但是对自己开发的积累有信心,你就开始跟考官打太极,
    东拉西扯的同时让大脑赶紧回忆。
    实在想不出来,就实话实话,别现编欺骗面试官,哪怕你开个玩笑说自从用了 go ,感觉睡眠质量变好了都行,
    合格的考官自然会配合你跳到下一个问题。
    povsister
    povsister
    Oct 28, 2024 via iPhone❤️1
    17
    这面试官有毛病,没活了硬问属于。
    hubqin
    hubqin
    Oct 28, 2024❤️1
    18
    旧版的 for range 每次迭代不会创建副本,取地址保存只会保存到最后一个( 1.22 版本已修复)
    maxwellz
    maxwellz
    Oct 28, 2024❤️1
    19
    可以看看一些公司的微信公众号,有时候会分享这种踩坑的文章
    0x67cq
    0x67cq
    Oct 29, 2024❤️1
    20
    我最近倒是遇到了, 直接把 slice 赋值,循环函数里,for {var a []struct, b:= a[0:x], a=[:0], ch<-b},然后继续接受参数,在并发情况下,b 的值会出现变化。深浅拷贝问题。
    然后还有一个毕业生写出来的。panic 被 defer 捕获之后触发死锁。但是正向逻辑是不会死锁的。2333 看了好久。
    tbxark
    tbxark
    Oct 29, 2024❤️2
    21
    @jorneyr 这个其实还好用`decoder.UseNumber()` 就能解决,不过这个不是默认行为罢了

    ```go

    package main

    import (
    "encoding/json"
    "strings"
    )

    func main() {
    raw := `{ "age": 10 }`
    var res map[string]any
    decoder := json.NewDecoder(strings.NewReader(raw))
    decoder.UseNumber()
    err := decoder.Decode(&res)
    if err != nil {
    panic(err)
    }
    age := res["age"].(json.Number)
    i, err := age.Int64()
    if err != nil {
    panic(err)
    }
    println(i)

    }

    ```
    picone
    picone
    Oct 29, 2024
    22
    @shadowyue 合格的面试官应该是会引导你说出他想听的东西,因为这是个沟通过程,大家都可能表述不清楚
    zhengxw
    zhengxw
    Oct 29, 2024❤️1
    23
    换一家公司,这种问题一般只用于饭后当笑话看。
    phithon
    phithon
    Oct 29, 2024
    24
    method 还不支持泛型
    zxyphp
    zxyphp
    Oct 29, 2024
    25
    说了你也听不懂
    realpg
    realpg
    Oct 29, 2024
    26
    我技术强,没遇到过什么问题。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1637 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 12:38 · PVG 20:38 · LAX 04:38 · JFK 07:38
    ♥ Do have faith in what you're doing.