golang面试题

news/2024/5/3 9:04:34

基础题

Go 的优势是什么?

  • 天然支持并发,通过Goroutine和通道实现的
  • 支持静态链接,将程序依赖的库文件在编译时直接链接到可执行文件中,形成一个独立的可执行文件,这样可执行文件就包含了所有运行所需的代码和库,无需担心依赖关系
  • 编译语言,效率更高

Go 程序中的包是什么?

数组和切片的区别是什么?

1、数组长度固定,切片长度不固定

2、数组是值类型,切片是引用类型。当切片传递给函数时,即使它是按值传递的,函数内部所做的更改在函数外部也可见

new和make的区别是什么?

channel有什么特点?和带缓冲的channel有什么区别?

什么是 Goroutine?你如何停止它?

如何在运行时检查变量类型?

defer关键字有什么作用?

什么是交叉编译?

 在一个平台上生成可以在另外一个平台执行的文件。具体命令如下:

# 要去linux下执行
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
# 要去Mac下执行
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
# 要去win下执行
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

进阶题

如何在Go语言中实现错误处理?

并发同步是什么?在Go语言中,如何实现并发同步?

Go语言中的并发安全性是什么?如何确保并发安全性?

Map是线程安全的吗?

线程不安全, 一个 goroutine 在对 map 进行写的时候,另外的 goroutine 不能进行读和写操作

Go语言的泛型是什么,它们有什么用途?

在Go语言中,如何进行网络编程?

GMP指的是什么?

Go 语言中 GC 的流程是什么?

互斥锁(Mutex)

使用场景:写操作频繁

什么是Mutex互斥锁?它在并发编程中的作用是什么?

Mutex互斥锁是一种并发控制机制,用于保护共享资源的访问,以防止多个goroutine同时对该资源进行修改。它提供了两个基本操作:Lock和Unlock。当一个goroutine获得了Mutex的锁时,其他goroutine将被阻塞,直到该goroutine释放了锁。

Mutex 几种状态
Mutex 正常模式和饥饿模式

正常模式是Mutex互斥锁的默认模式。在正常模式下,Mutex采用公平的先进先出策略,保证了goroutine的公平性。当一个goroutine尝试获取锁时,如果锁处于加锁状态,该goroutine会被放入等待队列中,等待锁的释放。当锁被解锁后,等待队列中的goroutine会按照先后顺序获取锁。

Mutex 允许自旋的条件

读写锁(RWMutex)

使用场景:读操作频频率远高于写操作

有了Mutex为什么还需要RWMutex,解决了什么问题?

虽然Go语言中的Mutex互斥锁可以保证对共享资源的独占访问,但在大量并发读操作和少量并发写操作的场景下,Mutex会造成不必要的锁等待,影响性能。因此,引入了RWMutex读写锁,它在读锁占用的情况下,会阻止写操作,但不阻止读操作;在写锁占用的情况下,会阻止其他goroutine(读和写)进来,整个锁相当于由该goroutine独占。这样可以提高读操作的并发性,从而提高性能。因此,当需要明确区分reader和writer的协程场景,且是大量的并发读、少量的并发写时,可以考虑使用RWMutex替换Mutex
 

RWMutex 实现
RWMutex 注意事项

http://www.mrgr.cn/p/37023308

相关文章

基于信息安全的软测工具链解决方案

伴随着汽车与外界的交互手段不断丰富,车联网相关设备、系统间的数据交互更加频繁,万物互联下的网络攻击也逐渐渗透延伸到车联网的领域。汽车行业面临着重大的信息安全挑战。此外,UNECE WP.29 R155和ISO/SAE 21434标准也对汽车的信息安全提出了规范化的要求,旨在产品全生命周…

Linux 网络编程项目--简易ftp

主要代码 config.h #define LS 0 #define GET 1 #define PWD 2#define IFGO 3#define LCD 4 #define LLS 5 #define CD 6 #define PUT 7#define QUIT 8 #define DOFILE 9struct Msg {int type;char data[1024];char secondBuf[128]; }; 服务器: #i…

GIS融合之路(六)-Cesium的雨雪风雷电效果

终于来到系列第六篇了,也来到大家最喜闻乐见天气效果 系列传送门: 山海鲸可视化:GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns? 山海鲸可视化:GIS融合之路(二)CesiumJS和ThreeJS深度缓冲区整合 山海鲸可视化:GIS融合之路(三)CesiumJS和ThreeJS相机同步 山海…

WPF项目使用日志

提问 WPF项目如何使用日志 回答引入nuget log4net加入配置特性[assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionarie…

编程入门(四)【计算机网络基础(由一根网线连接两个电脑开始)】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言两个电脑如何互连呢?集线器、交换机与路由器总结 前言 当你有…

实验一——椰子视频app原型设计

一、对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点。 (1)Axure的优缺点 1.主要优点 Axure作为老牌的原型图工具,功能最齐全,交互最多样,基本任何想要的效果都可以实现,尤其在制作PC端原型图上有优势。 2.主要缺点 Axure缺点同样也相当明显,Axure的…

Docker操作容器打包(commit),压缩(save),挂载(load)

文章目录 前言一、容器打包二、将镜像压缩成tar包三、将tar包挂载为镜像结束 前言 将容器打包成镜像时,你正在将应用程序及其所有依赖项、文件和配置文件捆绑到一个可移植的、独立的单元中。这样做可以确保您的应用程序在不同环境中具有一致的运行方式,…

SQL server跨库链接服务器

SQL server进阶技能篇:SQL的跨库查询与链接服务器 - 知乎 (zhihu.com)各位小伙伴们,关于MSSQL的基本技能篇前面一共写了10篇,也基本上算是告一段落,接下来将开始介绍进阶技能篇。在构思这个进阶技能篇的时候,一直在考虑先写哪个,其实到看到这部分内容能理解的人,基本上对…

cesium 解决带高度的polygon 材质不能透明的问题

问题描述:创建一个带高度的polygon,用一个带透明度的图片做材质,画出来的多边形没有透明效果,图片的透明通道没有用上。 一、创建不带高度polygon 不带高度的polygon,使用带透明度的图片是有效果的,但是不…

8-01. 逻辑调整及补充内容

实现音量修改 修改 AudioManager修改 UIManager实现结束游戏 修改 EventHandler修改 UIManager修改 Player修改 NPCMovement修改 TimeManager修改 AudioManager修改 SaveLoadManager修改 TransitionManager解决游戏刚开始时NPC有移动的问题 修改 NPCMovement增加初始箱子解决箱…

年龄与疾病c++

题目描述 某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18岁、19-35岁、36-60岁、61以上(含61)四个年龄段统计的患病人数以及占总患病人数的比例。 输入 共2行,第一行为过…

(学习)godot4.2 Android调试

1 勾选远程部署 2 安装 Android 构建模板 3 cmd 运行以下命令获取 debug.keystorekeytool -keyalg RSA -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 99…

NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估

目录 一、说明 二、Deepset SQUAD是个啥? 三、问答系统(QA系统),QA系统在各行业的应用及基本原理 3.1 医疗 3.2 金融 3.3 顾客服务 3.4 教育 3.5 制造业 3.6 法律 3.7 媒体 3.8 政府 四、在不同行业使用QA系统的基本原理 五、关于…

visual studio连接ubuntu不成功原因(SSH问题)及解决办法

原因1: 网络没有互通(一般VMware) 使用ping来看网络是不是可以互通,例如: //这里的ip是ubuntu的ip,也可以从ubuntu的客户端ping一下当前主机 ping 192.168.1.101原因2: SSH没有密钥&#xf…

机器学习在安全领域的应用:从大数据中识别潜在安全威胁

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

爬虫 | 垃圾处理设施数据的获取与保存

Hi,大家好,我是半亩花海。本项目通过发送网络请求(requests),从指定的 URL 获取垃圾处理设施的相关数据,并将数据保存到 CSV 文件中,以供后续分析和利用。 目录 一、项目结构 二、详细说明 三…

[8] UE C++ Mario

创建了盒子 , 定义了盒子的碰撞位置能在if里面直接声明赋值局部变量 但不能赋值成员变量 friend关键词应用 导入类的时候如果是灰色就删掉 , 并且查看头文件

obsidian和typora图片兼容问题

1.打开obsidian的第三方插件-->插件市场 找到Custom Attachment Location下载(当然这个也是需要一点魔法的)2.配置obsidian的文件与链接3.配置obsidian的Custom Attachment Location插件4.typora的文件路径 配置一样即可最后对比,两个程序之间可以相互查看文件了

VS2015 查找结果明细没显示问题

今天使用VS2015查找数据的时候,只显示了统计结果,没显示明细 找了下解决方案,需要修改注册表配置 1.打开注册表以下路径 HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32 2.将默认值修改为 TextMgrP.dll 文件所在路径 例如: C…

Python教学入门:函数

在 Python 中,def 关键字用于定义函数。函数是一段可重用的代码块,用于执行特定的任务或操作。通过定义函数,可以将一段代码封装起来,使其可以在程序中被多次调用,提高代码的复用性和可维护性。 下面是 def 函数定义的…