每日八股文5.31

article/2025/6/18 6:06:17

每日八股-5.31

  • Go
    • 1.切片是值传递还是引用传递?
    • 2.切片的深拷贝与浅拷贝
    • 3.切片的底层实现
    • 4.切片的扩容机制
    • 5.Map是线程安全的吗?
    • 6.哪些类型可以作为map的key?
    • 7.Map删除一个key内存是否会释放?
    • 8.Map为什么是无序的?
    • 9.如何顺序读写map?
    • 10.Map的底层实现
    • 11.Struct是否可以进行比较
    • 12.Rune和Byte的区别

Go

1.切片是值传递还是引用传递?

在go语言中,所有的传参都是值传递,切片也不例外,但切片是引用类型,因为切片的底层实现包括一个指针,用来指向当前数组的起始位置,长度,以及容量;当在函数内部对切片进行修改时,外部的切片也会受到影响;而在函数内部使用append增加元素时,外部的元素不会受到影响,所以说我们在实践中都是让append后的切片赋值给原切片。

补充:
引用类型:slice、map、channel、pointer
非引用类型:int、string、struct

2.切片的深拷贝与浅拷贝

假设我们现在有一个切片s1,如果用:=的形式让s2:=s1,那么这就是浅拷贝,他们的指针指向同一个地址,修改任意一个都会影响另一个,如果说我们用copy()的话,那么s1和s2底层的指针指向两个完全不同的地址,修改一个对另一个不会造成任何影响,这就是深拷贝。

3.切片的底层实现

切片的数据结构是一个结构体,包括三个参数Pointer,len,cap
其中Pointer指向数组中要表示的片段的起始元素;
len表示当前切片包含多少个元素;
cap表示当前切片最大可以容纳多少个元素;

type slice struct {array unsafe.Pointerlen   intcap   int
}

4.切片的扩容机制

go1.18之后的扩容机制,有一个阈值256
如果当前要扩容的容量大于旧容量的2倍,那么直接扩容为新的容量
如果当前要扩容的容量小于阈值,那么扩容为旧容量的二倍
如果当前要扩容的容量大于阈值,那么新容量为旧容量加上(旧容量加三倍的阈值)/4
在这里插入图片描述

5.Map是线程安全的吗?

线程安全指的是在并发场景或多个goroutine同时操作一个对象,执行的结果依然是正确的。对于map来说,并发读是安全的,但是并发读写是不安全的,会造成不可预测的结果,程序会抛出fatal Error:concurrent map write

6.哪些类型可以作为map的key?

只要是可比较的类型都可以作为map的key,比如int,string,bool,interface,struct,指针,channel等,不可比较的类型就无法作为map的key,比如slice,map,函数。

但是如果interface或struct里包括了不可比较的类型,那么也不能作为map的key
channel和指针是可比较的引用类型(和前面提到的引用类型非引用类型对比记忆)

7.Map删除一个key内存是否会释放?

Map删除一个key后,对应的key-value将不复存在,但对应的内存不会立即释放,会有GC(垃圾回收器)负责释放这部分内存。如果没有别的对象引用该value,这部分内存最终会由GC释放。

8.Map为什么是无序的?

因为在go的底层map的实现是一个哈希表,当要往map里面存储新的元素时,会为每一个键计算一个哈希值,而这个哈希值在内存中不一定是连续的;另外当map进行扩容时,所有在map中存储的元素都会重新计算一遍哈希值,所以多次遍历同一个map,结果不一定是相同的。

9.如何顺序读写map?

创建一个切片,遍历map的时候把键存储到切片中,然后对该切片进行排序,遍历该切片,就可以实现顺序输出map。

10.Map的底层实现

type hmap struct {count      int            // 元素个数,调用len(map)返回这个值B          uint8          // bucket数量是2^Bhash0      uint32         // hash seed,用于在计算哈希值时引入随机性buckets    unsafe.Pointer // 指向bucket数组的指针(存储key val);大小:2^Boldbuckets unsafe.Pointer // 扩容时,buckets 长度是 oldbuckets 的两倍// ...
}
type bmap struct {topbits  [8]uint8     // 这是一个长度为8的字节数组。对于存储在桶中的每个键,它会保存该键哈希值的高8位(top hash bits)。这是一种优化,可以在查找时快速比较,而不用立即比较完整的键,从而提高效率keys     [8]keytype   // 存储key的数组values   [8]valuetype // 存储val的数组overflow uintptr      // 指向“溢出桶”的指针。如果一个桶存满了8个键值对,后续哈希到这个桶的新键值对就会存放到溢出桶中
}

11.Struct是否可以进行比较

只要结构体内的数据类型是可以比较的,那么结构体就可以进行比较。可比较的数据类型包括基本数据类型(如int,float,string)和指针、channel等,可以使用reflect.DeepEqual()来对两个结构体进行比较,该结构体会递归的比较结构体内部的数据类型。

12.Rune和Byte的区别

rune和byte都是go语言中的字符类型,总的来说就是rune表示的范围更大。byte其实是uint8类型,它用来表示单个ascii码字符;rune是int32类型,它可以用来表示unicode字符或者utf-8字符,如果我们需要切割的字符串中有中文,我们需要把它转化为[]rune数组,而不是[]byte数组

package mainimport "fmt"func main() {strs := "go语言"fmt.Println(string([]byte(strs)[0:3])) // 输出:go�fmt.Println(string([]rune(strs)[0:3])) // 输出:go语
}

http://www.hkcw.cn/article/EkjMWKtJma.shtml

相关文章

智能重塑连接:AI原生互联网的范式革命与未来十年

引言:互联网的下一幕——智能涌现与体验重塑 2024年初,OpenAI发布的文生视频模型Sora,以其惊人的逼真度和对物理世界的理解能力,再次将人工智能的魔力推向了全球聚光灯下。这不仅仅是一个技术演示,更像是一个强烈的信号:我们正加速驶向一个由AI深度重塑的未来。回望互联…

【深度学习相关安装及配环境】Anaconda搭建虚拟环境并安装CUDA、cuDVV和对应版本的Pytorch,并在jupyter notebook上部署

目录 1. 查看自己电脑的cuda版本2.安装cuda关于环境变量的配置测试一下,安装完成 3.安装cuDVV环境变量的配置测试一下,安装完成 4.创建虚拟环境先安装镜像源下载3.11版本py 5.在虚拟环境下,下载pytorch6.验证是否安装成功7.在jupyter noteboo…

2. 手写数字预测 gui版

2. 手写数字预测 gui版 背景1.界面绘制2.处理图片3. 加载模型4. 预测5.结果6.一点小问题 背景 做了手写数字预测的模型,但是老是跑模型太无聊了,就配合pyqt做了一个可视化界面出来玩一下 源代码可以去这里https://github.com/Leezed525/pytorch_toy拿 …

用JS实现植物大战僵尸(前端作业)

1. 先搭架子 整体效果&#xff1a; 点击开始后进入主场景 左侧是植物卡片 右上角是游戏的开始和暂停键 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

巴黎球迷打出TIFO悼念恩里克女儿 感人至深的纪念

北京时间6月1日,巴黎圣日耳曼在欧冠决赛中以5-0战胜国际米兰,夺得本赛季欧冠冠军。赛后,安联球场展示了一个感人至深的TIFO,主角是巴黎圣日耳曼主教练恩里克和他的已故女儿Xana。十年前,恩里克带领巴塞罗那夺得欧冠冠军时,曾与女儿Xana一起将巴萨的旗帜插进球场。然而,X…

六一儿童节 实践我先行活动举行

5月30日,在“六一”国际儿童节来临之际,“实践我先行——2025年在宋庆龄奶奶生活过的地方过六一”活动在北京宋庆龄故居举行,逾百名中外少年儿童和教师代表参加。活动现场,北京市西城区金融街惠泽幼儿园的小朋友们表演了群鼓节目《华夏少年》。中国宋庆龄基金会党组书记、副…

阿什拉夫弑旧主 破门后拒绝庆祝 情深义重

在欧冠决赛中,巴黎圣日耳曼迎战国际米兰。上半场,阿什拉夫攻破了老东家的大门,帮助巴黎取得领先。这位现年26岁的摩洛哥后卫曾在2020年至2021年效力于国际米兰,并为蓝黑军团出场45次。比赛进行到第12分钟时,阿什拉夫推射空门得手,将比分改写为1-0。进球后,他举起双手,拒…

端午安康(Python)

端午节总算是回家了&#xff0c;感觉时间过得真快&#xff0c;马上就毕业了&#xff0c;用Python弄了一个端午节元素的界面&#xff0c;虽然有点不像&#xff0c;祝大家端午安康。端午节粽子&#xff08;python&#xff09;_python画粽子-CSDN博客https://blog.csdn.net/weixin…

10.安卓逆向2-frida hook技术-frida基本使用-frida指令(用于hook)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

# CppCon 2014 学习: Quick game development with C++11/C++14

这是一个关于游戏开发与现代 C&#xff08;尤其是 C11/C14&#xff09;结合的技术分享或讲座的概要&#xff0c;结构清晰、内容分为几个部分&#xff1a; About This Talk — 内容结构 1. 导言部分&#xff08;Introductory part&#xff09; 介绍为什么选择游戏开发作为主题…

vscode不满足先决条件问题的解决——vscode的老版本安装与禁止更新(附安装包)

目录 起因 vscode更新设置的关闭 安装包 结语 起因 由于主包用的系统是centos的&#xff0c;且版本有点老了&#xff0c;再加上vscode现在不支持老版本的&#xff0c;这对主包来说更是雪上加霜啊 但是主包看了网上很多教程&#xff0c;眼花缭乱&#xff0c;好多配置要改&…

如何手搓扫雷(待扩展)

文章目录 一、扫雷游戏分析与设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 文件结构设计 二、扫雷游戏的代码实现三、扫雷游戏的扩展总结 一、扫雷游戏分析与设计 扫雷游戏网页版 1.1 扫雷游戏的功能说明 使用控制台&#xff08;黑框框的程序&a…

Python打卡训练营学习记录Day41

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 →…

我们来学mysql -- mysql8.4主从

mysql8.4主从 8.4安装主从原理主my.cnf启动创建复制用户 从my.cnf启动锁库&迁移数据连接主&开启复制检查复制 8.4安装 参考保姆级安装教程传送门 主从原理 从库准备 使用 CHANGE MASTER TO 配置主库信息并写入 master.info 文件。执行 START SLAVE 启动从库&#xff…

kafka学习笔记(三、消费者Consumer使用教程——消费性能多线程提升思考)

1.简介 KafkaConsumer是非线程安全的&#xff0c;它定义了一个acquire()方法来检测当前是否只有一个线程在操作&#xff0c;如不是则会抛出ConcurrentModifcationException异常。 acquire()可以看做是一个轻量级锁&#xff0c;它仅通过线程操作计数标记的方式来检测线程是否发…

记忆胶囊应用源码纯开源

下载地址&#xff1a;https://pan.quark.cn/s/729681531125 &#x1f4f1; 应用功能特点 核心功能&#xff1a; 创建记忆胶囊 - 用户可以创建包含文本内容的时间胶囊时间设定 - 设置胶囊的开启时间情感标签 - 为记忆添加情感标记&#xff08;开心、难过、兴奋等&#xff09;…

破题城市更新 老旧街区如何新生?南京这样干→

暮春4月,经过十年更新改造的南京小西湖街区游人纷纷,老南京风貌从更新过的街巷中透出,市井烟火气里交织着现代时尚感。但是,略微向深处走走,年久失修的房屋,私搭乱建的建筑,让小西湖少了一分西湖的美,多了几分棚户的乱。王卉在小西湖出生长大,箍桶巷33号是父亲留给她的…

郑钦文今日战萨姆索诺娃 法网1/8决赛焦点

法网6月1日赛程已公布,郑钦文与萨姆索诺娃的比赛将在苏珊-朗格伦球场第二场进行,比赛时间不早于19点。当天是法网第八比赛日,将展开单打第四轮的较量。在苏珊-朗格伦球场的第一场比赛是保罗对阵波佩林的男单第四轮。从交手记录来看,萨姆索诺娃以3-2领先郑钦文。不过,在双方…

俄罗斯布良斯克州一桥梁坍塌 已致数十人伤亡

总台记者获悉,当地时间5月31日,位于俄罗斯布良斯克州的一座桥梁发生坍塌,导致当时行经桥下、由莫斯科开往该州城市克利莫沃的列车脱轨。据俄罗斯BAZA网站报道,事件造成4人死亡,至少44人受伤。据悉,死亡人员分别是火车司机、副司机和两名乘客。有媒体报道称,不明身份者在…

neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理

前言 突然有需求需要用apoc 导入 低版本的图谱数据&#xff0c;网上资料又比较少&#xff0c;所以就看官网资料并处理了apoc 导入的一些问题。 相关地址 apoc 官方安装网址 apoc 官方导出csv 教程地址 apoc 官方 导入 csv 地址 docker 安装 执行如下命令启动镜像 doc…