Go语言面试题汇总[通俗易懂]

Go语言面试题汇总[通俗易懂]正在准备golang面试的小伙伴,很荣幸,你能看到这篇文章,希望每一个看到这篇分享的小伙伴都能找到自己称心如意的工作!1、说说go语言的main函数(1)、main函数不能带参数。(2)、main函数不能定义返回值。(3)、main函数所在的包必须为main包。(4)、main函数中可以使用flag包来获取和解析命令行参数。2、在go语言中,new和make的区别?new函数是内建函…

大家好,又见面了,我是你们的朋友全栈君。

正在准备golang面试的小伙伴,很荣幸,你能看到这篇文章,希望每一个看到这篇分享的小伙伴都能找到自己称心如意的工作!

1、说说go语言的main函数
(1)、main函数不能带参数。

(2)、main函数不能定义返回值。

(3)、main函数所在的包必须为main包。

(4)、main函数中可以使用flag包来获取和解析命令行参数。

2、在go语言中,new和make的区别?

new函数是内建函数,函数定义为

func new(Type) *Type 

new 的作用是初始化一个指向类型的指针(*Type ),使用new函数来分配空间。传递给new 函数的是一个类型,不是一个值。返回值是 指向这个新分配的零值的指针。

make函数是内建函数,函数定义为

func make(t Type, size ...IntegerType) Type

make 的作用是为 slice,map 或 chan 初始化并返回引用(Type)。 第一个参数是一个类型,第二个参数是长度。

make(T, args)函数的目的与new(T)不同。它仅仅用于创建 Slice, Map 和 Channel,并且返回类型是 T(不是T*)的一个初始化的(不是零值)的实例。

3、说说go语言中的switch语句?

单个case中,可以出现多个结果选项。

只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case

4、说说go语言中的for循环?

for循环支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环。

for循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量 。

5、go语言中指针运算有哪些?

(1)、可以通过“&”取指针的地址。

(2)、可以通过“*”取指针指向的数据。

6、说说go语言中的协程?

(1)、协程和线程都可以实现程序的并发执行;

(2)、通过channel来进行协程间的通信;

(3)、只需要在函数调用前添加go关键字即可实现go的协程,创建并发任务;

(4)、关键字go并非执行并发任务,而是创建一个并发任务单元;

7、’go语言中的引用类型包含哪些?

数组切片、字典(map)、通道(channel)、接口(interface)

8、说说go语言中的init函数?
(1)、一个包中,可以包含多个init函数

(2)、程序编译时,先执行导入包的init函数,再执行本包内的init函数

9、 说说go语言的同步锁?

(1) 当一个goroutine获得了Mutex后,其他goroutine就只能乖乖的等待,除非该goroutine释放这个Mutex

(2) RWMutex在读锁占用的情况下,会阻止写,但不阻止读

(3) RWMutex在写锁占用情况下,会阻止任何其他goroutine(无论读和写)进来,整个锁相当于由该goroutine独占

10、说说go语言的关于go vendor?

(1)、基本思路是将引用的外部包的源代码放在当前工程的vendor目录下面
(2)、编译go代码会优先从vendor目录先寻找依赖包

(3)、有了vendor目录后,打包当前的工程代码到其他机器的$GOPATH/src下都可以通过编译

11、说说go语言的channel特性?

(1)、给一个 nil channel 发送数据,造成永远阻塞

(2)、 从一个 nil channel 接收数据,造成永远阻塞

(3) 、给一个已经关闭的 channel 发送数据,引起 panic

(4)、从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值

(5)、无缓冲的channel是同步的,而有缓冲的channel是非同步的

12、说说go语言的select机制?

(1)、select机制用来处理异步IO问题

(2)、select机制最大的一条限制就是每个case语句里必须是一个IO操作

(3)、golang在语言级别支持select关键字

13、说说go语言的goconvey框架?

(1)、goconvey是一个支持golang的单元测试框架

(2)、goconvey能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面

(3)、goconvey提供了丰富的断言简化测试用例的编写

14、协程,线程,进程的区别?

进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。

线程

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

协程

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

15、 Golang的内存模型,为什么小对象多了会造成gc压力。

通常小对象过多会导致GC三色法消耗过多的GPU。优化思路是,减少对象分配.

16、并发编程概念是什么?

并行是指两个或者多个事件在同一时刻发生;并发是指两个或多个事件在同一时间间隔发生。

发偏重于多个任务交替执行,而多个任务之间有可能还是串行的。而并行是真正意义上的“同时执行

并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。

17、读写锁或者互斥锁读的时候能写吗?

Go中读写锁包括读锁和写锁,多个读线程可以同时访问共享数据;写线程必须等待所有读线程都释放锁以后,才能取得锁;同样的,读线程必须等待写线程释放锁后,才能取得锁,也就是说读写锁要确保的是如下互斥关系,可以同时读,但是读-写,写-写都是互斥的。

18、Log包线程安全吗?

Golang的标准库提供了log的机制,但是该模块的功能较为简单(看似简单,其实他有他的设计思路)。在输出的位置做了线程安全的保护。

19、主协程如何等其余协程完再操作?

使用channel进行通信,context,select。

20、slice,len,cap,共享,扩容

append函数,因为slice底层数据结构是,由数组、len、cap组成,所以,在使用append扩容时,会查看数组后面有没有连续内存快,有就在后面添加,没有就重新生成一个大的素组。

21、map如何顺序读取

map不能顺序读取,是因为他是无序的,想要有序读取,首先的解决的问题就是,把key变为有序,所以可以把key放入切片,对切片进行排序,遍历切片,通过key取值。

22、context包的用途

Context通常被译作上下文,它是一个比较抽象的概念,其本质,是【上下上下】存在上下层的传递,上会把内容传递给下。在Go语言中,程序单元也就指的是Goroutine。

在这里插入图片描述
(微信公众号【程序猿编码】)

在这里插入图片描述
(添加本人微信号,备注加群,进入程序猿编码交流群,领取学习资料,获取每日干货)

微信公众号【程序猿编码】,这里Linux c/c++ 、Python、Go语言、数据结构与算法、网络编程相关知识,常用的程序员工具。还有汇聚精炼每日时政、民生、文化、娱乐新闻简报,即刻知晓天下事!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149984.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据库系统原理——概述「建议收藏」

    数据库系统原理——概述「建议收藏」穷则独善其身,达则兼济天下一.什么是数据库狭义:存储数据的仓库广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库数据库是由表、关系、操作组成二.为什么需要数据库几乎所有的应用软件的后台都需要数据库数据存储数据占用空间小,容易持久保存数据库的内容是存储在硬盘上,掉电之后任然存在存储比较安全软件是加密的,只能通过DBMS打开容易维护和升级使用SQL语句方便操作数据数据库移植比较容易简化对数据的操作为将来学习Oracle做准备.

  • HTML导航栏的四种制作方法,jQuery+CSS3实现四种应用广泛的导航条制作实例详解

    HTML导航栏的四种制作方法,jQuery+CSS3实现四种应用广泛的导航条制作实例详解导航条的使用很广,每个网站都会做出具有自己特色的导航条。最近特地去了解了各种类型的导航条,比如具有高亮显示的导航条,中英文互相切换的导航条,具有弹性动画的导航条,甚至是具有摩擦运动动画的导航条(文字下面有横线)等。每种导航条都有自己的特色,比如高亮显示的导航条看起来比较简单,但是视觉效果还不错,具有动画效果的导航条在视觉上也是有很好的效果。接下来将会一一介绍4种应用比较广的导航条,即:高亮显示的导…

  • 虚拟机连接本地数据库

    虚拟机连接本地数据库我们在运行虚拟机上面的项目时,可能要用到本机的数据库,在使用过程中会遇到数据库拒绝访问的情况,这是因为在安装本地数据库时没有启动远程连接。使用两种方法来解决这种问题一、使用命令行模式  第一步先切换到MySQL的安装路径下面的bin目录(我的MySQL的安装路径为D:\MySQL\MySQLServer5.6\bin);第二步登录到mysql中连接本地数据库mysql…

  • futex的使用_fuel开关

    futex的使用_fuel开关futex_t::wake实际是一个计数器,防止在调用futex_wait函数前调用futex_wake而出现的死等现象,函数futex只在满足(*addr1==val)时等待。futex_wait函数与futex_wake函数配合使用,前者等待后者唤醒。futex_lock函数与futex_unlock函数配合使用,前者加锁后者解锁。应该是对数据加锁,而不应该对代码

  • 奈奎斯特采样定理(Nyquist)「建议收藏」

    奈奎斯特采样定理(Nyquist)「建议收藏」采样定理在1928年由美国电信工程师H.奈奎斯特首先提出来的,因此称为奈奎斯特采样定理。1933年由苏联工程师科捷利尼科夫首次用公式严格地表述这一定理,因此在苏联文献中称为科捷利尼科夫采样定理。1

  • python停用词表整理_python停用词表

    python停用词表整理_python停用词表广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!stop_words:设置停用词表,这样的词我们就不会统计出来(多半是虚拟词,冠词等等),需要列表结构,所以代码中定义了一个函数来处理停用词表…前言前文给大家说了python机器学习的路径,这光说不练假把式,这次,罗罗攀就带大家完成一个中文文本情感分析的机器学习项目,今天的流程如…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号