当前位置: 首页 > news >正文

后端面试问题收集以及答案精简版

语言层面

go

Go并发原语 groutine select channel sync包
有没有了解channel的底层结构体。
使用channel时需要注意哪些事项,以及哪些场景下会panic。
map扩容:map什么时候触发扩容,哈希冲突的解决方案是什么

go内存分配的实现原理是什么

怎么在go中并发编程下等待多个协程的结束,Add()是什么意思。

go的slice不断append时是如何分配内存的,扩容规则是什么。

defer是用来做什么的,应用场景有哪些。
多个defer执行顺序:多个defer的执行顺序是怎样的。

map和slice哪个是线程安全的,map手动加锁和sync.Map的区别是什么。

如何控制 goroutine 的生命周期(channel 的作用,context 的作用)

GC

GC 三色标记

go内存逃逸

面试应该从以下角度回答

  • 什么是逃逸?
  • 导致内存逃逸的原因是什么
  • 常见的发生逃逸的情况与逃逸分析
  • 如何避免

Go程序启动时发生什么

在这里插入图片描述
在这里插入图片描述
Golang 程序的运行入口是 runtime 定义的一个汇编函数。这个函数核心有三个逻辑:

第一、通过 runtime 中的 osinit、schedinit 等函数对 golang 运行时进行关键的初始化。在这里我们将看到 GMP 的初始化,与调度逻辑。

第二、创建一个主协程,并指明 runtime.main 函数是其入口函数。因为操作系统加载的时候只创建好了主线程,协程这种东西还是得用户态的 golang 自己来管理。golang 在这里创建出了自己的第一个协程。

第三、调用 runtime·mstart 真正开启调度器进行运行。

当调度器开始执行后,其中主协程会进入 runtime.main 函数中运行。在这个函数中进行几件初始化后,最后后真正进入用户的 main 中运行。

第一、新建一个线程来执行 sysmon。sysmon的工作是系统后台监控(定期垃圾回收和调度抢占)。
第二、启动 gc 清扫的 goroutine。
第三、执行 runtime init,用户 init。
第四、执行用户 main 函数。

本题:感觉只要答出来M0的创建和M0的G0是怎么初始化 runtime 环境、goroutine的生命周期的就好,再往深的地方走面试就不用面了,时间能都砸这个上面

GMP

P的数量怎么设置:在程序中通过runtime.GOMAXPROCS() 来设置
M的数量怎么设置:runtime/debug包中的SetMaxThreads函数来设置
最高能有多少个P:应该是内核数量
最高多少M:最⼤量一般默认是10000 但是内核很难支持这么多的线程数
GMP模型中协程的最长运行时间是多久:10ms‌‌

Work Stealing偷多少:
M 优先执行其所绑定的 P 的本地运行队列中的 G,如果本地队列没有 G,则会从全局队列获取,为了提高效率和负载均衡,会从全局队列获取多个 G,而不是只取一个,个数是自己应该从全局队列中承担的,globrunqsize / nprocs + 1;同样,当全局队列没有时,会从其他 M 的 P 上偷取 G 来运行,偷取的个数通常是其他 P 运行队列的一半;

groutine生命周期
在这里插入图片描述

其实就是回答gmp模型

计算机网络

tcp和udp区别
tcp的可靠传输

数据库

隔离级别有几种,分别会产生什么样的问题

mysql

慢查询优化
MySQL数据是怎么写的,写入的底层原理是什么,涉及到哪些主键的交互,比如innodb写入时是先写入buffer pool。
binlog同步:MySQL主节点的binlog是同步的还是异步的。
主节点崩溃:如果MySQL主节点崩溃了,数据会不会丢失。
从节点写入:主节点挂了但向客户端返回成功,怎么保证从节点数据写入进去。
innodb索引:为什么innodb索引使用B+树。
数据量很大:数据量很大达到内存放不下时怎么解决。

1、索引(为何使用 b+树而不是使用别的数据结构? 索引下推?倒排索引?)

2、事务(ACID 隔离级别 幻读如何出现的 又是如何解决?)

3、锁(给一个 sql 问这条 sql 在不同隔离级别下是如何加锁的?)

4、mvcc 机制(实现原理以及 rr 和 rc 隔离级别下实现的区别?)

5、redolog undolog binlog(会问分别是用来做什么的 有什么共同点 区别?)

6、sql 优化(选择一个适合自己业务的 sql 场景 描述清楚自己如何通过 explain 命令来分析和优化的?)

redis

redis缓存:对redis作为缓存的理解是什么,用redis缓存和本地缓存,可以用本地缓存么(答了可以但不建议,然后面试官反问维护redis的成本呢)。
redis使用场景:redis的set和list的使用场景是什么。
redis set原理:redis set的原理是什么。

项目

项目困难:在项目中遇到哪些困难的问题,项目的难点是什么。

迭代器 生成器

相关文章:

  • MySQL 事务的优先级
  • [ctfshow web入门] web41
  • 物理备份工具 BRM vs gs_probackup
  • AndroidTV D贝桌面-v3.2.5-[支持文件传输]
  • “破解”GPT-4o生图技术:万物皆可吉卜力的技术路线推测
  • w285药店管理系统的设计与实现
  • 腾讯OCR文字识别实践--简历文本识别
  • Redis简介及其在Unity中的应用
  • Azure AI Foundry 正在构建一个技术无障碍的未来世界
  • 金融简单介绍及金融诈骗防范
  • 大白话聊MySQL覆盖索引
  • 第五届大数据、人工智能与风险管理国际学术会议 (ICBAR 2025)
  • 高质量双工自然对话数据,助力大模型口语能力进化
  • Linux用Wireshark进行Thread网络抓包关键步骤
  • 在ASP.NET Core 中实现幂等API和WinForms客户端防重提交实践
  • 使用UFW+IPSET禁用海外IP配置持久化操作
  • @SchedulerLock 防止分布式环境下定时任务并发执行
  • 深度学习:AI 大模型时代的智能引擎
  • linux shell编程之条件语句(二)
  • 小试牛刀-抽奖程序
  • 网站低保图用什么做/网站功能优化的方法
  • 分类信息网站建设方案/常州seo关键词排名
  • 团支部智慧团建网站/市场运营和市场营销的区别
  • 淘宝怎么做基础销量什么网站好/怎么引流怎么推广自己的产品
  • 宇说建筑网站/seo应该怎么做
  • 生产许可证查询官网/河南靠谱seo地址