前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang面试

golang面试

原创
作者头像
Michel_Rolle
修改2021-04-19 10:51:22
1.7K0
修改2021-04-19 10:51:22
举报
文章被收录于专栏:golang分享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
    • 场景题,主要是考针对于不同条件下建立索引的情况
代码语言:txt
复制
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 的高可用?
    • 场景题:高并发点赞关注(参考微博)、如何设计微服务并保证数据一致性、高可用

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 字节跳动(2021-4-01)
  • 知乎(2021-3-30)
  • 滴滴-出租车部门(2021-3-24)
  • 搜狗(2021-3-22)
  • 美团(2021-3-18)
  • 美餐网(2021-3-17)
  • 小米(2021-3-16)
  • 探探(2021-3-16)
  • 作业帮(2021-3-15)
  • 滴滴-地图部门(2021-03-15)
  • 伴鱼(2021-03-10)
  • 百度个人云(2021-01-25)
  • 阿里高德(2021-01-25)
  • Boss直聘(2021-01-25)
  • 云账户
  • 最右
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档