面试真题

技术面 + 非技术面高频问题 · 企业真题标题 + 校招宝自研参考答案
面试真题
2508 道
技术岗
641 道
非技术岗
1867 道
当前筛选
82 道

按赛道技术岗以技术方向细分;非技术岗按「结构化 / 半结构化 / 无领导 / HR / 职能」细分

按方向/形式点选即筛,再点「全部」还原

按难度

按企业点选查看该公司全部题目

技术岗 · 分类:Go82 道 · 点击进入查看参考答案

简单Go
map 基本原理
结论:Go map是基于哈希表的引用类型,提供平均O(1)读写。核心要点:1.底层为哈希表,key经哈希函数映射到桶(bucket);2.冲突解决用桶内8槽+溢出桶链;3.扩容采用渐进式rehash,避免停顿;4.key…
🎤 小米
简单Go
map、slice未初始化操作会怎样,发生panic应该怎么办
结论:未初始化map为nil,直接赋值panic;未初始化slice为nil,append安全但索引访问panic。要点:1.nil map写入报'assignment to entry in nil map',须用ma…
🎤 闪送
简单Go
map与切片哪个是线程安全的
结论:Go语言的map和slice均非线程安全,并发读写会导致panic或数据错乱。原理:map底层无锁,并发写触发runtime抛出'concurrent map writes'崩溃;slice底层是结构体含指针/长度…
🎤 百度
简单Go
String和byte切片的区别
结论:Go中string是不可变字节序列,byte切片是可变字节数组。核心区别:1.可变性:string底层结构含指针和长度,内容只读,修改编译报错;[]byte可修改元素如b[0]='x';2.内存:string赋值或…
🎤 金山
简单Go
关闭的channel数据的发送与接收
结论:向已关闭channel发送数据会引发panic;从已关闭channel接收,若缓冲区有数据则先读出,随后返回零值且ok=false;重复关闭同样panic。原理:channel关闭后运行时禁止发送,接收通过hcha…
🎤 京东
简单Go
Mutex是乐观锁还是悲观锁,乐观锁和悲观锁的区别
结论:Mutex 是悲观锁。悲观锁与乐观锁核心区别在冲突假设与处理方式。悲观锁认为并发冲突频繁,操作前先加锁独占资源,如 Mutex、数据库行锁,保证安全但开销大、易阻塞;乐观锁认为冲突少,不加锁,通过版本号或 CAS …
🎤 深信服
中等Go
协程如何关闭
结论:协程关闭需通过通道通知或上下文取消,不可强制杀死。核心要点:1.Go中goroutine无法外部强制终止,需通过close(channel)发信号或使用context.Context取消;示例:ctx,cancel…
🎤 大华股份 / 深信服
中等Go
多个协程读写map会怎样,什么是线程安全
结论:Go中多个协程并发读写map会触发运行时panic(concurrent map write),线程安全指并发访问下数据逻辑正确且无竞争。核心要点:1. Go原生map非并发安全,内部无锁,并发读写检测失败会崩溃;…
🎤 滴滴
中等Go
切片不断append是如何给它分配内存的,具体扩容规则是怎样的
结论:append在容量不足时触发扩容,向系统申请新内存并拷贝原数据。具体规则:当原切片容量oldCap<1024时,新容量newCap翻倍(oldCap*2);当oldCap>=1024时,newCap按1.25倍增长…
🎤 百度
中等Go
切片的底层原理
结论:切片是引用类型,底层为包含指针、长度、容量的结构体。原理:运行时表示为reflect.SliceHeader,含Data(unsafe.Pointer指向底层数组首地址)、Len(int)、Cap(int)。切片本…
🎤 小红书
中等Go
切片的深拷贝与浅拷贝
结论:切片赋值或截取是浅拷贝(共享底层数组);深拷贝需新建底层数组并复制元素,若元素为引用类型还需递归拷贝指向对象。区别:浅拷贝如s2:=s1或s2:=s1[:],仅复制SliceHeader,Data相同,修改元素互相…
🎤 CMSTOP
中等Go
如果chan 在有缓冲区的情况下缓冲区满了不想要后续的数据了怎么做
使用select配合default实现非阻塞发送丢弃数据,或关闭channel停止接收。核心要点:缓冲满时普通发送会阻塞;用select{ case ch<-data: default: // 丢弃 }可在满时走defa…
🎤 大华股份
中等Go
如何定位goroutine溢出?
使用pprof和runtime接口定位goroutine溢出。核心要点:引入net/http/pprof包,访问/debug/pprof/goroutine查看栈和数量;代码中调用runtime.NumGoroutine…
🎤 金山
中等Go
如何获取goroutine里面的一个函数执行的返回值
结论:获取goroutine内函数返回值,主流方案是用channel传递,或借助共享变量配合sync.WaitGroup/互斥锁。原理:go语句启动并发后,被调函数的返回结果会被丢弃,必须显式传出。方案1:无缓冲/缓冲c…
🎤 深信服
中等Go
如何控制 goroutine 的生命周期,channel 的作用,context 的作用
结论:Go中goroutine生命周期需由自身通过channel或context主动退出,不可强杀。核心要点:1. channel用于goroutine间通信和同步,可定义done chan struct{}发送关闭信号…
🎤 闪送
中等Go
如何在defer中修改方法返回值
结论:defer只能修改命名返回值,不能改匿名返回值。原理:Go函数命名返回(如func f() (r int))时return先赋值r再执行defer,defer修改r即改返回槽;匿名返回时return将局部变量拷贝到…
🎤 深信服
中等Go
生产者、消费者用有缓存channel通信场景,如何让生产者和消费者退出
结论:通过关闭channel或context取消信号协调退出。要点:单生产者时生产完关闭channel,消费者用for v:=range ch读至关闭后退出;多生产者需用WaitGroup等待全部完成再由独立协程关闭;需…
🎤 Momenta
中等Go
使用channel如何避免阻塞主协程
结论:在Go中避免channel阻塞主协程的关键是使用缓冲channel、select多路复用、启动独立goroutine接收以及超时机制。核心要点:1.无缓冲channel的发送和接收必须配对,否则阻塞;使用make(…
🎤 沥泉科技
中等Go
先判断channel是否阻塞,再写入数据
结论:Go中不能直接判断channel是否阻塞,但可通过select语句实现非阻塞写入。核心要点:1. channel写入阻塞条件:无缓冲channel无接收者,或有缓冲channel缓冲区满;2. 非阻塞写入使用sel…
🎤 深信服
中等Go
携程在哪些情况下会被剥离 M?
结论:Go中协程(G)不直接绑M,但G阻塞会导致P与M剥离。情况:1. G执行阻塞系统调用(文件读写、sleep)时M陷内核,P解绑M转去其他M跑新G;2. G通道阻塞或锁等待,G离运行队列,M跑其他G;3. 抢占:G运…
🎤 网易
题目整理自公开面经,答案由校招宝自研生成,仅供参考