golang面试题

基础题

Go 的优势是什么?

  • 天然支持并发,通过Goroutine和通道实现的
  • 支持静态链接,也就是把依赖也打到可执行文件
  • 编译语言,效率更高,相对于php、、python、js

Go 程序中的包是什么?

相当于php中的命名空间 + 类库

make和new有什么区别?

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

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

2、数组是值类型,切片是引用类型。当切片传递给函数时,即使它是按值传递的,实际还是引用传递

channel有什么作用?

负责协程间通信

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

协程。使用context包停止

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

反射

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语言中实现错误处理?

通过error 接口,处理非致命性错误,例如打开一个不存在的文件、例如网络请求失败需要重试

通过panic,处理致命错误,需要立即中断,例如数据库挂了

推荐方式:尽量使用error

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

多个线程或协程并发执行。golang使用goroutine+channel来实现,需要考虑以下问题:

1、开启协程使用goroutine

2、协程间通信使用channel

3、数据竞争处理使用互斥锁(Mutex)、读写锁(RWMutex)、原子操作(Atomic)

例外:尽量避免使用全局变量

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

数据竞争问题。见上题3

Map是线程安全的吗?

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

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

编写模板适应所有类型,简化代码,否则就需要用接口和类型断言。从1.18版本之后才支持

什么是反射,什么场景使用?

反射是指在程序运行时检查变量和值的类型,并且可以改变它们的值或者调用它们的方法。

使用场景:

1、结构体转json时换key的别名

2、判断变量类型执行不同的方法,如1.18版本之前实现泛型
 

如何进行垃圾回收的?

三色标记原理、写屏障

GMP调度流程

原子操作和锁的区别

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

使用net包

互斥锁(Mutex)

使用场景:写操作频繁

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

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

读写锁(RWMutex)

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

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

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

什么是 sync.Once

只执行一次,类似单例模式

sync.Pool 有什么用

需要重复分配、回收内存的地方可以用,如数据库连接池,从而减少并复用内存

有哪些常用的包,分别用来做什么?

WaitGroup:用于等待一组goroutine执行完毕,可以确保主goroutine不会过早退出

package mainimport ("fmt""sync""time"
)func worker(id int, wg *sync.WaitGroup) {defer wg.Done()time.Sleep(time.Second)
}func main() {var wg sync.WaitGroupfor i := 1; i <= 3; i++ {wg.Add(1)go worker(i, &wg)}wg.Wait()fmt.Println("All workers finished")
}

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

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

相关文章

【OpenGL实验】在python、Qt5、pyOpenGL程序的若干要点

实验效果图: 代码 目录 一、说明二、关于QGLWidget2.1 三个方便的虚函数2.2 析构函数2.3 QGLWidget析构函数三、关于QGLWidget的三个虚函数分工3.1 initializeGL:数据准备、数据绑定分离3.2 resizeGL:视角改变函数3.3 paintGL:绘画函数四、主窗口的配合:刷新周期的设定4…

求两数的最大公约数的四种方法【Java版】

Q&#xff1a;写一段代码&#xff0c;求出两个整数的最大公约数&#xff0c;尽量优化算法的性能 一、暴力枚举 public static int gcd(int a,int b){int big a > b ? a : b;int small a < b ? a : b;if(big % small 0){return small;}for(int i small / 2;i > …

git 冲突与解决冲突

目录 1.使用 git 解决冲突 GIT 常用命令 制造冲突 解决冲突 2.使用 IDEA 解决冲突 产生冲突 解决冲突 1.使用 git 解决冲突 GIT 常用命令 命令作用git clone克隆git init初始化git add 文件名添加到暂存区git commit -m " 日志信息" 文件名提交到本地库git st…

记录一个Maxwell采集MySQL数据时报安全证书时间不通过的问题

【背景描述】 我的zk&#xff0c;kafka和Maxwell都正常启动了 此时我需要用Maxwell将MySQL的一张表user_info将其全量同步到kafka当中时发生报错&#xff0c;命令如下&#xff1a; [atguiguhadoop102 datas]$ /opt/module/maxwell/bin/maxwell-bootstrap --database gmall --…

ACE Lab 数据恢复/数据取证技术交流研讨会

2024年4月20-21日&#xff0c;ACE Lab 数据恢复/数据取证技术交流研讨会在北京举行&#xff0c;天津鸿萌科贸发展有限公司参加了这次技术研讨会。 ACE Lab 的 PC-3000 系列产品是数据恢复及取证领域的顶级工具&#xff0c;深受领域内专家的推崇。 本次技术交流带来了如下最新技…

【Python-装饰器】

Python-装饰器 ■ 简介■ 装饰器的一般写法&#xff08;闭包写法&#xff09;■ 装饰器的语法 (outer写法) ■ 简介 装饰器其实是一种闭包&#xff0c; 功能就是在不破坏目标函数原有的代码和功能的前提下为目标函数增加新功能。 ■ 装饰器的一般写法&#xff08;闭包写法&am…

自定义Vue 2双向绑定指令:实现与解析

自定义Vue 2双向绑定指令&#xff1a;实现与解析 Vue.js以其简洁的语法和强大的数据绑定功能深受开发者喜爱。其中&#xff0c;内置的v-model指令实现了输入控件与数据模型之间的双向绑定&#xff0c;简化了表单交互的处理。然而&#xff0c;在某些特定场景下&#xff0c;我们…

【Rust】——通过Deref trait将智能指针当作常规引用处理

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

分享购热潮席卷而来:解析其背后的成功密码

亲爱的朋友们&#xff0c;我是微三云的周丽&#xff0c;一名专注于私域电商模式创新的探索者。 随着数字化时代的到来&#xff0c;消费者的购物行为也在不断变化&#xff0c;因此&#xff0c;企业必须不断地探索新的ying销方式&#xff0c;以xi引用户、提升xiao售额。而最近备…

SVN泄露(ctfhub)

目录 下载安装dvcs-ripper 使用SVN 一、什么是SVN&#xff1f; 使用SVN能做什么&#xff1f; 二、SVN泄露&#xff08;ctfhub&#xff09; SVN源代码漏洞的主要原因&#xff1a; 工具准备&#xff1a;dirsearch、dvcs-ripper 网络安全之渗透测试全套工具篇&#xff08;内…

asrpro 启动流程

学术用途&#xff0c;无意冒犯&#xff0c;如有冒犯&#xff0c;敬请告之&#xff0c;侵删 使用vscode 打开&#xff0c;设置断点&#xff0c;查看启动过程&#xff0c;文档中代码有详细的注释 运行语音程序 触发程序 system_hook.c ASR_CODE 事件发生时调用 system_hook.…

深入理解VGG网络,清晰易懂

深入理解VGG网络 VGG网络是深度学习领域中一个非常经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;由牛津大学的视觉几何组&#xff08;Visual Geometry Group&#xff09;提出。它在2014年的ImageNet挑战赛中取得了第二名的好成绩&#xff0c;并且在随后的许…

智慧水务能效管理系统平台/地下污水厂配电系统电气安全设计

安科瑞电气薛瑶瑶18701709087 1、引言 地下水污厂在城市建设中扮演着重要的角色,负责对城市污水和废物进行处理和排放。然而,由于地下水污厂中存在着许多危险因素,如有害气体、液体和固体废物等,因此要保证电气安全。电气安全系统是地下水污厂安全生产的重要保障措施之一,包括…

C语言进阶课程学习记录-函数参数的秘密

C语言进阶课程学习记录-函数参数的秘密 实验实验小结调用约定实验-求平均数实验-可变参数的函数小结 本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程&#xff0c;图片全部来源于课程PPT&#xff0c;仅用于个人学习记录 实验 #include <stdio.h>int func(int i, int…

MySQL学习笔记1(MySQL基础)

1.MySQL基础 1.数据库相关概念 ​ *数据库&#xff1a;存储数据的仓库&#xff0c;数据是有组织的进行存储 DtaBase(DB) ​ *数据管理系统&#xff1a;操纵和管理数据库的大型软件 DataBase Management System (DBMS) ​ *SQL&#xff1a;操作关系型数据库的编程语言&#…

初始C++

1. C关键字(C98) C总计63个关键字&#xff0c; C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我们学到以后再 细讲。 2. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;…

JAVA学习笔记28(常用类)

1.常用类 1.1 包装类 1.包装类的分类 ​ 1.针对八中基本数据类型相应的引用类型–包装类 ​ 2.有了类的特点&#xff0c;就可以调用类中的方法 2.包装类和基本数据类型的转换 ​ *装箱&#xff1a;基本类型 --> 包装类型 //手动装箱 int n1 100; Integer integer ne…

【C语言__函数栈帧的创建和销毁__复习篇9】

目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 前言 本篇主要讨论以下问题&#xff1a; 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的&#xff0c;传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数…

电商平台业务及架构演变史

不少人认为电商系统很简单&#xff0c;因为现在做电商的太多了&#xff0c;看到的电商产品也多。看来看去产品都差不多&#xff0c;没什么特别。 其实中国电商发展已有20多年历史&#xff0c;电商以销售为核心连接着研、产、供、销、服整套的信息系统体系。其中的设计并没有那…

企业公众号数量怎么申请

一般可以申请多少个公众号&#xff1f;许多用户在申请公众号时可能会遇到“公众号显示主体已达上限”的问题。这是因为在2018年11月16日对公众号申请数量进行了调整&#xff0c;具体调整如下&#xff1a;1、个人主体申请公众号数量上限从2个调整为1个。2、企业主体申请公众号数…