GO 同步原语面试题及参考答案

目录

Go 的 sync.Mutex 是如何工作的?是否是可重入的锁?

sync.RWMutex 与 sync.Mutex 的底层实现有何不同?

sync.Mutex 的零值是否可用?为什么这样设计?

为什么 sync.WaitGroup 不支持拷贝?拷贝后会出什么问题?

如何正确使用 sync.WaitGroup 来等待多个协程结束?

RWMutex.RLock () 和 RWMutex.Lock () 能否嵌套使用?会出现什么问题?

sync.Mutex 是否可以用于多个 goroutine 对 map 的并发读写?为什么?

sync.WaitGroup 的 Done () 可以在 Add () 之前执行吗?为什么会 panic?

sync.RWMutex 如何优化读多写少的场景?

sync.Mutex 是公平锁吗?为什么它的调度策略可能导致 “锁饥饿”?

在函数中如何使用 defer 正确释放 Mutex 锁?

如何使用 sync.WaitGroup 监控异步 HTTP 请求的并发执行?

使用 sync.RWMutex 实现一个线程安全的缓存系统的核心逻辑?

在多核 CPU 上频繁使用 sync.Mutex 的性能瓶颈表现在哪些方面?

写一个使用 sync.WaitGroup 实现生产者 - 消费者模型的示例?

在函数中如何使用 defer 正确释放 Mutex 锁?

如何使用 sync.WaitGroup 监控异步 HTTP 请求的并发执行?

使用 sync.RWMutex 实现一个线程安全的缓存系统的核心逻辑?

在多核 CPU 上频繁使用 sync.Mutex 的性能瓶颈表现在哪些方面?

写一个使用 sync.WaitGroup 实现生产者 - 消费者模型的示例?

WaitGroup.Add 和 WaitGroup.Done 应该放在哪些位置才能保证正确性?

如何判断一个 Mutex 当前是否已被加锁?

如何通过 sync.Mutex 实现单例模式?

用 RWMutex 实现带缓存的懒加载配置管理器?

在高并发场景中,是否推荐将 Mutex 嵌入结构体?为什么?

对 sync.Mutex 多次 Unlock () 会发生什么?

sync.WaitGroup 调用 Wait () 后还可以调用 Add () 吗?会发生什么?

RWMutex 中 RLock () 多次但只调用一次 RUnlock () 会怎样?

如何避免协程泄露导致 WaitGroup.Wait () 永远阻塞?

在 defer 中释放 Mutex 有什么潜在问题?

对 map 并发读写时未使用锁会触发什么运行时错误?

用 sync.Mutex 实现定时器锁(带超时的 Lock)时应注意哪些陷阱?

sync.WaitGroup 中是否可以 Add 负数?有什么实际用途?

sync.WaitGroup 中的 Wait () 是否可以调用多次?

如果某个 goroutine 在持有锁期间发生 panic,会导致死锁吗?

Go 中的 Mutex 是如何通过原子操作实现互斥的?

Go 中 RWMutex 的锁状态结构体有哪些重要字段?

sync.Mutex 的加锁过程涉及哪些状态标识?有哪些自旋机制?

sync.WaitGroup 的内部计数是如何保证线程安全的?

Mutex 使用的 CAS 和自旋在不同 Go 版本中有何变化?

Go 的调度器与 sync.Mutex 有何关系?为何不推荐持锁阻塞?

为什么 RWMutex 的写锁必须等待所有读锁释放?

WaitGroup 如何实现多个线程同时等待的机制?

sync 包中的 Once 与 Mutex 有什么联系?

在 sync 包源码中,Mutex 的 starvation 模式是如何触发的?

Go 中的 Mutex 是如何通过原子操作实现互斥的?

Go 中 RWMutex 的锁状态结构体有哪些重要字段?

sync.Mutex 的加锁过程涉及哪些状态标识?有哪些自旋机制?

sync.WaitGroup 的内部计数是如何保证线程安全的?

Mutex 使用的 CAS 和自旋在不同 Go 版本中有何变化?

多核 CPU 情况下 Mutex 的性能表现如何?是否会 cache line false sharing?

用锁的方式实现对 shared slice 的并发安全 append?

如何结合 sync.WaitGroup 和 context.Context 实现超时控制?

如何避免 Mutex 死锁?有哪些设计建议?

写一个通过 RWMutex 实现的并发安全配置热更新服务?

除了 Mutex,Go 中还有哪些并发安全原语?适用于哪些场景?

atomic.Value 能否替代 RWMutex?对性能有何影响?

sync.Cond 与 Mutex 如何组合使用?应用在哪些场景?

是否可以用 channel 替代 WaitGroup?优劣如何?

Golang 的 sync.Map 是如何利用 Mutex 和原子操作保证并发安全的?


Go 的 sync.Mutex 是如何工作的?是否是可重入的锁?

sync.Mutex 是 Go 语言中最基本的互斥锁实现,用于保护共享资源不被并发访问。其工作原理基于底层操作系统的原子操作和系统调用,主要通过 CAS(Compare-And-Swap)和 Mutex 结构体中的状态字段实现锁的获取和释放。

在 Go 中,sync.Mutex 的状态字段是一个 int32 类型,包含三个主要状态位:

  • 最低位表示锁是否被持有
  • 次低位表示是否有
GO Goroutine 与并发模型面试题及参考答案 Goroutine 是 Go 语言中轻量级的执行单元,由 Go 运行时(runtime)管理,而非操作系统内核。与传统线程相比,Goroutine 的设计目标是在高并发场景下提供高效的资源利用和性能表现。从资源占用角度看,Goroutine 的栈空间初始通常为 2KB,并且可以按需动态扩缩容,最大可扩展到 GB 级别。而操作系统线程的栈空间通常固定为 MB 级别,例如 Linux 系统默认线程栈大小为 8MB。这种差异使得在相同内存条件下,Go 程序可以创建数百万个 Goroutine,而线程数量通常受限于 阅读详情

相关推荐

携程GO开发面试题及参考答案

/ 不同长度的 SDS 结构体(按长度划分类型)/* 低 3 位存储类型,高 5 位存储长度(0-31 字节) */char buf[];/* 柔性数组,存储字符串内容(含 '\0' 结束符) *//* 已使用长度(字节),O(1) 获取 *//* 总分配长度(不含 flags 和 len 字段) *//* 低 3 位存储类型(SDS_TYPE_8),其余位保留 */char buf[];/* 存储字符串内容,以 '\0' 结尾 *//* 长度范围 0-65535 字节 */

大模型大数据攻城狮的专栏 854

GO 原子操作面试题及参考答案

Go 语言中的 sync/atomic 包和 sync.Mutex 都用于处理并发编程中的同步问题,但它们的实现机制、应用场景和性能特性存在根本差异。理解这些差异对于编写高效、安全的并发代码至关重要。sync/atomic 包提供了底层的原子操作,这些操作基于 CPU 提供的原子指令实现,例如 Compare-And-Swap (CAS)、Fetch-And-Add 等。这些操作直接作用于内存中的值,不需要操作系统的介入,因此执行速度极快。atomic 包的操作对象仅限于基本数据类型,如 int32、int

大模型大数据攻城狮的专栏 776

GO 指针接收者和值接收者面试题及参考答案

若指针字段指向的内容被修改,原始结构体可能受影响(因指针地址相同);若对指针字段本身重新赋值,原始结构体不受影响,但可能导致方法逻辑失效;空指针字段的解引用操作可能引发 panic,且值接收者无法通过nil判断避免(因副本的指针字段与原始字段独立)。因此,当结构体包含指针字段且方法需要操作这些字段时,优先使用指针接收者,以确保操作作用于原始结构体,并避免意外的状态不一致。

大模型大数据攻城狮的专栏 686

《100天Go语言从入门到精通系列》-专栏介绍和目录

本专栏专注于Go语言基础到进阶,从项目实战到源码分析的系统讲解,逐步深入实际应用场景到Go语言的高级特性,轻松学会用Go语言解决各种实际问题。不管是零基础还是有经验的开发,相信都能从本专栏获益。持续更新中...

数据知道的博客 7004

【AI大模型毕业设计】LLM大模型 基于LangChain美食菜谱分享网站+AI智能助手(FastAPI+Vue3) 完整版 源码+sql脚本+论文

这个是完整源码 【AI大模型毕业设计】LLM大模型 基于LangChain美食菜谱分享网站+AI智能助手(FastAPI+Vue3) 完整版 源码+sql脚本+论文 数据库是mysql 菜谱信息分散在短视频、社交平台和零散网页中,家庭烹饪者往往只能看到结果,却难以按食材、口味和步骤核对一份可执行的做法。与此同时,通用对话模型能够组织语言,却容易编造用量和火候。把经过人工审核的菜谱整理成可检索的知识,再让对话模型依据这些资料回答问题,能够同时保留社区分享和可核对的依据。 本文设计并实现了带AI智能助手的美食菜谱分享网站。系统采用前后端分离结构:前端使用 Vue3、Vue Router、Pinia 和 Element Plus 构建前台门户与管理后台,后端使用 Python 和 FastAPI 提供菜谱、互动、审核和统计接口,业务数据保存在 MySQL 数据库 db_recipe 中。智能问答遵循检索增强生成的思路,与 LangChain 中检索器、提示模板、对话记忆和流式回调所描述的链路一致;考虑到审核状态、权限和流式输出需要与业务服务紧密配合,本系统用 Python 显式完成文档拼装、向量写入、相似度检索和提示词组装,向量存放在 Chroma 中,嵌入与对话通过兼容接口调用通义千问。 网站提供注册登录、菜谱浏览检索、发布与审核、点赞收藏评论、公告轮播、个人中心,以及依据站内菜谱进行的流式问答。管理端可以维护用户、分类、评论和知识库,并在首页用图表查看用户规模、菜谱分类和近七日趋势。测试围绕账号、审核、互动和问答四类路径展开,结果表明主要功能能够按设计完成,回答可以回指相关菜谱。

说话普通话啦啦啦啦啦啦

说话普通话啦啦啦啦啦啦

2026最新四川省行政区划矢量图层-省市县乡镇四级行政区划数据下载

2026最新四川省行政区划矢量图层数据,包含省、市、县、乡镇四级行政区划数据,wgs84坐标

Delphi 13.2控件之EdgeDev.7z

Delphi 13.2控件之EdgeDev.7z

【雷达信号处理】数字下变频(DDC)(Matlab代码实现)

内容概要:本文详细介绍了《【雷达信号处理】数字下变频(DDC)(Matlab代码实现)》这一技术资源,聚焦于数字下变频(DDC)在雷达信号处理中的核心作用与实现方法。内容系统阐述了DDC的基本原理,包括混频、低通滤波和抽取等关键步骤,如何将高频回波信号高效转换为便于后续处理的基带信号。文档提供了完整的Matlab代码实现方案,涵盖算法设计、参数设置与仿真验证全过程,有助于深入理解DDC在实际雷达系统中的应用。此外,资源还关联了时频特征匹配、多体制信号处理等相关技术方向,体现了其在现代雷达信号处理体系中的综合价值。; 适合人群:具备信号与系统、数字信号处理基础知识的研究生、科研人员及从事雷达、通信、电子工程等领域的工程技术人员。; 使用场景及目标:① 深入学习数字下变频(DDC)的工作原理及其在雷达系统中的具体实现;② 利用Matlab开展雷达信号处理算法的仿真实验与性能分析;③ 支持课程项目、科研课题开发或学术论文复现等任务,提升理论与实践结合能力。; 阅读建议:建议结合Matlab环境动手运行并调试所提供的代码,对照理论推导理解各模块功能;同时可参考文档中提及的相关信号处理技术,拓展对雷达系统整体架构的认知。

科技中介服务机构如何构建差异化的服务能力与竞争优势?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何利用AI工具高效管理科技成果与技术经纪人对接工作?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何通过平台推动企业与高校院所的协同创新?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

政府科技管理者在推动科技成果转化过程中,如何解决政策匹配与资源对接效率低的问题?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

证件照排版打印 - 证件照自动排版打印工具

导入照片自动朝上居中,按一寸二寸等规格在5寸、6寸、A4相纸上自动排版,可调间距白边,300dpi导出或直接打印,在家就能排好证件照。 主要功能:导入照片自动朝上转正、照片在证件照框内居中、选择一寸二寸证件照规格、自定义证件照宽高尺寸、选择5寸6寸A4相纸、自定义相纸宽高尺寸、切换相纸横竖方向、按相纸容量自动排满。 适用场景:证件照排版打印是一款面向个人与文印店的桌面工具,专心解决「拍好的证件照怎么在相纸上排好、排满、打印出来」这一件事。很多人手机里已经存着合格的证件照,却在排版这一步反复折腾:照片方向不对、位置偏移、张数排不满、打印出来尺寸不准。 说明:关于费用与功能限制:软件免费即可完整体验全部功能——照片导入、自动朝上、自动居中、规格选择、间距与白边、手动微调、实时预览,以及按相纸容量排满整张(自动排满、多张照片)均可正常使用;但免费试用仅允许成功导出或打印 1 次,之后再次导出/打印需付费 ¥35.6 一次性解锁,解锁后不限次数。导入、排版、预览始终免费,无需解锁。解锁凭证保存在本机,长期有效。

二级倒立摆LQR与传统PID控制对比仿真【附参考文献及说明文档】

内容概要:本文档围绕二级倒立摆控制系统展开,重点对比了线性二次型调节器(LQR)与传统PID控制在该系统中的仿真性能表现。资源包提供了完整的MATLAB/Simulink仿真模型及详细的说明文档,涵盖了系统动力学建模、控制器设计原理、控制参数整定方法以及仿真结果的对比分析等内容,旨在帮助使用者深入理解现代控制理论与经典控制方法在复杂非线性系统中的应用差异。文档强调该资源隶属于一个更为广泛的科研资源共享项目,涵盖自动化、控制工程、智能优化等多个领域的仿真案例,具备较高的教学与科研参考价值。; 适合人群:具备自动控制理论基础知识,熟悉MATLAB/Simulink仿真环境,从事控制工程、自动化、机电一体化、机器人等方向的本科生、研究生及科研人员。; 使用场景及目标:① 学习并掌握LQR与PID控制器的设计流程与实现方式;② 深入对比现代最优控制与经典控制策略在稳定性、响应速度、抗干扰能力等方面的性能差异;③ 利用所提供的仿真模型开展课程设计、实验教学、科研复现或进一步的算法改进研究;④ 探索控制理论在典型非线性系统中的实际应用范式。; 阅读建议:建议读者结合文档中的参考文献与理论说明,先运行并观察仿真模型的控制效果,再逐步剖析控制器设计逻辑与参数调整机制,鼓励在现有模型基础上进行拓展性研究,如引入模糊控制、自适应机制或优化算法进行参数整定,以深化对控制策略本质的理解。

含源荷不确定性的风-光-水-储-火电力系统低碳经济调度模型研究(Matlab代码实现)

内容概要:本文针对含风电、光伏、水电、储能及火电的复杂电力系统,在源端(发电)与负荷端均存在不确定性的情况下,研究其低碳经济调度问题。提出了一种基于两阶段鲁棒优化的数学模型,结合大M法与列与约束生成(C&CG)算法进行高效求解,有效应对风光出力波动及负荷变化带来的挑战。该模型在保障系统安全稳定运行的前提下,统筹考虑运行成本与碳排放成本,实现了经济性与低碳化的协调优化,并通过Matlab编程实现,为高比例可再生能源接入背景下的电力系统调度提供了科学决策支持。; 适合人群:具备电力系统分析、运筹学或能源管理等相关专业知识,熟悉Matlab编程环境,从事新能源调度、低碳电力系统研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究多能源耦合系统在不确定性环境下的优化调度策略;②支撑两阶段鲁棒优化建模与C&CG算法实现的学习与科研实践;③为电力系统的低碳转型提供量化分析工具与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解鲁棒优化的建模过程与求解机制,重点掌握不确定性集的构建方法、鲁棒对等问题的转化技巧以及C&CG算法的迭代逻辑,推荐配合YALMIP工具箱进行模型搭建与求解器调用,以提升实践效率。

【效率手册】Kylin-Desktop-V10-SP1 麒麟系统核心组件实战——从入门到精通的6个关键场景

本文针对Kylin-Desktop-V10-SP1麒麟系统用户,通过文件管理、系统监视、设置优化等6个核心场景实战,深度解析如何高效运用系统内置工具解决文件混乱、性能卡顿、外设驱动等实际问题,帮助用户从功能认知跃升至场景化应用,真正释放国产操作系统的生产力潜能。

weixin_29208327的博客 106

别再死磕GAN了!用PyTorch从零实现DDPM图像生成(附CIFAR-10完整代码)

本文详细介绍了如何使用PyTorch从零实现DDPM(Denoising Diffusion Probabilistic Models)图像生成模型,并在CIFAR-10数据集上进行训练和测试。通过对比GAN,DDPM展现出更稳定的训练过程和更高质量的生成效果。文章包含完整的代码实现、训练技巧和优化建议,帮助开发者快速掌握这一前沿的生成模型技术。

weixin_33720078的博客 627

YOLOv8实战:用Labelme标注自定义数据集并训练分割模型(附完整代码)

本文详细介绍了使用Labelme标注自定义数据集并训练YOLOv8实例分割模型的完整流程。从环境搭建、数据标注与格式转换,到模型训练、调优、验证及部署,提供了实战代码和调优建议。文章还探讨了如何结合追踪目标技术,实现视频流中的实例分割与目标追踪,为计算机视觉应用提供了一套可复制的解决方案。

549

【STM32】BLDC驱动&控制开发笔记 | 07_SPI通信测试 - STM32F407用SPI配置DRV8323驱动芯片

使用STM32F407的SPI通信功能配置DRV8323S驱动芯片的详细过程说明。

这里是 F菌的进阶之路。 6282

Claude + Figma MCP 实战教程

• 拥有 Figma 的 Dev 或 Full seat(专业/企业账号)权限 才能启用 Dev-Mode MCP 服务 。• MCP 是通过标准接口连接 Claude 与 Figma,效率高,但目前仍为 Beta,稳定性可能有限。3. 服务启动后,会在本地运行,比如 http://127.0.0.1:3845/mcp 。如果设置正确,会显示已连接的 figma-dev-mode-mcp-server  。• 如果多次转换复杂组件,可能需要多次选择与多次生成,建议合理拆分设计任务。

weixin_49869937的博客 4428

第78篇:AI辅助创意与设计工作流——Logo、海报、UI的自动化生成与迭代(操作教程)

在广告公司和设计团队摸爬滚打几年,我见过太多设计师为一个Logo的配色、一张海报的版式反复修改到深夜。自从AI绘画工具爆发,我就一直在琢磨,怎么把这些“黑科技”真正塞进设计师的日常流水线里,而不是让它们仅仅是个玩具。今天要聊的,就是一套我实践下来,能真正提升效率的AI辅助创意与设计工作流。我们不谈颠覆,只谈增效——如何用AI快速完成Logo、海报、UI的灵感生成、批量出图与智能迭代,把设计师从重复劳动中解放出来,聚焦在真正的创意决策上。

weixin_37464284的博客 527

图文详解Trae配置Java开发环境

本文介绍了Trae开发工具的安装配置流程:首先从官网下载安装Trae,然后安装Java开发所需的Extension Pack for Java和Spring Boot Extension Pack插件。关键步骤包括修改settings.json配置文件,需指定JDK路径、Maven可执行文件路径和用户设置文件路径。所有操作均配有图示说明,并强调要替换为实际电脑路径。

谷哥的小弟 5970

微信公众平台 - 微信内置浏览器 WeixinJSBridge.invoke(‘xxx‘) API 报错:system:access_denied(常见于微信支付、分享朋友圈/转发好友等功能)解决方案

微信支付提示System:access_denied,调用微信支付返回:system:access_denied为什么,安卓版微信支付偶尔出现system:access_denied,微信公众号开发分享出现system:access_denied,system:access_denied如何解决?微信WeixinJSBridge.invoke(‘xxx‘)API调用后出现报错,微信内部H5WeixinJSBridge.invokesystem:access_denied,使用微信jssdk时报ac

🏆 前端领域优质创作者 5135

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 大模型原理面试题及参考答案
下一篇: 大模型工作流Dify面试题及参考答案
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型大数据攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值