在这里记录一下我最近的面试(倒序排列,分公司记录,123面记录在一起)
字节跳动(2021-4-01)
- go
- gpm是如何调度的,channel是如何收发消息
- mysql
- 对数据库表设计的原则
- 三大范式
- 脏读、不可重复读
- 你们分库分表是数据量达到多少考虑分的
redis
- hashtable 如何扩容
算法&数据结构
知乎(2021-3-30)
- 操作系统
- IO密集型是用多线程还是多进程效率高些,如果是单核的CPU机器上呢
- 如果是CPU密集型下使用多线程还是多进程效率高些
- 操作系统为什么要做一些内存对齐
- 算法&数据结构
- 时间复杂度为O(n²)的排序算法,时间复杂度为O(nlogn)的排序算法
- 88. 合并两个有序数组
- 其他
- 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
- 三次握手
滴滴-出租车部门(2021-3-24)
- redis
- redis的数据结构,zset如何实现的
- 网络
- tcp 三次握手
- 序列号是什么
- https三次握手
- tcp 三次握手
- 限流算法
- 令牌桶
- 计数
- 漏桶
- 区别
- 缓存击穿方案
- 除了使用锁还有其他的吗
- 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遍历是如何做的
搜狗(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
美团(2021-3-18)
- Linux
- 机器4g,突然起了一个1g的线程,从性能角度分析一下
- LeetCode
- go
- go和Java比有什么优势
- channel为什么是线程安全的
- channel如何实现的
美餐网(2021-3-17)
- 全程围绕项目
- 让你设计一个连接池要如何设计。有什么需要注意的,用到了什么数据结构,链接超时要用什么来控制
- 分布式事务
- 如何保证数据一致性
- 如何保证消息不丢。不重复
- 如果写库之后需要通过消息队列发消息,由于网络原因或者其他原因没有发出去怎么办
- Protobuf比JSON 有哪些优势
小米(2021-3-16)
- 编程题
- 写一个接口,调用3个服务,并发调用接口,并且API超时报错,结束本次请求
- 写一个死锁SQL,并分析
- 给定一个数组,并发交替打印奇数,偶数,不能使用锁,原子操作
- go
- 有哪些情况会发生逃逸
- 栈空间为什么会不足,为什么会逃逸
探探(2021-3-16)
- 编程题
- 使用并发交替打印奇偶数、要求偶数大于奇数
- MySQL
- 事务隔离级别
- mvcc
- redo log
- redis
- zset
- go
- gpm 模型
- 结构体内存对齐
作业帮(2021-3-15)
- MySQL
- 设计高并发场景下的订单表
- SQL 统计出下单次数超过10的用户id
- 订单号的设计、为什么
- 统计购买10样商品以上的用户id
- mvcc原理
- 设计高并发场景下的订单表
- LeetCode
- redis
- zset数据结构、原理
- docker
- docker 四种网络模式
- Linux
- awk
- 零拷贝
- 其他
- 分布式事务
- 数据一致性如何处理
- 数据同步。MySQL—-es
滴滴-地图部门(2021-03-15)
- LeetCode
- go
- map为什么无序
- 传入一个slice,函数内部对他进行修改,slice改变与否
- sync.Map为什么无序
- go协程调度和系统调度有什么区别
- context
- redis
- 集群下的redis分布式锁
- redis是多线程还是单线程
- MySQL
- InnoDB和MyISAM区别
- 平时怎么优化SQL的
http
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的专属问题)
伴鱼(2021-03-10)
- leetcode
- MySQL
- 事务的隔离级别、可重复读解决了什么问题,没有解决什么问题
- 事务在执行期间看到的数据前后是一致的,MySQL是如何来保证这一点的
- b+树 和普通的平衡二叉树有什么优势
- innoDB如何实现利用快照的来避免可重复读
- go
- go 锁机制
- 如果goroutine一直占用资源。GPM模型是如何处理的
- redis
- 分布式锁
- skiplist 如何实现的
- 其他的,由于是面了跟谁学后,忘得差不多了
- 先更新缓存还是更新数据库
- 微博系统设计(整个二面就围绕这一题来设计,其中也推荐了系统设计)
百度个人云(2021-01-25)
- 计算机网络
- 在浏览器输入一个网址,数据是如何到服务端的。经历了哪些过程
- HTTPS通信步骤
- HTTPS和http区别。是如何保证安全的
- 浏览器崩溃了、是客户端还是服务端断开连接的
- client是如何实现长连接的
- redis
- redis有哪些数据结构、zset如何实现
- 为啥不选择map啥的来实现
- redis持久化机制
- 优缺点。你们项目里用的是啥,为啥要选择这样的持久化方式
- 多路复用机制
- redis有哪些数据结构、zset如何实现
- MySQL
- 主从同步原理
- 主从延迟,你怎么解决?
- 聚簇索引特点
- innodb为啥选择b+树
- Linux
- Linux 到底是怎么收发网络包的。
- ssh都机器上去了,断网了,然后连接网络还能保持连接。其中的工作原理(我遇到的为啥都是断开连接了)
- go
- string和byte是啥关系
- byte和rune区别
- 互斥锁如何实现公平
阿里高德(2021-01-25)
- 计算机网络
- 七层模型
- http在哪一层
- 七层模型
- 项目问的比价多
- MySQL(写的比较晚,忘了)
- 数据结构&算法
- 二叉树的遍历(至少3中方法实现)
- go(写的比较晚,忘了)
Boss直聘(2021-01-25)
- 计算机网路
- 三次握手
- 四次挥手
- redis
- redis有哪些数据结构、在项目中使用了哪些
- zset底层数据结构、实现
- 如何想要获取redis某个时间节点之前的数据。用啥数据结构,如何取
- 跳跃表怎么实现查找
- redis集群的实现方式、原理
- 以及细三种方式的问了好些问题
- 缓存雪崩
- 解决方案是啥
- 缓存穿透
- 解决方案是啥
- 缓存击穿
- 解决方案是啥
- Redis多线程的实现机制
- go
- map实现原理、如何实现读、写
- map扩容
- sync.map 如何保证线程安全
(amazing)
云账户
- mysql
- 事务的隔离级别
- 创建联合(k1,k2,k3),SQL语句命中k2、k3会不会走索引
- redis
- redis为什么这么快
- 什么是多路I/O复用
- redis 有哪些数据结构
- Sorted Set 如何实现的
- redis 6.0 多线程
- Redis 多线程的实现机制
- redis为什么这么快
- MySQL
- limit 偏移量的区别
- 如 下面2条SQL的区别 ``` select * from user order by id desc limit 4000000,10;
- limit 偏移量的区别
上下两个区别
select * from user order by id desc limit 0,10;
```
- 数据结构&算法
- 不同方式实现队列
- dfs遍历文件夹
- go
- Go中的http包的实现原理
- Golang 里的逃逸分析是什么
- Go中对nil的Slice和空Slice的处理
- Goroutine 如何调度?
- go内存对齐
- map 如何实现、原理
- other
- 从海量数据(int 型)里找前50的数
- 如何避免超卖(针对于项目)
最右
- 数据结构&算法
- 堆排序
- 划分为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 的高可用?
- 场景题:高并发点赞关注(参考微博)、如何设计微服务并保证数据一致性、高可用