Golang八股文面试题

1、golang 中 make 和 new 的区别?(基本必问)

1.make和new都是golang用来分配内存的內建函
数,且在堆上分配内存,
2.make 即分配内存,也初始化内存。
3.new只是将内存清零,并没有初始化内存。
4.make返回的还是引用类型本身,make只能用来
分配及初始化类型为slice,map,channel的数据
5.new可以分配任意类型的数据
6.而new返回的是指向类型的指针。

2、数组和切片的区别 (基本必问)

1.内部结构
数组在内存中是一段连续的内存空间,元素的类型
和长度都是固定的。切片在内存中由一个指向底层
数组的指针、长度和容量组成,长度表示切片当前
包含的元素个数,容量表示切片可以扩展的最大元
素个数
2.长度
数组的长度在创建时指定,不能更改。切片的长度
可以动态扩展或收缩,可以根据需要自由调整。
3.使用方式
数组在使用时需要明确指定下标访问元素,不能动
态生成。切片可以使用 append 函数向其末尾添
加元素,可以使用 copy 函数复制切片,也可以
使用 make 函数创建指定长度和容量的切片

3、for range 的时候它的地址会发生变化么?for 循环遍历 slice 有什么问题?

1.地址没有发生变化
2.在使用 for range 语句遍历切片或数组时,
每次迭代都会返回该元素的副本,而不是该元素
的地址。这意味着,每次循环完成后,该元素所
对应的地址都是相同的(最后一个),并不会改变
3.for range循环的工作方式是为了优化性能和
降低内存分配。在for range中,迭代变量会被
重复使用,而不是在每次迭代中创建一个新的变量
这个设计选择有助于减少内存分配和提高性能。在
这种情况下,如果你尝试在循环中保存迭代变量的
地址,实际上保存的是同一个地址。因此,在循环
结束后,你可能会遇到保存的值都是最后一次迭代
的值的情况。这是Go语言中的一个设计决策,旨在
提高程序的性能。如果你需要在循环中保存每次迭
代的值,可以考虑在每次迭代中创建一个新的变量
来保存值,而不是直接使用迭代变量。这样可以确
保你在集合或数组中保存的是不同的地址而不是同
一个地址package main
import "fmt"
type girl struct {Name stringAge int
}
func main() {gl := make(map[string]*girl)studs := []girl{{Name: "Lili", Age: 23},{Name: "Lucy", Age: 24},{Name: "Han Mei", Age: 21},}
//错误的写法	for _, v := range studs {gl[v.Name] = &v}
//正确的写法
for _, v := range studs {temp := vgl[v.Name] = &temp
}	for mk, mv := range gl {fmt.Println(mk, "=>", mv.Age)}
}

4、go defer,多个 defer 的顺序,defer 在什么时机会修改返回值?(for defer)defer recover 的问题?(主要是能不能捕获)

1.在Go语言中,defer关键字用于延迟执行一个
函数调用,通常用于确保在函数执行结束后释放
资源或执行一些清理操作。关于defer的几个问题:
多个 defer 的顺序: 多个defer语句按照后进
先出(Last In, First Out,LIFO)的顺序
执行,即最后一个defer语句会最先执行,倒数
第二个会在倒数第一个之后执行,以此类推。
2.defer 在何时修改返回值: defer语句中
的函数调用是在包含它的函数执行完毕之后才执
行的。如果包含defer的函数有命名的返回值,
并且在defer语句执行时修改了这个返回值,那
么最终的返回值将是defer语句中修改后的值。func example() (result int) {defer func() {result += 10}()return 5
}
在这个例子中,尽管return 5语句执行时返回
的是5,但由于defer中修改了result,实际上
最终的返回值是15。
3.defer与recover通常一起使用,用于处理
函数中的错误。recover只能捕获在同一个
goroutine中发生的panic,而且必须在defer
中调用。如果recover在没有发生panic的情况
下调用,它会返回nil
4.defer和recover是Go语言中用于处理资源
释放和错误恢复的重要机制。

5、 uint 类型溢出

Golang的uint类型溢出问题通常会在大量运算
中发生,特别是在涉及到大量循环或者大数运算时
当uint类型的值超过其最大值时,它会发生溢出,
然后从该类型的最小值开始循环,解决方案:
1.使用更大的数据类型:例如,如果你正在使用
uint32,你可以尝试升级到uint64。这将提供
更大的值范围,从而减少溢出的可能性。
2.添加溢出检查:在每次运算之后,你可以检查
结果是否小于任一操作数(假设我们只在正数上
进行操作)。如果是这样,那么就发生了溢出。
3.使用 math/big 包:对于非常大的数值,你
也可以考虑使用 math/big 包中的 Int 类型
这个类型可以处理任意大小的数值,但是运算速
度会慢一些。

6、介绍 rune 类型

1.rune相当int32
2.golang中的字符串底层实现是通过byte数组的
中文字符在unicode下占2个字节,在utf-8编码
下占3个字节,而golang默认编码正好是utf-8
3.byte 等同于int8,常用来处理ascii字符
4.rune 等同于int32,常用来处理unicode或
utf-8字符

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

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

相关文章

HNU-计算机网络-实验3-应用层和传输层协议分析(PacketTracer)

计算机网络 课程基础实验三应用层和传输层协议分析(PacketTracer) 计科210X 甘晴void 202108010XXX 【给助教的验收建议】 如果是助教,比起听同学读报告,更好的验收方式是随机抽取一个场景(URL/HTTPS/FTP&#xff09…

Vue3-12- 【v-for】循环一个整数

说明 v-for 这个东西就很神奇&#xff0c;可以直接循环一个整数&#xff0c;而且循环的初始值是从1 开始。使用案例 <template><div v-for"(num,indexB) in 6" :key"indexB">【索引 {{ indexB }}】 - 【数字 {{ num }}】 </div></t…

直播传媒公司网站搭建作用如何

直播已然成为抖快等平台的主要生态之一&#xff0c;近些年主播也成为了一种新行业&#xff0c;相关的mcn机构直播传播公司等也时有开业&#xff0c;以旗下主播带来高盈利&#xff0c;而在实际运作中也有一些痛点难题&#xff1a; 1、机构宣传展示难 不少散主播往往会选择合作…

湖农大邀请赛shell_rce漏洞复现

湖农大邀请赛 shell_rce 复现 在 2023 年湖南农业大学邀请赛的线上初赛中&#xff0c;有一道 shell_rce 题&#xff0c;本文将复现该题。 题目内容&#xff0c;打开即是代码&#xff1a; <?phpclass shell{public $exp;public function __destruct(){$str preg_replace…

Vue中this.$nextTick的执行时机

一、Vue中this.$nextTick的执行时机&#xff0c;整体可分为两种情况&#xff1a; 第一种&#xff1a;下一次 Dom 更新之后执行&#xff08;即等待DOM更新结束之后&#xff0c;执行nextTick的延迟回调函数&#xff09;&#xff1b; 第二种&#xff1a;页面挂载后 &#xff08;m…

KaiwuDB × 国网山东综能 | 分布式储能云边端一体化项目建设

项目背景 济南韩家峪村首个高光伏渗透率台区示范项目因其所处地理位置拥有丰富的光照资源&#xff0c;该区域住户 80% 以上的屋顶都安装了光伏板。仅 2022 年全年&#xff0c;光伏发电总量达到了百万千瓦时。 大量分布式光伏并网&#xff0c;在输出清洁电力的同时&#xff0c…

强化学习中训练阶段和测试阶段的区别,在代码上是怎么体现的

强化学习中训练阶段和测试阶段的区别&#xff0c;在代码上是怎么体现的 在强化学习中&#xff0c;训练阶段和测试阶段有一些关键的区别。这主要涉及到探索与利用的平衡、环境交互、以及模型参数更新等方面。以下是训练阶段和测试阶段的主要区别以及在代码中可能如何体现&#…

LeetCode 2454. 下一个更大元素 IV:双单调栈

【LetMeFly】2454.下一个更大元素 IV&#xff1a;双单调栈 力扣题目链接&#xff1a;https://leetcode.cn/problems/next-greater-element-iv/ 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数&#xff0c;你必须找到对应元素的 第二大 整数。 如果 num…

什么是PHP的反射(Reflection)?

PHP的反射&#xff08;Reflection&#xff09;是一组用于在运行时获取和操作PHP代码结构信息的特性和类。反射API允许您分析和操作类、方法、属性、参数等元素&#xff0c;使您能够在运行时检查和修改PHP代码的结构。反射通常用于以下一些情况&#xff1a; 自动化工具&#xff…

k8s 环境中ipvs VS iptables

IPVS vs. iptables 在 Kubernetes 中的区别 特性IPVSiptables类型L4 负载均衡器L3/L4 包过滤层级传输层 (L4)网络层 (L3) 和传输层 (L4)用途服务负载均衡网络流量的包过滤和NAT网络层在第4层操作 (TCP/UDP)在第3层 (IP) 和第4层 (TCP/UDP) 操作负载均衡支持多种负载均衡算法负载…

Gerrit 提交报错missing Change-Id in message footer

直接执行提示的命令&#xff1a; gitdir$(git rev-parse --git-dir); scp -p -P 29418 liyjgerrit.ingageapp.com:hooks/commit-msg ${gitdir}/hooks/ 如果报错&#xff1a; subsystem request failed on channel 0 在.git/hooks目录下看有没有生成commit-msg文件&#xff…

测序名词解释

测序深度&#xff08;Sequencing Depth&#xff09;是指&#xff1a;测序得到的碱基总量&#xff08;bp&#xff09;与基因组&#xff08;转录组或测序目标区域大小&#xff09;的比值&#xff0c;是评价测序量的指标之一。 测序深度的计算公式为&#xff1a; 测序深度 &…

一点技术细节

匈牙利算法&#xff1a; 14-4: 匈牙利算法 Hungarian Algorithm_哔哩哔哩_bilibili 课件&#xff1a;https://github.com/wangshusen/AdvancedAlgorithms.git SWin transformer&#xff1a; Swin Transformer论文精读【论文精读】_哔哩哔哩_bilibili patch:灰色 窗口&…

数据结构之---- 回溯算法

数据结构之---- 回溯算法 什么是回溯算法&#xff1f; 回溯算法是一种通过穷举来解决问题的方法&#xff0c;它的核心思想是从一个初始状态出发&#xff0c;暴力搜索所有可能的解决方案&#xff0c;当遇到正确的解则将其记录&#xff0c;直到找到解或者尝试了所有可能的选择都…

基于BP神经网络的驾驶模式识别,基于BP神经网络的驾驶行为识别

目录 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 遗传算法原理 遗传算法主要参数 遗传算法流程图 完整代码包含数据下载链接: 基于BP神经网络的驾驶模式识别,基于BP神经网络的驾驶行为识别(…

day01-报表技术POI

前言 报表[forms for reporting to the higher organizations]&#xff0c;就是向上级报告情况的表格。简单的说&#xff1a;报表就是用表格、图表等格式来动态显示数据&#xff0c;可以用公式表示为&#xff1a;“报表 多样的格式 动态的数据”。 1、开发环境搭建 功能说…

图扑物联 | WEB组态可视化软件

什么是组态&#xff1f; 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统&#xff08;Distributed Control System&#xff09;&#xff0c;可理解为“配置”、“设置”等&#xff0c;是指通过人机开发界面&#xff0c;用类似“搭积木”的简单方式来搭建软件功能&a…

[RK-Linux] 移植Linux-5.10到RK3399(六)| 检查GMAC(RTL8211F)配置使能千兆以太网

ROC-RK3399-PC Pro 使用 RTL8211F PHY 芯片作为以太网收发器。 RTL8211F是一种高性能的千兆以太网物理层收发器(PHY),广泛用于台式机、笔记本电脑、网络交换机等设备中。主要特点: 采用低功耗28nm CMOS技术,功耗低。支持千兆速率(10/100/1000Mbps)。支持全双工和半双工…

stm32H库的内部FLASH读写操作与结构体数组数据写入与读取

stm32H库的内部FLASH读写操作与结构体数组数据写入与读取 1.软硬件准备2.关于STM32的Flash的一些说明3.实验结果 参考博主-STM32系列(HAL库)——内部FLASH读写实验 1.软硬件准备 软件&#xff1a;CubeMX、SSCOM&#xff08;串口调试助手&#xff09; 硬件&#xff1a;SMT32F…

动态通讯录(并不难都能拿下)

文章目录 &#x1f680;前言&#x1f680;通讯录实现动态通讯录的初期准备模块化框架搭建 &#x1f680;实现接口函数 &#x1f680;前言 铁子们好啊&#xff01;今天咱们来整一个有意思的玩意——通讯录&#xff0c;相信大家对通讯录并不陌生&#xff0c;那接下来就跟着阿辉把…