GO面试必须得会的137个面试题

2023-11-08

1、go的调度
2、go struct能不能比较

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

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、点赞系统设计

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GO面试必须得会的137个面试题 的相关文章

  • 在 Go 中修改导入的库

    我的问题 弹性节拍 https www elastic co products beats是一个用 Go 编写的日志传送程序的开源项目 它具有多种日志输出功能 包括控制台 Elasticsearch 和 Redis 我想将我自己的输出添加到
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • 使用 google.protobuf.Timestamp 在 Go 中解析带有时区偏移的日期时间戳

    我正在创建一个将使用 GRPC 和 protobuf 的 Go 应用程序 我的 RPC 服务应获取包含类型的消息google protobuf Timestamp 解析它并最终将其保存在数据库中或对其执行更多操作 我对什么被认为是该类型的有
  • Google Cloud Kubernetes 上任务队列的替代方案

    我发现任务队列主要用于App Engine标准环境 我正在将现有服务从 App Engine 迁移到 Kubernetes 任务队列的一个好的替代方案是什么 推送队列是当前正在使用的队列 我在线阅读文档并浏览了此链接 何时使用 PubSub
  • 无需时间即可生成随机字符串?

    我知道如何使用 Runes 和播种 rand Init 在 go 中生成随机字符串time UnixNano 我的问题是 是否可以 使用 stdlib 在不使用当前时间戳 安全 的情况下播种 rand 此外 我问 因为仅仅依靠时间来为敏感操
  • Golang标志:忽略丢失的标志并解析多个重复的标志

    我是 Golang 新手 一直无法使用 flag 找到这个问题的解决方案 如何使用 flag 以便我的程序可以处理此类调用 其中 term 标志可能出现可变次数 包括 0 次 myprogram f flag1 myprogram f fl
  • 在 Go 中生成随机、固定长度的字节数组

    我有一个字节数组 固定长度为4 token make byte 4 我需要将每个字节设置为随机字节 我怎样才能以最有效的方式做到这一点 这math rand就我而言 方法不提供随机字节函数 也许有一种内置的方法 或者我应该生成一个随机字符串
  • 初始化嵌套匿名结构

    我有一个 json 作为 fields time id status customerId additionalDetail pageInfo start 0 rows 1000 我想将我的结构编组到上面的 json 并创建如下结构 typ
  • 检查值是否实现接口的说明

    我读过 Effective Go 和其他类似这样的问答 golang接口合规性编译类型检查 https stackoverflow com questions 17994519 golang interface compliance com
  • 如何在 Go 中解组具有多个项目的简单 xml?

    我想从以下 xml 中获取人物 People 的一部分
  • GOPATH值设置

    我用go1 3 1 windows amd64 msi安装go 安装后GOROOT是默认设置 我发现 D Programs Go bin 在 PATH 中 然后我创建一个 GOPATH 环境变量 使用 go get 命令时 出现错误 软件包
  • 展平嵌套结构会导致切片的切片

    所以我有一个像这样的结构 type Bus struct Number string Name string DirectStations Station Station is another struct ReverseStations
  • 我怎么知道我的所有 goroutine 确实正在使用 golang 的同步包等待一个条件

    我有一个应用程序 我正在创建多个 goroutine 来同时执行某个任务 所有工作协程都会等待条件 事件发生 一旦事件被触发 它们就会开始执行 创建完所有goroutines后 主线程在发送广播信号之前应该知道所有goroutines确实处
  • 模板中的 bson.ObjectId

    我有一个具有 bson ObjectId 类型的结构 例如如下所示 type Test struct Id bson ObjectId Name string Foo string 我想在 html 模板中呈现它 Name Food a h
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 如何使信号量超时

    Go 中的信号量是通过通道来实现的 一个例子是这样的 https sites google com site gopatterns concurrency semaphores https sites google com site gop
  • Golang中按长度分割字符串

    有谁知道如何在 Golang 中按长度分割字符串 例如 每 3 个字符分割 helloworld 那么理想情况下它应该返回一个 hel low orl d 数组 或者 一个可能的解决方案是在每 3 个字符后附加一个换行符 所有的想法都非常感
  • Golang 正则表达式在字符串之间替换

    我有一些可能采用以下形式的字符串 MYSTRING MYSTRING n MYSTRING n MYSTRING randomstringwithvariablelength n 我希望能够将其正则表达式为MYSTRING foo 基本上替
  • 如何关闭 gorm 1.20.0 中的数据库实例

    由于我没有在 Close 函数中找到 gorm 实例 任何帮助将不胜感激 dbURI fmt Sprintf user s password s dbname s port s sslmode s TimeZone s username p
  • 在 Gorilla Mux 中嵌套子路由器

    我一直在使用gorilla mux https github com gorilla mux满足我的路由需求 但我注意到一个问题 当我嵌套多个子路由器时它不起作用 这是示例 func main r mux NewRouter StrictS

随机推荐

  • 【转】英文论文审稿意见汇总

    转自 海岩秋沙 的QQ空间 以下是从一个朋友转载来的 关于英文投稿过程中编辑给出的意见 与大家一起分享 以下12点无轻重主次之分 每一点内容由总结性标题和代表性审稿人意见构成 1 目标和结果不清晰 It is noted that your
  • 亿流量大考(4):自研ES+HBase+纯内存的高性能毫秒级查询引擎

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 前情回顾 上篇文章 亿流量大考 3 不加机器 如何抗住每天百亿级高并发流量 聊了一下系统架构中 百亿流量级别高并发写入场景下 如何承载这种高并发写入 同时如何在高
  • 7款家用智能摄像头横评:小米、乐橙、TP-LINK、海康威视、360、智汀、华为

    相信很多人都买过家用监控摄像头 有的是为了及时查看家里的老人孩子的动态 有的是为了看家里宠物 遇到小偷时还能拍下面貌 但市场上五花八门的监控摄像头 各种功能让人看花了眼 于是呢 为了让大家更了解智能摄像头 今天我们来测下市面上比较靠前小米
  • games103——作业2

    实验二主要使用隐式积分法以及PBD法完成布料仿真 完整项目已上传至github 文章目录 基于物理的方法 弹簧系统 单个弹簧 多个弹簧 弹簧网络 结构化弹簧网络 Structured Spring Networks 非结构化弹簧网络 Uns
  • lua中的math类库

    Lua5 1中数学库的所有函数如下表 math pi 为圆周率常量 3 14159265358979323846 abs 取绝对值 math abs 15 15 acos 反余弦函数 math acos 0 5 1 04719755 asi
  • 编程语言发展简史

    编程语言发展简史 一 编程的起源 二 第一代计算机语言 机器语言 三 第二代计算机语言 汇编语言 四 第三代计算机语言 高级语言 2022年4月 TIOBE编程排行榜 https www tiobe com tiobe index 高级语言
  • 16进制换成10进制 c语言 单片机,单片机入门之三种进制的转换

    单片机使用的两大进制表示形式 十进制和十六进制 这里使用十进制的数据 这里使用十六进制的数据 十进制一般用于运算 表示形式就是直接写 例如上面的1701 十六进制一般用于配置单片机的寄存器 表示形式是在数字前面加0x 例如上面的0xC0 0
  • 自定义信号槽机制

    自定义信号槽机制 自定义信号 自定义槽 自定义信号和槽函数的使用 解决办法 如果想要在QT类中自定义信号槽 需要满足一些条件 并且有些事项也需要注意 要编写新的类并且让其继承Qt的某些标准类 这个新的子类必须从QObject类或者是QObj
  • demo演示是什么意思_十分钟学会制作动态Demo

    一 设计师为什么要会做动态Demo 1 提高沟通协作效率 日常工作中 如果只是用文字和图片来表达Demo的动态逻辑 简单一些的效果 比较容易表达 但一些相对较为复杂的效果 就比较困难了 如下图 是在某项目中的模块动态交互说明 不知道这样表达
  • 异常检测(二)——IsolationForest

    1 简介 孤立森林 Isolation Forest 是另外一种高效的异常检测算法 它和随机森林类似 但每次选择划分属性和划分点 值 时都是随机的 而不是根据信息增益或者基尼指数来选择 在建树过程中 如果一些样本很快就到达了叶子节点 即叶子
  • Google Chrome “网站连接不安全”NET::ERR_CERT_AUTHORITY_INVALID

    Chrome 浏览器打开任何网站显示 网站连接不安全 报错 NET ERR CERT AUTHORITY INVALID 具体操作方法如下 1 运行输入cmd 右击以管理员身份运行命令提示符 2 输入 netsh winsock reset
  • Android Studio远程连接模拟器调试

    目录 需求 ADB端口说明 远程连接步骤 启动模拟器 ADB连接 端口映射 远程连接 需求 Android Studio 高版本已经可以使用 Pair Devices Using Wi fi 功能连接同一局域网下的真机设备了 低版本也可以使
  • 时序预测

    时序预测 MATLAB实现GWO LSTM灰狼算法优化长短期记忆神经网络时间序列预测 目录 时序预测 MATLAB实现GWO LSTM灰狼算法优化长短期记忆神经网络时间序列预测 预测效果 基本介绍 模型描述 程序设计 参考资料 预测效果 基
  • 从0搭建Vue3组件库(五): 如何使用Vite打包组件库

    本篇文章将介绍如何使用 vite 打包我们的组件库 同时告诉大家如何使用插件让打包后的文件自动生成声明文件 d ts 打包配置 vite 专门提供了库模式的打包方式 配置其实非常简单 首先全局安装 vite 以及 vitejs plugin
  • Java API操作HDFS文件,利用Junit单元测试

    操作HDFS文件 约有以下两种方法 1 shell 这个相信大家基本都会 2 Java API 的操作 这次主要记录下Java API操作HDFS文件的相关测试 环境 IDEA JDK10 0 1 虚拟机centos 版本 hadoop2
  • XML 和 JSON 学习笔记(基础)

    XML Why XML 的出现背景 在实际开发中 不同语言 如Java JavaScript等 的应用程序之间数据传递的格式不同 导致它们进行数据交换时很困难 XML就应运而生了 XML 是一种通用的数据交换格式 可以十分方便地实现格式交换
  • 亚稳态的消除及解决方法

    亚稳态产生 我们就要对亚稳态进行消除 常用对亚稳态消除有三种方式 1 对异步信号进行同步处理 2 采用FIFO对跨时钟域数据通信进行缓冲设计 3 对复位电路采用异步复位 同步释放方式处理 1 对异步信号进行同步处理 input sig ns
  • ConnectionString 属性尚未初始化

    ConnectionString 属性尚未初始化 的另类解决办法现在稍微熟悉Asp net的朋友都习惯把数据库连接配置写到web config中 这样的优点主要是能随时更改数据库配置 比如帐号密码 而不用再编译 web config中的数据
  • 古典概型——概率论与数理统计(宋浩)

    事件的概率 1 2 1概率的初等描述 概率的定义 事件发生的可能性的大小 P A 性质 P 1 P 0 规范性 0 lt P A lt 1 非负性 有限可加 A1 A2 A3 An互不相容 P A1 A2 A3 A4 P A1 P A2 P
  • GO面试必须得会的137个面试题

    go的调度 go struct能不能比较 因为是强类型语言 所以不同类型的结构不能作比较 但是同一类型的实例值是可以比较的 实例不可以比较 因为是指针类型 go defer for defer 先进后出 后进先出 func b for i