以下Golang面试题整理自网络,可能会有重复题目。部分题目笔者面试时有遇到过,这里先给出题目,对应答案可自行搜索。
题目
- go的 GPM 调度原理以及过程描述
- go struct 能不能比较
- go defer 原理及注意事项
- select 用于什么
- context 包的用途
- client 如何实现长连接
- 主协程如何等其余协程完再操作
- slice、len、cap、共享、扩容
- map 如何顺序读取
- 实现 set 集合数据结构
- 实现消息队列(多生产者,多消费者)
- 大文件排序
- 基本排序,哪些是稳定的
- http get 跟 head 头字段信息
- http 401、403 code是什么
- http keep-alive字段解释
- http 能不能一次连接多次请求,不等后端返回
- tcp与udp区别,udp优点,适用场景
- time-wait的作用
- 数据库如何建索引
- 孤儿进程,僵尸进程
- 死锁条件,如何避免
- linux命令,查看端口占用,cpu负载,内存占用,如何发送信号给一个进程
- git文件版本,使用顺序,merge跟rebase
- Slice与数组区别,Slice底层结构
- 微信支付在支付完回调通知时,收到两次通知,怎么防止重复消费(类似接口的幂等性)
- 项目里的消息推送怎么做的(业务有关)
- Go的反射包怎么找到对应的方法
- Redis基本数据结构
- Redis的List用过吗?底层怎么实现的?
- Mysql的索引有几种,时间复杂度
- InnoDb是表锁还是行锁,为什么
- go的channel类型
- 退出程序时怎么防止channel没有消费完
- 用过什么消息中间件
- 有什么问题吗?评价?后面还有面试,后面再问吧
- 生产者消费者模式,手写代码
- 手写循环队列
- 写的循环队列是不是线程安全,不是,怎么保证线程安全
- Linux常用命令
- TimeWait和CloseWait原因
- 线段树了解吗?字典树?
- 看过nsq源码吗(Go的消息中间件)
- sync.Pool为什么使用,那里面的对象是固定的吗?
- go中的 container 包
- 证明二叉树的叶子节点跟度数为2的节点的关系
- 唯一索引和主键索引
- 智能指针
- 字符串解析为数字(考虑浮点型)
- 单点登录,tcp粘包
- 手写洗牌
- 处理粘包、断包实现
- goroutine调度用了什么系统调用
- 进程虚拟空间分布,全局变量放哪里?
- 网络编程
- 几种基本排序算法说一下,堆的时间复杂度,稳定性,为什么不稳定
- topk问题,海量数据topk
- 什么是主键
- 联合索引和唯一索引
- 越多的索引越好吗?建立索引要注意什么?
- 进程和线程区别?
- 死锁检测以及如何避免?
- tcp三次握手过程以及为什么是三次,两次可以吗?为什么?
- http/https区别
- 状态码401、301、302、201
- 数据库隔离级别,提交读会造成什么
- goroutine泄漏有没有处理,设置timeout,select加定时器
- mysql高可用的方案
- 排序算法以及时间复杂度
- io模型,同步阻塞,同步非阻塞,异步
- cookie和session
- 接口kps测试
- redis排行榜数据结构(跳跃表),查询时间复杂度
- redis分布式,如何减少同步延迟
- mysql能实现redis的功能吗
- cap理论,举例
- LRU算法,LFU
- 讲讲怎么理解网络编程
- go使用踩过什么坑
- go优缺点
- go中值传递和引用
- MySQL慢查询
- 为什么使用pg (postgreSQL)
- redis的数据类型
- 所有左叶子节点的和
- m个n大小的有序数组求并集,求时间复杂度
- static关键字,还有其他关键字吗
- hash表设计,线程安全?
- 线程自己独享什么
- select、epoll
- 排行榜怎么实现
- go的锁如何实现,用了什么cpu指令
- go的runtime如何实现
- 看过sql的连接池实现吗
- go什么情况下会发生内存泄漏?
- 怎么实现协程完美退出?
- 简单dp题,n*n矩阵从左上角到右下角有多少种走法(只往下和往右走)
- 用channel实现定时器?
- go为什么高并发好?讲了go的调度模型
- 操作系统内存管理?进程通讯,为什么共享存储区效率最高
- 实现一个hashmap,解决hash冲突的方法,解决hash倾斜的方法
- 怎么理解go的interface
- 100亿个数选top5
- 数组和为n的数组对
- 最大连续子数组和
- redis容灾,备份,扩容
- 跳跃表,为什么使用跳跃表而不使用红黑树
- 输入url后发生了什么
- tcp怎么找到哪个套接字
- ipc方式,共享存储区原理
- 进程虚拟空间布局
- 进程状态转换
- 线程的栈在哪里分配
- 多个线程读,一个线程写一个int32会不会有问题,int64呢
- 判断二叉树是否为满二叉树
- 一个大整数(字符串形式表示的),移动字符求比它大的数中最小的
- 点赞系统设计
- Redis内存淘汰
- sync.Map实现原理
- 半连接队列与全连接队列
- docker原理、容器与镜像的区别
- docker隔离原理
- kafuka架构以及原理
- kafuka怎么保证数据不会丢失?
- kafuka怎么保证数据不会重复被消费?
- 如果服务器中出现过多的time_wait,分析原因以及应该怎么解决?