[面试] 腾讯csig运维实习生面经

RoLingG 其他 2024-06-20

腾讯csig运维实习生面经

面试岗位:运维实习生 150~200一天 腾讯,针不戳

先说体验吧,整体感觉真的很好,面试官老哥人好,沟通也很流畅,问问题讲的也清楚,生怕你没听懂还可以多讲几遍给你听。

面试主要问的Go语言的内容比较多,或者说问的都是Go相关的,前面问的都挺简单的:

①常量与变量的区别

②GC回收(老生常谈)

③反射与断言(这个我没答出来,我拉了,用少了也看少了)

但是后面叫我根据场景写需求的时候我就懵了,咱第一次被这样面,咱现在代码水平也比较拉胯,所以铁寄了:

场景:爬虫爬网站,用channel去接收与传出结果,要求爬失败了的网站该怎么用goroutine去解决。

这个场景其实挺简单的,但奈何自己太久没用channel和goroutine,没怎么写过相应的代码,拉垮了,写不出一点。

之后就是聊天环节了,老哥也是一眼发现了我的问题,让我去好好地把这些基础打好,然后看看k8s的源码或者大佬的代码,去理解他们代码的设计与思路,之后就可以尝试一下二次开发。

总结:这次虽然好好地介绍了自己,但因为自己基础能力综合运用真的不行,Golang特性也没有好好学好。通过面试官老哥的指点也让我明白了之后的方向该怎么走,至于算法,连写的机会都没有,更得提升。这次面试体验真的很好,算是遇到了贵人指点,过程老哥也知道我自学Go方向有点差错,指点了我。我估计这辈子遇不到多几个这样的贵人了。希望之后沉淀完能真的达到老哥说的境界,这样对自己也好,对之后自己拿对应岗位的薪资也有支柱能撑得起自己。

最后附上面试时候场景题的解答,确实不难:

package main

import (
   "fmt"
   "net/http"
   "sync"
   "time"
)

var waitGroup sync.WaitGroup

func main() {
   ch := make(chan string)

   waitGroup.Add(1)
   //开一个协程
   go func() {
      defer waitGroup.Done()
      res, err := http.Get("https://rolingg.top")
      if err != nil {
         ch <- fmt.Sprintf("爬虫爬网站出错, err: %s", err.Error())
      } else {
         defer res.Body.Close() // 确保关闭响应体
         ch <- fmt.Sprintf("爬虫爬网站成功!status: %s\n", res.Status)
      }
   }()

   //注意了,这里default获取结果要比case快的,因为协程中运行,肯定要比主线程慢一点,而且channel赋值要时间,就那一丢丢时间就足以让default先符合条件触发
   //select {
   //case result := <-ch:
   // fmt.Println(result)
   //case <-time.After(3 * time.Second):
   // fmt.Println("爬虫爬取网站超时")
   // return
   //default:
   // fmt.Println("奇奇怪怪")
   //}

   //注意,select在获得到结果之前也会阻塞,直至有一个条件符合才会往下走
   select {
   case result := <-ch:
      fmt.Println(result)
   case <-time.After(3 * time.Second):
      fmt.Println("爬虫爬取网站超时")
      return
   }
   close(ch)
}
PREV
[面试] 开源中国面经
NEXT
[Golang] Select实现优先级并发技巧

评论(1)

发布评论
  1. zx zx

    到此一游