
go语言面试
文章平均质量分 60
go语言底层原理
背帆
你从容不迫地奔跑而去,就连这么漫长迷茫的前程都不畏惧。
展开
-
go的interface接口底层实现
Go语言中的接口是其核心特性,用于定义对象的行为规范,通过方法集合约定类型必须实现的功能。接口不包含数据字段,主要作用包括实现多态与解耦、简化依赖管理以及支持隐式实现。接口分为空接口(eface)和带方法接口(iface)。空接口可以存储任意类型值,其底层由runtime.eface结构表示,包含类型元数据和实际值指针。空接口的优势在于类型无关性、性能优化以及支持反射和泛型。带方法接口通过方法表(itab)实现动态绑定,确保接口变量能够调用具体类型的方法。itab包含接口类型、具体实现类型、哈希值和方法函数原创 2025-05-15 14:10:44 · 836 阅读 · 0 评论 -
乐观锁与悲观锁
乐观锁与悲观锁原创 2024-02-19 10:47:24 · 255 阅读 · 0 评论 -
sync.Map底层简记
sync.Map是采用两个不同的map空间换时间实现的可并发读写性能平衡map原创 2024-02-11 22:10:58 · 381 阅读 · 0 评论 -
浅拷贝与深拷贝
浅拷贝只复制对象本身以及其直接引用的对象,而不复制它所引用的对象。换句话说,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。因此,如果源对象中的引用指向的对象发生改变,那么目标对象的相应引用也会发生改变,因为它们指向的是同一块内存空间。深拷贝则不同,它会复制源对象及其所有引用的对象,使得源对象和拷贝的对象完全独立。任何一方对对象的修改都不会影响另一方。深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。总的来说,深拷贝比浅拷贝更彻底。原创 2023-12-29 16:40:22 · 407 阅读 · 0 评论 -
go语言GC面试
垃圾回收也称为GC(Garbage Collection),是一种自动内存管理机制现代高级编程语言管理内存的方式分为两种:自动和手动,像C、C++ 等编程语言使用手动管理内存的方式,工程师编写代码过程中需要主动申请或者释放内存;而 PHP、Java 和 Go 等语言使用自动的内存管理系统,有内存分配器和垃圾收集器来代为分配和回收内存,其中垃圾收集器就是我们常说的GC。原创 2022-12-02 14:50:57 · 679 阅读 · 0 评论 -
defer与interface底层简记
defer:是go语言的一个关键字,用来修饰函数,其作用是让defer后面跟的函数或者方法调用能够延迟到当前所在函数return或者panic的时候再执行。interface:一组方法方法的声明,任何对象实现其全部方法就是实现其接口。原创 2024-01-03 09:14:35 · 441 阅读 · 0 评论 -
调度器GMP简记
线程是有pcb的内核级线程,协程是用户级线程。goroutinue占内存更小(几kb)调度更灵活(runtime调度)原创 2024-01-03 09:17:56 · 783 阅读 · 0 评论 -
Channel底层简记
底层是hchan,数据存储在环形队列中(有缓冲chan),阻塞读goroutine挂在recvq,阻塞写goroutine挂在sendq,waitq底层是sudog链表,sudog是g的封装,sudog中的elem记录要存取的元素**地址**原创 2024-01-01 16:56:17 · 470 阅读 · 0 评论 -
GC与内存管理简记
GC原创 2024-01-04 08:49:36 · 439 阅读 · 0 评论 -
Context底层源码简记
用于跨多个 Goroutine 设置截止时间、同步信号、传递上下文请求值(是一个context树),context接口有四个方法Deadline() Done() Err() Value()原创 2024-01-02 09:23:14 · 903 阅读 · 0 评论 -
go语言面试一逃逸分析
因为变量是在堆内存中,函数运行后并不会销毁。:与数据结构中的栈相同却有不同,数据结构中的栈是一种数据存储了逻辑方式,这种方式要求先入后出。:如果使用C语言中的malloc动态分配内存,但却使用后忘记释放该内存,那么该内存就会发生泄漏,即原内存空间变小该内存不能被使用。若在函数外无使用,则分配到栈上,否则分配到堆上。:与栈相区别,堆是程序员自己向操作系统申请的一部分内存空间,用来满足其特别需要,程序员可以确定该内存的大小。而逃逸分析就是尽量把内存分配到栈上,减少分配到堆上,减少GC压力,提高程序运行速度。原创 2023-12-29 16:31:16 · 1198 阅读 · 0 评论