V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
klusfq
V2EX  ›  职场话题

某大厂 golang 一面凉经

  •  1
     
  •   klusfq · 18 天前 · 3476 次点击

    背景

    六年后端经验,目前二线城市找机会回一线。

    流程

    1. 自我介绍
    2. golang 八股文:
      • GMP 原理
      • 协程和线程区别
      • 带 buffer 和不带 channel 使用
      • GC 原理
      • 利于 gc 的最佳实践
    3. 十分钟写快排;
    4. 聊了一个项目:docker-compose 项目落地到 K8S ;

    感受

    • 首先,我面的是云原生岗位,亏我还重点看网络/docker/k8s ,结果这方面啥都没问,有点小蛋疼;
    • 然后,Go 八股答的不好,尤其利于 GC 的最佳实践问题;
    • 最后,当时说十分钟写快排,我脑子就已经宕机了(心态问题),根本没法集中注意力;

    PS:事后我冷静下来,回忆思路大概花了 10+分钟,然后整个 coding 过程也就 15+分钟吧。

    心态很重要!心态很重要!心态很重要!

    func QuickSort(arr []int) {
            if len(arr) == 0 {
                    return
            }
            fmt.Println(arr)
            pv := 0
    
            pl := 1
            pr := len(arr) - 1
    
            for pl <= pr {
                    if pv < pl {
                            // -- 右边
                            for arr[pv] < arr[pr] {
                                    pr -= 1
                            }
    
                            arr[pv], arr[pr] = arr[pr], arr[pv]
                            pv = pr
                            pr -= 1
                            // fmt.Println(arr, pl, pr, pv)
                    } else if pv > pr {
                            // -- 左边
                            for arr[pv] > arr[pl] {
                                    pl += 1
                            }
    
                            arr[pv], arr[pl] = arr[pl], arr[pv]
                            pv = pl
                            pl += 1
                            // fmt.Println(arr, pl, pr, pv)
                    }
            }
    
            QuickSort(arr[:pv])
            QuickSort(arr[pv+1:])
    }
    
    第 1 条附言  ·  17 天前
    以上快排代码存在 pv/pl/pr 的数组越界 bug ,对边界 case 未妥善处理,仅供参考!!!
    27 条回复    2025-04-18 10:38:58 +08:00
    BenWang
        1
    BenWang  
       18 天前
    35+ 以后不打算面试了,没上进心了,等被裁,然后躺平。
    lasuar
        2
    lasuar  
       18 天前
    没准备到位。
    klusfq
        3
    klusfq  
    OP
       17 天前
    @BenWang 躺平也是要资格的,我也快而立之年了,房贷压身、身不由己。趁最后几年再搏一把......
    klusfq
        4
    klusfq  
    OP
       17 天前
    @lasuar 根本没准备 go 八股文。。。
    xuzhzzz
        5
    xuzhzzz  
       17 天前
    云原生岗位就谈了个 docker-compose 项目落地到 K8S 吗
    emSaVya
        6
    emSaVya  
       17 天前
    一面挂确实太伤了。大概率以后都没机会再面了。
    ldx78203199
        7
    ldx78203199  
       17 天前
    讲道理 一面问题不难,快排算是送分题
    hahasong
        8
    hahasong  
       17 天前
    还是第一次见这样写快排,这比较条件很绕
    Yc1992
        9
    Yc1992  
       17 天前
    你这快排复盘都没写对
    youyouzi
        10
    youyouzi  
       17 天前
    为什么你的快排写这么复杂啊?

    function quickSort(arr) {
    if (arr.length <= 1) {
    return arr;
    }

    const pivot = arr[0];
    const left = [];
    const right = [];

    for (let i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) {
    left.push(arr[i]);
    } else {
    right.push(arr[i]);
    }
    }

    return [...quickSort(left), pivot, ...quickSort(right)];
    }

    这样不是蛮简单?
    youyang
        11
    youyang  
       17 天前
    有时候也靠运气
    klusfq
        12
    klusfq  
    OP
       17 天前
    @ldx78203199
    主要是太久没写,加上大脑宕机了,确实可惜。。。
    klusfq
        13
    klusfq  
    OP
       17 天前
    @Yc1992
    ???
    klusfq
        14
    klusfq  
    OP
       17 天前
    @youyouzi
    那是因为我考虑了空间复杂度。。。
    你这开了这么多数组,排序数组稍微大点就爆栈好伐。。。
    klusfq
        15
    klusfq  
    OP
       17 天前
    @hahasong
    我是按自己六年前大学的记忆理解写的
    klusfq
        16
    klusfq  
    OP
       17 天前
    @xuzhzzz
    他根本没问云原生这方面的问题,那还是我提到自己项目,聊了聊。
    感觉他就只想看看你 go 有没有背八股
    klusfq
        17
    klusfq  
    OP
       17 天前
    @emSaVya
    没事儿,就当积攒经验了
    klusfq
        18
    klusfq  
    OP
       17 天前
    @youyang
    只能说没这个缘分,尽人事听天命吧。
    Yc1992
        19
    Yc1992  
       17 天前   ❤️ 1
    @klusfq #13
    for arr[pv] > arr[pl] {
    pl += 1
    }
    当 pv=0, 所有 arr[pl]都< arr[0] 的时候,index 直接越界了

    你有打❓的功夫 不如自己问问 ai 代码哪里有问题
    allencloud
        20
    allencloud  
       17 天前
    GC 的最佳实践问题 怎么问的,应该怎么答?让我抄抄答案。。。
    太惭愧了,自己在中厂,OOM 都是通过加容器内存解决的。。。
    klusfq
        21
    klusfq  
    OP
       17 天前
    @Yc1992
    首先,我很感谢你指出我 coding 的问题;
    其次,这个代码我基本就是回忆+vi 裸写,快速过了面试官 case 就到此为止了;
    再次,你如果愿意指教就别卖关子,不愿意也无所谓;
    最后,发帖本来就是为了分享经验,社区交流本来就互通有无,请别以那种高高在上的姿态在那儿点评;

    PS:边界 case 没处理到位这是 bug ,至少思路没错,不知道你的优越感打哪儿来的。
    klusfq
        22
    klusfq  
    OP
       17 天前
    @allencloud
    在 Go 语言中编写 GC 友好的代码是优化程序性能的关键。以下是一些实践建议,旨在减少垃圾收集器的压力并提高程序的运行效率:
    1. 对象池复用:对于频繁创建和销毁的小对象,可以使用对象池来复用对象,避免频繁的内存分配和回收。但需注意,对象池不适合所有场景,特别是对象较大或内存管理复杂时,可能会增加同步开销。
    2. 避免短生命周期的大对象:尽量减少大对象的临时使用,因为它们会快速晋升到老生代,增加 GC 的负担。
    3. 控制并发内存分配:在高并发场景下,过多的并发内存分配会增加 GC 的频率,考虑使用同步池等机制来集中管理内存分配。
    4. 减少不必要的指针使用:无指针值的传递和存储可以减少 GC 的工作量,尤其是在数据结构中,如果不需要通过指针访问,尽量使用值类型。
    5. 结构体字段布局优化:将指针字段放在结构体的前面,非指针字段放在后面,这样 GC 可以更快地完成扫描。
    6. 利用逃逸分析减少分配:理解逃逸分析的工作原理,编写代码以避免不必要的堆分配。可以通过编译器标志(如-gcflags=-m )来查看哪些对象逃逸到了堆上,并尝试优化。
    7. 字符串拼接避免使用+或 fmt.Sprintf:频繁的字符串拼接会导致大量临时字符串对象的生成,考虑使用 strings.Builder 或 bytes.Buffer 来累积字符串。
    8. 合理设置 GC 参数:根据应用的具体情况调整 GC 的参数,如设置合适的堆增长因子、调整 GC 触发的阈值,但需谨慎,不当的调整可能适得其反。
    9. 并发标记与清理:了解 Go 的 GC 机制,特别是从 Go 1.5 版本开始引入的三色标记法及其并发收集的改进,这有助于理解为何某些代码实践对 GC 友好。
    10. 避免内存泄漏:确保所有资源在不再需要时被正确释放,避免长时间持有无用的对象引用,这直接关系到 GC 的效率。


    ——来自 deepseek
    kivmi
        23
    kivmi  
       14 天前
    @youyouzi 你这个空间复杂度上去了,最好还是使用原地快排,楼主那个是原地快排

    func quickSortInPlace(arr []int, low, high int) {
    if low < high {
    p := partition(arr, low, high) // 分区操作
    quickSortInPlace(arr, low, p-1)
    quickSortInPlace(arr, p+1, high)
    }
    }

    func partition(arr []int, low, high int) int {
    pivot := arr[high] // 选最后一个元素为主元
    i := low
    for j := low; j < high; j++ {
    if arr[j] < pivot {
    arr[i], arr[j] = arr[j], arr[i] // 交换
    i++
    }
    }
    arr[i], arr[high] = arr[high], arr[i] // 主元归位
    return i
    }
    youyouzi
        24
    youyouzi  
       13 天前
    @klusfq #14
    @kivmi 好吧,是我肤浅了。没考虑性能问题。直接上手干了
    YakumoZi
        25
    YakumoZi  
       12 天前
    @klusfq #22 不要直接粘贴 AI 回复哦,小心被 BAN
    xixibb
        26
    xixibb  
       12 天前
    @klusfq #3 有房贷真的是一把枷锁,让人不能动弹。。。
    klusfq
        27
    klusfq  
    OP
       2 天前
    @YakumoZi
    好的,感谢提醒~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 09:08 · PVG 17:08 · LAX 02:08 · JFK 05:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.