概述

这篇博客记录面试

3-7 上午 谷露软件

这家岗位是DevOps

算法

  • reverse linkedList
  • two sum

golang 相关

  • GC
  • GMP
  • Go如何保证线程安全
  • CAS

k8s

  • k8s的组件
  • 通过最近几天的学习你对k8s有什么了解
  • MySQL主从复制

项目

  • redis的应用
  • 排行榜、效率工具

今天下午其实还去谷露做了二面,由于体验不是很好,也没问技术相关的问题,主要是问了未来的计划,所以这里就不记录了

3-7 下午 星宙之形

一面

  • go channel在工作中用过嘛

    工作中确实没用过

  • 那你自己对channel有了解嘛

    有一点了解

  • channel的使用场景

    控制并发、做消息队列

  • 为什么channel可以控制并发

    channel 内部有加了互斥锁

  • channel的类型以及不同类型的使用场景

    有缓存和无缓存. 有缓存的channel可以拿来当队列使用,无缓存的当时没答上来,在面试官的引导下说了一种。(其实就是前面提到的控制并发)比如可以控制不同的goroutine的执行。

  • go里面的切片用过吧?那你说一下如果定义了一个切片,在方法内部对这个切片做了一些修改的操作,方法结束后这个切片会跟着改变吗?

    用过,不一定会改变,如果对切片做了扩容操作那么就会创建一个新的切片对象,这样一来就和之前切片不一样了,如果没有做扩容操作的话,原来的切片就会跟着改变。

  • 那我怎么可以拿到改变后的切片呢?不管有没有扩容

    可以在传参的时候传递切片的指针。

  • go的map是线程不安全的,并发时会加锁;如果有个map数据会被并发访问,如果加了锁会导致性能下降,如何解决这个问题呢?

    这个没什么思路,面试官也引导我向粒度的问题靠近,最后的解决办法就是降低锁的粒度,可以给这个map拆分成多个map,把比较热点的kv提出来放到单独的一个map里面。

  • MySQL的索引是什么结构,为什么要用这个结构?

    B+树,减少硬盘的寻道时间,提高搜索速度

  • B+树和二叉树有什么区别

    二叉树每个节点只有两个子节点,B+树可以有多个节点

  • B+树里面存了什么?聚簇索引是什么,联合索引存了什么?通过联合索引怎么找到数据的?

    B+树的数据存在叶子节点上,聚簇索引是MySQL里的主键索引,聚簇索引的B+树存了表每一列的主键和对应的数据。联合索引也是一个B+树,保存了该索引键和对应列的主键,这一块叫做回表。

  • 为什么你们要用gRPC,直接用HTTP不行吗?

    gRPC是远程过程调用,可以调其他服务的方法,另外gRPC用了HTTP2的协议,有HTTP2的一些特性,比如长连接,可以在请求数据的时候保存请求头等信息,节省传输资源,提高传输效率。同时有ProtoBuf这个序列化协议加持,可以对数据进行高效的处理。

  • 为什么用ProtoBuf,那么麻烦还需要定义一堆规则,不同的语言也要用不同的序列化工具,多不方便,为什么不直接用JSON

    ProtoBuf主要是砍掉了传输数据中的key,用提前定义好的索引1、2、3、4……来定位value,因此需要传输的数据比JSON少,也不需要传花括号这些内容。像go里面的int64类型,也做了一些特殊处理,大小并不是固定的,所以也可以节约资源。

  • Redis可以拿来做什么

    消息队列,缓存

  • 消息队列怎么实现

    说了半天,其实可以用list实现

二面

二面主要聊了项目,也涉及了一些一面中问到的问题,主要是考察我符不符合他们团队的风格,我个人感觉我还是可以的,我也很喜欢他们的风格,和二面面试官聊完之后我就贼想来这家公司了。