加载中...
avatar
文章
69
标签
248
分类
60
主页
归档
标签
类别
列表
  • 音乐
  • 相册
友链
关于
盗计のBlogGolang题库(十)
搜索
主页
归档
标签
类别
列表
  • 音乐
  • 相册
友链
关于

Golang题库(十)

发表于2023-07-05|更新于2025-06-24|Golang面试题
|浏览量:
文章作者: Daoji
文章链接: https://www.daoji-anime.com/posts/52803
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 盗计のBlog!
GoGolang面试题编程题
cover of previous post
上一篇
Golang面试题详解(九):内存模型、深浅拷贝与并发安全
Golang题库(九)怎么用go实现一个栈12345678910111213141516171819202122232425262728293031323334353637383940//一个队列type MyStack struct { queue []int}func Constructor() MyStack { return MyStack{ queue: make([]int, 0), }}func (this *MyStack) Push(x int) { this.queue = append(this.queue, x)}func (this *MyStack) Pop() int {//出队操作 n := len(this.queue)-1 for n!=0{ ////除了最后一个,其余的都重新添加到队列里 val := this.queue[0] this.queue =...
cover of next post
下一篇
Golang面试题详解(十):并发模型、GMP调度、Context与defer
Golang题库(十)空结构体占不占内存空间? 为什么使用空结构体?空结构体是没有内存大小的结构体。通过 unsafe.Sizeof() 可以查看空结构体的宽度,代码如下: 12var s struct{}fmt.Println(unsafe.Sizeof(s)) // prints 0 准确的来说,空结构体有一个特殊起点: zerobase 变量。zerobase是一个占用 8 个字节的uintptr全局变量。每次定义 struct {} 类型的变量,编译器只是把zerobase变量的地址给出去。也就是说空结构体的变量的内存地址都是一样的。 空结构体的使用场景主要有三种: 实现方法接收者:在业务场景下,我们需要将方法组合起来,代表其是一个 “分组” 的,便于后续拓展和维护。 实现集合类型:在 Go 语言的标准库中并没有提供集合(Set)的相关实现,因此一般在代码中我们图方便,会直接用 map 来替代:type Set map[string]struct{}。 实现空通道:在 Go channel...
相关推荐
cover
2023-06-19
Golang面试题详解(一):数组、切片、Channel与继承
Golang题库(一)golang里的数组和切片有了解过吗?值传递和引用传递在函数传参中,数组是值传递,切片则是引用传递。即函数内修改数组,外不变,而切片则相反。 逻辑运算数组能比较大小,切片则只能与nil比较。 容量和长度数组是连续地址的储存相同类型元素的序列,初始化容量之后,不可变。 切片是指向数组的拥有相同类型元素的可变长序列,可以扩容和传递,比数组更加灵活。 Go切片(slice)的实现可以在源码包src/runtime/slice.go中找到。在源码中,slice的数据结构定义如下。 12345type slice struct { array unsafe.Pointer //指向底层数组的指针 len int //切片长度 cap...
cover
2023-06-27
Golang面试题详解(七):Slice底层、线程安全Map、锁与Map实现
Golang题库(七)Slice 与 Array, Append()Array数组(Array)是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因其长度的不可变动,数组在Go中很少直接使用。把一个大数组传递给函数会消耗很多内存。一般采用数组的切片 几种初始化方式 123arr1 := [3]int{1, 2, 3}arr2 := [...]int{1, 2, 3}arr3 := [3]int{0:3,1:4} SliceSlice是一种数据结构,描述与Slice变量本身分开存储的Array的连续部分。 Slice不是Array。Slice描述了Array的一部分。 slice底层是一个struct 123456// runtime/slice.gotype slice struct { array unsafe.Pointer// 指向数组的指针 len int cap ...
cover
2023-06-22
Golang面试题详解(三):Channel与锁、应用场景及Slice与Array深度对比
Golang题库(三)同一个协程里面,对无缓冲channel同时发送和接收数据有什么问题 同一个协程里,不能对无缓冲channel同时发送和接收数据,如果这么做会直接报错死锁。 对于一个无缓冲的channel而言,只有不同的协程之间一方发送数据一方接受数据才不会阻塞。channel无缓冲时,发送阻塞直到数据被接收,接收阻塞直到读到数据。 channel和锁的对比作用区别 Channel是用于处理协程中的数据通信问题的,通过编程逻辑设计,可以实现锁的效果。 Mutex是用于控制原子性操作数据安全性,通过加锁和释放确保区间内数据只能有单一协程访问。数据一致性。 两者的用途不同 两者内存占用也不同 channel的应用场景channel用于协程之间数据通信,根据设计能够实现多种功能。 任务超时与取消通过在通道中传递信号,可以实现任务的超时和取消机制。例如,一个 goroutine 可以在执行耗时操作时启动一个定时器,如果操作在指定时间内未完成,可以通过通道发送取消信号给其他 goroutine,从而取消操作。 比如超时处理: 12select { case...
cover
2023-07-04
Golang面试题详解(九):内存模型、深浅拷贝与并发安全
Golang题库(九)怎么用go实现一个栈12345678910111213141516171819202122232425262728293031323334353637383940//一个队列type MyStack struct { queue []int}func Constructor() MyStack { return MyStack{ queue: make([]int, 0), }}func (this *MyStack) Push(x int) { this.queue = append(this.queue, x)}func (this *MyStack) Pop() int {//出队操作 n := len(this.queue)-1 for n!=0{ ////除了最后一个,其余的都重新添加到队列里 val := this.queue[0] this.queue =...
cover
2023-06-20
Golang面试题详解(二):GMP模型、Channel底层原理及Go与Java对比
Golang题库(二)数组怎么转集合?无法直接转换,需要通过遍历数组,构造一个map。例如: 12345678func main() { arr := [5]int{1, 2, 3, 4, 5} m := make(map[int]int, 5) for i, v := range arr { m[i] = v } fmt.Println(m)} ⭐Go的GMP模型?G是Goroutine的缩写,相当于操作系统的进程控制块(process control block)。它包含:函数执行的指令和参数,任务对象,线程上下文切换,字段保护,和字段的寄存器。 M是一个线程,每个M都有一个线程的栈。如果没有给线程的栈分配内存,操作系统会给线程的栈分配默认的内存。当线程的栈制定,M.stack->G.stack,...
cover
2023-06-25
Golang面试题详解(五):热部署、读写锁、Goroutine与线程
Golang题库(五)go 实现不重启热部署根据SIGHUP 信号量根据系统的 SIGHUP 信号量,以此信号量触发进程重启,达到热更新的效果。 热部署我们需要考虑几个能力: 新进程启动成功,老进程不会有资源残留 新进程初始化的过程中,服务不会中断 新进程初始化失败,老进程仍然继续工作 同一时间,只能有一个更新动作执行 监听信号量的方法的环境是在 类 UNIX 系统中,在现在的 UNIX 内核中,允许多个进程同时监听一个端口。在收到 SIGHUP 信号量时,先 fork 出一个新的进程监听端口,同时等待旧进程处理完已经进来的连接,最后杀掉旧进程。 使用air包air包可以实现插件化热更新的方案,集成方便,非常适用于小型项目的开发。 ⭐saas灰度发布介绍灰度发布常见有三种模式金丝雀发布、滚动发布、蓝绿发布。灰度发布主要是更新服务中,通过服务的多节点、多切片进行无感知的服务更新迭代。阿里云、AWS等云平台都已支持灰度发布功能。 实现灰度发布主要是通过网关转发的均衡负载,确保服务更新过程中能够不停机、无感知、可回溯。常见的灰度发布实现方案有Nginx +Lua + Redis...

评论
avatar
Daoji
探索AI与编程技术的博客,包含深度分析与实用工具解决方案,让学习更有效率。加入我们一起成长!
文章
69
标签
248
分类
60
Follow Me
公告
This is my Blog
最新文章
Agent多工具超长上下文处理方案
Agent多工具超长上下文处理方案2025-05-11
beartype 运行时入参校验
beartype 运行时入参校验2025-03-26
AI断片了吗?探秘大模型在超长对话中的理解能力
AI断片了吗?探秘大模型在超长对话中的理解能力2025-03-10
个人免签方案
个人免签方案2025-01-16
GPT学习分享
GPT学习分享2024-03-07
©2019 - 2025 By Daoji
框架 Hexo 7.3.0|主题 Butterfly 5.3.3
搜索
数据加载中