百度后端日常一面
一、 系统架构与设计
1. 技术栈与选型:
◦ 介绍你的架构(Go + Gin + GORM)。
◦ MongoDB在架构中起什么作用?(与MySQL/Redis/本地缓存区分开)
◦ 为什么选择Gin框架?与其他Go框架相比,Gin的优缺点是什么?
◦ 还了解哪些其他Go框架?
◦ 技术栈选型的依据是什么?(是实习项目还是个人项目?基于什么考虑?)
2. 缓存与数据一致性:
◦ 详细说明如何使用MySQL + Redis + 本地缓存实现高并发数据处理逻辑。
◦ 所有数据是否都持久化在MySQL中?
◦ 三级/两级缓存数据同步:
▪ 在并发读写下,如何保证缓存数据同步的可靠性?
▪ 举例说明:高并发下,对同一数据的读写流程。是先写Redis还是先写MySQL?数据如何同步?
▪ 如何保证Redis、MySQL以及本地缓存之间的数据一致性?
◦ 使用Pub/Sub实现缓存更新通知的具体机制是什么?
◦ 如何保证Pub/Sub的可靠性?
3. 数据库:
◦ 慢查询定位:如何定位和解决慢查询问题?
◦ 索引:
▪ 联合索引(a, b, c)的最左前缀原则是什么?哪些查询能命中索引?哪些不能?
4. 微服务与通信:
◦ 为什么使用gRPC?与HTTP相比,gRPC的优缺点是什么?
◦ 对于内部通信,gRPC调试比HTTP困难,为什么仍认为它是最优选择?
◦ 系统被拆分成几个微服务?它们之间是否全部使用gRPC通信?
◦ 如何对gRPC服务进行Debug?
◦ 在项目中,etcd的作用是什么?
二、 部署与运维
1. Kubernetes (K8s):
◦ 服务是否部署在K8s集群上?
◦ 对K8s了解多少?能简要介绍吗?
◦ 是否有在K8s集群上实际部署服务的经验?(即使是单节点集群)
◦ 描述一下使用kubectl apply部署一个Pod的完整流转过程(从命令发出到Pod创建成功,涉及哪些K8s组件)。
2. Docker:
◦ 对Docker的操作熟悉吗?常用命令有哪些?
◦ 如何通过Dockerfile将一个二进制文件制作成镜像?Dockerfile的基本命令有哪些?
三、 Go语言基础与核心概念
1. 内存管理:
◦ 什么是内存逃逸?
◦ 内存逃逸会导致什么后果?
◦ 逃逸到堆上的对象会被GC回收吗?
◦ 能否举一个导致内存逃逸的代码例子?(例如,在函数中返回局部变量的地址)
2. 并发编程:
◦ goroutine 和线程的区别是什么?
◦ 如何在并发环境下安全地操作map?(引出sync.Map)
◦ 代码题:如何使用channel实现两个goroutine交替打印(一个打印数字,一个打印字母)?
3. 常用特性:
◦ defer 的使用场景?在一个包含文件打开、读取、处理的函数中,defer file.Close() 放在哪个位置最合适?为什么?
◦ 切片(Slice)与数组(Array)的区别?为什么Go要区分这两个概念?
◦ 切片使用append追加元素时的底层逻辑是怎样的?扩容机制是什么?(例如,扩容时如何分配新内存大小)
四、 网络知识
• 描述从浏览器输入www.baidu.com到显示出页面的完整流程(URL解析、DNS查询、TCP连接、HTTP请求、负载均衡、服务器处理、响应返回等)。
五、 面试反馈与建议
• 面试官最后指出,面试考察的是底层基础知识(如TCP/IP、Go语言核心),不能只停留在理论,必须能动手写代码解决实际问题。并举例说明了defer的使用和内存逃逸的代码实践的重要性。
百度的问题感觉都不难,但是问到后面需要我进行写代码,业务代码基本没怎么写过,都是背的八股,练手的都是算法,确实是薄弱点,有点可惜了
#牛客AI配图神器#
1. 技术栈与选型:
◦ 介绍你的架构(Go + Gin + GORM)。
◦ MongoDB在架构中起什么作用?(与MySQL/Redis/本地缓存区分开)
◦ 为什么选择Gin框架?与其他Go框架相比,Gin的优缺点是什么?
◦ 还了解哪些其他Go框架?
◦ 技术栈选型的依据是什么?(是实习项目还是个人项目?基于什么考虑?)
2. 缓存与数据一致性:
◦ 详细说明如何使用MySQL + Redis + 本地缓存实现高并发数据处理逻辑。
◦ 所有数据是否都持久化在MySQL中?
◦ 三级/两级缓存数据同步:
▪ 在并发读写下,如何保证缓存数据同步的可靠性?
▪ 举例说明:高并发下,对同一数据的读写流程。是先写Redis还是先写MySQL?数据如何同步?
▪ 如何保证Redis、MySQL以及本地缓存之间的数据一致性?
◦ 使用Pub/Sub实现缓存更新通知的具体机制是什么?
◦ 如何保证Pub/Sub的可靠性?
3. 数据库:
◦ 慢查询定位:如何定位和解决慢查询问题?
◦ 索引:
▪ 联合索引(a, b, c)的最左前缀原则是什么?哪些查询能命中索引?哪些不能?
4. 微服务与通信:
◦ 为什么使用gRPC?与HTTP相比,gRPC的优缺点是什么?
◦ 对于内部通信,gRPC调试比HTTP困难,为什么仍认为它是最优选择?
◦ 系统被拆分成几个微服务?它们之间是否全部使用gRPC通信?
◦ 如何对gRPC服务进行Debug?
◦ 在项目中,etcd的作用是什么?
二、 部署与运维
1. Kubernetes (K8s):
◦ 服务是否部署在K8s集群上?
◦ 对K8s了解多少?能简要介绍吗?
◦ 是否有在K8s集群上实际部署服务的经验?(即使是单节点集群)
◦ 描述一下使用kubectl apply部署一个Pod的完整流转过程(从命令发出到Pod创建成功,涉及哪些K8s组件)。
2. Docker:
◦ 对Docker的操作熟悉吗?常用命令有哪些?
◦ 如何通过Dockerfile将一个二进制文件制作成镜像?Dockerfile的基本命令有哪些?
三、 Go语言基础与核心概念
1. 内存管理:
◦ 什么是内存逃逸?
◦ 内存逃逸会导致什么后果?
◦ 逃逸到堆上的对象会被GC回收吗?
◦ 能否举一个导致内存逃逸的代码例子?(例如,在函数中返回局部变量的地址)
2. 并发编程:
◦ goroutine 和线程的区别是什么?
◦ 如何在并发环境下安全地操作map?(引出sync.Map)
◦ 代码题:如何使用channel实现两个goroutine交替打印(一个打印数字,一个打印字母)?
3. 常用特性:
◦ defer 的使用场景?在一个包含文件打开、读取、处理的函数中,defer file.Close() 放在哪个位置最合适?为什么?
◦ 切片(Slice)与数组(Array)的区别?为什么Go要区分这两个概念?
◦ 切片使用append追加元素时的底层逻辑是怎样的?扩容机制是什么?(例如,扩容时如何分配新内存大小)
四、 网络知识
• 描述从浏览器输入www.baidu.com到显示出页面的完整流程(URL解析、DNS查询、TCP连接、HTTP请求、负载均衡、服务器处理、响应返回等)。
五、 面试反馈与建议
• 面试官最后指出,面试考察的是底层基础知识(如TCP/IP、Go语言核心),不能只停留在理论,必须能动手写代码解决实际问题。并举例说明了defer的使用和内存逃逸的代码实践的重要性。
百度的问题感觉都不难,但是问到后面需要我进行写代码,业务代码基本没怎么写过,都是背的八股,练手的都是算法,确实是薄弱点,有点可惜了
全部评论
相关推荐
查看9道真题和解析 点赞 评论 收藏
分享