当前位置: 首页 > 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用于数据库…...

图像格式解析:RAW、RGB、YUV的优缺点与应用场景

1. 为什么需要了解图像格式&#xff1f; 第一次接触图像处理时&#xff0c;我完全被各种格式搞晕了。为什么拍出来的照片有RAW格式&#xff0c;手机截图却是JPEG&#xff1f;为什么视频压缩要用YUV而不是RGB&#xff1f;这些问题困扰了我很久。后来在实际项目中踩过几次坑才明白…...

解密Minecraft源码:DecompilerMC反编译工具完整指南

解密Minecraft源码&#xff1a;DecompilerMC反编译工具完整指南 【免费下载链接】DecompilerMC This repository allows you to decompile any minecraft version that was published after 19w36a without any 3rd party mappings, you just need to execute the script or th…...

Web Components 实战:构建原生可复用组件

摘要&#xff1a;在 React、Vue 等框架百花齐放的今天&#xff0c;Web Components 作为浏览器原生支持的组件化方案&#xff0c;正悄然回归。本文将带你从零开始&#xff0c;使用原生技术栈构建可复用的 Web Components&#xff0c;让你的组件真正的"一次编写&#xff0c;…...

馈线自动化(FA)如何重塑现代配电网?核心价值与技术路径解析

1. 馈线自动化&#xff1a;配电网的"智能医生" 想象一下凌晨三点你家突然停电的场景。传统配电网下&#xff0c;抢修人员需要逐段排查故障点&#xff0c;可能几小时后才能恢复供电。而配备了馈线自动化&#xff08;FA&#xff09;的智能配电网&#xff0c;能在90秒内…...

万物识别镜像效果展示:实测识别小麦条锈病,准确率超96%

万物识别镜像效果展示&#xff1a;实测识别小麦条锈病&#xff0c;准确率超96% 1. 从田间到屏幕&#xff1a;AI如何一眼看穿小麦病害 清晨的麦田里&#xff0c;农技员小李发现一片叶片上出现了奇怪的黄色斑点。传统做法需要采集样本送回实验室&#xff0c;等待3-5天才能出结果…...

告别熬夜守候:DouyinLiveRecorder让40+平台直播录制全自动

告别熬夜守候&#xff1a;DouyinLiveRecorder让40平台直播录制全自动 【免费下载链接】DouyinLiveRecorder 可循环值守和多人录制的直播录制软件&#xff0c;支持抖音、TikTok、Youtube、快手、虎牙、斗鱼、B站、小红书、pandatv、sooplive、flextv、popkontv、twitcasting、wi…...

大模型跨云推理延迟骤降62%:揭秘某千亿级AI平台落地K8s+Istio+OSS联邦的5步标准化流水线

第一章&#xff1a;大模型工程化跨云部署最佳实践 2026奇点智能技术大会(https://ml-summit.org) 大模型跨云部署已从概念验证阶段迈入规模化生产落地关键期。面对异构云环境&#xff08;如 AWS、Azure、阿里云、华为云&#xff09;的网络策略、存储接口、GPU驱动栈及安全合规…...

终极指南:Tectonic引擎中的现代字体处理技术详解

终极指南&#xff1a;Tectonic引擎中的现代字体处理技术详解 【免费下载链接】tectonic A modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive. 项目地址: https://gitcode.com/gh_mirrors/te/tectonic Tectonic作为一款现代化的TeX…...

像素特工Ostrakon-VL部署遇挫?5分钟看懂err.log定位加载失败

像素特工Ostrakon-VL部署遇挫&#xff1f;5分钟看懂err.log定位加载失败 1. 为什么需要关注err.log&#xff1f; 当你兴致勃勃地部署好像素特工Ostrakon-VL这个充满游戏感的零售场景分析工具&#xff0c;却发现Web界面一片空白或者报错时&#xff0c;第一反应可能是"哪里…...

DeepSeek-R1-Distill-Qwen-1.5B实战:快速搭建智能对话服务

DeepSeek-R1-Distill-Qwen-1.5B实战&#xff1a;快速搭建智能对话服务 1. 模型介绍与核心优势 DeepSeek-R1-Distill-Qwen-1.5B是DeepSeek团队基于Qwen2.5-Math-1.5B基础模型&#xff0c;通过知识蒸馏技术融合R1架构优势打造的轻量化版本。该模型在保持高性能的同时&#xff0…...