后端面试八股(go 方向)

news/2025/9/25 17:19:11/文章来源:https://www.cnblogs.com/xioazhenblogs/p/19111603

go 后端面试准备

一、Go语言相关

1、Go里有哪些数据结构是并发安全的?int类型是并发安全的吗?

  1. sync 包中的类型
  • sync.Mutexsync.RWMutex:互斥锁,通过加锁机制保证临界区安全
  • sync.WaitGroup:用于等待一组 goroutine 完成
  • sync.Once:保证代码只执行一次
  • sync.Cond:条件变量,用于协调 goroutine 间的交互
  • sync.Map:专门设计的并发安全的 map 实现
  1. channel: Go 语言中最核心的并发原语,天然支持并发安全的通信操作
  2. atomic 包: 提供了原子操作,可以对基本类型进行安全的并发操作

2,Go如何实现一个单例模式? sync.Once实现; 启动时初始化实例;

3,sync.Once是如何实现的,如何不使用sync.Once实现单例模式?

4,Go语言里的map是并发安全的吗?no

5,如果要实现一个并发安全的map,该怎么做?(分桶加锁)

​ 使用互斥锁(sync.Mutex/RWMutex)包装 map; 使用标准库的 sync.Map;分片锁(Sharded Map)

6,Slice与数组的区别?

7,Slice的底层实现? struct{data *ptr,len ,cap}+指数级扩容机制

8,不同的Slice在复制和传值时,是深拷贝还是浅拷贝? 值类型是deep copy 指针类型是浅拷贝

9,sync.map的底层实现? 读写分离延迟更新,优化 读多写少 场景的性能,读操作尽可能无锁执行。

10,sync.mutex的底层实现?

饥饿模式正常模式结合;

  • 用一个 32 位的 state 字段记录锁的状态(持有、唤醒、饥饿、等待计数)。
  • 结合正常模式(性能优先,允许竞争)和饥饿模式(公平优先,避免饿死)。
  • 通过快速路径、自旋优化减少阻塞,通过信号量实现 goroutine 的等待 / 唤醒。

11,如何判断一个结构体是否实现了某接口? 类型断言方式s.(MyInterface) ,反射包方式 reflect.TypeOf((*MyInterface)(nil)).Elem()

12,channel为什么不常用?(走社招流程的话,真心建议复习一下channel的使用方法,手撕时被坑了不止一次。。。)只在适合的场景(Goroutine 通信、简单同步)中才是最优解

13,channel在什么情况下会panic? close()后panic:end on closed channel;重复关闭同一个 channel; 关闭非 channel 类型的变量

14,介绍一下GMP模型

Goroutine(G)、Machine(M)和 Processor(P)三者的协作,高效地将用户态的 Goroutine 映射到底层操作系统的线程上执行。

15,如果有100个IO密集型协程,10个计算密集型协程,那么这100个IO密集型协程会对这10个计算密集型协程产生影响吗?根据自己对GMP模型的理解进行分析并得出结论

16,GMP模型相比于正常的协程-线程-进程调度,有哪些优点和缺点?

17,Grpc的实现原理

18,介绍一下Grpc实现过程中,经历了哪些层次?

19,相比于C语言,Go语言开发有哪些改进?

20,介绍一下Go语言的内存分配和垃圾回收机制?

21,Go语言在使用过程中,哪些情况可能会导致panic?

22,Go语言内存泄漏的排查思路

23,Go语言中context常用场景,及实现细节

24,Gin框架相比标准包,解决了哪些问题?

二、Redis相关

1,介绍一下redis在工作中的用途

2,redis在工作中一般可以承受多少的qps? 单机5-10 集群10w~100w QPS

3,redis有哪些数据结构,分别常用与哪些场合?

4,redis跳表实现细节,为什么选用跳表,而不选择红黑树和B+树?

5,redis中使用Lua脚本为什么能保证事务性? redis单线程和回滚特性 Lua 原子性

6,在分布式锁实现时,Setnx一定是可靠的吗,为什么(主从不一致)?

7,如果需要保证可靠,需要怎样的机制保证(Raft算法)?

8,redis为什么要防止bigkey?

9,redis是内存相关的数据库,那么有1G的数据,想要以key-value的方式存储,那么是每个key的数据多一些更占内存,还是少一些更占内存,根据所学的redis底层数据结构实现进行分析和回答

10,redis的网络IO模型介绍

11,epoll和select模型的区别

12,redis中TTL到期后是如何回收的?

13,在使用分布式锁时,如何保证解锁时是之前上过的锁?

14,使用redis实现分布式缓存时,需要注意哪些问题?

15,说下缓存击穿,缓存穿透,缓存雪崩有什么区别?

三、MySQL相关、Postgresql

1,索引的底层实现

2,为什么使用B+树,而不使用跳表?

3,MySQL分表怎么做?

4,如果要添加分表或删除分表,如何操作(一致性哈希算法)?

5,主键索引和唯一索引的区别

6,有遇到深翻页问题吗,如何解决?

7,在使用分布式缓存时,数据库和缓存的数据一致性如何解决?

8,MySQL自增主键,一定是自增的吗?有哪些方式会破坏这个性质

四、计算机基础

1,计算机网络的多层模型简要介绍

2,如果要做负载均衡,那么应该在哪一层上做文章?

3,TCP

4,http状态码

5,http2.0相比与http1.1的优化

6,DNS的实现细节

7,http协议中,如何判断该报文已经传送完所有的数据并结束?

8,https

五、算法相关

1,介绍Raft算法

2,主动轮询型和监听回调型有什么区别?分别应用在哪些场合?

3,介绍一下微服务架构,有哪些优点和缺点,为什么要使用微服务架构?

4,介绍一下CAP模型

5,介绍一下令牌桶限流算法

6,还有其他的限流算法吗,分别有什么优劣,适用于什么场景?

7,如何实现LRU缓存?

8,如何解决LRU缓存中刷盘的问题,即,业务中扫描了大量的数据,这些数据把LRU缓存占满,但是在之后不会再访问,导致缓存中存在大量非热点数据,如何解决?(LFU)

9,布隆过滤器,及其常用的业务场景

10,前缀树实现

六、K8S,docker相关

1,什么是声明式API?

2,Etcd数据库有什么特性,为什么K8S选用了Etcd数据库?

3,K8S中一个node的生命周期是怎样的?

4,服务发现机制介绍

5,docker的实现原理介绍

6,如果只是使用Linux命名空间进行分离,那么容器将很容易实现,docker相比于容器的核心竞争力在哪里?

7,Nginx介绍

8,Nginx在K8S中负责什么模块?

9,如何排查K8S中OOM的问题?

10,容器开发相比与虚拟机开发,有哪些优劣势?

11,容器隔离的不安全,有哪些根源上的原因?

七、项目相关(由于每个人的项目不同,问的问题也不同,一些方案已经隐藏在以上的问题中,不再重复赘述了)

1,分布式存储,如何解决分块上传问题(保证数据一致性)?(数据偏移+校验和)

2,节点不可达如何处理?(主从,raft算法保证一致性)

3,项目介绍,项目难点介绍

由于只有半年经验,通用项目方面介绍的问题比较少(简历上的项目相对冷门,很少问,在介绍时经常和面试官不在同一频道上。。。)

八、场景题

1,库存超卖问题

2,使用爬虫爬取URL时,能使用的内存空间只有1MB,如何过滤已经爬取过的URL?

3,在K8S架构中,如何处理单机或单容器限流问题,以免该容器负载过高导致整个node不可用?

4,如何处理长连接的负载均衡问题?

5,如果业务需要添加新的接口,但是在旧MySQL表中没有对应索引,如何解决?

6,如何处理单用户重复调用问题(翻译:如何保证多次操作的幂等性)?

7,技术选型时,如何做调研工作?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS 不重叠且无缝的拓扑检查和修改

ArcGIS 不重叠且无缝的拓扑检查和修改创建拓扑: 新建数据库→新建dataset→导入要素 dataset右键新建topo 设置容差和规则 拓扑容差: 0.001 默认标准 0.00001 清查标准 注意:容差为分辨率两倍 拓扑规则: 1.不能重…

C++设计模式之创建型模式:工厂方法模式(Factory Method) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【铸网-2025】线下赛 web 详细题解

<?php show_source(index.php); class MGkk8 {public $a;public $b;public function rpl2(){echo(MGrp12;);$b = $this->b;if ($this->a == "RPG") {echo(ifyes;);($b->a)($b->b."&quo…

2025/9/25

A 用时:1h 预期:100pts 实际:100pts 发现有两种做法,可以直接模拟,递推,复杂度分别为 \(O(n^2)\),\(O(n^2\log n)\),而递推可以用 bitset 压一下。 考虑根号分治复杂度为 \(O(B \times n+\frac{n^2\times log …

唐山市政建设总公司网站重庆装修设计公司排名

181/2461/8938产品概述 R&S SMU200A信号发生器旨在满足现代通信系统研发及其生产中遇到的所有要求。R&S SMU200A矢量信号发生器不仅将多达两个独立的信号发生器组合在一个只有四个高度单位的机柜中&#xff0c;还提供无与伦比的RF和基带特性。 Rohde & Schwarz S…

为什么要建设档案网站个人网页设计思路流程内容

142873-41-4脂质过氧化抑制剂1 英文名称&#xff1a;Lipid peroxidation inhibitor 1 中文名称&#xff1a;脂质过氧化抑制剂 化学名称&#xff1a;2,4,6,7-四甲基-2-[(4-苯基哌啶-1-基)甲基]-3H-1-苯并呋喃-5-胺 CAS&#xff1a;142873-41-4 外观&#xff1a;固体粉末 分…

网站建设 云南如何布局网站

标题链接【RM2021 四川站第二期直播】步兵设计及弹道测试https://bbs.robomaster.com/forum.php?modviewthread&tid11504&extrapage%3D1%26filter%3Dtypeid%26orderby%3Ddateline【RM2021 黑龙江站第4期直播】步兵机械设计入门2https://bbs.robomaster.com/forum.php?…

读书笔记:揭开索引的两个常见误区

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学…

国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?

国标GB28181平台EasyGBS如何赋能路网数字化管理与应急指挥?随着智慧交通建设的深入,海量、异构的道路监控设备如何实现统一接入、低延迟调阅与智能分析成为关键挑战。本文探讨基于GB/T28181国家标准的EasyGBS视频平台…

完整教程:Spring Boot 核心注解分类与应用指南

完整教程:Spring Boot 核心注解分类与应用指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

分布式数据库迁移OceanBase——基于网易云音乐自研CDC服务的平滑迁移方案

分布式数据库迁移OceanBase——基于网易云音乐自研CDC服务的平滑迁移方案网易云音乐在大体量的业务数据背后,是何种技术方案在支撑?本文分享网易云音乐PB级分库分表架构向原生分布式数据库架构迁移的技术优化经验。编…

获取用户ip所在城市

整体流程图获取当前登录用户所在城市,是一个非常常见的需求,在很多业务场景中用到。 比如:导航的定位功能默认选择的城市,或者一些防盗系统中识别用户两次登录的城市不一样的会有报警提示。 下载geoip2数据库 geoi…

郑州市网站建设公司石河子规划建设局网站

文章目录 &#x1f4d6; 前言1. 认识URL && 引入http协议2. http协议格式2.1 宏观格式&#xff1a;2.2 实验演示&#xff1a; 3. http的方法3.1 GET方法&#xff1a;3.2 POST方法&#xff1a;3.3 GET vs POST&#xff1a; 4. HTTP的报头和状态码5. http的cookie5.1 htt…

电商外贸网站建设新网域名自助管理平台

ANSYS Fluent和COMSOL Multiphysics以及OpenFOAM这3款CFD软件哪个好&#xff1f;cfd软件中哪款最实用&#xff1f;cfd软件有哪些&#xff1f;今天就给大家带来这几款CFD软件对比分析&#xff0c;一起来看看吧。 ANSYS Fluent ANSYS Fluent 是一种流行的计算流体动力学 (CFD) …

【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践

【Proteus仿真】AT89C51单片机串行数据转换为并行仿真 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

第13章 day14-15 Webpack逆向

Webpack逆向 Webpack是一个现代的静态模块打包工具,它主要用于前端开发中的模块化打包和构建。通过Webpack,开发者可以将多个模块(包括JavaScript、CSS、图片等)进行打包,生成优化后的静态资源文件,以供在浏览器…

Viper远程配置踩坑记录

尝试etcd做配置中心,就用了Viper。没想到踩了一堆坑,记录一下。 一开始的代码是这么写的,想着先监听再读取: func initViperRemote() {err := viper.AddRemoteProvider("etcd3","http://127.0.0.1:…

深入解析:JVM(六)-- StringTable

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

开发一个彩票网站多少钱济南医院网站建设服务公司

来源&#xff1a;AI科技评论作者&#xff1a;陈彩娴、Mr Bear编辑&#xff1a;青暮近日&#xff0c;图灵奖得主、“贝叶斯网络之父”Judea Pearl在Twitter上分享了一篇新论文“What are the most important statistical ideas of the past 50 years?”&#xff08;过去50年中最…

医院网站系统源码怎么推广引流

Linux平台 一、从yum源脚本安装部署Zabbix-Agent,添加Linux Servers/PC 概述 Zabbix 主要有以下几个组件组成: Zabbix Server:Zabbix 服务端,Zabbix的核心组件,它负责接收监控数据并触发告警,还负责将监控数据持久化到数据库中。 Zabbix Agent:Zabbix客户端,部署在被监…