[面试]-golang基础面试题总结

在这里插入图片描述

文章目录

      • panic` 和 `recover
      • **注意事项**
      • 使用 `pprof`、`trace` 和 `race` 进行性能调试。
      • **Go Module**:
      • Go中new和make的区别
    • Channel
      • 什么是 Channel 的方向性?如何对 Channel 进行方向限制?
      • Channel 的缓冲区大小对于 Channel 和 Goroutine 的通信有什么影响?如何设置 Channel 的缓冲区大小?
      • Channel 可以通过什么形式进行关闭?为什么要关闭 Channel?
      • 请简要说明 Channel 在 Go 中的作用以及主要特点。
      • 多个 Goroutine 同时对一个 Channel 进行读写操作会出现什么情况?如何避免此类问题?
      • 在go语言中,Printf()、Sprintf()、Fprintf()函数的区别用法是什么?
      • 说说go语言中,数组与切片的区别?
        • (1)数组
        • (2)切片
      • 解释以下命令的作用?
      • 说说go语言中的for循环?
      • 说说go语言中的switch语句?
      • go语言中没有隐藏的this指针,这句话是什么意思?
      • go语言中的引用类型包含哪些?
      • go语言中指针运算有哪些?
      • 说说go语言的main函数
      • 说说go语言的channel特性?
      • go语言触发异常的场景有哪些?
      • 说说go语言的beego框架?
      • 说说go语言的goconvey框架?
      • go语言中,GoStub的作用是什么?
      • 简单介绍一下Golang。
      • Golang是否可以声明一个类?
      • Go是否支持泛型?(陷阱问题)
      • 从GitHub或者bitbucket导入代码的命令是什么?
      • 一个通过make()命令创建的缓冲区被分配了一块内存后。如何销毁缓冲区并收回内存?
      • 以下内容表示什么?(陷阱问题)
      • 切片和数组的显著差异是什么?
      • cap()和len()函数的区别是什么?
      • 哈希表或哈希映射允许快速查找。GO如何实现哈希映射?(陷阱问题)
      • 以下哪些函数,变量,标识符可以被导出,或者可以被外部函数调用?(陷阱问题)
      • Go语言的数据类型有哪些?
      • **你有使用过哪些Go的Web框架?**
      • **如何防止常见的安全漏洞?**

panicrecover

特性panicrecover
作用主动触发异常,导致程序崩溃。捕获异常,避免程序退出。
返回值无返回值。返回 panic 的信息或 nil
执行时机在调用时立即开始栈回溯。在栈回溯中调用时捕获 panic 信息。
常用场景不可恢复的严重错误。程序恢复、错误日志记录。
defer 配合通常在 defer 之前或普通代码中触发。必须在 defer 函数中调用。

注意事项

  1. recover 必须在 defer 中调用
    • 如果直接调用 recover 而没有 defer,它无法捕获 panic
  2. panic 不应作为常规错误处理工具
    • Go 提倡显式错误处理(通过 error 类型返回错误)。
    • panic 应用于不可恢复的错误,例如程序 bug。
  3. 防止资源泄漏
    • panic 会跳过正常的函数执行流程,但会依次执行栈上的 defer 语句。
    • 在关键资源操作时,要确保 defer 释放资源(如文件、锁等)。

合理使用 panicrecover,可以在编写 Go 程序时实现更可靠的错误处理,同时提高程序的健壮性。

func worker() {defer func() {if r := recover(); r != nil {log.Printf("Worker recovered from: %v", r)}}()panic("Worker failed!") // 模拟异常
}func main() {worker()fmt.Println("Program continues running")
}

使用 pproftracerace 进行性能调试。

  • pprof 用于分析 Go 程序的性能,帮助识别 CPU 和内存的热点。

    • CPU 性能分析:查看代码在哪些地方消耗了最多的 CPU 时间。
    • 内存分析:查看内存分配的热点。
    • 阻塞分析:查看 Goroutine 的阻塞情况。
    • 线程分析:分析操作系统线程的使用。
  • trace 提供了更细粒度的时间线分析工具,用于调试 Go 程序的并发行为和性能问题。

    • 分析 Goroutine 的生命周期。

    • 观察网络延迟、垃圾回收(GC)时间。

    • 查看锁竞争情况。

  • race:数据竞争检测,race 检测多 Goroutine 并发访问共享变量时的竞争条件。

    • 检测并发读写导致的数据竞争。
    • 帮助定位 Goroutine 中共享资源的错误使用。

Go Module

  • 依赖管理和版本控制。
    • Go Module 是 Go 的依赖管理工具,用于管理项目的依赖包及其版本控制。它是 Go 从 1.11 开始引入并在 1.16 成为默认的依赖管理方式。
  • replace 和本地调试,在实际开发中,尤其是调试或开发本地依赖包时,replace 是非常有用的工具。
    • 重定向模块路径到本地或其他路径。
    • 常用于本地开发版本的调试,避免发布到远程仓库。

Go中new和make的区别

在Go中的值类型和引用类型: (new 返回指针,make 返回值)

值类型:int,float,bool,string,struct和array. 变量直接存储值,分配栈区的内存空间,这些变量所占据的空间在函数被调用完后会自动释放。引用类型:slice,map,chan和值类型对应的指针. 变量存储的是一个地址(或者理解为指针),指针指向内存中真正存储数据的首地址。内存通常在堆上分配, 通过GC回收。

这里需要注意的是: 对于引用类型的变量,我们不仅要声明变量,更重要的是,我们得手动为它分配空间.

因此new该方法的参数要求传入一个类型,而不是一个值,它会申请一个该类型大小的内存空间,并会初始化为对应的零值,返回指向该内存空间的一个指针。

new 的作用是初始化一个指向类型的指针(*T),new函数是内建函数,函数定义:func new(Type) *Type

而make也是用于内存分配,但是和new不同,只用来引用对象slice、map和channel的内存创建,它返回的类型就是类型本身,而不是它们的指针类型。

make 的作用是为 slice,map 或 chan 初始化并返回引用(T)。
make函数是内建函数,函数定义:func make(Type, size IntegerType) Type

  • 第一个参数是一个类型,第二个参数是长度
  • 返回值是一个类型

make(T, args)函数的目的与new(T)不同。它仅仅用于创建 Slice, Map 和 Channel,并且返回类型是 T(不是T*)的一个初始化的(不是零值)的实例。

Channel

什么是 Channel 的方向性?如何对 Channel 进行方向限制?

Channel 的方向性通常指的是 Channel 是否可以进行发送或者接收操作。在声明 Channel 类型时,可以使用 <- 操作符来指定 Channel 的方向,形式如下:

// 双向 Channel
var ch chan int
// 只能发送数据的 Channel
var ch1 chan<- int
// 只能接收数据的 Channel
var ch2 <-chan int

如果没有使用 <- 操作符或者使用了双向的 Channel 类型,则表示该 Channel 是双向的。

Channel 的缓冲区大小对于 Channel 和 Goroutine 的通信有什么影响?如何设置 Channel 的缓冲区大小?

缓冲区的大小对于 Channel 和 Goroutine 通信的影响主要体现在两个方面:

  • 当 Channel 没有缓冲区或者缓冲区已满时,发送操作会阻塞对应的 Goroutine 直到接收者准备好接收数据;
  • 当 Channel 没有缓冲区或者缓冲区为空时,接收操作会阻塞对应的 Goroutine 直到发送者发送数据。
    因此,当缓冲区的大小为 0 时,Channel 采用的是“同步模式”,即发送操作和接收操作必须同步进行,如果没有对应的接收者或发送者,将会阻塞对应的 Goroutine。当缓冲区的大小大于 0 时,Channel 采用的是“异步模式”,即发送操作和接收操作可以异步进行,如果缓冲区已满,发送操作会阻塞对应的 Goroutine,如果缓冲区为空,接收操作会阻塞对应的 Goroutine。

设置 Channel 的缓冲区大小可以使用内置的 make 函数,第二个参数指定 Channel 的缓冲区大小:

// 创建缓冲区大小为 10 的 Channel
ch := make(chan int, 10)

Channel 可以通过什么形式进行关闭?为什么要关闭 Channel?

  • Channel 可以使用内置函数 close 进行关闭,形式如下:
ch := make(chan int)
close(ch)

关闭 Channel 的主要作用有两个:

  • 一是让接收者可以及时知道 Channel 已经关闭,从而及时结束读取数据;
  • 二是可以避免出现死锁的情况,如果一个 Goroutine 在 Channel 关闭前一直阻塞在接收操作上,那么该 Goroutine 将永远无法被唤醒。

请简要说明 Channel 在 Go 中的作用以及主要特点。

  • Channel 是为了在 Goroutine 间进行通信而设计的一种数据类型。Channel 可以用于实现协程间的同步、数据交换等。Channel 的主要特点包括:

  • Channel 是基于内存通信的,因此可以在不同的 Goroutine 中安全地传递数据;

  • Channel 具有先进先出的特性,可以保证多个 Goroutine 发送的数据按照发送的顺序被接收;

  • Channel 支持阻塞式的读写操作,在没有数据可读或者没有空闲的缓冲区时会阻塞对应的 Goroutine。

多个 Goroutine 同时对一个 Channel 进行读写操作会出现什么情况?如何避免此类问题?

  • 多个 Goroutine 同时对一个 Channel 进行读写操作很容易出现竞争条件导致的数据冲突问题,导致程序出现不可预期的错误。

  • 为避免此类问题,可以使用锁机制(如互斥锁、读写锁等)或者使用带缓冲区的 Channel 来确保读写操作的同步和顺序性。

  • Go 还提供了带有 select 关键字的语法,可以在多个 Channel 读写操作之间进行选择,从而避免出现死锁等问题。

在go语言中,Printf()、Sprintf()、Fprintf()函数的区别用法是什么?

都是把格式好的字符串输出,只是输出的目标不一样:
Printf(),是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。
Printf() 是和标准输出文件(stdout)关联的,Fprintf 则没有这个限制.
Sprintf(),是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目
标字符串地址。
Fprintf(), 是把格式字符串输出到指定文件设备中,所以参数笔printf多一个文件指针
FILE*。主要用于文件操作。Fprintf()是格式化输出到一个stream,通常是到文件。

说说go语言中,数组与切片的区别?

数据类型、指针、切片、map。

(1)数组

数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列。
数组的长度是数组类型的一部分,所以[3]int 和 [4]int 是两种不同的数组类型。
数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变 ;数组是值传递;
数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索
引访问元素值。在初始化后长度是固定的,无法修改其长度。当作为方法的参数传入时将复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。

数组定义:

var array [10]int
var array = [5]int{1,2,3,4,5}

(2)切片

切片表示一个拥有相同类型元素的可变长度的序列。
切片是一种轻量级的数据结构,它有三个属性:指针、长度和容量。
切片不需要指定大小;切片是地址传递;
切片可以通过数组来初始化,也可以通过内置函数make()初始化 .初始化时len=cap,在追加元素时如果容量cap不足时将按len的2倍扩容;

切片定义:var slice []type = make([]type, len)

解释以下命令的作用?

  1. go env: #用于查看go的环境变量
  2. go run: #用于编译并运行go源码文件
  3. go build: #用于编译源码文件、代码包、依赖包
  4. go get: #用于动态获取远程代码包
  5. go install: #用于编译go文件,并将编译结构安装到bin、pkg目录
  6. go clean: #用于清理工作目录,删除编译和安装遗留的目标文件
  7. go version: #用于查看go的版本信息

说说go语言中的for循环?

for循环支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环

for循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量

说说go语言中的switch语句?

单个case中,可以出现多个结果选项,只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case

go语言中没有隐藏的this指针,这句话是什么意思?

方法施加的对象显式传递,没有被隐藏起来
golang的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
方法施加的对象不需要非得是指针,也不用非得叫this

go语言中的引用类型包含哪些?

数组切片、字典(map)、通道(channel)、接口(interface)

go语言中指针运算有哪些?

可以通过“&”取指针的地址
可以通过“*”取指针指向的数据

说说go语言的main函数

main函数不能带参数
main函数不能定义返回值
main函数所在的包必须为main包
main函数中可以使用flag包来获取和解析命令行参数

说说go语言的channel特性?

  • A. 给一个 nil channel 发送数据,造成永远阻塞
  • B. 从一个 nil channel 接收数据,造成永远阻塞
  • C. 给一个已经关闭的 channel 发送数据,引起 panic
  • D. 从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值
  • E. 无缓冲的channel是同步的,而有缓冲的channel是非同步的

go语言触发异常的场景有哪些?

A. 空指针解析
B. 下标越界
C. 除数为0
D. 调用panic函数

说说go语言的beego框架?

  • A. beego是一个golang实现的轻量级HTTP框架
  • B. beego可以通过注释路由、正则路由等多种方式完成url路由注入
  • C. 可以使用bee new工具生成空工程,然后使用bee run命令自动热编译

说说go语言的goconvey框架?

A. goconvey是一个支持golang的单元测试框架
B. goconvey能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面
C. goconvey提供了丰富的断言简化测试用例的编写

go语言中,GoStub的作用是什么?

  • A. GoStub可以对全局变量打桩
  • B. GoStub可以对函数打桩
  • C. GoStub不可以对类的成员方法打桩
  • D. GoStub可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为

简单介绍一下Golang。

谷歌开发的一种系统编程语言。它具有内置的垃圾收集机制并支持并发。代码可以编译成单个可执行二进制文件,不需要添加库或运行时环境即可在服务器上执行。

Golang是否可以声明一个类?

是的,Golang用一种独特的类型接口方式实现类。详情请移步:如何声明一个Golang类

Go是否支持泛型?(陷阱问题)

否,泛型是方便的,但是它们在类型系统和运行时的复杂性方面付出了代价。

从GitHub或者bitbucket导入代码的命令是什么?

go get 和 go install 命令

一个通过make()命令创建的缓冲区被分配了一块内存后。如何销毁缓冲区并收回内存?

buffer = nil
在运行时,buffer = nil将启动垃圾回收。

以下内容表示什么?(陷阱问题)

var num int(整型变量)
var prt * int(指针)
num=10(赋值10到变量num)
ptr = &num(指针指向变量num的内存地址)

切片和数组的显著差异是什么?

数组大小是固定的,切片大小不是。在运行时可以动态地增加或减少切片的大
小,但数组不可以。切片类似于链表,可以向切片push,pop数据,实现
FIFO,LIFO。使用了内置的添加、复制功能对切片操作。

cap()和len()函数的区别是什么?

len()返回切片中的元素个数。
cap()返回切片的容量即切片可以容纳的元素数量。

哈希表或哈希映射允许快速查找。GO如何实现哈希映射?(陷阱问题)

哈希表在Golang中相当于map,也就是哈希映射。
hash-table := make(map[string]string)

以下哪些函数,变量,标识符可以被导出,或者可以被外部函数调用?(陷阱问题)

var aName // private, 私有,只在函数或声明范围内可访问
var BigBro //public 公有,可导出
var 123abc // 非法
var 爱 = "love" // public 公有,可导出func (p *Person) SetEmail(email string) { // public 因为SetEmail()函数以大写字母开头p.email = email
}
func (p Person) email() string { // private 私有,因为email()函数以小写字母开头return p.email
}

Go语言的数据类型有哪些?

基本数据类型包括整型、浮点型、布尔型、字符串。复合类型有数组、切片、结构体、映射(map)、接口、通道(channel)。

你有使用过哪些Go的Web框架?

  • 如Gin(轻量且高性能)、Echo(强调速度和易用性)、Beego(支持MVC架构)。

如何防止常见的安全漏洞?

  • 防范SQL注入(使用预编译SQL)、防XSS(HTML编码)、防CSRF(使用token验证)。

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

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

相关文章

从 HTML 到 CSS:开启网页样式之旅(二)—— 深入探索 CSS 选择器的奥秘

从 HTML 到 CSS&#xff1a;开启网页样式之旅&#xff08;二&#xff09;—— 深入探索 CSS 选择器的奥秘 前言一、CSS基本选择器1. 通配选择器2. 元素选择器3. 类选择器4. id选择器5.基本选择器总结 二、CSS复合选择器1. 后代选择器2. 子选择器3. 相邻兄弟选择器4.交集选择器5…

Python的3D可视化库 - vedo (2)visual子模块 基本可视化行为

文章目录 1. visual模块的继承关系2. 基类CommonVisual的方法2.1 获取对象信息2.1.1 对象本身信息2.1.2 对象的查找表2.1.3 对象标量范围2.1.4 对象缩略图 2.2 呈现对象2.2.1 在窗口显示1.2.2 对象可见性 2.2.3 对象颜色2.2.4 对象透明度 2.3 添加标度条2.3.1 2D标度条2.3.2 3D…

Typora+PicGo+云服务器搭建博客图床

文章目录 前言一. 为什么要搭建博客图床&#xff1f;1.1 什么是图床&#xff1f;1.2 为什么要搭建博客图床? 二. 安装软件三. 配置阿里云OSS3.1 注册,开通对象储存3.2 创建bucket3.3 找到你的地域节点3.4 accessKeyId和accessKeySecret3.5 给你的阿里云账户充值 四. 配置4.1 配…

下载安装Android Studio

&#xff08;一&#xff09;Android Studio下载地址 https://developer.android.google.cn/studio 滑动到 点击下载文档 打开新网页 切换到english ![](https://i-blog.csdnimg.cn/direct/b7052b434f9d4418b9d56c66cdd59fae.png 等待一会&#xff0c;出现 点同意后&#xff0…

【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感

本文将介绍如何使用LSTM训练一个能够创作诗歌的模型。为了训练出效果优秀的模型&#xff0c;我整理了来自网络的4万首诗歌数据集。我们的模型可以直接使用预先训练好的参数&#xff0c;这意味着您无需从头开始训练&#xff0c;即可在自己的电脑上体验AI作诗的乐趣。我已经为您准…

大语言模型---梯度的简单介绍;梯度的定义;梯度计算的方法

1. 梯度介绍 如果我们在一座山上&#xff08;一个山的坡度有很多&#xff0c;陡峭的&#xff0c;平缓的&#xff09;&#xff0c;想要从山顶下山。而梯度就像告诉我们如何沿着最陡的下坡路线走&#xff0c;以尽快到达山脚&#xff08;最低点&#xff09;。 2. 梯度的定义 梯度…

鸿蒙学习高效开发与测试-测试工具(5)

文章目录 1、单元测试2、集成测试1. UI 测试框架2. DevEco Testing 测试平台2.1 稳定性测试2.2 场景化性能测试2.3 回归测试2.4 基础质量测试服务3. 命令行测试工具3.1 DevEco Testing SmartPerf3.2 DevEco Testing wukong3、专项测试1. 应用与服务体检2. 专项测试云测平台鸿蒙…

NFS搭建

NFS搭建 单节点安装配置服务器安装配置启动并使NFS服务开机自启客户端挂载查看是否能发现服务器的共享文件夹创建挂载目录临时挂载自动挂载 双节点安装配置服务器安装配置服务端配置NFS服务端配置Keepalived编辑nfs_check.sh监控脚本安装部署RsyncInofity 客户端 单节点安装配置…

基于CNN+RNNs(LSTM, GRU)的红点位置检测(pytorch)

1 项目背景 需要在图片精确识别三跟红线所在的位置&#xff0c;并输出这三个像素的位置。 其中&#xff0c;每跟红线占据不止一个像素&#xff0c;并且像素颜色也并不是饱和度和亮度极高的红黑配色&#xff0c;每个红线放大后可能是这样的。 而我们的目标是精确输出每个红点的…

使用 Elastic 收集 Windows 遥测数据:ETW Filebeat 输入简介

作者&#xff1a;来自 Elastic Chema Martinez 在安全领域&#xff0c;能够使用 Windows 主机的系统遥测数据为监控、故障排除和保护 IT 环境开辟了新的可能性。意识到这一点&#xff0c;Elastic 推出了专注于 Windows 事件跟踪 (ETW) 的新功能 - 这是一种强大的 Windows 原生机…

leetcode刷题记录(四十二)——101. 对称二叉树

&#xff08;一&#xff09;问题描述 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/symmetric-tree/description/给你…

LeetCode 力扣 热题 100道(九)反转链表(C++)

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 方法一&#xff1a;迭代法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNod…

取电快充协议芯片,支持全协议、内部集成LDO支持从UART串口读取电压电流消息

H004D 是一款支持全协议的受电端诱骗取电协议芯片&#xff0c;支持宽电压输入 3.3V~30V&#xff0c;芯片内部集成LDO&#xff0c;可输出 3.3V电压, 支持 通过UART 串口读取电压电流&#xff0c;支持定制功能&#xff0c;芯片采用QFN_20封装&#xff0c;线路简单&#xff0c;芯片…

FreeRTOS——事件标志组

一、概念与应用 1.1概念 事件是实现任务与任务或任务与中断间 通信的机制&#xff0c;用于同步&#xff0c;无数据传输。&#xff08;注意与二值信号量区分&#xff09; 与信号量不同的是&#xff0c;事件可以实现一对多、多对多的同步&#xff0c;即一个任务可以等待多个事…

window11编译pycdc.exe

一、代码库和参考链接 在对python打包的exe文件进行反编译时&#xff0c;会使用到uncompyle6工具&#xff0c;但是这个工具只支持python3.8及以下&#xff0c;针对更高的版本的python则不能反编译。 关于反编译参考几个文章&#xff1a; Python3.9及以上Pyinstaller 反编译教…

【100ask】IMX6ULL开发板用SPI驱动RC522模块

目录 一、问题汇总&#xff1a; 1.无法寻卡 2.寻卡不稳定 二、修改设备树 三、驱动程序 四、测试程序 1.rc522_ap.c 2.rc522_app.h 3.rc522_test.c 4.Makefile 前言&#xff1a; CSDN上大部分对于RC522的文章都是正点的&#xff0c;虽然文章写的挺详细&#xff0c;两…

springboot购物推荐网站的设计与实现(代码+数据库+LW)

摘要 随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了东大每日推购物推荐网站的开发全过程。通过分析企业对于东大每日推购物推荐网站的需求&#xff0c;创建了一个计算机管理东大每日推购物推荐网站的方案。文章介…

小R的二叉树探险 | 模拟

问题描述 在一个神奇的二叉树中&#xff0c;结构非常独特&#xff1a; 每层的节点值赋值方向是交替的&#xff0c;第一层从左到右&#xff0c;第二层从右到左&#xff0c;以此类推&#xff0c;且该二叉树有无穷多层。 小R对这个二叉树充满了好奇&#xff0c;她想知道&#xf…

高精度计算题目合集

高精度计算题目合集 1168&#xff1a;大整数加法 1168&#xff1a;大整数加法 1168&#xff1a;大整数加法 高精度加法原理&#xff1a; a&#xff0c;b&#xff0c;c 都可以用数组表示。这些都是基于c语言的算术运算符形成的运算。 c 3 ( c 1 c 2 ) % 10 c_3(c_1c_2)\%1…

【2024APMCM亚太赛A题】完整参考论文与代码分享

A题 一、问题重述二、问题分析问题一&#xff1a;水下图像分类问题二&#xff1a;退化原因建模问题三&#xff1a;针对单一退化的图像增强方法问题四&#xff1a;复杂场景的综合增强模型问题五&#xff1a;针对性增强与综合增强的比较 三、问题假设退化特征独立性假设物理模型普…