• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【Golang】Go 3到5年常见的面试题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、go中常量是怎么实现

2、go struct能不能比较

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

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

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

4、golang的make和new的区别是什么

new有点像c++里面的new,用来初始化各种type,然后返回其指针。 只不过由于没有构造函数的存在,所以全部用零值来填充,比较特殊的是slice,map,channel, 它们的零值都是nil。另外由于golang直接可以用&struct{} 形式来初始化,所以平时用到new的机会也比较少。
make是用来初始化map,slice,以及channel的, 它返回的不是指针,而是对象本身。另外,make出来的map,slice,channel都是可以直接使用的。

5、golang 的channel是怎么实现的

golang的channel是个结构体,里面大概包含了三大部分:
a. 指向内容的环形缓存区,及其相关游标
b. 读取和写入的排队goroutine链表
c. 锁
任何操作前都需要获得锁, 当写满或者读空的时候,就将当前goroutine加入到recvq或者sendq中, 并出让cpu(gopark)。

6、简单描述下golang的gc算法

golang现行的gc算法是三色标记法,三色指的是在gc过程中会把对象标记给黑,灰,白三色。
三色标记法是对标记-清除算法的优化,目的是减少stop the world的时间。

7、recover能处理所有的异常吗

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

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

9、context包的用途

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

10、client如何实现长连接

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

使用channel进行通信,context,select

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

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

13、map如何顺序读取

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

14、实现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
}

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

使用切片加锁可以实现

16、大文件排序

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

17、基本排序,哪些是稳定的

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

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

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

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

20、孤儿进程,僵尸进程

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

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

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

24、Mysql的索引有几种,时间复杂度

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

26、退出程序时怎么防止channel没有消费完,

27、生产者消费者模式,手写代码,channel缓冲长度怎么决定,怎么控制上游生产速度过快,这里没说出解决方案,只是简单说了channel长度可以与上下游的速度比例成线性关系

29、手写循环队列,写的循环队列是不是线程安全,不是,怎么保证线程安全,加锁,效率有点低啊,Go推崇原子操作和channel

30、TimeWait和CloseWait原因

31、看过啥源码,nsq(Go的消息中间件)waitgroup包等

32、sync.Pool用过吗,为什么使用,对象池,避免频繁分配对象(GC有关),那里面的对象是固定的吗?

33、微服务,服务治理是怎么样的 

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

35、智能指针

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

37、单点登录,tcp粘包
38、手写洗牌

39、处理粘包断包实现

40、goroutine调度用了什么系统调用?

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

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

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

44、 topk问题,海量数据topk,最长连续字串和,这里我说的解决方案没用dp(对dp不熟)

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

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

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

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

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

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

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

58、平时怎么学习?

59、看过google四篇分布式论文吗?

60、cap理论,举例

61、LRU算法,LFU

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

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

64、go优缺点

65、go的值传递和引用

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

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

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

70、 线程自己独享什么

71、网络编程过程

72、select、epoll

73、排行榜怎么实现

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

75、go的runtime如何实现

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

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

78、go什么情况下会发生内存泄漏?

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

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

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

82、go为什么高并发好?go的调度模型

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

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

85、怎么理解go的interface

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

87、数组和为n的数组对

88、最大连续子数组和

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

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

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

92、进程虚拟空间布局

93、进程状态转换

94、线程的栈在哪里分配

95、多个线程读,一个线程写一个int32会不会有问题,int64呢

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap