万字长文 2024 最全 Go 面经汇总
本文主要是分享真实的面经,关于这些问题的详解,我们只整理了一部分,文末有他们的详解跳转链接,如果需要可以点进去看看。
对于我们没有整理的面经详解,我建议大家可以使用 AI,基于这些真实的面经去获取对应的答案。
如果你需要更多的面经,也可以私信我联系我。
腾讯一面
协程池的作用?
内存逃逸分析?
go 的内存回收什么条件会触发? go 的 GC 能够手动触发吗?
channel 的底层实现? 有缓冲的,无缓冲的 channel, 如果管道已经关闭了, 读取会不会发生错误?
切片使用的时候需要注意什么?
go 中的参数传递是值传递还是引用传递?
defer 的执行顺序?
100G 的文件, 统计出所有英文字母, 按照字母表顺序输出
linux 如何分割文件?
接口性能如何优化?
什么情况会全表扫描?
主丛同步的原理? mysql 还有什么相关的 log 文件?
分布式锁的原理?
腾讯二面
项目拷打 15 分钟
Kafka 的消息丢失和消息重复消费。
Kafka 和 Rabbitmq 的区别在哪?(架构、推和拉)
拉的模式有什么好处(控制消费速度)
使用分布式锁的过程中应用挂了?
优雅启停+defer
使用过期时间+自动续期
对象存储和文件存储的主要区别是什么?
分片上传是怎么实现的(文件合并 hash 一致性校验,引出文件秒传)
邮箱验证码功能怎么实现的。(redis+邮箱组件)
jwt 的格式。加密算法、内容、过期时间
讲一下 defer 的原理
讲一下 map 的底层结构
map 中 hash 冲突怎么解决(链表、红黑树)
讲一下 go 性能调优的案例(pprof,线程日志)
通过线程日志延伸出,怎么看一个线程在线程日志里是卡在循环还是事件等待?
线程日志上面会有标记。
讲一下 mysql 的事务隔离级别?
解释一下什么是可重复读?
事务实现的底层原理?
Redis 持久化机制(RDB,AOF)
为什么持久化的时候是 fork 子进程处理
讲一下 docker 实现容器的基本原理
用过其他容器运行时吗
K8s 有哪些组件?
腾讯一面(校招)
map 怎么去做并发安全
外层的协程能捕获子协程的 panic 吗?
panic 都会被捕获吗?哪些 panic 不会捕获?
slice 和数组的区别?底层结构?
go 哪些内置类型是并发安全的?
go 的结构体可以嵌套组合吗?
两个结构体可以等值比较吗?
你如何理解 interface 类型
1.18 版本后 interface 有什么增强?
interface 可以进行等值比较吗?
说说逃逸分析
channel 有缓冲和无缓冲的区别
map 并发访问会怎么样?这个异常可以捕获吗?
GMP 模型
GMP 模型中什么时候把 G 放全局队列?
go 的 gc
gc 扫描是并发的吗?
gc 中的根对象是什么?
项目中 etcd 用来干什么的?
mysql 索引 B+T
索引的优缺点
redis 用来做什么的?
用户信息怎么存的?都走缓存吗?
redis 过期淘汰策略
腾讯二面(校招)
会什么语言?
tcp 和 udp 的本质区别
tcp 可靠通信怎么实现的
说一说拥塞控制
滑动窗口的作用
什么是粘包,怎么解决
堆和栈有什么区别
进程的进程空间是怎么样的?
进程,线程,协程的区别
链表额线性表的区别
有序双向链表如何高效查询?
kafka 如何实现高吞吐的?
介绍最近的项目
缓存击穿,雪崩,穿透
腾讯三面(校招)
项目中比较有挑战性的事?
什么是伪随机?
c++里面的继承和虚函数,抽象封装,和 go 的 interface 有什么区别?
为什么 go 不是传统意义上的面向对象语言?
c++多重继承可能导致循环继承,go 用 interface 实现有这种问题吗?
单例模式?什么情况用饿汉模式,什么时候用懒汉模式?
表的主键用什么类型的字段?用字符串不可以吗?
消息队列是什么?
有了解过其他消息队列吗?
kafka 你们是怎么部署的呢?
能说一说你们怎么使用 devops 的吗?
不用 kafka 可以吗?
ES 是干什么的?
前后端通信用的什么协议?
grpc 相比 http 的优势在什么地方呢?
腾讯 QQ 一面
自我介绍
算法:20 有效括号,240 搜索二维矩阵Ⅱ
项目在运行了吗?数据表的设计?简单画一下
数据库外键关联不同表吗?
抢单的设计是怎么做的?
Redis 里缓存了所有悬赏的订单?
怎样防止多人抢单?没有很理解递减是怎么实现的
悬赏下单的用户?
为什么有订单数量的概念?
如果 Redis 抢单成功但是后面的逻辑失败怎么办?即发消息队列的失败了会怎么样?会出现什么问题?
上述问题有没有什么解决办法?
直接用 Mysql 实现多人抢单可以吗?
使用 Mysql 的话有没有不通过数量控制的方案?
上个问题相对更优雅的解决方案,如根据订单状态
QPS 提升 3 倍,为什么只提升了 3 倍?所有服务搭载在个人机上,提升比较小,这样测试是不合理的
点赞是怎么设计的?点赞的底层逻辑怎么存的?
评论怎么设计的?
评论可以折叠吗?只有一个层级?
如果你考虑针对评论进行回复的话,他可能的数据表结构是怎样的?
设计完成以后怎么查这些不同层级的评论?
所以其实实现不同层级的评论只需要一个表就行了,只不过子评论要记录其对应的主评论的 id
Go 了解的多不多?
Java 的集合大概讲一讲
ArrayList 的底层怎么实现,数据结构怎么样,扩容策略是怎样的
HashMap 的底层实现呢,Hash 冲突怎么处理的?扩容策略?加载因子多大?为什么是 0.75
Java 的垃圾收集机制
新生代老年代是怎么划分的?
网络相关的 HTTP 了解的不多吗?Get 和 Post 的区别?
登录请求的话用什么请求?用 Get 会有什么问题
从浏览器输入个网址到显示页面的过程
TCP 和 UDP 的区别?
操作系统相关的了解吗?
Redis 常用的数据结构有哪些?如果要实现一个排行榜,用什么数据结构?
如果实现分布式锁呢?什么命令?setnx
Redis 实现简易的布隆过滤器是怎么实现的?
Redis 常见的穿透击穿雪崩问题?
击穿的解决方案
逻辑过期的话怎么更新呢?逻辑过期的时间点有很多请求过来,是不是都会去数据库请求更新数据?
Redis 的过期淘汰策略
Redis 过期数据的删除策略?
Mysql 的索引通常是怎么划分的?从数据结构上可以划分为哪些索引?是指这些索引数据结构不一样,比如 InnoDB 的?MyISAM 的?哈希的?
聚簇索引和非聚簇索引的区别?
数据和索引放一起的优点
什么是回表?
Mysql 事务的隔离级别
未提交读有什么问题?
什么是不可重复读?什么是幻读?
反问
腾讯 QQ 二面(电话面)
自我介绍
Golang 协程与线程的区别
专业问题
中间漏了几个问题
Redis 缓存击穿解决方案在项目中是否用过,用在什么地方
检查到 key 过期了,都请求数据库不就击穿了吗
怎么加锁
这个锁放在本地吗?内存里面吗?
MySQL 支持的最大并发数
Redis 支持的最大并发数
算法:文件里面有 20 亿个整数,找到前 1000 个最大的,要求时间复杂度尽可能低
上述算法时间复杂度多少
项目背景
Jmter 压测的哪个接口
QPS
具体是怎么优化的呢
压测后 qps 提升了 3 倍,瓶颈在哪个地方,为什么不能再多了
阿里云用的是 Cos 服务是吧
订单超卖是什么意思
项目大概多少人参与
这个服务有几个系统
这个项目是用来给自己学校的吗?还是各个学校通用的项目?
这个项目打通了学校里面的账号体系了吗?
反问
腾讯云智
一面
自我介绍
第一个项目是实习项目吗
你在里面负责的部分
用户悬赏下单的业务流程讲一下
RabbitMQ 写库失败了会怎么处理
Redis 的数据与数据库里的数据是怎么保持一致的
什么时候写库什么时候写 Redis,数据库中有库存吗
Redis 是在哪部署的
Redis 用的哪种数据类型,项目中 Redis 哪些地方用了
SpringCache 依赖 Redis,那用的是什么数据类型
登录注册是怎么实现的
什么是 JWT
鉴权是怎么做的
退出登录是怎么实现的
简易短视频都负责什么?登录注册是怎么实现的
TCP 的三次握手和四次挥手的过程
Time wait 的作用是什么
断开连接是客户端发起还是服务端发起?服务端可以断开吗?
HTTP 和 HTTPS 的区别
HTTPS 是怎么加密的了解吗
Session,Cookie,token 的区别
Session 是在哪存的
进程线程协程这三个的区别
CPU 调度是哪个
数据库事务的隔离级别
什么是幻读
MySQL 主键索引和普通索引的区别
怎么避免回表操作
索引失效的场景
B 树和 B+树的区别
如何实现一个 HashMap(HashMap 的底层结构以及一些扩容操作)
HashMap 和 ConcurrentHashMap 的区别
深拷贝和浅拷贝的区别
说一说使用逻辑过期解决缓存击穿问题
key 逻辑过期后,与数据库的一致性怎么保证
缓存穿透问题及解决方案
ThreadLocal 实现线程信息隔离说一下
用户登录以后,再请求其他接口,这时是同一个线程吗?
不把用户 id 放到 threadlocal 可以吗?
算法题
二面
自我介绍
挑一个项目聊一下
第一版方案为什么会超卖呢
Redis 中的库存还没有递减完成,出现了比如 OOM 的情况,数据库怎么获得已经抢成功的数据?
数据库和缓存数据一致性的问题
如果数据库更新完成了,但是删除缓存时没有成功,这时会怎么办
项目有实际需求吗?还是找的课题
RabbitMQ 在项目里是干嘛用的?
抢单的人怎么知道要查哪个 key 呢?
具体压测的数据
简易短视频是怎样的项目
反问
腾讯
某不知名组一面(电话面)
简单的自我介绍
Java 判断相等使用==和使用 equals 的区别
Java 里面接口和抽象类的区别,属性、方法、继承限制等方面回答
详细介绍下项目用户注册和登录的流程
密码存到数据库中是用的哪种方式进行的加密
不加盐的问题
登录成功以后返回的什么数据
返回的 token 是怎么生成的
token 里面包含了什么信息
客户端和后台通信走什么协议
对于 HTTP 协议有多少了解
Redis 提供了哪些基础的数据类型
这些数据类型底层是基于什么数据结构实现的
使用 Redis 做性能优化具体是怎么做的
对 Linux 操作系统熟悉吗
项目后台不是部署在 Linux 上的吗
反问
二面
自我介绍
对面介绍自己的组,问可以接受 Go 语言吗?
算法:53 最大子数组和,239 滑动窗口最大值,136 只出现一次的数字
进程和线程是怎么理解的?
协程是什么意思?这三者对比一下
在设计程序的时候如何抉择呢?比如应该用多进程的方式还是单进程多线程的方式?
线程池中的核心参数
线程池的执行流程
开发过程中用过线程池吗?线程池的这几个参数是如何确定的?
为什么是 n+1 和 2n 和?
你的项目你认为是 CPU 密集型还是 IO 密集型
项目 v2 要上线了,项目 v1 中还有任务在线程池中,这个时候要怎么办呢?【回答的 shutdown 和 shutdownNow 的区别,使用 shutdown,等待任务队列里的任务执行完再关闭 v1 版本的项目】
线程的超时时间设置
你的项目的请求上限是多少?上限多少是右哪些因素决定的?
springBoot 可以调吗,让他的上限多一些
Java 中的反射解决的问题?使用的场景?
C/C++不支持反射,了解过为什么有些语言持支反射有些不支持反射吗?有什么编程语言的特性决定了他可以用反射吗?
Java 中如何判断一个对象可以被回收了?
判断对象是不是被引用标记了,扫一遍的时间可能会非常长,如何来优化它或者现有的机制是如何做的?
如何入手 MySQL 的优化?看 Explain 的什么内容?
索引的底层数据结构是什么样子?
B+树为什么比较合适?为什么不用二叉树?红黑树?B 树?
MySQL 里开启了两个事务,第一个事务插入一条记录并返回了 id,此时这个事务还没有提交,第二个事务可以查询到 id 为 2 的记录吗?什么隔离级别可以查到,什么隔离级别查不到?
Redis 是单线程的为什么比较快?【内存,多线程切换,IO 多路复用,Redis 的数据结构】
怎么理解 IO 多路复用?相对于什么 IO 多路复用性能更高
git 的合并的命令?git merge 和 git rebase 用过吗?
假设一个场景:我合入了一个版本,其他同学在之后也合入了三四个版本,这个时候发现我合入的版本有 bug,需要把这个撤回,要怎么做呢?
反问
腾讯音乐
(一)开场
面试官介绍岗位
岗位为腾讯音乐 - 全民 K 歌 - 国际版 - 直播歌房后台研发工程师,主要负责直播相关功能,开发语言为 Go 和 C++。
关于求职者基本情况
要求 5 分钟以内的自我介绍。
被问到所在公司技术团队裁撤后为何会留下自己。
岗位 base 深圳能否接受。
(二)项目相关
系统重构 - 数据迁移项目
微服务相关
如何理解微服务,为什么微服务能提升系统可拓展性。
微服务相比于单体服务的缺点。
服务间通信成本指的是什么,成本体现在哪。
数据库迁移原因与成本评估
把数据库从 MongoDB 迁移到 MySQL 的原因。
如何评估迁移异构数据库(MongoDB 到 MySQL)的成本,是否仅考虑成熟度和被接受程度,因为迁移涉及数据同步工作量巨大。
技术选型相关
如果采用最终一致性方案,MySQL 支持事务而 MongoDB 不支持事务,有什么原因不使用最终一致性方案。
数据同步与异常处理
迁移过程中数据同步怎么做(新数据库写 MySQL,写脚本迁移 Mongo 数据到 MySQL)。
业务要读写新旧数据时怎么办。
迁移比较暴力,如何发现数据异常,异构数据库迁移时如何保证每条数据正常迁移到 MySQL。
唯一键场景下(Mongo 已有数据,切换到 MySQL 写时可能重复写入)的处理。
优化服务器项目
分布式缓存实现
优化服务器引入分布式缓存技术(具体是 Redis),如何实现的。
缓存与数据库一致性
如何保证 Redis 缓存和数据库的数据一致性(回答缓存先写数据库后写存在问题)。
写缓存成功数据库失败时缓存是否为脏数据。
先写数据库成功再写 Redis,缓存更新失败怎么办,如何知道何时将数据库数据同步到缓存及同步的做法。
缓存是否有过期时间机制,有没有不过期一直生效的情况,有过期的话多久过期。
缓存同时过期会有什么问题以及如何解决。
数据抓取业务项目
Kafka 相关
Kafka 在业务中的角色。
业务为什么要经过 Kafka 这一层,账号量有多大。
定时任务可分散执行时间,Kafka 在这种情况下削峰意义不大,是否有其他考虑使用 Kafka 的因素。
防止账号丢失已有确认机制,当作下游处理失败重新触发即可,为何还需要 Kafka。
抖音微信小游戏归因业务项目
Token 缓存相关
微信小游戏的 token 存于 sync.map(服务内存),为何使用服务内存而不使用 Redis 或其他外部缓存方案。
用户量相关,当有一定数量实例和用户量时这种方案是否有缺陷(此处存在理解偏差导致回答失误)。
(三)Go 和 MySQL
MySQL 中索引如何实现,为什么 MySQL 里不使用 B 树。
切片如何实现
Go 里并发读写 map 会出现问题,如何解决
Go 里的 sort 排序如何实现
协程和线程的区别,线程开销大的原因,协程有上下文切换为何线程消耗更多 CPU 资源
(四)算法与反问
算法手撕
反问
腾讯互娱 一面/Go
Go 的接口作用,用处,实现
空 struct 用途,会不会分配内存
Go 原生支持默认参数或可选参数吗,如何实现
Go defer 执行顺序
协程,协程间信息如何同步
Go GMP
性能开销大原因
GM
GMP
go 生成一个协程,此时放在 P 中还是 M 中
G 阻塞,M、P 如何
操作系统中大端编码、小端编码
TCP、UDP
三次握手、四次挥手
为什么挥手是四次,会不会合并
流量控制
Redis 项目中使用(主数据库还是缓存)
Redis 与 MySQL 数据如何同步
MySQL 索引建立原则
Explain,字段
Redis 持久化方式
Redis 过期删除策略
Redis 高可用设计
主从复制方式,模式
kafka 业务使用
Redis 常用数据结构
zset 使用场景,具体实现
部署方式,k8s 部署(相关概念)
Go 性能优化方式
请求耗时过长,有无使用到链路观测
单链表判断有没有环
玩家积分排序 topN 实现算法
项目中遇到的困难较高的场景
微服务 r 如何理解,有何问题
服务端崩溃检测
腾讯外包 /后端开发/一面
自我介绍
go 开发几年(1 年半)
熟悉到什么程度(增删改查不是问题)
map 是否安全(不安全)
为什么不安全
slice 的底层结构
apendslice 会安全吗
automatic 有用过(用过+1-1)
说一下什么是原子性(要么成功要么失败)
怎么做有一个有序的排序(结构里搞个切片,然后用 sort 排序)
mysql 主从同步机制(不会)
redis 常用数据结构(string、list、hash、set、zset、bitmap)
有序列表的底层结构(不会,跳表)
常用的索引数据结构(哈希、b+树、二叉树)
微服务的服务发现(客户端服务、服务端服务)
怎么感知服务集群的变化(服务注册中心、轮询服务健康、监控系统)
注册中心如何感知服务的变化(心跳推送?触发机制之类的)
会不会 k8s(不会)
字节跳动
介绍一下业务表的字段
定时任务刷新字段, 是怎么实现的?
分布式锁? 分布式死锁如何解决? 看门狗机制? 如何避免当前线程加的锁, 被其它线程解锁?
乐观锁和悲观锁的区别? 写多读少的情况, 应该使用乐观锁还是悲观锁?
分布式场景下, 如何实现乐观锁?
kafka 的幂等性? 如何避免消息被重复消费?
两个线程, 同时向 mysql 中插入一条数据?
kafka 如何保证消息不丢失
sql 优化场景:
该语句为什么查询慢? 有什么优化思路?
算法题: 子集
字节一面(技术)
make 和 new 的区别?
mutex 锁有几种模式?
讲一下 GMP 调度模型
两道语法纠错题(牛客上可以多刷一下)并解释为什么
一道算法爬楼梯
一道编程题:有 100 个并发线程,需要控制最多只有 10 个执行(有缓冲 channel 实现)并解释思路
知道哪些设计者模式?
字节二面(技术+人事)
技术:
讲一下一个系统访问的整个链路过程
K8s 有哪些组件?
怎么把 node 里的 pod 暴露给外面使用?
我对监控的理解,怎么判断一个系统是否已经挂调了?
如果让你对系统进行一个巡检,你会怎么做?
举例数据库巡检
用过云产品吗?讲一下你对公有云的理解
用过 OPEN AI 吗?你一般怎么使用?
人事:
从技术上和工作上上一家公司对你有什么成长?
在工作中和技术上学到哪些技能?举例说明
离职原因,未来职业规划
字节
自我介绍
选择一个项目或者需求详细介绍一下
代码题,输出什么内容
tcp 拥塞控制算法
mvcc 底层实现原理
在有些实际生产中会将默认隔离级别调整至读提交,为什么,有什么好处
mysql 怎么实现乐观锁和悲观锁
一条 sql 语句,匹配到了一条语句,会加什么锁,锁表还是锁行
es 里面是怎么实现分页的,分页有哪几种方式
算法题 力扣 42 接雨水
美团 一面
自我介绍
leetcode141 环形链表,判断是否有环路
延申 leetcode142 环形链表 2,找到入口位置
判断一个 sql(左右模糊查询)能否命中索引
为什么左右模糊不能命中索引
如何优化这个 sql(左右模糊查询)
全文索引底层怎么实现的
建立分词后,如何进行快速的模糊检索
分词用的什么数据结构
跳表的时间复杂度,哈希表呢
哈希表有什么问题
说一下 MySQL 的索引
什么是聚簇索引、非聚簇索引
事务隔离级别
InnoDB 如何实现可重复读
死锁是什么,如何解决死锁
拷打项目
你觉得科研中什么能力比较重要
美团 二面
自我介绍
拷打项目
socket、TCP/IP 的关系
输入 url 的到浏览器显示网页的过程
反问
美团
Go 中 Map 的数据结构?扩容机制?key 为什么是无序的?
简述-下 rune 类型
什么是协程泄露?
select 底层数据结构和一些特性?
对已经关闭的的 chan 进行读写,会怎么样?为什么?
除了加 Mutex 锁以外还有哪些方式安全读写共享变量?
互斥锁正常模式和饥饿模式的区别 ?
原子操作和锁的区别 ?
一条 select 语句的执行流程?
CHAR 和 VARCHAR 的区别?
MYISAM 和 INNODB 的不同?
binlog 的工作模式有哪些?
持久化机制?各自的优缺点?
怎么理解 Redis 事务?
美团
自我介绍
项目做完了吗?背景是什么?项目初期的背景调研是怎么做的?现在这个系统做到哪一步了?
用户下单用户派送的优劣了解过吗?怎么管理?
项目里面遇到的最大的难题是什么?为什么?
为什么使用乐观锁?你了解乐观锁的使用场景和实现逻辑吗?
乐观锁怎么实现的你了解吗?
了解悲观锁吗?
最开始有没有考虑乐观锁的适用场景和悲观锁的适用场景?
乐观锁会不会导致频繁的冲突啊?这种情况下和悲观锁谁的性能更好一些呢?
关于 Redis 的递减特性你了解哪些?
关于 Redis 的指令还用到过其他哪些呢?
setnx 的原理你知道吗?
有个场景你了解吗:锁获取后程序退出了,这样锁永远不会释放,导致死锁
看你简历里说比较了解集合,对集合的了解简单说一下
怎样判断内存是否需要回收?(对象死亡的判断方法?)
可达性分析是如何对对象进行标记的?三色标记法了解吗?
垃圾回收的过程(针对某一个具体的垃圾收集器 CMS 或 G1)
清除的过程呢?
标记清除算法的优点和缺点?
CMS 标记阶段比较长,如果产生了过多的浮动垃圾,有可能会出现回收赶不上分配的情况,从而导致 GC 失败,这种要怎么解决?
CMS 和 G1 的比对了解吗?为什么废除了 CMS?
G1 怎么做到指定具体的垃圾清除时间的?
线程的生命周期你了解吗?
每个状态之间怎么流转的你了解吗?
饿了么
一面
自我介绍
Java 面向对象的三个特性,什么是多态
双亲委派机制
HashMap 在 JDK1.7 以前有线程不安全,怎么个情况
保证线程安全用什么 Map
ConcurrentHashMap 是怎样的
线程池用过吗?核心参数以及有啥作用
使用线程池有什么好处
悲观锁和乐观锁是怎么样子的
Java 中怎么实现悲观锁和乐观锁
HTTP 和 HTTPS 的区别,加密过程是怎样的
TCP 的粘包是怎样的现象
Cookie 和 session 的区别
用户登录之后怎么找到对应的 Session 的呢
两个项目哪个有挑战一点,挑一个讲一讲
平时做项目或科研会遇到什么困难,遇到困难一般自己解决吗
最近有了解一些新的技术或者看一些技术书籍之类的吗
算法题:反转链表
其他的 offer
之后有往上海发展的打算吗
反问
阿里巴巴
数字零售技术部-ERP 技术一面(电话面)
自我介绍
项目背景?
你觉得项目难点是哪些?
第一版是怎么实现的?为什么会出现超卖问题?
记录抢单结果的表是怎么设计的?
这张表的索引和其他的约束是怎么做的?
乐观锁为什么不是加在抢单关系表而是在订单表里的?
你现在数据库的设计上似乎有些问题
你们的订单允许取消吗?
如果要取消的话应该怎么设计呢?
简易短视频做了哪些东西
用户登录的处理流程是怎么个样子
接收登录请求是 HTTP 吗
HTTP 里面登录的状态保持是怎么做的?
怎么判断 JWT 的合法性
JWT 里面保持了哪些东西?数据结构大概是什么样子?
JWT 和普通的 Session 的方式有什么区别?
session 的方式了解过吗?
使用 JWT 要实现一个状态只能一个设备登录,这应该怎么做呢?
怎么设置 JWT 的校验不通过呢?
JWT 对于登录数量有要求的就很痛苦
Java 的双亲委派,为什么要这么设计呢?
类如果重复加载会有什么问题呢?
有遇到过非双亲委派模型的场景吗?
类加载的过程一般会做哪些事情?每一步具体都在做些什么呢?
对 JVM 的调优有了解过吗?
说说你对 Redis 的了解
bitmap 是个什么样的东西
项目里的 Redis 是怎么用的?
抢单为什么会有库存数量
使用 Redis 防止超卖的流程是怎样的,会不会有并发的问题?
递减是怎么操作的?
这样会不会有问题,递减完成时的并发判断库存大小的时候出问题,因为递减和判断不是原子性的
ThreadLocal 的作用
什么样的情况下会使用 ThreadLocal?
后面怎么使用的?
这么设计(使用 ThreadLocal)的原因?目前来说 ThreadLocal 是能不用就不用的
内部起个线程池,这时能拿到 ThreadLocal 的内容吗?
SpringCache 和 Redis 有什么区别?(考虑业务上的合理性)
MySQL 有哪些储存引擎了解吗?有什么区别
聚簇索引和非聚簇索引有什么区别?
回表的优化了解过吗?
为什么不要使用 select * 呢?
没有被索引覆盖是什么?
什么是索引下推
反问
二面(电话面)
自我介绍
这里面比较有挑战的是哪个系统
在 Redis 里怎么做库存的扣减
怎么保证是不超卖的呢
面试官举了个例子表示对 Redis 递减防止超卖的不理解
HashMap 底层是什么数据结构组成的
红黑树有什么好处
28 个元素放到 HashMap 里面,那么 HashMap 初始化的容量为多少比较好
初始化了一个固定线程数的线程池,线程数是 5 个,把 6 个任务扔进去,线程池怎么处理
MySQL 有个表,里面四个字段有 abc 三个字段,d 是主键,我要查询 ab,条件是 bc,这时怎么设计索引
什么是回表
假设还是这个表,数据量很大,这时要做分页,每页 100 条,你怎么设计这个查询语句
子查询怎么设计
比如要查第 10000 页,你会怎么写这个 sql
用过 limit 查询吗
项目里 Redis 防止超卖的方案,Redis 就类似一个锁了
解释缓存穿透和缓存雪崩
上述情况的解决方案
刷新视频时系统会推荐 20 条用户没看过的视频,这时怎么设计会让性能更优呢
考虑位图或者布隆过滤器,使用二进制数组来保存视频,实现筛选没看过的视频
笔试题:输出每个 url 最多的访问次数(类似华子实习笔试第一题,但是简单一些)
反问
阿里
分别介绍一下 MySOL、ES、Mongo 数据库各自的特点以及适合的使用场景是什么?
倒排索引了解吗?
ES 的分页功能有什么特性?
ES 的分词检索?
Kafka 与 Zookeeper 是什么关系?
多个同样的消息被发送到 Kafka 如何控制他们只消费一个?
什么是 Kafka 的羊群效应 ?
Redis 相比 Memcached 有哪些优势?
阐述缓存穿透?怎么解决?
什么是 bigkey?会有什么影响?
阿里外包/一面
自我介绍
遇到过高并发?(网站大访问量用 redis 缓存,表单做提交)
进程、线程、协程(随便说说)
go 的协程设置原理(说了 gmp 模型)
go 的锁,用到什么锁(mutex、rwmutex)
锁怎么实现的,有没有看过源码(莫得)
innodb 和 myisam 区别(事务支持、查询速度、表文件结构、外键支持、innodb 有主键,查询效率高)
为什么查询效率高(叶子节点存储索引和数据,避免回表二次查询)
mysql 优化(说了分表和覆盖索引)
explain 关注的字段(命中索引、可能命中索引、全表扫描、用到覆盖索引)
redis 和 kafka 的区别(说了 redis 和 kafka 的特点)
用过 k8s 吗(没)
mysql 的版本控制(说了 mvcc,以及怎么实现的)
前期用 php?(公司转型)
php 和 go 哪个好用(说了 go 协程用起来方便,php 的麻烦一点,编译型语言,安全比 php 明文安全)
goroutine+channel 依次输出小猫小狗 100 次(设置猫狗 channel,先读猫 channel 输出,狗输出的时候先读猫 channel 来保证顺序,没说好这一块)
map 怎么用?线程安全?怎么扩容?(不是安全的,用 sync.map 安全,说了双倍扩容)
怎么解决他的哈希冲突?(重新扩容、哈希函数重新生成)
设计模式(说了单例模式、策略模式)
php 用什么框架(tp、laravel)
laravel 的依赖注入
蚂蚁
工具开发一面(电话面)
自我介绍
项目背景
JMeter 做了压测,压测是怎么设计的
500 压测线程的设置和服务器以及 JVM 的规格和设置有什么关系吗
优化了 50%,那么优化点主要体现在哪里呢
RabbitMQ 在写 DB 时如果出现了异常,导致了数据不一致,有什么补偿的机制吗
在线程池中线程复用的情况下,ThreadLocal 会不会有什么问题
代码里面会是什么时机做 ThreadLocal 的 remove 呢
在使用 AOP 的时候,对于接口会有一些规范的要求吗?比如方法签名中的参数会不会有一些规范?
如果要依赖一些参数做做一些权限的控制的话,对于参数的规范会有一些怎样的考虑
具体讲一下使用逻辑过期方案解决 Redis 的缓存击穿问题
这个跟 Redis 里面看门狗的机制有什么区别吗
如果内存不够大了会选择使用什么方案来解决呢(逻辑过期不让缓存过期)
如果是要开一个线程来同步数据库从而解决逻辑过期的话,新开的线程与其他读取缓存的线程之间的协作关系怎么处理呢
JDK 的类库里面有没有了解到可以做线程之间协作关系的
除了 synchronized 还有其他更加灵活的方案吗?
怎么理解乐观锁和悲观锁的
怎么考量用乐观锁还是悲观锁的?
项目中有没有遇到 JVM 相关的问题,比如内存溢出等问题
万一有 OOM 或者线程卡住了,我们排查的手段和步骤是怎么样的?
在设置 JVM 参数的时候,考虑机器有 4G 的内存,那我设置会有什么样的原则吗
对自己职业的预期,更偏向算法还是更偏向工程
互联网+的比赛做的是什么?控制平衡还是视觉识别
对于具象智能有什么想法吗
算法题:使用多线程统计一个文件中不同的词出现的次数,记不清了
反问
工具开发二面(电话面)
自我介绍
这三个项目的时间顺序
项目背景
Java 的 list 有哪些以及他们的区别和原理
HashMap 和 HashTable 的区别
一个类在 JVM 的生命周期,按照这个说一下类的加载过程
验证这个阶段会加载到 JVM 的内存结构的哪个部分去
用过命令去打过 jar 包吗
介绍双亲委派机制
有自己写一个类加载器吗
知道可以拓展类加载器吗
说一下对于 AOP 和 IOC 的理解
AOP 的实际的应用有哪些
SpringBoot 你常用的注解有哪些
有了解过注解的原理吗?注解的本质是什么
Spring 里面有很多 SDK,你常用的有哪些?比如 MyBatis
这块原理有了解过吗
这里有没有对哪一块比较熟悉并且研究过原理的
设计模式有了解过吗
数据库索引的原理了解吗
讲一下你对 b+树的理解
项目中有遇到过一些慢 sql 的情况吗
除了 explain 还有其他定位慢 sql 的方式吗
一般是什么原因会导致慢 sql
介绍项目中 Redis 是怎么用的
Redis 是单线程还是多线程的
Redis 的持久化有了解过吗
有没有了解过 Redis 的集群
数据库这块除了 MySQL 有没有了解过 Mongo
Redis 里面的事务原理有了解过吗
Redis 的缓存穿透、雪崩怎么解决
shell 这一块有了解吗
大模型这块有了解过相关的技术或者产品吗
transform 有了解过吗
你觉得你过去做的最有挑战的事是什么
你觉得你成就感最大的事情是什么
自己的性格有测过吗 MBTI
对 base 地有要求吗
手头有其他 offer 吗?对蚂蚁这边的意向怎样
反问
工具开发三面
自我介绍
论文的层次,参加的比赛,专利
介绍实验室的科研项目
已经拿到的 offer,base 选择
为什么不继续科研方向
参加过开源项目吗?github 有账号吗
为什么没有参加实习
项目的收获
项目收获比较大的地方
反问
百度
1.GMP 模型?
2.协程创建后如何调度?
先进入 p 的私有队列, 如果满了, 进入全局队列
3.context 的结构和用法
4.一次 url 的请求过程?
5.请求到达项目服务器后的调用链路
6.nginx 是否为单例的.
7.算法: 两数相除
8.平时 mysql 优化的案例?
9.in, exist 的使用
10.联合索引
11.binlog 日志
12.分布式事务: 下游两个 db 使用 redis, 需要更新这两个不同的 db, 如何自己实现最终一致性
13.两阶段提交, 三阶段提交?
百度后端研发工程师
自我介绍
操作系统处理死锁的方法
操作系统内存管理的方法
Redis 持久化
Memcache 知道吗
使用 shell 统计文件中 top3 的 ip 地址
磁盘满了写不进去,排查命令
找出文件夹中最大的几个文件,命令是什么
说-下 ES 和 Redis 的区别
编程题//Go 两个 goroutine 交替打印 1-10//G1 1//G2 2//G1 3//G2 4//..//G1 9//G2 10
京东 golang
一面 60min
讲一下项目
go 语言的掌握程度
数据结构
空间利用率提高,但是发生冲突的可能性也增大了
go 语言的 map
拉链法的优缺点
拉链法如何优化
负载因子调到 1 会有什么后果
数据库
数据库索引有哪些
ql 建表
这个表有什么缺陷
新加一个学号字段要考虑什么
数据库四大特性
innodb 默认隔离级别
rr 是怎么实现的
网络
tcp 三次握手
ip 位于哪层?icmp 位于哪层?ping 命令位于哪层?
telnet 是什么操作?位于哪层?
https 加密过程 (这个我不太清楚 如果有大佬知道 麻烦评论区指点一下)
二面 35mn
二面面试官:"看你简历感觉你对 go 的接触程度不是特别深 你需要在接下来的过程中说服我"
对哪些语言比较熟悉
为什么很多大厂都用 go
说一说对 slice 的认识
slice 如何做深拷贝
数据库
如何避免回表
标识性差的字段一定不能做索引列吗?
标识性差的字段为什么不能用来做索引列?
b 和 b+树的区别
mysql 默认隔离级别
rr 如何解决不可重复读
京东
一面
算法题:leetcode16.最接近的三数之和,leetcode234.回文链表,leetcode72.编辑距离
自我介绍
前面两个项目是自己发起的还是什么契机去做这个项目的
ThreadLocal 怎样保证其线程安全
怎样保证多线程来使用他??
如果主线程中有信息,其他线程怎么获取主线程中的信息
项目中 Redis 哪些地方用到了
Redis 的哪些操作有原子性
除了递减指令还有哪些指令具有原子性呢
两个项目里面你觉得那部分是有技术难点的
超卖问题还有什么别的解决方案呢
如果是两个应用都要写数据库,加锁怎么解决超卖问题呢
聊一聊乐观锁和悲观锁
两种锁各自的应用场景
ArrayList 和 LinkedList 说一说吧
String 类可以被继承吗?为什么?
JVM 的组成部分
说一说使用的垃圾回收器
G1 垃圾回收期和 CMS 的改进或者说不一样的地方
G1 的分区,有哪些区(堆的分区)
G1 的清除算法
什么情况下会产生 full GC
原空间是用来做什么的?
TCP 的四次挥手是怎么样的
为什么要等待
有没有主动去了解过一些新的技术?
从大学到现在做的最有成就感的事情
第三个项目是主导地位?可以安排别人的工作
你觉得你的优势是什么
学习成绩怎么样
反问
二面
自我介绍,介绍一个项目
这两个项目是自己开发的还是给公司做的
哪个项目是自己承担的更多
超卖问题是怎么发现的,解决思路,怎么找到的方案
网上的成熟方案你觉得有没有更好的方案或者现有的方案有没有什么问题
Redis 失效后怎么保证与数据库中数据的一致性
Redis 持久化可以解决这种突发的情况吗?这个没有调研过吗
一般去哪里找这些解决方案,不同地方有什么倾向性吗
做的这两个项目里面比较大的收获是什么
这个项目后面会继续做吗
自己对未来一两年的规划是怎样的
行业或者技术方向会有考虑吗
为什么是 Java 和 Go 呢
当前行业的语言都了解过哪些
你觉得自己的最大的优势是什么
反问
京东一面 (30min )
微服务中间件开发部门
自我介绍
实习项目中确保结果准确性
实习项目上游数据有问题怎么办
Golang new 和 make 的区别
为什么多协程优化,不使用协程呢?
实习项目过程中还有什么可以优化的地方
微服务的优势,为什么用微服务
怎么确保线程安全
信号量和锁的区别
你有什么问题吗?
PDD 一面/Java
MySQL
提交了怎么样的事务有可能导致死锁
怎样用?什么情况使用
数据同步怎么实现
使用 null 作为条件查询问题
最左前缀原则
索引下推、索引覆盖
join 原理实现
索引设计讲究/原则
聚簇索引
InnoDB 为什么建议用自增整数作为主键
MySQL 内存磁盘同步机制
数据页在内存中是完整的数据吗?
分库分表
MySQL 主从架构
MySQL 什么时候会死锁
表中有业务主键、逻辑删除标志,逻辑删除后又插入同样的一条记录,平衡业务主键和逻辑删除的问题
项目工程
业务背景
系统 QPS
项目中算法如何使用
项目中的架构设计有何问题
业务修改后 MySQL、Redis 数据如何更新
如何进行数据持久化
哪一部分占比较高
如何重新设计 MySQL、Redis 架构
设计模式(工程上使用)
单体应用多层异常处理原则(异常管理原则)
Redis、MySQL 配合使用,如何确保数据一致性
项目介绍
系统故障问题、如何解决
服务器部署情况
代码迭代过程中防止代码腐化
关注的业务指标
PDD 服务端开发
自我介绍
项目的各种细节
服务发现一般可以怎么做!
InnoDB 引擎的特性
MySQL 数据库支持高并发的读写,设计上有哪些可以用的方案?
了解哪些缓存淘汰策略?
go 的 defer 机制
go 的 map 是有序还是无序?为什么?
GET、POST 区别
HTTP 是无状态的,如何做到有状态?(cookie session)
HTTPS 过程
算法题:
LRU
LeetCode 62 不同路径
酷狗音乐
一面
mysql 存储引擎?
mysql 隔离级别? 分别解决了什么问题?
2pc, 3pc 算法
10 亿个数据获取前 100 个最大数据?
单个表到达多大要进行拆分? 为什么需要拆表?
redis 哪些使用场景?
服务的熔断降级?
平时如何提升和学习?
TCP 和 UDP 可以绑定同一个端口吗?
linux 如何查看 cpu, 内存负载?
进程间通信有哪些方式?
redis 的数据类型?
redis 和 mysql 的一致性问题?
二面
项目中涉及到哪些监控? prometheus
队列出现消息积压, 如何处理?
消息幂等性?
一个 sql 语句, 已经建立了索引, 但是突然查询很慢, 如何排查?
索引失效场景?
mysql 如何解决的幻读?
select ... for update: 保证当前事务中查询的范围加锁, 不被其它事务修改
做索引优化, 如何减少回表次数--索引下推
索引下推: 指将上层(服务层)负责的事情, 交给下层(引擎层)处理.
不使用索引下推: 根据索引中的主键值, 定位并读取完整的行记录, 然后将记录交给 server 层去检测该记录是否满足 where 条件
使用索引下推: 获取索引, 判断索引是否符合条件范围, 如果满足, 再进行对应的回表查询获取主键, 如果不满足, 直接过滤掉
分布式事务, 二阶段提交, 三阶段提交的区别?
linux 查看网络 io 的命令? netstat
如果出现大量 time-wait 状态, 如何处理?
网络的拥塞控制?
b 站外包/go 开发/一面
自我介绍
在百度什么级别?t 几?(没有技术级别,当时忘记自己是什么级别了,说了个 m,然后他说 m 是经理 hhh)
怎么设计一个 api 的(没答好,已读乱回)
怎么去防那个 ddos(redis 限流+nginx 层做处理,最后还是花钱买服务)
怎么部署那个安全拦截服务的(领导买了,在控制台做的服务,点点点)
cdn 的理解(加快访问速度之类的,问我还有没有别的,我说没有)
负载均衡怎么做的(领导在控制台点点点)
说项目没难度(我说是,不像 b 站外包用到这么多技术)
分表是怎么分的
b 站外包
旋转数组
mysql 索引相关。
B+树有什么特点?
为什么不用 B 树(查询的速度差不多,因为 b+树数据都在叶子节点)。
非聚簇索引和聚簇索引的区别。
索引为什么要用 id 不用字符
Linux 相关命令和场景
docker 和 k8s
360 一面
协程池的作用?
内存逃逸分析?
go 的内存回收什么条件会触发? go 的 GC 能够手动触发吗?
channel 的底层实现? 有缓冲的,无缓冲的 channel, 如果管道已经关闭了, 读取会不会发生错误?
切片使用的时候需要注意什么?
go 中的参数传递是值传递还是引用传递?
defer 的执行顺序?
100G 的文件, 统计出所有英文字母, 按照字母表顺序输出
linux 如何分割文件?
接口性能如何优化?
什么情况会全表扫描?
主丛同步的原理? mysql 还有什么相关的 log 文件?
分布式锁的原理?
360 二面
自我介绍
实现 LRU 算法
这个 lru 算法用在生产环境会出现什么问题
如果十万个线程同时 put,会出现什么问题
如何控制并发,加什么锁,读写锁还是互斥锁
进程、线程、协程
程序从加载到运行的过程
为什么线程消耗比协程大,具体体现在哪些方面
生产中哪些服务用的 进程、线程,为什么要这么做,有什么好处(今天第二次问到)
nginx master-worker 进程、进程与 redis 进程、线程
数据库事务,隔离级别
各个隔离级别怎么实现的,原理
RR 能解决幻读吗,为什么
MVCC
数据库中的锁
乐观锁、悲观锁适用于什么情况,并发,读多写少
分布式锁
zookeeper、mysql、redis 、etcd 怎么实现分布式锁,各有什么优缺点,生产中一般用那个
zookeeper 原理,怎么保持高可用
tcp 三次握手、四次挥手
timewait、closewait 出现,怎么处理
tcp 调优相关参数
拥塞控制算法、滑动窗口、零窗口报文
http1.0 - http3.0 改进,优缺点
360 三面
说说 Linux 常用操作,ps 是干嘛的
Go map 为什么是无序的?
MySQL 索引分类,索引的优点和缺点
分库分表
Cookie 和 Session 的区别和应用,分布式 Session 的实现
TCP 三次握手/四次挥手
Redis 的数据类型及其数据结构,Bitmap 是什么
Redis 的雪崩效应 ,是什么,怎么解决
线程,进程,协程区别
算法:用 Go 手撕快速排序
好未来
为什么要自己实现大顶堆? 大顶堆和小顶堆的使用场景?
如何利用堆, 获取第 k 大的元素? 堆如何删除某一个特定的节点? 大顶堆如何转换为一个小顶堆?
引入 mq, 实现异步提速, 如何理解?
协程池使用的是第三方包吗? 如果自己实现一个协程池, 描述你的思路?
recover 能捕获到其它协程的 panic 吗?
说一下对 grpc 的理解? grpc 互相调用, 如何实现互相的权限验证和授权?
http2.0 的 tsl 三次握手过程?
grpc 中, 如果客户端需要向服务端发送大文件, 如何实现? (使用客户端流模式)
http2.0 的相关特性? 其中的多路复用为了解决什么问题? (解决对头阻塞问题)
grpc 中的 deadLine 和 timeout, 应该怎么用? grpc 的流控是如何处理的? 滑动窗口控制发送和接收速速率?
go-zero 中的服务熔断和限流是怎么做的?
以下两个代码片段输出的结果:
深信服
slice 原理 底层数据机构
map 原理 底层数据结构 _ a.扩容机制 b.并发会导致什么问题?为什么?c. Map 的 key 是有顺序的?为什么?d. 能否实现 map key 的序
Go 垃圾回收,算法 三色标记是哪三色,分别代表什么?
堆和栈区别?内存何时分配在栈上?何时分配在堆上?
如何保证缓存一致性?
redis 有哪些数据结构?常见用途
虚拟机和 docker 区别 Docker 底层原理 通过什么实现
二叉树前序中序后序遍历怎么回事?
写代码实现两个协程交替打印 100 以内数字
Mysql 如何优化慢查询
Shell 命令考察 a.如何判断一台服务器还是活的 B. 给一个文本文件 取出其中特定的列数据 然后排序
kafka 如何保证消息不丢失
udp 报文头部有哪些字段?
北京贝壳外包
自我介绍
项目拷打
Redis 跟 MySQL 以及 Kafka 之间是什么关系?
Kafka partion 的概念
Kafka 偏移量
比如说有你在线上发现一条慢 SQL,你怎么分析它?
索引的最左前缀原则是什么意思?a>1and b=1andc=1,你看这个能命中这个索引吗?
Redis 常见的数据结构?他们的应用场景?
zset 你一般在什么场景下会用?底层的数据结构是什么?
JWT 是什么东西?
协程了解吗?和线程对比
一道算法题找到具有最大和的连续子数组,并返回该子数组
编程颖用两个协程,两个 channel 分别接收 1,2,并打印
网易外包/Go 后端开发
一面
自我介绍
mysql 查询慢是什么原因(没索引、表数据量大、死锁)
mysql 插入慢什么原因(表数据量大,sql 语句多,表索引量大)
抽奖逻辑是怎么样的
怎么实现用户登录
用户登录安全有了解过吗(乱说一通)
redis 击穿
redis 穿透
redis 其他数据结构有用过吗?hmap、zet
短信发送失败怎么处理的(记录发送状态+重试机制)
二面
自我介绍
cms 系统 0-1 开发的?(开源框架二次开发)
做了哪些功能(栏目、文章、配置、模型管理之类的)
登录的过程说一下
session 登录有什么弊端,怎么改(多台服务器拿不到 session,用 redis 做缓存)
客户端拿着 token,你是怎么通过 token 获取客户的信息(校验 token,获取 token 作为 key 的信息)
有没有难一点的功能,说一下(没有,单体项目量不大,只是业务复杂度的难,技术上的难点没有)
用户信息怎么做加密,token 怎么生成之类的(md5+拼接指定的 key 或者之类的)
200 个券码,发送客户,怎么设计?(分布式锁,数据库唯一索引兜底)
还可以怎么优化(redis 布隆过滤器,避免大量重复请求,处理逻辑做幂等方案)【睡不着想起来还可以做 mysql 的乐观锁,数据做缓存预热,减轻数据库请求压力】
长连接做成短连接,怎么设计,怎么做到短连接唯一(说了和自己的 短信生成方法(用户 id 活动 id,二进制),php 的 uuid,时间戳,uuid 截取?引用第三方库之类的)
面试官说要短的,要唯一的,答不出来
面经详解跳转链接
欢迎关注 ❤
我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:infoq 面试群。
评论