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

转行嵌入式,需要自学多久?

作为一个本硕都学机械,却阴差阳错进入嵌入式行业的老兵,这个问题我能聊一整天。十几年前我还在工厂车间穿着工装和机床打交道,偶然接触到单片机后就一发不可收拾。

转行这条路我走得异常艰辛,踩过的坑比写过的代码还多。去年我终于把这些年的经验教训整理成了《STM32实战快速入门》(点击直达)课程,就是为了帮那些想转行又不知从何下手的朋友少走弯路。要是我当年有这么一套系统课程,估计也不至于搞得那么狼狈。

说回正题,到底需要多久才能转行成功?这问题太扎心了。根据我的亲身经历和带过的几十个转行学生的情况,如果你每天能保证3-4小时的高质量学习时间,我给出的时间线是这样的:找到第一份嵌入式相关工作大约需要6-8个月,能独立负责中小型项目大约需要1-1.5年,成长为中级开发工程师则需要2-3年。

当然,这个时间线建立在你找对方法、不走弯路的基础上。下面我就结合自己的经历,给大家详细分析一下两条主流路线的学习周期和重点。

单片机开发路线(半年到8个月入门)

单片机开发是入门嵌入式的主流路线,也是大多数人的第一站。薪资虽然比不上嵌入式Linux,但入门门槛低,市场需求大,而且能快速建立成就感。

C语言基础(1-2个月)

不管是单片机还是嵌入式Linux,C语言都是绕不开的基础。我记得刚开始学习的那段日子,整个人都快崩溃了。之前在机械专业只学过一点皮毛的C,连指针是啥都不太明白,更别提结构体、位运算这些了。那段时间每天晚上睡觉前都在想:我是不是不适合做编程?要不还是老老实实回去搞机械算了?

其实C语言本身并不难,难的是嵌入式领域用的C语言和大学里教的不太一样。大学里教的C语言主要是基础语法和算法,而嵌入式开发中,更强调的是对硬件的直接操作。比如,指针不仅仅是一个概念,它在嵌入式中经常被用来直接操作硬件寄存器;位运算在普通软件开发中用得少,但在嵌入式中却是家常便饭,因为很多时候我们需要设置或读取寄存器中的特定位。

说回C语言学习,我建议花1-2个月的时间牢牢掌握以下几个重点:首先是指针,这是C语言中最难理解但也是最强大的特性,在嵌入式开发中几乎无处不在;其次是结构体,尤其是结构体与指针的结合使用,这在操作外设寄存器时特别常用;再次是位操作,包括位与、位或、位异或、左移、右移等,这些在设置寄存器时天天都会用到;最后是内存管理,嵌入式设备内存有限,要学会合理分配和使用内存。

STM32微控制器学习(2-3个月)

掌握了C语言基础后,下一步就是学习具体的微控制器。虽然有人建议先从8051单片机学起,但我个人认为直接上手STM32是更好的选择。原因很简单:STM32架构更现代,应用更广泛,而且学习资料丰富,市场需求大。

我当初学习STM32时简直就是一场噩梦。买了开发板后,翻开厚厚的数据手册,密密麻麻的寄存器描述看得我头晕眼花。连点亮一个LED这样简单的任务都让我折腾了好几天。后来才发现,问题不在于STM32有多难,而在于我不懂得正确的学习方法和顺序。

正确的STM32学习路径应该是:首先理解STM32的基本架构,包括时钟系统、电源管理、存储映射等;然后掌握GPIO操作,学会控制基本的输入输出;接着学习中断系统,这是单片机实时响应外部事件的关键;再来是各种通信接口,如UART、I2C、SPI等,这些是单片机与外部设备交互的桥梁;最后是更复杂的功能,如ADC/DAC转换、DMA传输等。

在我的《STM32实战快速入门》课程中,我设计了一系列由浅入深的实战项目,从最基础的LED闪烁开始,逐步过渡到按键控制、串口通信、传感器读取,再到复杂的多传感器综合应用。这种项目驱动的学习方式比单纯啃理论要高效得多,因为你能立即看到代码的实际运行效果,从而建立起对理论知识的直观理解。

有个学员告诉我,他之前看了两个月的STM32教程和数据手册,还是一头雾水;但通过我课程中的项目实践,仅用了三周就能独立修改代码并完成自己的小项目。这就是实战的力量。

RTOS实时操作系统学习(1-2个月)

随着项目复杂度的增加,裸机编程已经很难满足需求,这时就需要学习RTOS(实时操作系统)。FreeRTOS是嵌入式领域最常用的开源RTOS之一,它轻量级但功能强大,是入门RTOS的不二选择。

学习RTOS最大的挑战在于思维方式的转变。之前的裸机编程是顺序执行的,代码从头到尾按部就班地运行;而RTOS引入了多任务的概念,允许多个任务并发执行,这需要一种全新的编程思维。

记得我第一次尝试用FreeRTOS写多任务程序时,结果惨不忍睹。程序运行一会儿就死机,调试了整整一周才发现问题出在任务优先级设置和资源竞争上。

学习RTOS需要重点掌握以下几个方面:首先是任务管理,包括任务的创建、调度、挂起和恢复;其次是任务间通信机制,如信号量、消息队列、事件标志组等,这些是协调多任务协作的关键;然后是内存管理,RTOS提供了多种内存分配策略,需要根据实际需求选择合适的方式;最后是中断处理,RTOS环境下的中断处理有其特殊性,需要特别注意。

在我的课程中,我通过一个多传感器数据采集和处理系统的开发,详细展示了如何在实际项目中应用FreeRTOS的各种功能。从任务划分、优先级设置、通信机制选择,到内存管理策略和中断处理,每一步都有详细的讲解和代码实现。这种从实战出发的教学方式,能帮助学员更快地掌握RTOS的精髓。

硬件基础知识(贯穿始终)

虽然我们主要讨论的是软件开发,但作为嵌入式工程师,基本的硬件知识是必不可少的。毕竟嵌入式系统是软硬结合的产物,只懂软件不懂硬件,遇到问题时很容易陷入困境。

我记得有一次,我写的程序怎么调试都不正常,排查了好几天代码都找不出问题。最后才发现是硬件接线有问题,一个传感器的电源和地接反了。从那以后,我深刻认识到硬件知识的重要性。

对于转行到嵌入式的软件开发者,需要掌握的基本硬件知识包括:数字电路基础,理解逻辑门、触发器、计数器等基本元件的工作原理;模拟电路基础,了解放大器、滤波器等常见电路的功能;原理图阅读能力,能看懂电路原理图并理解各部分的功能;基本的测量仪器使用,如万用表、示波器等;最好还能掌握一些基础的PCB设计知识,比如用AD画简单的电路板。

嵌入式Linux开发路线(8-12个月入门)

相比单片机,嵌入式Linux开发的门槛更高,学习周期更长,但薪资和发展前景也更好。如果你有耐心,并且对系统层面的开发感兴趣,这条路线值得考虑。

编程语言体系(2-3个月)

嵌入式Linux开发需要掌握的编程语言比单片机要多。除了C语言外,C++、Python和Shell脚本也是常用的工具。不过不用担心,不需要精通每一种语言,而是要了解它们在嵌入式Linux中的应用场景和基本用法。

C语言是基础中的基础,尤其是在驱动开发中几乎是唯一选择。C++在应用层开发中很常见,特别是使用Qt开发图形界面时。Python因其简洁高效的特性,常用于快速原型开发、自动化测试和数据处理。Shell脚本则是Linux系统管理和自动化任务的得力助手。

我当年从单片机转到嵌入式Linux时,就被这么多语言吓到了。后来才发现,其实没必要样样精通,而是要根据实际需求有针对性地学习。

对于C++,重点掌握类与对象、继承与多态、模板等核心概念,以及STL库的基本使用;Python主要学习基本语法、文件操作、网络编程和一些常用库的使用;Shell脚本则重点学习基本命令、流程控制、文本处理和系统管理相关功能。

Linux系统基础(2个月)

在学习嵌入式Linux开发之前,必须先熟悉Linux操作系统本身。这包括Linux的基本架构、命令行操作、文件系统、进程管理、用户权限等基础知识。

我建议先在个人电脑上安装一个Linux发行版(如Ubuntu),日常使用它一段时间,让自己习惯Linux的操作方式和思维模式。同时,购买一块开发板(如树莓派)进行实践,这比在虚拟机上操作更能体会嵌入式Linux的特点。

Linux系统学习的重点包括:首先是命令行操作,熟练掌握常用命令及其参数,如ls、cd、cp、grep、find等;其次是文件系统,理解Linux的文件组织方式、权限管理和挂载机制;然后是进程管理,了解进程的创建、调度、通信和终止;还有用户管理,掌握用户权限的设置和管理;最后是网络配置,学会配置网络接口、路由和防火墙等。

在我的教学经验中,很多人在这个阶段容易失去耐心,因为这些基础知识看起来枯燥乏味。但我要强调的是,这些基础知识是后续所有嵌入式Linux开发的地基,如果地基不牢,后面的学习将会举步维艰。

Linux应用开发(2-3个月)

掌握了Linux基础知识后,下一步是学习Linux应用程序开发。这是嵌入式Linux开发的核心部分,也是大多数嵌入式Linux工程师的日常工作内容。

Linux应用开发的学习路径应该是:先了解Linux程序的编译过程和工具链使用,包括gcc/g++编译器、make构建系统、gdb调试器等;然后学习进程和线程编程,掌握fork、exec系列函数和pthread库的使用;接着是进程间通信机制,如管道、消息队列、共享内存、信号量等;再来是网络编程,学习socket API和常见的网络协议;最后是系统编程,如文件IO、内存映射、信号处理等。

我在转行过程中,就是通过一个简单的网络文件服务器项目来学习这些知识的。这个项目涵盖了多线程编程、网络通信、文件操作等多个方面,是一个很好的综合练习。

Linux应用开发的难点在于异步编程和并发控制。在嵌入式系统中,我们经常需要同时处理多个事件源,如用户输入、网络数据、硬件中断等。这就需要使用多线程、信号或IO多路复用等技术来实现异步处理。而多线程环境下的并发控制,如互斥锁、条件变量、读写锁等的正确使用,也是一个常见的难点。

驱动开发(2-3个月)

如果你想更深入地了解嵌入式Linux,或者想从事底层开发工作,那么Linux驱动开发是必不可少的一环。驱动开发是连接硬件和软件的桥梁,也是嵌入式Linux中技术含量最高的部分之一。

Linux驱动开发的学习顺序通常是:首先了解Linux内核的基本架构和模块机制,学会编译和加载内核模块;然后学习字符设备驱动,这是最基本和常见的驱动类型;接着是块设备驱动,了解Linux存储子系统的工作原理;然后是网络设备驱动,学习Linux网络子系统的架构;最后是设备树,这是描述硬件资源的重要机制。

我记得第一次编写字符设备驱动时,遇到了无数问题。从内核编译环境的搭建,到模块的加载和调试,每一步都充满挑战。但当看到自己写的驱动成功运行,设备文件出现在/dev目录下,那种成就感是无与伦比的。

驱动开发的难点主要在于对硬件的理解和内核API的掌握。你需要理解硬件的工作原理和寄存器含义,同时熟悉内核提供的各种API和数据结构。此外,内核空间的调试也比用户空间要复杂得多,需要学习特殊的调试技巧和工具。

其他专业方向(根据需求深入)

除了上述基础知识外,嵌入式Linux开发还有很多专业方向可以深入,如图形界面开发、多媒体处理、网络协议栈等。这些方向需要根据个人兴趣和职业规划选择性地学习。

图形界面开发主要使用Qt框架,它跨平台、功能强大,是嵌入式Linux图形界面的主流选择。学习Qt需要掌握C++基础、Qt的信号槽机制、界面设计和事件处理等知识。

多媒体处理包括音频和视频的采集、编解码、处理和播放。这个方向需要了解常见的多媒体框架(如GStreamer)和编解码标准(如H.264、AAC等)。

网络协议栈开发则需要深入理解TCP/IP协议族的工作原理,以及Linux网络子系统的架构。这个方向适合对网络通信有浓厚兴趣的开发者。

毕竟,嵌入式Linux领域太广阔,没人能样样精通,找到自己的专长才是最重要的。

实际转行经验分享与建议

理论上的学习路径说完了,接下来分享一些我自己和学生们转行过程中的实际经验和建议,希望能帮助更多想转行的朋友。

学习方法与心态调整

首先是学习方法。技术学习绝不是简单的看书记笔记,而是要以项目为驱动,在实践中学习。我推荐的方法是:选择一个稍有挑战但不会太复杂的项目,然后围绕这个项目学习所需的知识点。这样学习更有针对性,也更容易保持动力。

在《STM32实战快速入门》(点击直达)课程中,我就是采用这种项目驱动的教学方法。从简单的LED控制开始,逐步过渡到复杂的多传感器系统,每个项目都有明确的目标和成果,让学员在完成项目的过程中自然地掌握知识点。

其次是心态调整。转行是一个漫长而艰辛的过程,需要有足够的耐心和毅力。我见过太多人因为进展不如预期就放弃的例子。记住,Rome wasn’t built in a day。给自己设定合理的期望,准备好应对挫折,相信持续的努力终将带来回报。

我自己转行时就经历过多次挫折。记得有一次,我花了两周时间调试一个看似简单的I2C通信问题,最后发现是时序不对。那段时间我几乎每天都在怀疑自己是否适合做嵌入式,但咬牙坚持下来后,这次经历反而成了我宝贵的财富。

资源选择与时间规划

学习资源的选择至关重要。市面上的书籍、视频、教程琳琅满目,但质量参差不齐。我建议:

首先,官方文档是最权威的资源,虽然有些晦涩,但值得花时间研读。对于STM32,ST官网的参考手册和应用笔记是必读资料;对于Linux,内核文档和各种HOWTO文档也是宝贵的学习资源。

其次,选择几本经典的入门书籍系统学习。对于C语言,《C Primer Plus》是公认的好书;对于STM32,《STM32权威指南》值得推荐;对于Linux,《鸟哥的Linux私房菜》是入门的好选择。

再次,视频教程可以作为辅助学习资源,尤其是对于初学者来说,视频的直观性能大大降低学习门槛。我的《STM32实战快速入门》课程就是为了填补市场上缺乏系统实战教程的空白而创建的,通过视频形式展示代码的编写和调试过程,让学员能直观地理解开发流程。

最后,时间规划也很重要。转行学习不是短期冲刺,而是长期马拉松。我建议每天保证2-4小时的高质量学习时间,周末可以适当增加。制定详细的学习计划,将大目标分解为小目标,每完成一个小目标就给自己一些奖励,保持学习动力。

实战项目与作品集建设

在求职过程中,实战项目和作品集比证书和学历更能证明你的实力。我建议在学习过程中不断积累有代表性的项目,形成自己的作品集。

从简单的项目开始,如LED呼吸灯、温湿度监测系统等,逐步过渡到复杂的项目,如智能家居控制器、工业监控系统等。每个项目都要有完整的文档,包括需求分析、系统设计、代码实现和测试结果。

我曾经带过一个学生,他在学习过程中开发了一个基于STM32和FreeRTOS的智能植物养护系统,能监测土壤湿度、光照强度,并自动控制浇水和补光。这个项目虽然不复杂,但涵盖了传感器接入、数据处理、自动控制等多个方面,非常全面地展示了他的技术能力。在面试中,这个项目给他加了不少分,最终他成功转行进入了一家物联网公司。

在我的《STM32实战快速入门》课程中,每个章节都有对应的实战项目,学员可以在学习过程中逐步建立自己的项目库。课程的最终项目是一个完整的环境监测系统,集成了多种传感器和通信方式,是一个很好的作品集素材。

社区参与与人脉建设

技术学习不是孤军奋战,积极参与技术社区、结交志同道合的朋友对转行也大有裨益。

加入嵌入式相关的论坛和社区,如EmbeddedLinux、ARM开发者社区等,阅读优质帖子,提出自己的问题,也尝试回答他人的问题。参与开源项目,从简单的bug修复开始,逐步增加贡献。这些活动不仅能提升技术水平,还能增加行业曝光度,为将来的求职铺路。

我自己就是通过参与社区活动认识了现在公司的技术总监,后来直接获得了面试机会。所以,永远不要低估人脉的力量。

我也建立了学员交流群,鼓励大家分享学习心得和项目经验。很多学员通过这个平台结识了同行,有的甚至互相推荐了工作机会。这种非正式的交流和互助,往往比正式的求职渠道更有效。

总结与展望

回顾我自己的转行之路,从一个机械工程师到嵌入式开发工程师,期间经历了无数挫折和挑战,但每一步的成长都让我感到无比充实和满足。转行不易,但只要方向正确,方法得当,付出足够的努力,成功只是时间问题。

嵌入式开发是一个广阔而充满活力的领域。从智能家居到工业控制,从消费电子到医疗设备,嵌入式系统无处不在,市场需求也持续增长。对于有志于此的朋友们,我想说的是:现在开始,永远不晚。

最后,我想再次强调实战的重要性。正是基于这种理念,我才开发了《STM32实战快速入门》(课程,希望能通过系统的实战教学,帮助更多像当年的我一样渴望转行的朋友少走弯路,快速成长。如果你也对嵌入式开发感兴趣,欢迎了解这门课程,也欢迎在评论区分享你的转行经历和疑问,我会尽力解答。

转行之路虽长,但行则将至;转行之事虽难,但做则必成。愿每一个转行的勇者都能找到属于自己的一片天地!

另外,想进大厂的同学,一定要好好学算法,这是面试必备的。这里准备了一份 BAT 大佬总结的 LeetCode 刷题宝典,很多人靠它们进了大厂。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

刷题 | LeetCode算法刷题神器,看完 BAT 随你挑!

有收获?希望老铁们来个三连击,给更多的人看到这篇文章

推荐阅读:

  • 【良许学堂】2025年嵌入式如何高薪入行?
  • 程序员必备编程资料大全
  • 程序员必备软件资源

欢迎关注我的博客:良许嵌入式教程网,满满都是干货!

相关文章:

转行嵌入式,需要自学多久?

作为一个本硕都学机械,却阴差阳错进入嵌入式行业的老兵,这个问题我能聊一整天。十几年前我还在工厂车间穿着工装和机床打交道,偶然接触到单片机后就一发不可收拾。 转行这条路我走得异常艰辛,踩过的坑比写过的代码还多。去年我终…...

BLE 协议栈事件驱动机制详解

在 BlueNRG-LP 等 BLE 系统中,事件驱动是控制状态转移、数据交互和外设协作的基础。本文将深入讲解 BLE 协议栈中事件的来源、分发流程、处理结构与实际工程实践策略,帮助你构建稳定、可维护的 BLE 系统。 📦 一、BLE 事件的来源分类 BLE 协议栈中的事件严格来自协议栈本身…...

AI开发学习路线(闯关升级版)

以下是一份轻松版AI开发学习路线,用「闯关升级」的方式帮你从零开始变身AI开发者,每个阶段都配有有趣的任务和实用资源,保证不枯燥、可落地!👇 目录 🔰 新手村:打基础(1-2个月&…...

突破,未观测地区罕见极端降雨的估计

文章中文总结(重点为方法细节) 一、研究背景与目的 在无测站或短观测记录地区,传统极值理论(如GEV)难以估计稀有极端降雨事件;本文提出一种新的区域化极值估计方法:区域化 Metastatistical Ex…...

zk源码—4.会话的实现原理一

大纲 1.创建会话 (1)客户端的会话状态 (2)服务端的会话创建 (3)会话ID的初始化实现 (4)设置的会话超时时间没生效的原因 2.分桶策略和会话管理 (1)分桶策略和过期队列 (2)会话激活 (3)会话超时检查 (4)会话清理 1.创建会话 (1)客户端的会话状态 (2)服务端的会话创建…...

快排算法 (分治实现)

本算法采用将整个数组划分成三个部分 <key key >key 在数组全是同一个数字时&#xff0c;也能达到NlogN的时间复杂度 下面的板书中i为遍历数组的下标 left为<key的最右边的下标 right为>key的最左边的下标 例题1&#xff1a;912. 排序数组 - 力扣&#xff0…...

P9242 [蓝桥杯 2023 省 B] 接龙数列

这道题说要求最少删多少个使剩下的序列是接龙序列&#xff0c;这个问题可以转换为序列中最长的接龙序列是多少&#xff0c;然后用总长度减去最长接龙序列的长度就可以了&#xff0c;在第一个暴力版本的代码中我用了两个for循环求出了所有的接龙序列的长度&#xff0c;但是会超时…...

未来 AI 发展趋势与挑战(AGI、数据安全、监管政策)

从 ChatGPT 的火爆到国内 DeepSeek、通义千问、百川智能等模型的兴起,AI 正以前所未有的速度走入各行各业。而下一阶段,AI 是否会发展出真正的“通用智能”(AGI)?数据隐私、技术伦理又该如何应对?本文将带你全面洞察未来 AI 的技术趋势与落地挑战。 一、AGI 的曙光:通用…...

驱动开发硬核特训 · Day 6 : 深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比

&#x1f50d; B站相应的视屏教程&#xff1a; &#x1f4cc; 内核&#xff1a;博文视频 - 从静态绑定驱动模型到现代设备模型 主题&#xff1a;深入解析设备模型的数据流与匹配机制 —— 以 i.MX8M 与树莓派为例的实战对比 在上一节中&#xff0c;我们从驱动框架的历史演进出…...

MyBatis 动态 SQL 使用详解

&#x1f31f; 一、什么是动态 SQL&#xff1f; 动态 SQL 是指根据传入参数&#xff0c;动态拼接生成 SQL 语句&#xff0c;不需要写多个 SQL 方法。MyBatis 提供了 <if>、<choose>、<foreach>、<where> 等标签来实现这类操作 ✅ 二、动态 SQL 的优点…...

数据结构实验4.1:链队列的基本操作

文章目录 一&#xff0c;问题描述二&#xff0c;基本要求三&#xff0c;算法分析链队列的存储结构设计基本操作的算法分析 四&#xff0c;示例代码五&#xff0c;实验操作六&#xff0c;运行效果 一&#xff0c;问题描述 编程实现有关链队列的下列基本操作。 &#xff08;1&am…...

独立部署及使用Ceph RBD块存储

Ceph RBD&#xff08;RADOS Block Device&#xff09; 是 Ceph 分布式存储系统中的块存储组件&#xff0c;类似于 AWS EBS、iSCSI 等。它独立于 OpenShift 或 IBM CP4BA&#xff0c;是一个分布式存储系统&#xff0c;提供高性能、可扩展性和容错能力&#xff0c;适用于数据库、…...

C++初阶-C++入门基础

目录 ​编辑 1.C的简介 1.1C的产生和发展 1.2C的参考文档 1.3C优势和难度 1.4C学习的建议 2.C的第一个程序 2.1打印Hello world 2.2头文件 2.3namespace命名空间 2.4&#xff1a;&#xff1a;作用域限定符 2.5namespace的延伸 2.6C的输入输出 3.总结 1.C的简介 …...

部署大模型不再难:DeepSeek + 腾讯云 HAI 实战教程

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

算法训练之位运算

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

初识Linux:常见指令与权限的理解,以及相关衍生知识

目录 前言 关于linux的简介 代码开源 网络功能强大 系统工具链完整 一、Linux下的基本指令 1.ls指令 2.pwd指令 3.cd指令 4.whoami指令 5.touch指令 6.mkdir指令 7.rm指令 8.man指令 9.cp指令 10.mv指令 11.nano指令 12.cat指令 13.tac指令 14.more指令 15.less指令 16.head指令…...

PostgreSQL-数据库的索引 pg_operator_oid_index 损坏

报错信息&#xff1a; 连接测试失败 Error connecting to database: Connection failed: ERROR: index "pg_operator_oid_index" contains unexpected zero page at block 3 Hint: Please REINDEX it. 这个错误表明 PostgreSQL 数据库的索引 pg_operator_oid_index …...

数字图像处理作业4

数字图像处理 作业4 Project 4&#xff1a;Image Restoration The scoring method for this project is as follows&#xff1a; 1&#xff0e;Implement a blurring filter using the equation&#xff08;5&#xff0e;6&#xff0d;11&#xff0c;数字图像处理&#xff08;…...

Simulink中Signal Builder在新版中找不到怎么办

在较新的MATLAB版本中&#xff0c;新版Simulink中的Signal Builder用Signal Editor作为替代工具。 signal builder not shown in matlab - MATLAB Answers - MATLAB Central signalBuilderToSignalEditor 1.打开上面第二个链接 2.点击拷贝 3.然后在命令行中粘贴 4.然后就会…...

STM32——RTC实时时钟

RTC简介 RTC&#xff08;Real Time Clock, RTC&#xff09;实时时钟&#xff0c;其本质是一个计数器&#xff0c;计数频率常为秒&#xff0c;专门用来记录时间。 其具有能提供时间(秒钟数)&#xff0c;能在MCU掉电后运行&#xff0c;低功耗的特性 内部框图 1. RTC预分频器 2. …...

sqli-labs靶场 less4

文章目录 sqli-labs靶场less 4 联合注入 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…...

指针数组 vs 数组指针

一、指针数组&#xff1a;「数组装指针」—— 每个元素都是指针 &#x1f50d; 核心定义 语法&#xff1a;类型* 数组名[长度]; &#xff08;[]优先级高于*&#xff0c;先形成数组&#xff0c;元素是指针&#xff09;本质&#xff1a;一个 数组&#xff0c;数组的每个元素是 …...

GitHub优秀项目:数据湖的管理系统LakeFS

lakeFS 是一个开源工具&#xff0c;它将用户的对象存储转换为类似Git的存储库。使用户可以像管理代码一样管理数据湖。借助 lakeFS&#xff0c;可以构建可重复、原子化和版本化的数据湖操作--从复杂的ETL作业到数据科学和分析。 Stars 数11090Forks 数3157 主要特点 强大的数据…...

数据库视图讲解(view)

一、为什么需要视图 二、视图的讲解 三、总结 一、为什么需要视图 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。 比如&#xff0c;针对一个公司的销售人员&#xff0c;我们只想给他看部分数据&#xff0c…...

pip install pytrec_eval失败的解决方案

1、问题描述 在使用华为云 notebook 的时候&#xff0c;想要&#xff1a; !pip install transformer结果失败&#xff0c;阅读报错后&#xff0c;疑似是 pytrec_eval 库的下载问题。 于是&#xff0c;单独尝试&#xff1a; !pip install pytrec_eval发现确实是这个库安装失…...

使用stream的Collectors.toMap()方法常见问题

文章目录 一、常见问题二、key重复问题2.1、报错示例2.2、解决方法 三、value为空问题3.1、报错示例3.2、解决方法3.1、方案一3.2、方案二 一、常见问题 stream的Collectors.toMap()方法常见问题&#xff1a; 1、 key不能有重复&#xff0c;否则会报错。java.lang.IllegalStat…...

[C++面试] 初始化相关面试点深究

一、入门 1、C中基础类型的初始化方式有哪些&#xff1f;请举例说明 ​默认初始化​ 对于全局变量和静态变量&#xff0c;基础类型&#xff08;如int、float、double等&#xff09;会被初始化为 0&#xff1b;而对于局部变量&#xff0c;其值是未定义的&#xff0c;包含随机…...

ChatDBA:一个基于AI的智能数据库助手

今天给大家介绍一个基于 AI 大语言模型实现数据库故障诊断的智能助手&#xff1a;ChatDBA。 ChatDBA 是由上海爱可生信息技术股份有限公司开发&#xff0c;通过对话交互&#xff0c;提供数据库故障诊断、专业知识学习、SQL 生成和优化等功能&#xff0c;旨在提升 DBA 工作效率。…...

Java延迟队列

&#x1f4cc; 1. 场景背景 最近做项目&#xff0c;使用到了延迟队列。场景是这样的&#xff1a;在在线视频学习中&#xff0c;学生每隔几秒上报当前学习进度&#xff0c;为避免频繁写数据库、提升性能&#xff0c;采用以下方案&#xff1a; 先写入 Redis&#xff0c;再延迟一…...

神舟平板电脑怎么样?平板电脑能当电脑用吗?

在如今的数码产品市场上&#xff0c;神舟平板电脑会拥有独特的优势&#xff0c;其中比较受到大家关注的就是神舟PCpad为例&#xff0c;无论是设计还是规格也会有很多的亮点&#xff0c;那么是不是可以直接当成电脑一起来使用呢&#xff1f; 这款平板电脑就会配备10.1英寸显示屏…...

Ansible的使用3

#### 一、Ansible补充模块 try () { } catch () { } finally 等同于 block () { } rescue () { } always ##### 任务块 - block任务块 - 通过block关键字&#xff0c;将多个任务组合到一起 - 将整个block任务组&#xff0c;一…...

PS教学记录

PS制作手机壁纸和电脑壁纸 1. 思绪来源 找到了一位B站UP&#xff0c;分享了有关于灰原哀的动态壁纸。自身( •̀ ω •́ )也是名侦探柯南的爱好者&#xff0c;在此基础上&#xff0c;萌生了制作壁纸的想法。便在B站上搜寻有关于壁纸制作的教学。找到了一位壁纸分享者的教程镜…...

分析一下HashMap内部是怎么实现的

当然可以&#xff01;我们来深入分析一下 Java 中 HashMap 的内部实现机制&#xff08;以 JDK 8 为主&#xff09;&#xff0c;包括数据结构、核心算法、源码设计、以及适用场景。 &#x1f9e0; 一、HashMap 的核心结构 HashMap 是基于哈希表实现的 Map&#xff0c;底层结构是…...

面向对象的要素

理解面向对象 程序的三种基本结构 &#xff08;1&#xff09;顺序结构 &#xff08;2&#xff09;选择结构 &#xff08;3&#xff09;循环结构 面向对象程序设计简介 面向对象是一种更优秀的程序设计方法&#xff0c;它的基本思想是使用类、对象、继承、封装、消息等基本…...

Java基础 4.9

1.方法递归调用练习 //请使用递归的方式求出斐波那契数1, 1, 2, 3, 5, 8, 13 //给你一个整数n, 求出它的值是多少 /* 思路 n 1 1 n 2 1 n > 3 前两个数的和 递归的思路 */ public class RecursionExercise01 {public static void main(String[] args) {Mathod mathod ne…...

什么是堆?深入理解堆数据结构及其应用

粉丝提问 ⭐算法OJ⭐数据流的中位数【最小堆】Find Median from Data Stream 发表后收到一位粉丝的私信询问&#xff1a; “经常听说堆、堆排序、优先队列这些概念&#xff0c;但一直不太明白堆到底是什么&#xff0c;能简单解释一下吗&#xff1f;它和内存分配中的堆是一回事…...

程序化广告行业(73/89):买卖双方需求痛点及应对策略深度剖析

程序化广告行业&#xff08;73/89&#xff09;&#xff1a;买卖双方需求痛点及应对策略深度剖析 大家好&#xff01;一直以来&#xff0c;我都热衷于在技术领域探索学习&#xff0c;也深知知识的分享能让我们共同进步。写这篇博客的目的&#xff0c;就是希望能和大家一起深入了…...

C++ RAII 的用途及业务代码实现案例

C RAII 的用途及业务代码实现案例 RAII 的核心概念 RAII (Resource Acquisition Is Initialization&#xff0c;资源获取即初始化) 是 C 的核心编程范式&#xff0c;其核心思想是&#xff1a; 资源获取与对象构造绑定资源释放与对象析构绑定利用 C 对象生命周期自动管理资源…...

神经网络入门—自定义神经网络续集

修改网络 神经网络入门—自定义网络-CSDN博客 修改数据集&#xff0c;yx^2 # 生成一些示例数据 x_train torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtypetorch.float32) y_train torch.tensor([[1.0], [4.0], [9.0], [16.0]], dtypetorch.float32) 将预测代码改为&…...

【C语言】浮点数在内存的储存

前言&#xff1a; 在上章&#xff0c;了解了整数在内存中的储存&#xff0c;在本章节为大家继续讲解浮点数的储存&#xff0c;也是数据储存的最后一部分。 浮点数是计算机科学中一种重要的数据类型&#xff0c;用于表示实数。它能够表示非常大或非常小的数值&#xff0c;并且…...

安装 Calico 的两种主流方式对比

本文对比了 Calico 的两种主流安装方式&#xff1a; 使用 calico.yaml 的 Manifest 安装方式使用 Tigera Operator&#xff08;tigera-operator.yaml custom-resources.yaml&#xff09;安装方式 ✅ 1. 使用 Manifest 方式安装&#xff08;直接部署 calico.yaml&#xff09; …...

信用卡欺诈检测实战教程:从数据预处理到模型优化全解析

引言&#xff1a;为什么需要信用卡欺诈检测&#xff1f; 根据尼尔森报告&#xff0c;全球每年因信用卡欺诈造成的损失超过250亿美元&#xff0c;金融机构需要在0.1秒内完成交易风险评估。本文将带您从零构建基于机器学习的信用卡欺诈检测系统&#xff0c;完整代码可视化分析&a…...

android studio编译报错 Gradle

android studio 提示 Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-8.0.2-bin.zip. Reason: java.net.SocketTimeoutException: Read timed out 一&#xff0c;手动下载 https://services.gradle.org/distributions/gradle…...

【Nodebb系列】Nodebb笔记写入方案

NodeBB写入方案 前言 最近在整理以前记录的碎片笔记,想把它们汇总到NodeBB中,方便管理和浏览。但是笔记内容有点多,并且用发帖的形式写到NodeBB中会丢失时间信息,因此整理了一套NodeBB写入方案,大致流程如下: 建立标准笔记格式导出原始笔记,并编写脚本将笔记内容转换为…...

Spring Boot 集成 POI

Spring Boot 集合 POI Apache POI 官站&#xff1a;https://poi.apache.org/ 基础概念 Apache POI 是一个开源项目&#xff0c;提供 Java API 用于操作 Microsoft Office 文件格式。Apache POI 对 Excel 文件的处理分为两个主要类库&#xff1a; HSSF (Horrible Spreadsheet …...

8个方向使用DeepSeek打磨完美课题申报书!

一份出色的课题申报书&#xff0c;往往就是项目获批的关键。撰写高质量课题申报书绝非易事&#xff0c;它需要您在选题切入点、研究价值论证、技术路线设计、团队优势呈现、经费规划和预期成果等多维度进行精心布局&#xff0c;确保论证有力、重点突出、结构清晰。 本文为您提供…...

Leetcode 34.在排序数组中查找元素的第一个和最后一个位置

题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 考察二…...

ctfshow VIP题目限免 密码逻辑脆弱

根据题目提示&#xff1a;公开的信息比如邮箱&#xff0c;可能造成信息泄露&#xff0c;产生严重后果 在页面上找一个邮箱号 从 QQ 上面搜索这个 QQ号&#xff0c;发现是一个叫大牛的人&#xff0c;地区是陕西西安 然后我们拼接访问 /admin 发现了一个后台登录系统的页面&…...

C++初级入门学习

数据结构初级部分的学习我们已经学完了&#xff0c;接下来就进入C初阶部分的学习&#xff0c;因为数据结构的高阶部分要用到C才能够更好的理解并书写&#xff0c;所以我们要先学习C&#xff0c;初阶部分学完就能继续学习我们对数据结构了。好了&#xff0c;直接进入今天的主题吧…...

2025年汽车加气站操作工证考试内容

汽车加气站操作工证是从事汽车加气站相关操作工作的人员需要考取的资格证书 考试内容 理论知识&#xff1a;包括加气站的工艺流程、设备原理、安全操作规程、气体性质、消防知识、环境保护等方面的知识。例如&#xff0c;需要了解压缩天然气或液化天然气的储存、运输和加注流…...