当前位置: 首页 > news >正文

2025面试Go真题第一场

前几天参加了一场面试,GoLang 后端工程师,他们直接给了我 10 道题,我留了一个截图。

image-20250224133316933

在看答案之前,你可以先简单做一下,下面我会对每个题目做一个说明。

文章目录

      • 1、golang map 是否并发安全?
      • 2、协程泄漏的原因可能是什么?
      • 3、关于channel操作正确的可能是?
      • 4、Golang字符串转成byte数组,会发生内存拷贝吗?
      • 5、请说一说Golang 的 GC可以怎么触发的?
      • 6、Channel是同步的还是异步的 ?
      • 7、defer在return返回前还是返回后执行?
      • 8、什么情况下可能会发生内存逃逸 ?
      • 9、Golang中有哪些方式可以安全读写共享变量?
      • 10、Golang协程为什么比线程轻量?
    • 最后

image-20250224144221700

1、golang map 是否并发安全?

Go 语言中的原生 map 并不是并发安全的。在多 goroutine 并发读写同一个 map 时,可能会导致数据竞争(race condition),从而引发程序崩溃。

可以用 sync.Map

Go标准库中的 sync.Map 是一个并发安全的map实现。它内部通过读写分离的策略来减少锁争用,适用于读多写少的场景。例如:

var m sync.Map
m.Store("key", 42) // 存储键值对
value, ok := m.Load("key") // 获取值
m.Delete("key") // 删除键值对

2、协程泄漏的原因可能是什么?

在 Go 语言中,协程泄漏(Goroutine Leak)是指启动的协程无法正常退出,持续占用资源,最终可能导致程序崩溃或系统资源耗尽。

例如:

协程中存在无限循环,且没有退出条件。多个协程之间存在死锁,导致无法正常退出。总的来说就是协程没有释放、不受控制。

3、关于channel操作正确的可能是?

  • 从已关闭的 channel 接收数据:是可以的。
  • 向已关闭的 channel 发送数据:会导致运行时错误。
  • 关闭已关闭的 channel:会导致运行时错误。

4、Golang字符串转成byte数组,会发生内存拷贝吗?

不会。GoLang 底层字符串就是用 byte 数组存储的。

5、请说一说Golang 的 GC可以怎么触发的?

自动触发:堆内存达到阈值、时间周期触发、系统监控触发。

手动触发:调用 runtime.GC()

6、Channel是同步的还是异步的 ?

无缓冲通道:同步。

ch := make(chan int) // 创建一个无缓冲通道

有缓冲通道:异步。

ch := make(chan int, 2) // 创建一个缓冲大小为2的通道

7、defer在return返回前还是返回后执行?

在函数真正返回给调用者之前执行。

8、什么情况下可能会发生内存逃逸 ?

在Go语言中,内存逃逸(Memory Escape)是指变量被分配到堆上,而不是栈上。这通常发生在Go编译器无法确定变量是否会在函数外部被引用时。以下是一些可能导致内存逃逸的常见场景:

  1. 返回局部变量的指针

如果函数返回了局部变量的指针,该变量会被分配到堆上,因为其生命周期需要超出函数的作用域。

func createPointer() *int {x := 42return &x // x逃逸到堆上
}
  1. 闭包引用局部变量

如果闭包引用了局部变量,这些变量可能会被分配到堆上。

func main() {f := func() int {x := 10return x}fmt.Println(f()) // f会导致x逃逸到堆上
}

还有多种情况,这个有一定难度,我会再单开一篇继续讲解。

9、Golang中有哪些方式可以安全读写共享变量?

  • 使用互斥锁(sync.Mutex)
  • 使用读写锁(sync.RWMutex)
  • 使用原子操作(sync/atomic)
  • 使用通道(channel)
  • 使用sync.Map进行并发访问

10、Golang协程为什么比线程轻量?

  • 调度开销更小,协程的切换由Go运行时管理,上下文切换的开销非常小,通常只需要几十纳秒。
  • 协程的内存占用,Go协程:栈空间的初始大小非常小(通常为2KB),并且会根据需要动态扩展。这种动态栈分配机制使得协程的内存占用非常低。
  • 协程的轻量级结构:Go协程的内部结构简单,主要包含协程状态、栈指针等信息,而操作系统线程需要维护更多的内核资源。
  • Go运行时通过多路复用(Multiplexing)的方式将协程映射到少量的操作系统线程上,从而实现高效的并发执行。多路复用机制、高并发能力。
  • 阻塞处理:协程阻塞时,运行时会自动切换到其他协程,充分利用CPU。
  • Go协程:协程的创建和销毁由Go运行时管理,开销极小。创建和销毁协程的成本非常低,因为它们不需要操作系统内核的介入。

最后

离线版PDF下载:
链接: https://pan.baidu.com/s/1zsffbsHj5CRC9whL7W-9aw?pwd=6666 提取码: 6666 

相关文章:

2025面试Go真题第一场

前几天参加了一场面试,GoLang 后端工程师,他们直接给了我 10 道题,我留了一个截图。 在看答案之前,你可以先简单做一下,下面我会对每个题目做一个说明。 文章目录 1、golang map 是否并发安全?2、协程泄漏的原因可能是…...

【量化策略】趋势跟踪策略

【量化策略】趋势跟踪策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 在金融市场中,趋势跟踪策略是一种基于市场趋势进行交易的量化投资方法。该策略的核心思想是“顺势而为”,即当市场出现明显的上升或下降趋势时&a…...

leetcode 541. 反转字符串 II 简单

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符&…...

org.springframework.boot不存在的其中一个解决办法

最近做项目的时候发现问题,改了几次pom.xml文件之后突然发现项目中的注解全部爆红。 可以尝试点击左上角的循环小图标,同步所有maven项目。 建议顺便检查一下Project Structure中的SDK和Language Level是否对应,否则可能报类似:“…...

AI绘画软件Stable Diffusion详解教程(2):Windows系统本地化部署操作方法(专业版)

一、事前准备 1、一台配置不错的电脑,英伟达显卡,20系列起步,建议显存6G起步,安装win10或以上版本,我的显卡是40系列,16G显存,所以跑大部分的模型都比较快; 2、科学上网&#xff0…...

MySql数据库运维学习笔记

数据库运维常识 DQL、DML、DCL 和 DDL 是 SQL(结构化查询语言)中的四个重要类别,它们分别用于不同类型的数据库操作,下面为你简单明了地解释这四类语句: 1. DQL(数据查询语言,Data Query Langu…...

Linux中Shell运行原理和权限(下)(4)

文章目录 前言一、Shell的运行原理二、Linux当中的权限问题Linux权限的概念如何将普通用户添加到信任列表 三、Linux权限管理文件访问者的分类(人)文件类型和访问权限(事物属性)文件权限值的表示方法文件访问权限的相关设置方法如…...

LeetCode热题100- 字符串解码【JavaScript讲解】

古语有云:“事以密成,语以泄败”! 关于字符串解码: 题目:题解:js代码:代码中遇到的方法:repeat方法:为什么这里不用this.strstack.push(result)? 题目&#x…...

每日一题——LRU缓存机制的C语言实现详解

LRU缓存机制的C语言实现详解 参考1. 数据结构设计双向链表节点哈希表节点哈希表LRU缓存结构 2. 初始化哈希表和双向链表哈希函数初始化哈希表初始化双向链表创建LRU缓存 3. 更新双向链表4. 实现Get操作5. 实现Put操作更新节点值删除最久未使用节点插入或更新节点 6. 释放缓存释…...

Leetcode3162:优质数对的总数 I

题目描述&#xff1a; 给你两个整数数组 nums1 和 nums2&#xff0c;长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以除尽 nums2[j] * k&#xff0c;则称数对 (i, j) 为 优质数对&#xff08;0 < i < n - 1, 0 < j < m - 1&#xff09;。 返回 优…...

docker安装etcd:docker离线安装etcd、docker在线安装etcd、etcd镜像下载、etcd配置详解、etcd常用命令、安装常见问题总结

官方网站 官方网址&#xff1a;etcd 二进制包下载&#xff1a;Install | etcd GitHub社区项目&#xff1a;etcd-io GitHub GitHub社区项目版本历史&#xff1a;Releases etcd-io/etcd GitHub 一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令…...

Apache SeaTunnel 构建实时数据同步管道(最新版)

文章作者 王海林 白鲸开源 数据集成引擎研发 Apache SeaTunnel Committer & PMC Member&#xff0c;Apache SkyWalking Committer&#xff0c;多年平台研发经验&#xff0c;目前专注于数据集成领域。 导读 在当今数字化快速发展的时代&#xff0c;数据已然成为企业决策…...

递归、搜索与回溯第二讲:二叉树中的深搜 穷举vs暴搜vs深搜vs回溯vs剪枝

递归、搜索与回溯第二讲&#xff1a;二叉树中的深搜 && 穷举vs暴搜vs深搜vs回溯vs剪枝 1.计算布尔二叉树的值2.求根节点到叶结点数字之和3.二叉树剪枝4.验证二叉搜索树5.二叉搜索树中第K小的元素6.二叉树的所有路径7.全排列8.子集 1.计算布尔二叉树的值 2.求根节点到叶…...

Hbase分布式——储存机制

说明&#xff1a; 客户端调用&#xff0c;到达zk。然后到大HMaster&#xff08;主节点可以有多个但是只有和active在一起的才有效。&#xff09;。然后找到一个HRegionServer&#xff08;从节点可以有多个&#xff09;去做保存操作。 每一个HRegionServer上管理着表的HRegion…...

Word表格中如何只单独调整某一单元格宽度

大家好&#xff0c;我是小鱼。 在日常制作Word表格时&#xff0c;表格中不同单元格有时需要设置不同的宽度&#xff0c;但是很多小伙伴会发现想单独调整某一个单元格宽度时&#xff0c;发现其它单元格宽度也会发生变化。那么&#xff0c;到底怎么才能单独调整某一单元格宽度呢…...

Build错误:Cannot determine build data storage root for project 和 无法加载主类的解决办法的经验分享

Build错误&#xff1a;Cannot determine build data storage root for project 解决方案与经验分享 1. 引言 查看错误信息 “Cannot determine build data storage root for project”的含义&#xff1a; 这是一个关于构建项目时遇到的常见错误。错误信息表明构建工具无法确定…...

【Springboot知识】Logback从1.2.x升级到1.3.x需要注意哪些点?

文章目录 **1. 确认依赖版本**示例依赖配置&#xff08;Maven&#xff09;&#xff1a; **2. 处理 StaticLoggerBinder 的移除**解决方案&#xff1a; **3. 修改日志配置文件**示例 logback.xml 配置&#xff1a; **4. 检查兼容性问题**Spring Boot 2.x 的兼容性解决方案&#…...

大语言加持的闭环端到端自动驾驶模型 学习笔记纯干货

LMDrive&#xff1a;大语言模型辅助闭环端到端 LMDrive&#xff1a;大语言模型辅助闭环端到端 背景框架输入部分&#xff1a;导航指令&#xff1a;视觉数据&#xff1a;提示指令&#xff08;可选&#xff09;&#xff1a;处理部分&#xff1a;输出部分&#xff1a; 视觉编码器…...

初阶数据结构(C语言实现)——2算法的时间复杂度和空间复杂度

目录 本节目标1. 算法效率1.1 如何衡量一个算法的好坏1.2 算法的复杂度 2.时间复杂度2.1 时间复杂度的概念2.1.1 入门习题2.1.2 进阶习题 2.2 常见时间复杂度 3. 空间复杂度3.1 常见空间复杂度 本节目标 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度oj练习 1. 算法…...

MySQL知识

1.Navicat客户端连接 打开navicat&#xff0c;点击连接&#xff0c;点击MySQL 输入连接名与密码&#xff0c;如果连接的mysql是windows下的mysql主机号就填写localhost 填写好后点击测试连接 点击确定&#xff0c;mysql连接navicat成功 2.MySQL数据定义语言(DDL) DDL用于数据库…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...