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

go简化版面试题

6、内存溢出,内存泄漏,内存逃逸

内存溢出:超出给定内存。           

递归没有结束(申请太多对象)

一次性加载超大文件或数据集到内存(如未分页读取)。

大量请求导致内存分配超出系统限制(如未合理设置容器内存上限)。

如无限增长的全局缓存

排查:

  • 容器环境查看 Docker/K8s 内存指标(docker stats 或 kubectl top pods)。

  • 使用 go tool pprof -http=:8080 heap.pprof 分析内存分配热点。

内存泄漏:有些资源没有释放。    文件没有关闭

处理文件,一次性加载过多在内存中

缓存数据无过期策略(如 map 只增不减)。

创建更多的goroutin

排查:

  • 检查全局变量、缓存、第三方库(如 CGO 资源管理)。

  • 使用 defer 确保资源释放(如 defer file.Close())。

  • 检查 Goroutine 数量http://localhost:6060/debug/pprof/goroutine?debug=1 查看 Goroutine 堆栈。

内存逃逸:本来应该分配在栈上时,由于某些原因,它们被分配到了堆上。变量分配到堆上时可能增加 GC 压力,导致内存消耗增大。

func escapeExample() *int {
    x := 10          // x 是局部变量
    return &x        // x 的地址被返回,逃逸到堆
}

怎么避免

不要直接返回局部变量的指针。如果需要返回数据,可以直接返回值。

排查

用 pprof 查看堆内存分配

1.2、什么是MVC

1. 用户通过界面(View)进行操作(比如点击按钮或输入 URL)。

2. Controller 接收用户输入,调用 Model 处理业务逻辑或数据库操作。

3. Model 返回结果,Controller 再将结果传递给 View。

4. View 根据数据渲染页面并展示给用户。

5、context

  • Context 的数据结构包含 Deadline,Done,Err,Value,
  • Deadline 方法返回一个 time.Time,表示当前 Context 应该结束的时间,ok 则表示有结束时间,
  • Done 方法当 Context 被某一个操作进行了取消或者超时时候返回的一个 close 的 channel,告诉给 context 相关的函数要停止当前工作然后返回了,
  • Err 表示 context 被取消的原因,
  • Value 方法表示 context 实现共享数据存储的地方,
  • 协程安全的。

9.3、defer关闭资源时,程序中断会被会被关闭吗?

  • defer 在以下情况会执行

    • 正常退出。

    • panic 崩溃(当前函数的 defer)。

    • 捕获中断信号(如 Ctrl+C)。

  • defer 在以下情况不会执行

    • os.Exit 退出。

    • 强制终止(如 kill -9)。

11、Go 多返回值怎么实现的?

  • Go 的多返回值是通过  来实现的

  • 函数的多返回值会被依次压入调用栈中。

 


http://www.mrgr.cn/news/97308.html

相关文章:

  • 蓝桥杯高频考点——经典01背包问题详解(附例题)
  • Java 常用数据结构详解
  • Business English Certificates (BEC) 高频词汇背诵
  • 【NLP 54、大模型训练相关知识】
  • Android学习总结之handler源码级
  • Android学习总结之Kotlin 协程
  • LeetCode算法题(Go语言实现)_31
  • C++自学笔记---数组和指针的异同点
  • 【计算机网络】Linux配置SNAT/DNAT策略
  • Android学习总结之算法篇五(字符串)
  • Java基础-设计模式详解
  • [项目总结] 在线OJ刷题系统项目技术应用(上)
  • 燕山大学计算机网络实验(包括实验指导书)
  • 7B斗671B:扩散模型能否颠覆自回归霸权?
  • 网络编程—TCP/IP模型(TCP协议)
  • 通过Postman和OAuth 2.0连接Dynamics 365 Online的详细步骤
  • Java 进化之路:从 Java 8 到 Java 21 的重要新特性
  • 数据库原理
  • (二)输入输出处理——打造智能对话的灵魂
  • AI Agent开发大全第二十课-如何开发一个MCP(从0开发一个MCP Server)