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

Go语言八股文之Map详解

  💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。



非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
 

前言

小郑最近在准备Go语言的面试题,通过github和b站等各种学习网站上学习go语言的八股文,并且整理出自己觉得面试可能会问到的知识点,希望通过做笔记的方式来巩固自己的知识点,并且也希望可以帮助到大家在面试的时候更加得心应手一些,那么从现在开始,和我一起加入这趟八股学习之吧!

1.什么类型可以作为map 的key

在Go语言中,map的key可以是任何可以比较的类型。这包括所有的基本类型,如整数、浮点数、字符串和布尔值,以及结构体和数组,只要它们没有被定义为包含不可比较的类型(如切片、映射或函数)。

注意,切片、映射和函数类型是不可比较的,因此不能作为map的key。如果你需要一个包含这些类型的key,你可以考虑使用一个指向这些类型的指针,或者将它们封装在一个可比较的结构体中,并确保结构体不包含任何不可比较的类型。


2.map 使用注意的点,是否并发安全?

2.1map使用的注意点

  1. key的唯一性:map中的每个key必须是唯一的。如果尝试使用已存在的key插入新值,则会覆盖旧值。
  2. key的不可变性:作为key的类型必须是可比较的,这通常意味着它们应该是不可变的。例如,在Go语言中,切片、映射和函数类型因为包含可变状态,所以不能直接作为map的key。
  3. 初始化和nil map:在Go语言中,声明一个map变量不会自动初始化它。未初始化的map变量的零值是nil,对nil map进行读写操作会引发panic。因此,在使用map之前,应该使用<font style="color:rgb(5, 7, 59);">make</font>函数进行初始化。
  4. 遍历顺序:map的遍历顺序是不确定的,每次遍历的结果可能不同。如果需要按照特定顺序处理map中的元素,应该先对key进行排序。
  5. 并发安全性:默认情况下,map并不是并发安全的。在并发环境下对同一个map进行读写操作可能会导致竞态条件和数据不一致性。

2.2并发安全性

  • Go语言中的map类型并不是并发安全的。这意味着,如果有多个goroutine尝试同时读写同一个map,可能会导致竞态条件和数据损坏。
  • 为了在并发环境下安全地使用map,可以采取以下几种策略:
    1. 使用互斥锁(sync.Mutex):在读写map的操作前后加锁,确保同一时间只有一个goroutine可以访问map。
    2. 使用读写互斥锁(sync.RWMutex):如果读操作远多于写操作,可以使用读写锁来提高性能。读写锁允许多个goroutine同时读取map,但在写入时需要独占访问。
    3. 使用并发安全的map(sync.Map):从Go 1.9版本开始,标准库中的<font style="color:rgb(5, 7, 59);">sync</font>包提供了<font style="color:rgb(5, 7, 59);">sync.Map</font>类型,这是一个专为并发环境设计的map。它提供了一系列方法来安全地在多个goroutine之间共享数据。

结论:

在使用map时,需要注意其key的唯一性和不可变性,以及初始化和并发安全性的问题。特别是在并发环境下,应该采取适当的措施来确保map的安全访问,以避免竞态条件和数据不一致性。在Go语言中,可以通过使用互斥锁、读写互斥锁或并发安全的map(<font style="color:rgb(5, 7, 59);">sync.Map</font>)来实现这一点。

方案

实现复杂度

性能(读多写少)

性能(写多)

使用场景

sync.Mutex

中等

中等

写操作频繁,对并发性能要求不高

sync.RWMutex

中等

中等

读多写少,需要较高并发读性能

sync.Map

低(API不同)

中等偏下

读多写少,追求简洁的并发编程模型

3.map 循环是有序的还是无序的?

在Go语言中,map的循环(遍历)是无序的。这意味着当你遍历map时,每次遍历的顺序可能都不同。Go语言的map是基于哈希表的,因此元素的存储顺序是不确定的,并且可能会随着元素的添加、删除等操作而改变。

如果你需要按照特定的顺序处理map中的元素,你应该先将key提取到一个切片中,对切片进行排序,然后按照排序后的顺序遍历切片,并从map中取出对应的值。这样,你就可以按照特定的顺序处理map中的元素了。

4.map 中删除一个 key,它的内存会释放么?

在Go语言中,从map中删除一个key时,其内存释放的行为并非直观且立即的,这涉及到Go语言的内存管理机制。具体来说,删除map中的key后,其内存释放情况如下:

4.1内存标记与垃圾回收

  1. 删除操作:使用<font style="color:rgb(5, 7, 59);background-color:rgb(253, 253, 254);">delete</font>函数从map中删除一个key时,该key及其关联的值会被从map的内部数据结构中移除。此时,这些值在逻辑上不再属于map的一部分。
  2. 内存标记:删除操作后,如果没有任何其他变量或数据结构引用被删除的值,那么这些值就变成了垃圾回收器的目标。Go语言的垃圾回收器(Garbage Collector, GC)会定期扫描内存,标记那些不再被使用的内存区域。
  3. 内存释放:在垃圾回收过程中,被标记为垃圾的内存区域会被释放回堆内存,供后续的内存分配使用。然而,这个过程并不是立即发生的,而是由垃圾回收器的触发条件和回收策略决定的。

5.nil map 和空 map 有何不同?

在Go语言中,nil map和空map之间存在一些关键的不同点,主要体现在它们的初始状态、对增删查操作的影响以及内存占用等方面。

5.1初始状态与内存占用

  • nil map:未初始化的map的零值是nil。这意味着map变量被声明后,如果没有通过<font style="color:rgb(5, 7, 59);">make</font>函数或其他方式显式初始化,它将保持nil状态。nil map不占用实际的内存空间来存储键值对,因为它没有底层的哈希表结构。
  • 空map:空map是通过<font style="color:#DF2A3F;">make</font>函数或其他方式初始化但没有添加任何键值对的map。空map已经分配了底层的哈希表结构,但表中没有存储任何键值对。因此,空map占用了一定的内存空间,尽管这个空间相对较小。

5.2对增删查操作的影响

  • nil map
    • 添加操作:向nil map中添加键值对将导致运行时panic,因为nil map没有底层的哈希表来存储数据。
    • 删除操作:在早期的Go版本中,尝试从nil map中删除键值对也可能导致panic,但在最新的Go版本中,这一行为可能已经被改变(具体取决于Go的版本),但通常不建议对nil map执行删除操作。
    • 查找操作:从nil map中查找键值对不会引发panic,但会返回对应类型的零值,表示未找到键值对。
  • 空map
    • 添加操作:向空map中添加键值对是安全的,键值对会被添加到map中。
    • 删除操作:从空map中删除键值对是一个空操作,不会引发panic,因为map中原本就没有该键值对。
    • 查找操作:从空map中查找不存在的键值对也会返回对应类型的零值,表示未找到键值对。

6.map 的数据结构是什么?

map-地鼠文档

hmap 是 Go map 的顶层结构,包含多个 bucket。

bucket 是哈希表中的一个存储单元,存储多个 bmap。

bmap 是 Go 中存储键值对的最小单元,采用链表来解决哈希冲突。

golang 中 map 是一个 kv 对集合。底层使用 hash table,用链表来解决冲突 ,出现冲突时,不是每一个 key 都申请一个结构通过链表串起来,而是以 bmap 为最小粒度挂载,一个 bmap 可以放 8 个 kv。在哈希函数的选择上,会在程序启动时,检测 cpu 是否支持 aes,如果支持,则使用 aes hash,否则使用 memhash。每个 map 的底层结构是 hmap,是有若干个结构为 bmap 的 bucket 组成的数组。每个 bucket 底层都采用链表结构。

hmap 的结构如下
type hmap struct {     count     int                  // 元素个数     flags     uint8     B         uint8                // 扩容常量相关字段B是buckets数组的长度的对数 2^B     noverflow uint16               // 溢出的bucket个数     hash0     uint32               // hash seed     buckets    unsafe.Pointer      // buckets 数组指针     oldbuckets unsafe.Pointer      // 结构扩容的时候用于赋值的buckets数组     nevacuate  uintptr             // 搬迁进度     extra *mapextra                // 用于扩容的指针 
}

bucket数据结构
type bmap struct {tophash [8]uint8 //存储哈希值的高8位data    byte[1]  //key value数据:key/key/key/.../value/value/value...overflow *bmap   //溢出bucket的地址
}

7.可以对map里面的一个元素取地址吗

在Go语言中,你不能直接对map中的元素取地址,因为map的元素并不是固定的内存位置。当你从map中获取一个元素的值时,你实际上得到的是该值的一个副本,而不是它的实际存储位置的引用。这意味着,即使你尝试获取这个值的地址,你也只是得到了这个副本的地址,而不是map中原始元素的地址。

例如,考虑以下代码:

m := make(map[string]int)  
m["key"] = 42  
value := m["key"]  
fmt.Println(&value) // 打印的是value变量的地址,而不是map中元素的地址

在这个例子中,<font style="color:rgb(5, 7, 59);">&value</font> 是变量 <font style="color:rgb(5, 7, 59);">value</font> 的地址,它包含了从map中检索出来的值的副本。如果你修改了 <font style="color:rgb(5, 7, 59);">value</font>,map中的原始值是不会改变的。

如果你需要修改map中的值,你应该直接通过map的键来设置新的值:

m["key"] = newValue

这样,你就会直接修改map中存储的值,而不是修改一个副本。

如果你确实需要引用map中的值,并且希望这个引用能够反映map中值的改变,你可以使用指针类型的值作为map的元素。这样,你就可以存储和修改指向实际数据的指针了。例如:

m := make(map[string]*int)  
m["key"] = new(int)  
*m["key"] = 42  
fmt.Println(*m["key"]) // 输出42

在这个例子中,map的值是指向int的指针,所以你可以通过指针来修改map中的实际值。

8.sync.map

sync.Map 是 Go 语言标准库中提供的并发安全的 Map 类型,它适用于读多写少的场景。以下是 sync.Map 的一些关键原理:

  1. 读写分离sync.Map 通过读写分离来提升性能。它内部维护了两种数据结构:一个只读的只读字典 (read),一个读写字典 (dirty)。读操作优先访问只读字典,只有在只读字典中找不到数据时才会访问读写字典。
  2. 延迟写入:写操作并不立即更新只读字典(read),而是更新读写字典 (dirty)。只有在读操作发现只读字典的数据过时(即 misses 计数器超过阈值)时,才会将读写字典中的数据同步到只读字典。这种策略减少了写操作对读操作的影响。
  3. 原子操作:读操作大部分是无锁的,因为它们主要访问只读的 read map,并通过原子操作 (atomic.Value) 来保护读操作;写操作会加锁(使用 sync.Mutex)保护写操作,以确保对 dirty map 的并发安全 ,确保高并发环境下的安全性。
  4. 条目淘汰:当一个条目被删除时,它只从读写字典中删除。只有在下一次数据同步时,该条目才会从只读字典中删除。

通过这种设计,sync.Map 在读多写少的场景下能够提供较高的性能,同时保证并发安全。

9.sync.map的锁机制跟你自己用锁加上map有区别么

sync.Map 的锁机制和自己使用锁(如 sync.Mutexsync.RWMutex)加上 map 的方式有一些关键区别:

自己使用锁和 map

  1. 全局锁
    • 你需要自己管理锁,通常是一个全局的 sync.Mutexsync.RWMutex
    • 对于读多写少的场景,使用 sync.RWMutex 可以允许多个读操作同时进行,但写操作依然会阻塞所有读操作。
  1. 手动处理
    • 你需要自己编写代码来处理加锁、解锁、读写操作。
    • 错误使用锁可能导致死锁、竞态条件等问题。
  1. 简单直观
    • 实现简单,容易理解和调试。

**<u>sync.Map</u>**

  1. 读写分离
    • sync.Map 内部使用读写分离的策略,通过只读和读写两个 map 提高读操作的性能。
    • 读操作大部分情况下是无锁的,只有在只读 map 中找不到数据时,才会加锁访问读写 map。
  1. 延迟写入
    • 写操作更新读写 map(dirty),但不会立即更新只读 map(read)。只有当读操作发现只读 map 中的数据过时时,才会将读写 map 的数据同步到只读 map 中。
  1. 内置优化
    • sync.Map 内部有各种优化措施,如原子操作、延迟写入等,使得它在读多写少的场景下性能更高。

区别总结

  • 并发性能sync.Map 通过读写分离和延迟写入在读多写少的场景下提供更高的并发性能,而使用全局锁的 map 在读写频繁时性能较低。
  • 复杂性和易用性sync.Map 封装了复杂的并发控制逻辑,使用起来更简单,而自己管理锁和 map 需要处理更多的并发控制细节。
  • 适用场景**<font style="color:#DF2A3F;">sync.Map</font>** 适用于读多写少的场景,而使用**全局锁的 map 适用于读写操作较均衡或者对性能要求不高**的场景。

如果你的应用场景是读多写少且对性能要求较高,sync.Map 会是一个更好的选择。而对于简单的并发访问控制,使用 sync.Mutexsync.RWMutex 加上 map 也可以满足需求。

❤️❤️❤️小郑是普通学生水平,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

相关文章:

Go语言八股文之Map详解

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

矿泉水瓶的绘制

1.制作中心矩形&#xff0c;大小为60&#xff0c;注意设置矩形的两条边相等 2.点击拉伸&#xff0c;高度为150mm 3.使用圆角命令&#xff0c;点击连接到开始面&#xff0c;同时选中4条边&#xff0c;进行圆角转化&#xff0c;圆角大小为10mm&#xff0c;点击多半径圆角&#xf…...

LeetCode 热题 100 54. 螺旋矩阵

LeetCode 热题 100 | 54. 螺旋矩阵 大家好&#xff0c;今天我们来解决一道经典的算法题——螺旋矩阵。这道题在LeetCode上被标记为中等难度&#xff0c;要求我们按照顺时针螺旋顺序返回矩阵中的所有元素。下面我将详细讲解解题思路&#xff0c;并附上Python代码实现。 问题描述…...

方案精读:业财融合转型路径和华为实践【附全文阅读】

在当今快速变化、竞争激烈的时代,业务面临不确定性,业财融合至关重要。以华为为例,其从财务到财经的转型,历经财务四统一变革、IFS 变革等,构建了包含财经能力中心(COE)、业务伙伴(BP)和财经共享中心(SSC)的财务组织架构 。通过实现财务四算拉通、提升预算预测、项目…...

AIDC智算中心建设:计算力核心技术解析

目录 一、智算中心发展概览 二、计算力核心技术解析 一、智算中心发展概览 智算中心是人工智能发展的关键基础设施&#xff0c;基于人工智能计算架构&#xff0c;提供人工智能应用所需算力服务、数据服务和算法服务的算力基础设施&#xff0c;融合高性能计算设备、高速网络以…...

Javase 基础加强 —— 02 泛型

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 01 认识泛型…...

PowerShell 备份 Windows10/11 还原计算机驱动程序SOP

一、现在计算机C目录下创建一个新的文件夹名称为 driverbackup 二、打开cmd 以管理员身份执行 dism /online /export-driver /destination: C:\driverbackup 在正常情况下&#xff0c;Windows 10会自动检测您的设备所需的驱动程序&#xff0c;并将其安装到您的PC上。 但是&am…...

Python 中的 collections 库:高效数据结构的利器

Python 中的 collections 库&#xff1a;高效数据结构的利器 在 Python 编程中&#xff0c;数据结构的高效使用往往能极大地提升代码的性能和可读性。今天&#xff0c;就让我们来深入了解一下 Python 的 collections 库&#xff0c;它是一个非常实用且强大的工具库&#xff0c…...

2025年- H24-Lc132-94. 二叉树的中序遍历(树)---java版。

1.题目描述 2.思路 递归遍历&#xff1a;返回值&#xff0c;中序遍历的节点值列表 List。 &#xff08;1&#xff09;首先是一个中序遍历的结果函数&#xff0c;传入root参数&#xff0c;定义一个节点值列表result&#xff0c;然后递归调用中序遍历的函数 &#xff08;2&#…...

第十六届蓝桥杯单片机组省赛(第一套)

看到很多人在问第十六届蓝桥杯单片机难不难&#xff0c;以及实现多少功能可以获得省一。 先介绍下我的作答情况吧&#xff0c;选择题只对一题&#xff0c;程序题的求连续两次距离差值没有考虑负数的情况&#xff0c;其他功能都实现了&#xff0c;成绩是福建省省一第一页&#x…...

使用python写多文件#inlcude

使用下面的程序可以将当前文件夹下面的.c文件的写入main.h文件&#xff0c;我这里是将自己的基于标准库stm32初始化io文件为例。 import osbase ["#ifndef main_H","#define main_H\n","#endif" ]includes set() for file in os.listdir():if…...

深度学习中保存最优模型的实践与探索:以食物图像分类为例

深度学习中保存最优模型的实践与探索&#xff1a;以食物图像分类为例 在深度学习的模型训练过程中&#xff0c;训练一个性能良好的模型往往需要耗费大量的时间和计算资源。而保存最优模型不仅可以避免重复训练&#xff0c;还能方便后续使用和部署。本文将结合食物图像分类的代…...

OpenCv实战笔记(2)基于opencv和qt对图像进行灰度化 → 降噪 → 边缘检测预处理及显示

一、实现效果 二、应用场景 这三步是经典的 “灰度化 → 降噪 → 边缘检测” 预处理流程&#xff0c;常用于&#xff1a; 计算机视觉任务&#xff08;如物体识别、特征提取&#xff09;。 图像分析&#xff08;如文档扫描、车牌识别&#xff09;。 减少后续算法的计算复杂度&a…...

个人文章不设置vip

今天没登录打开自己文章&#xff0c;发现自己读自己文章还要充值。就感觉很扯。 继而去查看个人的历史文章&#xff0c;发现很多被标注为高质量的文章设置成了VIP文章。 如果仅有一两篇&#xff0c;还可能是本人手滑误设置&#xff0c;这么多就解释不通了。 &#xff08;大概有…...

【聚类分析】基于copula的风光联合场景生成与缩减

目录 1 主要内容 风光出力场景生成方法 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序方法复现《融合风光出力场景生成的多能互补微网系统优化配置》风光出力场景生成部分&#xff0c;目前大多数研究的是不计风光出力之间的相关性影响&#xff0c;但是地理位置相近…...

CSDN积分详解(介绍、获取、用途)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 积分**一、积分类型及用途****二、积分获取途…...

运维--计划任务

计划任务分为一次性和循环性的计划任务 1.date的用法 date 月日时分年 eg:date 100118222023 date:查看时间和日期、修改时间和日期 获取当前日期:date +%F F:日期 获取当前时间:date +%H:%M:%S H:时 M:分 S:秒 获取周几: date +%w w:周 …...

AVL树(2):

我们之前讲AVL树&#xff0c;我们讲到了旋转&#xff0c;然后讲了左单旋和右单旋。 但是我们这里的单旋产生的条件都是纯粹的一边比较高&#xff0c; 我们看上面这个图片&#xff0c;当我们插入新的结点导致一边的子树比较高的时候&#xff0c;我们必须是存粹的一边高&#xf…...

架构思维:异构数据的同步一致性方案

文章目录 一、引言二、全景架构回顾三、潜在问题问题1&#xff1a;Binlog 延迟——理想 vs 实际问题2&#xff1a;Binlog 格式解析问题3&#xff1a;高可靠消费1. 串行 ACK 消费2. 并行消费&#xff0b;乱序风险3. 解决方案 问题4&#xff1a;缓存数据结构设计1. Key–Value 冗…...

nginx 正反向代理和nginx正则

目录 一. 正向代理 1. 编译安装Nginx 2. 配置正向代理 二. 反向代理 1. 配置nginx七层代理 2. 配置nginx四层代理 三. Nginx 缓存 1. 缓存功能的核心原理和缓存类型 2. 代理缓存功能设置 四. Nginx rewrite和正则 1. Nginx正则 2. nginx location 3. Rewrite …...

SAM-Decoding_ 后缀自动机助力大模型推理加速!

SAM-Decoding: 后缀自动机助力大模型推理加速&#xff01; 大语言模型&#xff08;LLMs&#xff09;的推理效率一直是研究热点。本文介绍的SAM-Decoding方法&#xff0c;借助后缀自动机&#xff08;Suffix Automaton&#xff0c;SAM&#xff09;实现推测解码&#xff0c;在提升…...

使用Scrapy构建高效网络爬虫:从入门到数据导出全流程

在数据驱动的时代&#xff0c;网络爬虫已成为获取公开信息的核心工具。本文将带您通过Scrapy框架完成一个实战项目&#xff0c;涵盖从零搭建爬虫到多格式数据导出的完整流程&#xff0c;并深入解析Scrapy的Feed Exports功能。 一、项目背景与目标 我们将爬取书籍网站&#xff…...

Docker安装Gitblit(图文教程)

本章教程,使用Docker安装部署Gitblit。 一、Gitblit简介 Gitblit 是一个基于 Java 的 Git 仓库管理工具,主要用于在局域网或小型团队环境中搭建私有 Git 服务器。它提供了一个简单易用的 Web 界面,用于浏览代码、管理仓库和用户权限等。 二、拉取镜像 sudo docker pull git…...

SpringBoot的汽车商城后台管理系统源码开发实现

概述 汽车商城后台管理系统专为汽车4S店和经销商设计&#xff0c;提供全面的汽车管理系统解决方案。 主要内容 1. 核心功能模块 系统提供以下主要功能&#xff1a; ​​销售管理​​&#xff1a;记录销售信息&#xff0c;跟踪交易进度​​客户管理​​&#xff1a;维护客户…...

组合模式(Composite Pattern)

非常棒&#xff01;你现在进入了结构型设计模式中最典型的「树形结构」设计模式 —— 组合模式&#xff08;Composite Pattern&#xff09;。 我将通过简明解释 清晰代码 类图演示&#xff0c;一步步帮你理解它。 &#x1f9e0; 一句话定义 组合模式允许你将对象组合成树形结…...

Java捕获InterruptedException异常后,会自动清空中断状态

InterruptedException异常一般是在一个线程处于等待&#xff08;像Thread.sleep()、Object.wait()、Thread.join()等方法&#xff09;状态时被另一个线程调用interrupt()方法中断而抛出的。一旦捕获到InterruptedException&#xff0c;Java 会自动清除该线程的中断状态。 以下…...

HTML04:图像标签

图像标签 常见的图像标签 JPGGIFPNGBMP <img src"路径" alt"名称" title"悬停名称" width"高" height"宽"/><!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…...

供应链算法整理(二)--- 智能补货

供应链业务的目标价值是&#xff1a;优化货品的供给、销售提供支撑&#xff0c;以降低成本&#xff0c;提高时效、收益&#xff0c;最终提升用户体验。基于目标价值&#xff0c;整体的算法模块分为&#xff1a;智能选品、智能预测、品仓铺货、智能补货、智能调拨、仓网路由、快…...

【毕设通关】——Word交叉引用

&#x1f4d6; 前言&#xff1a;在论文中&#xff0c;我们经常会在文段贴图片时&#xff0c;写“如图x所示”的内容&#xff0c;如果每次都手动写数字&#xff0c;那么当需要在前面内容插入图片时&#xff0c;后续更新会很繁琐&#xff0c;这时就需要交叉引用功能。 &#x1f5…...

java技术总监简历模板

模板信息 简历范文名称&#xff1a;java技术总监简历模板&#xff0c;所属行业&#xff1a;其他 | 职位&#xff0c;模板编号&#xff1a;XDNUTA 专业的个人简历模板&#xff0c;逻辑清晰&#xff0c;排版简洁美观&#xff0c;让你的个人简历显得更专业&#xff0c;找到好工作…...

视频编解码学习三之显示器

整理自&#xff1a;显示器_百度百科&#xff0c;触摸屏_百度百科,百度安全验证 分为阴极射线管显示器&#xff08;CRT&#xff09;&#xff0c;等离子显示器PDP&#xff0c;液晶显示器LCD 液晶显示器的组成。一般来说&#xff0c;液晶显示器由以下几个部分组成&#xff1a; […...

【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析与防护实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的广泛应用,其安全性问题日益凸显。DeepSeek作为中国领先的开源AI模型,以低成本和高性能著称,但近期暴露的数据库…...

架构思维:使用懒加载架构实现高性能读服务

文章目录 一、引言二、读服务的功能性需求三、两大基本设计原则1. 架构尽量不要分层2. 代码尽可能简单 四、实战方案&#xff1a;懒加载架构及其四大挑战五、改进思路六、总结与思考题 一、引言 在任何后台系统设计中&#xff0c;「读多写少」的业务场景占据主流&#xff1a;浏…...

【AI提示词】黑天鹅模型专家

提示说明 详细解释黑天鹅模型的理论背景、定义、分类及其在不同领域的应用。 提示词 # Role: 黑天鹅模型专家## Profile - language: 中文 - description: 详细解释黑天鹅模型的理论背景、定义、分类及其在不同领域的应用 - background: 黑天鹅模型是尼尔斯莫尔提出的理论&a…...

pip安装包时网络不畅,替换国内PyPI镜像源

1、PyPI 镜像源 1.1、定义 PyPI 镜像源是对 Python Package Index&#xff08;PyPI&#xff09;官方仓库的复制。 PyPI 是 Python 社区中最大的软件包仓库&#xff0c;存储着大量的 Python 包&#xff0c;供开发者们下载和使用。 然而&#xff0c;由于 PyPI 服务器位于国外&a…...

TS 类型推论

应用场景&#xff1a; 1.变量初始化 仅声明不初始化无法推断是什么类型&#xff0c;必须手动添加类型注解 2.决定函数返回值 根据函数体内的运算可以推断出返回值的类型 函数参数的类型声明建议一定要手写...

Java基于SaaS模式多租户ERP系统源码

目录 一、系统概述 二、开发环境 三、系统功能介绍 一、系统概述 ERP&#xff0c;全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统&#xff0c;它通过信息技术手段&#xff0c;将企业的各个业务流程和资源管理进行整合&#xff0c;以提高企业…...

PHP的include和require

文章目录 环境require和includerequire VS includerequire&#xff08;include&#xff09; VS require_once&#xff08;include_once&#xff09;路径问题当前工作目录对相对路径的影响题外话总结其它 参考 环境 Windows 11 专业版XAMPP v3.3.0 PHP 8.2.12Apache 2.4.58 VSC…...

日本人工智能发展全景观察:从技术革新到社会重构的深度解析

一、日本IT产业演进与AI技术崛起的历史脉络 1.1 信息化时代的奠基&#xff08;1990-2010&#xff09; 日本IT产业的腾飞始于"信息高速公路计划"的实施。1994年NTT推出全球首个商用光纤网络&#xff0c;至2005年实现全国光纤覆盖率突破80%。这一时期培育出富士通、N…...

什么是DGI数据治理框架?

DGI数据治理框架是由数据治理研究所&#xff08;Data Governance Institute, DGI&#xff09;提出的一套系统性方法论&#xff0c;旨在帮助企业或组织建立有效的数据治理体系&#xff0c;确保数据资产的高质量管理、合规使用和价值释放。以下是关于DGI数据治理框架的核心内容&a…...

[硬件电路-12]:LD激光器与DFB激光器功能概述、管脚定义、功能比较

一、LD激光器&#xff08;普通半导体激光器&#xff09;功能 核心功能&#xff1a; LD激光器通过半导体材料的电子-空穴复合实现受激辐射&#xff0c;将电能直接转换为高相干性激光&#xff0c;是光电子系统的核心光源。 基础光发射功能 工作原理&#xff1a;正向偏置电流注入…...

升级 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后验证指南:功能与虚拟环境检测

#工作记录 在 NVIDIA 发布 CUDA Toolkit 12.9 与 cuDNN 9.9.0 后&#xff0c;开发者纷纷选择升级以获取新特性和性能提升。 CUDA Toolkit 12.9 与 cuDNN 9.9.0 发布&#xff0c;带来全新特性与优化-CSDN博客 然而&#xff0c;升级完成并不意味着大功告成&#xff0c;确认升级后…...

湖仓一体架构解析:如何平衡数据灵活性与分析性能?

一、什么是湖仓一体架构&#xff1f;解决哪些核心问题&#xff1f; 在数据爆炸的时代&#xff0c;企业面临着如何高效处理和分析海量数据的挑战。传统架构难以同时满足灵活性和性能需求&#xff0c;湖仓一体架构应运而生。 传统数据架构的局限 数据湖&#xff08;存储各类原…...

56、【OS】【Nuttx】编码规范解读(四)

背景 接之前 blog 53、【OS】【Nuttx】编码规范解读&#xff08;一&#xff09; 54、【OS】【Nuttx】编码规范解读&#xff08;二&#xff09; 55、【OS】【Nuttx】编码规范解读&#xff08;三&#xff09; 分析了行宽格式&#xff0c;注释要求&#xff0c;花括号风格等&#…...

MySQL基础关键_007_DQL 练习

目 录 一、题目 二、答案&#xff08;不唯一&#xff09; 1.查询每个部门薪资最高的员工信息 2.查询每个部门高于平均薪水的员工信息 3. 查询每个部门平均薪资等级 4.查询部门中所有员工薪资等级的平均等级 5.不用分组函数 max 查询最高薪资 6.查询平均薪资最高的部门编…...

气泡图、桑基图的绘制

1、气泡图 使用气泡图分析某一年中国同欧洲各国之间的贸易情况。 气泡图分析的三个维度&#xff1a; • 进口额&#xff1a;横轴 • 出口额&#xff1a;纵轴 • 进出口总额&#xff1a;气泡大小 数据来源&#xff1a;链接: 国家统计局数据 数据概览&#xff08;进出口总额&…...

数据库Mysql_联合查询

或许自己的不完美才是最完美的地方&#xff0c;那些让自己感到不安的瑕疵&#xff0c;最终都会变成自己的特色。 ----------陳長生. 1.介绍 1.1.为什么要进行联合查询 在数据设计的时候&#xff0c;由于范式的需求&#xff0c;会被分为多个表&#xff0c;但是当我们要查询数据…...

数字孪生:解码智慧城市的 “数字神经系统”

当城市规模以惊人速度扩张&#xff0c;传统管理模式在交通拥堵、能源浪费、应急响应滞后等问题面前渐显乏力。数字孪生技术正以 “数字镜像” 重构城市运作逻辑&#xff0c;为智慧城市装上一套高效、智能的 “数字神经系统”。通过将物理世界的城市映射到虚拟空间&#xff0c;实…...

开源项目:optimum-quanto库介绍

项目地址&#xff1a;https://github.com/huggingface/optimum-quanto 官网介绍&#xff1a;https://huggingface.co/blog/quanto-introduction 量化是一种技术&#xff0c;通过使用低精度数据类型&#xff08;如 8 位整数 &#xff08;int8&#xff09;&#xff09;而不是通常…...

C++学习:六个月从基础到就业——C++11/14:lambda表达式

C学习&#xff1a;六个月从基础到就业——C11/14&#xff1a;lambda表达式 本文是我C学习之旅系列的第四十篇技术文章&#xff0c;也是第三阶段"现代C特性"的第二篇&#xff0c;主要介绍C11/14中引入的lambda表达式。查看完整系列目录了解更多内容。 引言 Lambda表达…...