【Golang 面试 - 进阶题】每日 3 题(十五)

news2024/9/24 15:24:46

✍个人博客:Pandaconda-CSDN博客

📣专栏地址:http://t.csdnimg.cn/UWz06

📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

43. Sysm on 有什么作用?

Sysmon 也叫监控线程,变动的周期性检查,好处:

  • 释放闲置超过 5 分钟的 span 物理内存;

  • 如果超过 2 分钟没有垃圾回收,强制执行;

  • 将长时间未处理的 netpoll 添加到全局队列;

  • 30 向长时间运行的 G 任务发出抢占调度(超过 10ms 的 g,会进行 retake);

  • 收回因 syscall 长时间阻塞的 P;

44. 三色 标记原理

  

原理:

三色标记算法(Tri-color Mark and Sweep Algorithm)是垃圾回收算法中常用的一种,也是 Go 语言中垃圾回收器采用的算法之一。

三色标记算法的基本思路是将内存中的对象分为三种状态:白色(未访问)、灰色(已访问,但还未处理)、黑色(已访问,且已处理),并按照一定的顺序遍历所有对象,标记出所有可达的对象,最终清除不可达的对象。

具体来说,三色标记算法分为以下几个步骤:

  1. 初始时,所有对象都是白色,加入一个 “根集合”(root set),根集合是一组已知可达对象的集合,如全局变量、函数调用栈等。

  2. 将根集合中的所有对象标记为灰色,并加入一个 “灰色集合”(gray set)中。

  3. 从灰色集合中取出一个灰色对象,遍历其引用的所有对象。如果某个对象是白色,将其标记为灰色,并加入灰色集合中;如果某个对象是灰色,不做处理;如果某个对象是黑色,也不做处理。

  4. 将该灰色对象标记为黑色,并从灰色集合中移除。

重复步骤 3 和 4,直到灰色集合为空。

此时所有可达对象都被标记为黑色,所有不可达对象都是白色。将所有白色对象标记为垃圾,并回收其占用的内存空间。

在 Go 语言中,三色标记算法是垃圾回收器采用的一种算法,其中还包括了其他的优化算法,如并发标记(Concurrent Mark)和并发清除(Concurrent Sweep)。Go 的垃圾回收器会在程序运行时自动启动,不需要手动管理内存,大大减少了程序员的工作量。

 45. 写屏障

在 Go 语言的垃圾回收机制中,写屏障(Write Barrier)是一种机制,用于保证内存对象在进行垃圾回收过程中的正确性。写屏障是通过在程序运行过程中对写操作进行监测来实现的。如果一个指针变量被修改为指向一个新的内存对象,写屏障会将被修改的指针变量所指向的对象标记为 “灰色” 状态,并将新指向的对象标记为 “黑色” 状态,以确保该对象不被误判为垃圾对象。在垃圾回收过程中,只有标记为 “黑色” 状态的对象才能被视为可达对象,而未被标记或者被标记为 “灰色” 状态的对象则被认为是不可达对象,可以被回收。

在 Go 语言中,写屏障是由垃圾回收器来实现的,Go 编译器会在需要使用写屏障的地方插入相应的代码。具体来说,当一个指针变量被修改为指向一个新的对象时,Go 编译器会在生成的汇编代码中插入一个钩子(Hook)函数,这个钩子函数会在对象头中设置一个标志位,表示该对象需要被扫描,以便在垃圾回收的过程中正确地标记该对象。

需要注意的是,写屏障虽然可以提高垃圾回收的准确性,但也会带来一定的性能开销,因为需要在写操作时对对象进行监测和处理。因此,在 Go 语言中,写屏障只在必要的情况下才会被触发。同时,也可以通过一些手段来减少写屏障的触发次数,如尽可能减少对象的复制和移动,或者将一些对象的内存布局重新调整,以减少垃圾回收时的复杂度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1976156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium 高德地图暗黑化

Cesium 高德地图暗黑化 高德电子地图实现暗黑效果 // 设置图层滤镜new ImageryLayerFilter({viewer: viewer,imageryLayer: imageryLayer,});

YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构和使用方式)

YOLOv5轻量化改进 | backbone | 结合MobileNetV4(包含多个结构) 本文介绍论文原理介绍网络代码多种yaml设置网络测试及实验结果<!-- 这里放入论文图片 --> &emsp;;本文介绍 本文给大家带来的改进机制是结合MobileNetV4骨干网络,其中来自2024.5月发布的MobileNetV4…

Pageadmin 漏洞教程

上传文件解压拿webshell 用哥斯拉&#xff0c;生成一个asp木马 这个就是我们生成的asp木马 不能直接上传 压缩为zip文件 上传 上传以后我们点击解压 就成功了 然后我们去访问 然后用哥斯拉访问 然后再点击添加 这样就成功了 成功进入

VSCode在windows系统下的配置简单版

参考链接 从零开始的vscode安装及环境配置教程(C/C)(Windows系统)_vscode搭建编译器环境-CSDN博客 vscode生成tasks.json、launch.json、c_cpp_properties.json文件_vscode生成launch.json-CSDN博客 自动生成配置文件简单方便&#xff01;&#xff01;&#xff01; 运行c代…

点击clean失败的操作Error running ‘demo4 [clean]‘ No valid Maven installation found.

错误情况&#xff1a; 解决方法&#xff1a; 重新调整自己的maven&#xff1a; 点击settings&#xff0c;搜索maven&#xff0c;点击进入&#xff1a; 选择自己的真实路径&#xff1a; 效果: 可以发现&#xff0c;运行clean成功&#xff01;

Useless Fan

灵感来源于老外的一个作品&#xff0c;但是只有风扇功能&#xff0c;除了袖珍感觉没啥用。 在淘宝上十几块买了一堆原件&#xff0c;于是手痒&#xff0c;自己手搓了一个&#xff0c;设计了个简单的3D打印外壳。 包括3大功能&#xff1a;风扇&#xff0c;充电宝&#xff08;2…

Spring MVC 快速入门指南及实战演示

1、SpringMVC简介 1.1 背景 Servlet属于web层开发技术&#xff0c;技术特点&#xff1a; 1. 每个请求都需要创建一个Servlet进行处理 2. 创建Servlet存在重复操作 3. 代码灵活性低&#xff0c;开发效率低 是否有技术方案可以解决以上问题&#xff1f; 1.2 SpringMVC概述 Sp…

C#加班统计次数

C#加班统计次数 运行环境&#xff1a;vs2022 .net 8.0 社区版 1、用C#语言&#xff1b;2、有界面上传Excel文件; 3、对Excel列&#xff08;部门、人员姓名、人员编号、考勤时间 &#xff09;处理&#xff1a;&#xff08;1&#xff09;按人员编号、考勤日期分组且保留原来字段&…

矩阵快速幂优化dp

之前一直想找一个矩阵快速幂的专题&#xff0c;但是都没有题目来总结&#xff0c;今天就来水一下 这个题目的转移方程我们可以很快想出来&#xff0c;但是我们如何作为我们矩阵快速幂的敲门砖呢&#xff1f; 有一个问题要注意的是我们由于这题不是取模的&#xff0c;可能会溢出…

网络安全-渗透测试工具及插件介绍和使用方法

1、Burp Suite Burp Suite 是用于攻击web 应用程序的集成平台。 是一款广泛使用的网络安全工具套件&#xff0c;主要用于测试Web应用程序的安全性。它可以帮助安全研究人员、渗透测试人员和开发人员发现和利用Web应用程序中的安全漏洞。 &#xff08;1&#xff09;下载和安装&a…

QuanTide-weekly第1期

本周Po文 这周我们共发表5篇文章。《基于 XGBoost 的组合策略…》等两篇详细讲解了机器学习构建组合策略的框架和常见问题。 文章要点与结论&#xff1a; 通过两阶段式方案实现多因子、多资产的组合策略构建。第一阶段基于XGBoost构建多个多因子单标的模型&#xff0c;第二阶…

安卓基本布局(下)

TableLayout 常用属性描述collapseColumns设置需要被隐藏的列的列号。shrinkColumns设置允许被伸缩的列的列号。stretchColumns设置允许被拉伸的列的列号。 <TableLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/TableL…

yolov3 neck部分搭建,以及完整的网络搭建代码,可直接运行

目录 1. 用来实现共同的一些操作 common_module.py 2.1 使用到的通道配置 net_config.py 2.2 主干网络 darknet53.py 3. predict部分 neck.py 4. 拼凑成完整的yolov3网络 Yolov3.py 5. 网络结构如下 上次提到了搭建了主干网络&#xff0c;这个加上neck就可以构建…

内网穿透--meterpreter端口转发实验

实验背景 通过公司带有防火墙功能的路由器接入互联网&#xff0c;然后由于私网IP的缘故&#xff0c;公网无法直接访问内部主机&#xff0c;则需要通过已连接会话&#xff0c;代理穿透访问内网主机服务。 实验设备 1.路由器一台 2.内网 Win 7一台 3.公网 Kali 一台 4.网络 …

LeetCode面试150——238除自身以外数组的乘积

题目难度&#xff1a;中等 默认优化目标&#xff1a;最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 左右乘积列表 参考文献 1 题目描述 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 an…

第十二节、人物下蹲

一、SuB-State Machine(子状态机) 1、创建一个子状态 2、可以选择退出的动画 二、人物下蹲 1、人物动画下蹲 2、人物碰撞体下蹲

日志远程同步实验

目录 一.实验环境 二.实验配置 1.node1发送方配置 &#xff08;1&#xff09;node1写udp协议 &#xff08;2&#xff09;重启服务并清空日志 2.node2接收方配置 &#xff08;1&#xff09;node2打开接受日志的插件&#xff0c;指定插件用的端口 &#xff08;2&#xff…

C#和S7-1200PLC S7.NET通信

1、一步步建立一个C#项目 一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客文章浏览阅读1.7k次,点赞2次,收藏4次。这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先创建一个窗体应用。_s7协议批量…

技术方案/建设方案/可研报告/实施方案怎么写?3000份WORD全学会

解决方案是针对客户某些已经出现的或者可以预期的问题(技术、业务、管理等)&#xff0c;不足&#xff0c;缺陷&#xff0c;需求等&#xff0c;所提出的一个解决问题的方案&#xff0c;同时能够确保加以有效执行。 解决方案不只是一篇文档&#xff0c;而是一整套的行动计划&…

论文翻译 | Is a Question Decomposition Unit All We Need? 我们是否只需要一个‘问题分解单元’?

摘要 大型语言模型(LMs)已经在许多自然语言处理(NLP)基准测试中取得了最先进的性能。 随着新基准数量的增加&#xff0c;我们构建了更大、更复杂的LM。然而&#xff0c;由于与之相关的成本、时间和环境影响&#xff0c;构建新的LM可能不是一个理想的选择。我们探索了另…