您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Go语言

go语言137道面试题整理汇总

时间:2020-08-05 10:59:12  来源:  作者:

1、go的调度

2、go struct能不能比较

Go语言中文文档:www.topgoer.com

因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型

3、go defer(for defer),先进后出,后进先出

func b() {
    for i := 0; i < 4; i++ {
        defer fmt.Print(i)
    }
}

4、select可以用于什么,常用语gorotine的完美退出

golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作
每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作

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

6、client如何实现长连接

    server是设置超时时间,for循环遍历的

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

使用channel进行通信,context,select

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

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

9、map如何顺序读取

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

10、实现set

type inter interface{}
type Set struct {
    m map[inter]bool
    sync.RWMutex
}
 
func New() *Set {
    return &Set{
    m: map[inter]bool{},
    }
}
func (s *Set) Add(item inter) {
    s.Lock()
    defer s.Unlock()
    s.m[item] = true
}

11、实现消息队列(多生产者,多消费者)

使用切片加锁可以实现

12、大文件排序

归并排序,分而治之,拆分为小文件,在排序

13、基本排序,哪些是稳定的14、http get跟head

HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

15、http 401,403

400 bad request,请求报文存在语法错误
401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
403 forbidden,表示对请求资源的访问被服务器拒绝
404 not found,表示在服务器上没有找到请求的资源

16、http keep-alive

client发出的HTTP请求头需要增加Connection:keep-alive字段
Web-Server端要能识别Connection:keep-alive字段,并且在http的response里指定Connection:keep-alive字段,告诉client,我能提供keep-alive服务,并且"应允"client我暂时不会关闭socket连接

17、http能不能一次连接多次请求,不等后端返回

http本质上市使用socket连接,因此发送请求,接写入tcp缓冲,是可以多次进行的,这也是http是无状态的原因

18、tcp与udp区别,udp优点,适用场景

tcp传输的是数据流,而udp是数据包,tcp会进过三次握手,udp不需要

19、time-wait的作用

20、数据库如何建索引

21、孤儿进程,僵尸进程

22、死锁条件,如何避免

23、linux命令,查看端口占用,cpu负载,内存占用,如何发送信号给一个进程

24、git文件版本,使用顺序,merge跟rebase

26、Slice与数组区别,Slice底层结构

27、项目里的微信支付这块,在支付完微信通知这里,收到两次微信相同的支付通知,怎么防止重复消费(类似接口的幂等性),说了借助redis或者数据库的事务

28、项目里的消息推送怎么做的(业务有关)

29、Go的反射包怎么找到对应的方法(这里忘记怎么问的,直接说不会,只用了DeepEqual,简单讲了DeepEqual)

30、Redis基本数据结构

31、Redis的List用过吗?底层怎么实现的?知道但是没用过,不知道怎么实现

32、MySQL的索引有几种,时间复杂度

33、InnoDb是表锁还是行锁,为什么(这里答不出来为什么,只说了行锁)

34、Go的channel(有缓冲和无缓冲)

35、退出程序时怎么防止channel没有消费完,这里一开始有点没清楚面试官问的,然后说了监听中断信号,做退出前的处理,然后面试官说不是这个意思,然后说发送前先告知长度,长度要是不知道呢?close channel下游会受到0值,可以利用这点(这里也有点跟面试官说不明白)

36、用过什么消息中间件之类吗?没有

37、有什么问题吗?评价?后面还有面试,后面再问吧

38、生产者消费者模式,手写代码(Go直接使用channel实现很简单,还想着面试官会不会不让用channel实现,不用channel的可以使用数组加条件变量),channel缓冲长度怎么决定,怎么控制上游生产速度过快,这里没说出解决方案,只是简单说了channel长度可以与上下游的速度比例成线性关系,面试官说这是一种解决方案

39、手写循环队列

40、写的循环队列是不是线程安全,不是,怎么保证线程安全,加锁,效率有点低啊,然后面试官就提醒Go推崇原子操作和channel

41、写完代码面试官说后面问的问题回答就可以,不知道的话没关系

42、Linux会不会,只会几个命令,面试官就说一共也就一百多个命令

43、TimeWait和CloseWait原因

44、线段树了解吗?不了解,字典树?了解

45、看过啥源码,nsq(Go的消息中间件),简单问了我里面的waitgroup包证明我看过

46、sync.Pool用过吗,为什么使用,对象池,避免频繁分配对象(GC有关),那里面的对象是固定的吗?不清楚,没看过这个的源码

47、有什么问题吗?评价?基础不错,Linux尚缺,Go的理解不够深入,高级数据结构不了解,优点是看源码

48、后面面试官讲了他们做的东西,主要是广告部分,说日均数据量至少百万以上,多达上亿,高并发使用Go支撑,有微服务,服务治理,说我需要学的东西挺多的

49、证明二叉树的叶子节点跟度数为2的节点的关系

50、唯一索引和主键索引

51、智能指针

52、字符串解析为数字(考虑浮点型)

53、单点登录,tcp粘包

54、手写洗牌

55、处理粘包断包实现,面试官以为是negle算法有关,解释了下negle跟糊涂窗口综合征有关,然后面试官觉得其他项目是crud就没问了

56、goroutine调度用了什么系统调用,这个不会,面试官想从go问到操作系统,然后以为***作系统基础不好,就问了操作系统问题

57、进程虚拟空间分布,全局变量放哪里?答上来了,操作系统就不问了

58、有没有网络编程,有,怎么看连接状态?netstat,有哪些?ESTABLISHED,LISTEN等等,有异常情况吗?TIME_WAIT很多,为什么?大量短链接

59、几种基本排序算法说一下,问了堆的时间复杂度,稳定性,为什么不稳定

60、 topk问题,海量数据topk(回答成切分多次加载内存,然后用维持k长度的有序链表,然后被说时间复杂度不好,提示说还是用堆,然后哦哦哦对)最长连续字串和,这里我说的解决方案没用dp(对dp不熟),面试官一直引导我dp,还是不会

61、什么是主键62、联合索引和唯一索引

62、越多的索引越好吗?

63、建立索引要注意什么?

64、进程和线程区别?

65、死锁?

66、tcp三次握手

67、http,https

68、状态码401,301,302,201

69、项目我说只有一台机子,所以用的单机部署,面试官说单机也可以部署多个,有什么方法吗?我说Docker,问docker有哪些网络,不熟,dockerfile关键字,只答几个。顺便扯了下Nginx转发。

70、数据库隔离级别,提交读会造成什么

71、go调度

72、 goroutine泄漏有没有处理,设置timeout,select加定时器

73、mysql高可用的方案

74、进程线程区别

75、排序算法以及时间复杂度

76、怎么学习go

77、go的线程,给他讲了跟goroutine调度

78、io模型,同步阻塞,同步非阻塞,异步

79、cookie和session

实习项目
优缺点
同学的评价
兴趣爱好
有什么offer

80、接口kps测试

81、redis排行榜数据结构(跳跃表),查询时间复杂度

82、redis分布式,如何减少同步延迟

83、mysql能实现redis的功能吗

84、平时怎么学习?

85、看什么书?

86、兴趣爱好

87、看过google四篇分布式论文吗,没看过

89、cap理论,举例

90、LRU算法,LFU

91、讲讲怎么理解网络编程

92、go使用踩过什么坑(for range,数据库连接defer close)

93、go优缺点

95、go的值传递和引用

96、慢查询

97、为什么使用pg

98、redis的数据类型

99、所有左叶子节点的和

100、m个n大小的有序数组求并集,一开始是2路归并,求时间复杂度,后来在面试官提醒直接m路归并,求时间复杂度

101、static关键字,还有其他关键字吗

102、hash表设计,线程安全?

103、 线程自己独享什么

104、网络编程过程

105、select、epoll

106、看什么书

107、排行榜怎么实现

108、go的锁如何实现,用了什么cpu指令

109、go的runtime如何实现

110、看过sql的连接池实现吗

111、ctx包了解吗?有什么用?

112、go什么情况下会发生内存泄漏?(他说ctx没有cancel的时候,这个真不知道)

113、怎么实现协程完美退出?

114、智力题:1000瓶酒中有1瓶毒酒,10只老鼠,7天后毒性才发作,第8天要卖了,怎么求那瓶毒酒?

115、简单dp题,n*n矩阵从左上角到右下角有多少种走法(只限往下和往右走)

116、用channel实现定时器?(实际上是两个协程同步)

117、go为什么高并发好?讲了go的调度模型

118、操作系统内存管理?进程通讯,为什么共享存储区效率最高

119、实现一个hashmap,解决hash冲突的方法,解决hash倾斜的方法

120、怎么理解go的interface

121、100亿个数选top5,小根堆

122、数组和为n的数组对

123、最大连续子数组和

124、redis容灾,备份,扩容

125、跳跃表,为什么使用跳跃表而不使用红黑树

126、输入url后涉及什么

127、tcp怎么找到哪个套接字

128、ipc方式,共享存储区原理

130、进程虚拟空间布局

131、进程状态转换

132、线程的栈在哪里分配

133、多个线程读,一个线程写一个int32会不会有问题,int64呢(这里面试官后来说了要看数据总线的位数,32位的话写int32没问题,int64就有问题)

134、判断二叉树是否为满二叉树

135、lru实现

136、一个大整数(字符串形式表示的),移动字符求比它大的数中最小的

137、点赞系统设计



Tags:go语言 面试题   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
1、go的调度2、go struct能不能比较go语言中文文档:www.topgoer.com因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针...【详细内容】
2020-08-05  Tags: go语言 面试题  点击:(70)  评论:(0)  加入收藏
▌简易百科推荐
zip 是一种常见的归档格式,本文讲解 Go 如何操作 zip。首先看看 zip 文件是如何工作的。以一个小文件为例:(类 Unix 系统下)$ cat hello.textHello!执行 zip 命令进行归档:$ zip...【详细内容】
2021-12-17  Go语言中文网    Tags:Go语言   点击:(12)  评论:(0)  加入收藏
大家好,我是 polarisxu。前段时间,Russ Cox 明确了泛型相关的事情,原计划在标准库中加入泛型相关的包,改放到 golang.org/x/exp 下。目前,Go 泛型的主要设计者 ianlancetaylor 完...【详细内容】
2021-11-30  Go语言中文网    Tags:slices 包   点击:(24)  评论:(0)  加入收藏
前言最近因为项目需要写了一段时间的 Go ,相对于 Java 来说语法简单同时又有着一些 Python 之类的语法糖,让人大呼”真香“。 但现阶段相对来说还是 Python 写的多一些,偶尔还...【详细内容】
2021-11-25  crossoverJie    Tags:Go   点击:(29)  评论:(0)  加入收藏
go-micro是基于 Go 语言用于开发的微服务的 RPC 框架,主要功能如下:服务发现,负载均衡 ,消息编码,请求/响应,Async Messaging,可插拔接口,最后这个功能牛p安装步骤安装proto...【详细内容】
2021-09-06    石老师小跟班  Tags:go-micro   点击:(196)  评论:(0)  加入收藏
GoLand 2021.2 EAP 5 现已发布。用户可以从工具箱应用程序中获得 EAP 构建,也可以从官方网站手动下载。并且从此 EAP 开始,只有拥有有效的 JetBrains 帐户才能加入该计划。手...【详细内容】
2021-06-29  IT实战联盟  今日头条  Tags:GoLand   点击:(185)  评论:(0)  加入收藏
作者:HDT3213今天给大家带来的开源项目是 Godis:一个用 Go 语言实现的 Redis 服务器。支持: 5 种数据结构(string、list、hash、set、sortedset) 自动过期(TTL) 发布订阅、地理位...【详细内容】
2021-06-18  HelloGitHub  今日头条  Tags:Go   点击:(125)  评论:(0)  加入收藏
统一规范篇合理规划目录本篇主要描述了公司内部同事都必须遵守的一些开发规矩,如统一开发空间,既使用统一的开发工具来保证代码最后的格式的统一,开发中对文件和代码长度的控制...【详细内容】
2021-05-18  1024课堂    Tags:Go语言   点击:(232)  评论:(0)  加入收藏
闭包概述 闭包不是Go语言独有的概念,在很多编程语言中都有闭包 闭包就是解决局部变量不能被外部访问的一种解决方案 是把函数当作返回值的一种应用 代码演示总体思想:在函数...【详细内容】
2021-05-14  HelloGo  今日头条  Tags:Go语言   点击:(223)  评论:(0)  加入收藏
一时想不开,想了解一下Go语言,于是安装了并体验了一下。下载1. 进入golang.google.cn 点击Download Go 2.选择对应的操作系统,点击后开始下载。 安装1. windows下执行傻瓜式安...【详细内容】
2021-05-12  程序员fearlazy  fearlazy  Tags:Go语言   点击:(236)  评论:(0)  加入收藏
1.简介channel是Go语言的一大特性,基于channel有很多值得探讨的问题,如 channel为什么是并发安全的? 同步通道和异步通道有啥区别? 通道为何会阻塞协程? 使用通道导致阻塞的协程...【详细内容】
2021-05-10  程序员麻辣烫  今日头条  Tags:Go通道   点击:(272)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条