原创

golang面试

在这里记录一下我最近的面试(倒序排列,分公司记录,123面记录在一起)

<a name="y5VwN"></a>

<a name="F1EtD"></a>

字节跳动(2021-4-01)

  • go
    • gpm是如何调度的,channel是如何收发消息
  • mysql
    • 对数据库表设计的原则
    • 三大范式
    • 脏读、不可重复读
    • 你们分库分表是数据量达到多少考虑分的
  • redis
    • hashtable 如何扩容
  • 算法&数据结构

<a name="UiXbO"></a>

知乎(2021-3-30)

  • 操作系统
    • IO密集型是用多线程还是多进程效率高些,如果是单核的CPU机器上呢
    • 如果是CPU密集型下使用多线程还是多进程效率高些
    • 操作系统为什么要做一些内存对齐
  • 算法&数据结构
  • 其他
  • MySQL
    • 场景题,主要是考针对于不同条件下建立索引的情况
SELECT a, b, c, d FROM tb
WHERE c >= 4 AND a = 3
-- 索引
() 

SELECT a, b, c, d FROM tb
WHERE c = 4
ORDER BY (a, b)
-- 索引
()
SELECT a, b, c, d FROM tb
WHERE a = 9 AND c = 4
ORDER BY (a, b)
-- 索引
()
  • b+树的特性
  • 主键索引和非主键索引区别
  • 主键索引一般选择自增会比较好,为什么
  • redis
    • 数据持久化
    • redis是怎么接收到一个命令然后就利用rdb方式给持久化(主进程收到命令后会怎么做)
    • fork一个子进程内存会拷贝一份吗
  • http
    • 三次握手

<a name="DjaHg"></a>

滴滴-出租车部门(2021-3-24)

  • redis
    • redis的数据结构,zset如何实现的
  • 网络
    • tcp 三次握手
      • 序列号是什么
    • https三次握手
  • 限流算法
    • 令牌桶
    • 计数
    • 漏桶
    • 区别
  • 缓存击穿方案
    • 除了使用锁还有其他的吗
  • go
    • go语言的并发机制
    • 对go的并发模型的理解
    • 起一个goroutine初始的一个栈空间是多大
    • 有哪些方式去控制协程的生命状态
    • context的实现、这个数据结构是并发安全的吗
    • waitGroup是如何做到所有的协程都done后,wait函数才会去执行、内部计数器对数据的加减是并发安全的吗
    • 在使用channel的时候、什么情况下会出现panic
    • 有哪些情况会panic
    • channel 应该由哪一方来关闭
    • GPM模型,P存在的意义是什么
    • 一个G如果因为阻塞后,会发生什么;等待结束之后如何唤醒
    • sync.Map 如何实现的,更新一个key的过程
    • 读写锁和互斥锁的区别
    • gin的中间件的实现
    • gin的路由匹配规则是怎么实现的、有针对于前缀树做什么优化没
    • goroutine泄露 原理以及什么场景会发生goroutine泄露
    • 对channel 的操作什么情况下会出现死锁
    • map 对key遍历是如何做的

<a name="05U4C"></a>

搜狗(2021-3-22)

  • 算法题定义一个字符串是好串,必须满足这个字符串都是有ABC组成的,并且相邻的字符串不相同 比如BCB是好串,AAC不是好串 现在给你2个好串S,T,长度相同并且都是好串。 你可以将S中的任意字符串改变成[A,B,C]其中一个,但是每一步必须满足S还是好串。求最小的改变次数,使得S变成T。 例子:S=CABC T=CBAC 答案是6 CABC-》BABC-》BCBC-》BCAC-》ACAC-》ABAC-》CBAC
  • redis
    • aof优势,rewrite了解么,是什么场景会有rewrite
    • redis 数据结构
  • MySQL
    • 从几千万表里随机查找符合范围的数据
  • 其他
    • 如何保证MySQL 和redis 数据一致性
  • go

<a name="aBh9c"></a>

美团(2021-3-18)

  • Linux
    • 机器4g,突然起了一个1g的线程,从性能角度分析一下
  • LeetCode
  • go
    • go和Java比有什么优势
    • channel为什么是线程安全的
    • channel如何实现的

<a name="b1Soh"></a>

美餐网(2021-3-17)

  • 全程围绕项目
    • 让你设计一个连接池要如何设计。有什么需要注意的,用到了什么数据结构,链接超时要用什么来控制
    • 分布式事务
    • 如何保证数据一致性
    • 如何保证消息不丢。不重复
    • 如果写库之后需要通过消息队列发消息,由于网络原因或者其他原因没有发出去怎么办
    • Protobuf比JSON 有哪些优势

<a name="ikcCF"></a>

小米(2021-3-16)

  • 编程题
    • 写一个接口,调用3个服务,并发调用接口,并且API超时报错,结束本次请求
    • 写一个死锁SQL,并分析
    • 给定一个数组,并发交替打印奇数,偶数,不能使用锁,原子操作
  • go
    • 有哪些情况会发生逃逸
    • 栈空间为什么会不足,为什么会逃逸

<a name="adw7W"></a>

探探(2021-3-16)

  • 编程题
    • 使用并发交替打印奇偶数、要求偶数大于奇数
  • MySQL
    • 事务隔离级别
    • mvcc
    • redo log
  • redis
    • zset
  • go
    • gpm 模型
    • 结构体内存对齐

<a name="6t5gC"></a>

作业帮(2021-3-15)

  • MySQL
    • 设计高并发场景下的订单表
      • SQL 统计出下单次数超过10的用户id
    • 订单号的设计、为什么
    • 统计购买10样商品以上的用户id
    • mvcc原理
  • LeetCode
  • redis
    • zset数据结构、原理
  • docker
    • docker 四种网络模式
  • Linux
    • awk
    • 零拷贝
  • 其他
    • 分布式事务
    • 数据一致性如何处理
    • 数据同步。MySQL---es

<a name="TDaMq"></a>

滴滴-地图部门(2021-03-15)

  • LeetCode
  • go
    • map为什么无序
    • 传入一个slice,函数内部对他进行修改,slice改变与否
    • sync.Map为什么无序
    • go协程调度和系统调度有什么区别
    • context
  • redis
    • 集群下的redis分布式锁
    • redis是多线程还是单线程
  • MySQL
    • InnoDB和MyISAM区别
    • 平时怎么优化SQL的
  • http
    • http2.0和1.x的区别
    • https握手过程 <a name="Sbxzu"></a><a name="5knbP"></a>跟谁学(2021-03-11)
  • leetcode
  • 编程题
    • 实现一个有序map、支持add、delete、迭代
  • go
    • java里的interface和go里的interface有什么区别
    • gpm调度
    • 起100个goroutine,其中50个sleep 10s,具体的调度过程
    • channel 优势、为什么是线程安全的
    • channel 无缓冲和有缓冲有什么区别
    • goroutine数据结构里面都存了啥字段
    • goroutine有哪些状态,如何扭转
    • 聊聊Go GC
    • go最近几个版本有什么新的变化、项目升级了吗、为什么选择升/不升
    • 为什么协程比线程轻量
    • defer在最近几个版本是如何做的性能提升
    • 并发若干个goroutine、其中一个panic怎么办
    • 了解go的内存对齐么,谈一谈
  • MySQL
    • 聊聊MySQL锁机制
    • 了解change buffer 的使用场景吗,说一说
  • 其他
    • nsq原理、实现、以及如何保证消息不丢
    • 未来的职业规划
    • 平时有学习什么技术
    • 有写自己的小项目么
    • 为什么跳槽(总感觉开发不应该问这个问题,HR的专属问题)

<a name="LR3KJ"></a>

伴鱼(2021-03-10)

  • leetcode
  • MySQL
    • 事务的隔离级别、可重复读解决了什么问题,没有解决什么问题
    • 事务在执行期间看到的数据前后是一致的,MySQL是如何来保证这一点的
    • b+树 和普通的平衡二叉树有什么优势
    • innoDB如何实现利用快照的来避免可重复读
  • go
    • go 锁机制
    • 如果goroutine一直占用资源。GPM模型是如何处理的
  • redis
    • 分布式锁
    • skiplist 如何实现的
  • 其他的,由于是面了跟谁学后,忘得差不多了
    • 先更新缓存还是更新数据库
  • 微博系统设计(整个二面就围绕这一题来设计,其中也推荐了系统设计

<a name="Lr1ZA"></a>

百度个人云(2021-01-25)

  • 计算机网络
    • 在浏览器输入一个网址,数据是如何到服务端的。经历了哪些过程
    • HTTPS通信步骤
    • HTTPS和http区别。是如何保证安全的
    • 浏览器崩溃了、是客户端还是服务端断开连接的
    • client是如何实现长连接的
  • redis
    • redis有哪些数据结构、zset如何实现
      • 为啥不选择map啥的来实现
    • redis持久化机制
      • 优缺点。你们项目里用的是啥,为啥要选择这样的持久化方式
    • 多路复用机制
  • MySQL
    • 主从同步原理
    • 主从延迟,你怎么解决?
    • 聚簇索引特点
    • innodb为啥选择b+树
  • Linux
    • Linux 到底是怎么收发网络包的。
    • ssh都机器上去了,断网了,然后连接网络还能保持连接。其中的工作原理(我遇到的为啥都是断开连接了)
  • go
    • string和byte是啥关系
    • byte和rune区别
    • 互斥锁如何实现公平

<a name="8G4fg"></a>

阿里高德(2021-01-25)

  • 计算机网络
    • 七层模型
      • http在哪一层
  • 项目问的比价多
  • MySQL(写的比较晚,忘了)
  • 数据结构&算法
    • 二叉树的遍历(至少3中方法实现)
  • go(写的比较晚,忘了)

<a name="cZ4M7"></a>

Boss直聘(2021-01-25)

  • 计算机网路
    • 三次握手
    • 四次挥手
  • redis
    • redis有哪些数据结构、在项目中使用了哪些
    • zset底层数据结构、实现
    • 如何想要获取redis某个时间节点之前的数据。用啥数据结构,如何取
    • 跳跃表怎么实现查找
    • redis集群的实现方式、原理
      • 以及细三种方式的问了好些问题
    • 缓存雪崩
      • 解决方案是啥
    • 缓存穿透
      • 解决方案是啥
    • 缓存击穿
      • 解决方案是啥
    • Redis多线程的实现机制
  • go
    • map实现原理、如何实现读、写
    • map扩容
    • sync.map 如何保证线程安全

(amazing)

<a name="c3lIo"></a>

云账户

  • mysqlselect * from user order by id desc limit 4000000,10; # 上下两个区别 select * from user order by id desc limit 0,10;
    • 事务的隔离级别
    • 创建联合(k1,k2,k3),SQL语句命中k2、k3会不会走索引
  • redis
    • redis为什么这么快
      • 什么是多路I/O复用
    • redis 有哪些数据结构
      • Sorted Set 如何实现的
    • redis 6.0 多线程
      • Redis 多线程的实现机制
  • MySQL
    • limit 偏移量的区别
      • 如 下面2条SQL的区别
  • 数据结构&算法
    • 不同方式实现队列
    • dfs遍历文件夹
  • go
    • Go中的http包的实现原理
    • Golang 里的逃逸分析是什么
    • Go中对nil的Slice和空Slice的处理
    • Goroutine 如何调度?
    • go内存对齐
    • map 如何实现、原理
  • other
    • 从海量数据(int 型)里找前50的数
    • 如何避免超卖(针对于项目)

<a name="sYzJ9"></a>

最右

  • 数据结构&算法
    • 堆排序
    • 划分为k个相等的子集(LeetCode 698题)
  • redis
    • 多路I/O复用
  • MySQL
    • mvcc如何实现
    • 事务的隔离级别
    • MySQL数据库cpu飙升的话,要怎么处理
  • go
    • 逃逸分析
    • hello Goroutine的执行过程
    • Go语言的栈空间管理是怎么样的
    • Goroutine和线程的区别
    • sync.map是如何实现的
    • channel的使用场景
    • context 超时有用么
  • 计算机网路
    • http 2.0 (以及3.0)和1.0 区别
    • 描述dns解析
  • other
    • rpc用啥协议序列化
    • 如何保证 MQ 的高可用?
    • 场景题:高并发点赞关注(参考微博)、如何设计微服务并保证数据一致性、高可用

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Golang面试题

    最近在很多地方看到了golang的面试题,看到了很多人对Golang的面试题心存恐惧,也是为了复习基础,我把解题的过程总结下来。 面试题 写出下面代码输出内容。...

    李海彬
  • 某公司golang面试题

    这两段程序的区别就一个地方,一个是数组,一个是slice 考察的点有两个,一个是数组和slice的区别,另外就是range的值传递 输出结果大家可以自己运行...

    anakinsun
  • golang面试题:怎么避免内存逃逸?

    在runtime/stubs.go:133有个函数叫noescape。noescape可以在逃逸分析中隐藏一个指针。让这个指针在逃逸分析中不会被检测为逃逸。

    9号同学
  • 高频golang面试题:简单聊聊内存逃逸?

    golang程序变量会携带有一组校验数据,用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验,它就可以在栈上分配。否则就说它 逃逸 了,必须在...

    9号同学
  • golang面试题:能说说uintptr和unsafe.Pointer的区别吗?

    9号同学
  • Golang面试遇到的问题--控制goroutine的并发数量

    版权声明:原创勿转

    anakinsun
  • golang面试题:拷贝大切片一定比小切片代价大吗?

    并不是,所有切片的大小相同;三个字段(一个 uintptr,两个int)。切片中的第一个字是指向切片底层数组的指针,这是切片的存储空间,第二个字段是切片的长度,...

    9号同学
  • golang面试题:翻转含有中文、数字、英文字母的字符串

    9号同学
  • golang面试题:字符串转成byte数组,会发生内存拷贝吗?

    字符串转成切片,会产生拷贝。严格来说,只要是发生类型强转都会发生内存拷贝。那么问题来了。 频繁的内存拷贝操作听起来对性能不大友好。有没有什么办法可以在字符串转成...

    9号同学

扫码关注云+社区

领取腾讯云代金券