golang 面经积累

这里写目录标题

通用问题

自我介绍
项目介绍
项目难点
你还有什么问题问我

计网

操作系统

—1—

添加链接描述

什么是同步? 什么是异步?
  1. 同步
    客户端必须等待服务器端的响应,在等待期间客户端不能做其他操作。
  2. 异步
    客户端不需要等待服务器的响应,在服务器处理请求的过程中,客户端可以进行其他操作。

开放式问题

设计模式相关问题

代码设计相关问题

语言相关问题

—1—

1、请解释Golang中的interface{}是什么,以及它们的使用场景?

答案:interface{}表示空接口,可以保存任何类型的值。它的使用场景包括动态类型,类型断言和将任意类型的值传递给函数等。

2、Golang中的内存模型是什么?请详细解释。

答案:Golang的内存模型基于happens-before原则,它定义了Golang程序中的并发操作如何相互作用。具体来说,内存模型描述了如何安排操作顺序以保证正确的结果。

3、Golang中的锁是什么?请列举一些锁的类型并解释它们的用途。

答案:锁是一种同步机制,用于保护共享资源免受并发访问的影响。Golang中有三种锁类型:sync.Mutex,sync.RWMutex和sync.WaitGroup。sync.Mutex和sync.RWMutex用于互斥访问共享资源,而sync.WaitGroup用于等待一组协程完成执行。

4、请解释Golang中的垃圾回收机制,并描述它的优点和缺点。

答案:Golang中的垃圾回收机制使用标记-清除算法,它自动回收不再使用的内存。优点包括减少内存泄漏和避免手动管理内存的复杂性,缺点则包括影响程序的性能和增加内存占用。

5、请解释Golang中的context是什么,以及它们的作用?

答案:context是一个用于传递请求范围值的标准Go库。它用于控制Golang中的请求生命周期,例如控制请求的超时和取消。它在Go语言中的网络编程和多线程编程中广泛使用。

6、Golang中的panic和recover是什么,以及它们的作用?

答案:panic和recover是Golang的错误处理机制。当程序遇到无法处理的错误时,它会引发panic,这会使程序停止执行并打印出错误消息。recover可以用来捕获panic,然后继续执行程序。

7、请解释Golang中的defer关键字,并提供一个使用例子。

答案:defer关键字用于在函数退出时执行一些代码,无论是否发生异常。它通常用于资源管理和异常处理。例如:goCopy codefunc main() { defer fmt.Println(“world”) fmt.Println(“hello”)}// Output: // hello// worldGolang中的select关键字是什么,以及它们的作用?答案:select是Golang中的一种控制流语句,用于同时等

8、Golang中的select关键字是什么,以及它们的作用?

答案:select是Golang中的一种控制流语句,用于同时等待多个通道上的操作。它的作用是在通道之间进行非阻塞选择,一旦一个通道准备好了就可以执行相应的操作。这个特性在实现高效的并发操作时非常有用。

9、Golang中的内存分配器是什么,以及它们的作用?

答案:Golang中的内存分配器是一种用于动态分配和管理内存的工具。它的作用是在程序运行时分配内存,并在使用完毕后释放内存。这可以避免手动管理内存的复杂性,并提高程序的性能。

10、Golang中的闭包是什么,以及它们的作用?

答案:闭包是一种函数,它可以访问其外部函数作用域中的变量。在Golang中,闭包通常用于实现函数式编程和处理异步事件等情况。

11、Golang中的反射是什么,以及它们的作用?

答案:反射是一种机制,它可以在程序运行时动态地检查和修改类型信息。在Golang中,反射通常用于实现通用代码和处理未知类型的值。

12、Golang中的RPC是什么,以及它们的作用?

答案:RPC是一种远程过程调用机制,它允许程序在不同的进程和计算机之间调用函数。在Golang中,RPC通常用于实现分布式应用程序和客户端-服务器模型。

13、Golang中的并发模型是什么,以及它们的作用?

答案:Golang中的并发模型是基于goroutine和通道的模型。goroutine是一种轻量级的线程,它可以在程序中并发执行任务。通道是一种同步的并发数据结构,它用于在不同的goroutine之间传递数据。这种并发模型可以避免共享内存的问题,并提高程序的并发性能。

14、Golang中的CGO是什么,以及它们的作用?

答案:CGO是一种Golang语言与C/C++代码交互的机制。它允许Golang程序与C/C++库交互,并利用现有的C/C++代码资源。CGO在处理低级别的系统操作和性能优化方面非常有用。

15、Golang中的模板是什么,以及它们的作用?

答案:模板是一种用于生成文本输出的工具。在Golang中,模板通常用于生成网页和邮件等文本输出。模板提供了一种方便和灵活的方式来生成结构化的文本输出,可以帮助开发人员快速构建动态网页等应用程序。

16、Golang中的GC是什么,以及它们的作用?

答案:GC是Golang中的垃圾回收机制,它可以在程序运行时自动检测和回收不再使用的内存。这可以避免内存泄漏和程序崩溃等问题,同时方便和灵活的方式来生成结构化的文本输出,可以帮助开发人员快速构建动态网页等应用程序。

17、Golang中的反向代理是什么,以及它们的作用?

答案:反向代理是一种在服务器端进行的代理机制,它可以将客户端请求转发到其他服务器上。在Golang中,反向代理通常用于负载均衡和缓存等功能,可以提高服务器的性能和可靠性。

18、Golang中的文件处理是什么,以及它们的作用?

答案:Golang中的文件处理是一种用于读写文件的工具。它的作用是在程序运行时访问文件,并进行读写操作。文件处理通常用于读取配置文件、日志文件等操作。

19、Golang中的WebSocket是什么,以及它们的作用?

答案:WebSocket是一种在Web应用程序中实现双向通信的协议。在Golang中,WebSocket通常用于实现实时通信和推送服务等功能。

20、Golang中的错误处理是什么,以及它们的作用?

答案:错误处理是Golang中处理错误的机制,它可以在程序运行时检测和处理各种类型的错误。错误处理可以避免程序崩溃和异常情况,提高程序的可靠性和稳定性。在Golang中,错误处理通常使用返回值和panic/recover机制实现。

—2—

添加链接描述

1. go的调度

GMP
添加链接描述

2. go struct能不能比较

添加链接描述

3. go defer(for defer)

defer关键字用于在函数退出时执行一些代码,无论是否发生异常。它通常用于资源管理和异常处理

4. select可以用于什么

select是Go中的一个控制结构,类似于switch语句,用于处理异步IO操作。select会监听case语句中channel的读写操作,当case中channel读写操作为非阻塞状态(即能读写)时,将会触发相应的动作。
添加链接描述

5. context包的用途

在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。
在Google 内部,我们开发了 Context 包,专门用来简化 对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用

一句话:context 用来解决 goroutine 之间退出通知、元数据传递的功能。

6. client如何实现长连接

在Golang中使用持久化连接发起HTTP请求,主要依赖Transport,官方封装的net库中已经支持。

Transport实现了RoundTripper接口,该接口只有一个方法RoundTrip(),故Transport的入口函数就是RoundTrip()。
Transport的主要功能:

缓存了长连接,用于大量http请求场景下的连接复用
对连接做一些限制,连接超时时间,每个host的最大连接数

5

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

方法一:sync.WaitGroup
方法二:contextContext
添加链接描述

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

#3# 9. map如何顺序读取

10. 实现set

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

12. 大文件排序基本排

13. 哪些是稳定的

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

19. time-wait的作用

21. 孤儿进程,僵尸进程

22. mysql底层有哪几种实现方式

Web相关问题

数据库相关问题

—1—

https://www.zhihu.com/question/482563210

1. mysql有哪几种log

2. MySQL的复制原理以及流程

3. 事物的4种隔离级别

4. 相关概念 脏读 可重复读 不可重复读 幻读

5. MySQL数据库几个基本的索引类型

添加链接描述

6. drop、delete与truncate的区别

7. 数据库的乐观锁和悲观锁是什么?

8. SQL优化方式

9. 从锁的类别上分MySQL都有哪些锁呢?

—2—

添加链接描述
联合索引是什么?为什么需要注意联合索引中的顺序?

非关系型数据库相关问题

redis

添加链接描述

代码版本管理相关问题

并发问题

分布式系统相关问题

软件生命周期和团队管理相关问题

逻辑和算法相关问题

软件架构相关问题

面向服务架构(SOA)和微服务(Microservice)相关问题

安全相关问题

比尔盖茨式问题

代码示例问题

未整理

—4—

添加链接描述

1. 垃圾回收

—5—

添加链接描述

—6—

添加链接描述

—7—

添加链接描述

别人的面经

—1—

添加链接描述

4. 说说你们使用Docker容器打包成镜像的一个具体过程**

添加链接描述

10. 创建索引需要注意什么?**

  • 非空字段:应该指定列为NOT NULL,因为含有空值的列很难进行查询优化,因为他们使得索引、索引的统计信息以及比较运算更加复杂
  • 取值离散大的字段
  • 索引字段越小越好:数据库的数据存储以页为单位,一页存储的数据越多,一次IO操作获取的数据越大,效率越高

11. 项目使用了Redis是吧,你觉得使用Redis作为缓存需要注意些什么?**

添加链接描述

3. 了解过哪些索引?

  • 使用索引的优点:

提高数据的搜索速度
加快表与表之间的连接速度
在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

  • 使用索引的缺点:

在我们建立数据库的时候,需要花费的时间去建立和维护索引,而且随着数据量的增加,需要维护它的时间也会增加。
在创建索引的时候会占用存储空间。
在我们需要修改表中的数据时,索引还需要进行动态的维护,所以对数据库的维护带来了一定的麻烦。

唯一索引:在创建唯一索引时要不能给具有相同的索引值。
主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。
聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。
普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。
全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。
组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。
即将数据库表中的多个字段联合起来作为一个组合索引。

4. hash索引和B+树索引的区别

添加链接描述

5. 关于索引场景题:一个表字段a、b、c,其中a为主键索引,b为普通索引,那么它的索引树大致是什么样的呢?简单形容一下

考察聚簇索引

6. 数据库做过哪些优化

  1. 用 PreparedStatement, 一般来说比 Statement 性能高:一个 sql
    发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。
  2. 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,
    那在设计数据库时就去掉外键。
  3. 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
  4. UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结
    果集中不包含重复数据且不需要排序时的话,那么就使用 UNION
    ALL。 >>UNION 和 UNION ALL 关键字都是将两个结果集合并为一
    个,但这两者从使用和效率上来说都有所不同。 >1. 对重复结果的处
    理:UNION 在进行表链接后会筛选掉重复的记录,Union All 不会去除
    重复记录。 >2. 对排序的处理:Union 将会按照字段的顺序进行排
    序;UNION ALL 只是简单的将两个结果合并后就返回。

7. 场景题:当你的系统某一个接口突然变慢,你会怎样去做一个排查?

接口响应过慢的原因排查

排查的顺序:
1、确定是哪个接口存在性能问题
2、确定这个接口的内部逻辑是怎样的,做了哪些事情
3、分析接口存在性能问题的根本原因
4、寻找确立优化方案
5、回归验证方案效果

接口慢排查:

一般会从以下几个方面入手:
1.是不是资源层面的瓶颈,硬件、配置环境之类的问题
2.针对查询类接口,是不是没有添加缓存,如果加了,是不是热点数据导致负载不均衡
3.是不是有依赖于第三方接口,导致因第三方请求拖慢了本地请求
4.是不是接口涉及业务太多,导致程序执行跑很久
5.是不是sql层面的问题导致的数据等待加长,进而拖慢接口
6.网络层面的原因?带宽不足?DNS解析慢
7.确实是代码质量差导致的,如出现内存泄漏,重复循环读取之类

数据库慢查询日志记录了什么?

添加链接描述

发现了有慢查询,你会怎么处理?

添加链接描述

如果一个表使用了索引,由于数据量庞大,那你会怎么解决?

分库分表了解多少呢?

添加链接描述

有去更深入的了解过服务限流嘛?(没有…)

服务限流的知道它的实现算法嘛?(没有…)

你们具体使用了Redis的哪些数据类型?

Zset用来干嘛了?具体业务

最基本的字符串类型底层怎么实现的?(每天上班,实属太久没看…忘了)

用缓存的话,你怎么去保证和数据库的数据保持数据一致性呢?

GC了解哪些垃圾回收算法,详细说说

大数据题:给100亿个数,有固定的内存并且假设都帮你存储好了,找出最大的100个数?(topK)

说说对大根堆、小根堆的理解

建堆这个过程,时间复杂度是多少?(答错了…哭)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值