Linux学习(二)

Bootloader

        引导加载程序(Bootloader)是计算机系统中的一个重要组件,负责在计算机启动时加载操作系统。它通常存储在计算机的固件中,比如BIOS或UEFI,或者存储在硬盘或固态硬盘的引导分区中。引导加载程序的主要作用是引导操作系统的启动过程,其具体功能包括:

  1. 硬件初始化:引导加载程序会初始化计算机的硬件设备,如处理器、内存、外围设备等,确保它们处于适当的状态以便后续的操作系统加载和执行。

  2. 引导设备选择:在启动时,引导加载程序会确定从哪个设备启动操作系统,比如硬盘、固态硬盘、光盘、USB设备等。

  3. 加载操作系统内核:一旦确定了引导设备,引导加载程序会读取操作系统内核的引导扇区,并将其加载到计算机的内存中。

  4. 引导配置:引导加载程序还可能会提供配置选项,允许用户或管理员指定特定的启动参数或选择不同的操作系统(如果存在多个操作系统)。

  5. 传递控制权:引导加载程序会将控制权传递给操作系统内核,以便操作系统能够继续启动并控制计算机的进一步操作。

       常见的引导加载程序包括GRUB(GNU GRand Unified Bootloader)、LILO(Linux Loader)、Syslinux等。不同的操作系统和计算机架构可能使用不同的引导加载程序。

gettimeofday()函数

   gettimeofday() 函数是一个用于获取当前系统时间的 POSIX 函数。它的作用是获取当前时间,并将其存储在一个 timeval 结构中,该结构包含了秒数和微秒数。这个函数通常用于计时、时间相关的操作、性能测试等方面。它返回的时间信息通常用于计算程序执行时间、事件间隔、时间戳等。

gettimeofday() 函数的原型如下:

int gettimeofday(struct timeval *tv, struct timezone *tz);

        其中,tv 是一个指向 timeval 结构的指针,用于存储获取到的时间信息;tz 是一个指向 timezone 结构的指针,通常被忽略,可以设置为 NULL。

timeval 结构的定义如下:

struct timeval { time_t tv_sec; /* 秒数 */ suseconds_t tv_usec; /* 微秒数 */ };

使用 gettimeofday() 函数示例:

#include <sys/time.h> #include <stdio.h> int main() { struct timeval tv; gettimeofday(&tv, NULL); printf("Seconds: %ld, Microseconds: %ld\n", tv.tv_sec, tv.tv_usec); return 0; }

这个示例会打印当前的秒数和微秒数。

linux文件的/加在前面后面的区别和意义

        在Linux系统中,文件路径中的 / 是用来分隔目录和文件名的符号,它具有以下两种不同的用法和意义:

  1. 在路径的开头:在文件路径的开头使用 / 表示绝对路径。绝对路径是指从根目录开始的完整路径,它可以唯一地标识文件系统中的一个文件或目录。例如,/home/user/file.txt 表示位于根目录下的 home 目录中的 user 目录中的 file.txt 文件。

  2. 在路径的中间或结尾:在路径的中间或结尾使用 / 表示目录分隔符。目录分隔符用于分隔不同目录层次之间的路径。例如,/home/user/ 表示位于根目录下的 home 目录中的 user 目录,file.txt 表示 user 目录中的 file.txt 文件。

        绝对路径和相对路径的区别在于,绝对路径从根目录开始,而相对路径是相对于当前工作目录的路径。绝对路径始终从根目录开始,而相对路径不包含根目录。

        在文件系统中,/ 是一个重要的符号,它标识目录的层次结构,并允许用户准确地定位和访问文件。理解和正确使用 / 符号对于有效地管理文件和目录非常重要。

Syntax error

        如果你在编写或运行脚本时遇到 "syntax error"(语法错误),这意味着你的脚本中存在语法问题,这可能导致脚本无法正确执行。

        语法错误可能包括但不限于以下情况:

  1. 缺少关键字、运算符或引号。
  2. 不正确的命令或参数使用。
  3. 不匹配的括号或引号。
  4. 不正确的变量使用。
  5. 不正确的行尾或空格使用。

为了解决语法错误,你可以:

  1. 仔细检查代码,并确认是否有拼写错误、缺失符号或其他明显的错误。
  2. 使用调试工具或添加调试语句来逐行检查脚本执行的过程,从而找到问题所在。
  3. 参考相关文档、教程或示例来学习正确的语法使用方式。

        如果你遇到了特定的语法错误,可以将错误消息和相关的代码部分提供给我,我可以帮助你分析和解决问题。

linux怎么创建脚本

       在Linux系统中创建脚本非常简单,你只需要使用文本编辑器创建一个包含命令的文本文件,并为其添加可执行权限。以下是创建脚本的基本步骤:

(1)选择文本编辑器:首先,选择你喜欢的文本编辑器。在Linux系统中,常用的文本编辑器包括Nano、Vi/Vim、Emacs等。如果你更喜欢图形界面的编辑器,你可以使用Gedit、Sublime Text、Visual Studio Code等。

(2)打开文本编辑器:打开终端,并输入以下命令以打开文本编辑器:

nano my_script.sh

这将使用Nano文本编辑器创建一个名为my_script.sh的新文件。如果你更喜欢其他编辑器,你可以将nano替换为该编辑器的名称。

(3)编写脚本:在文本编辑器中编写你的脚本。例如,你可以输入一些Shell命令,如:

#!/bin/bash echo "Hello, world!"

这是一个简单的Shell脚本,它会在终端中打印 "Hello, world!"。

(4)保存文件:保存你的脚本文件。在Nano中,按下 Ctrl + X 键,然后按下 Y 键确认保存,最后按下 Enter 键。

(5)添加可执行权限:在终端中使用 chmod 命令添加可执行权限:

chmod +x my_script.sh

这将允许你运行该脚本文件。

(6)运行脚本:现在,你可以在终端中运行你的脚本:

./my_script.sh

或者如果你将脚本文件的路径添加到环境变量PATH中,你也可以直接运行脚本:

my_script.sh

这样就完成了在Linux系统中创建脚本的过程。你可以随时编辑脚本文件并运行它来执行你的自定义任务。

VCCK和VDDEE的上电时序

        "VCCK" 和 "VDDEE" 是在电子设备中常见的电源引脚或电源域的命名,通常用于芯片、模块或电路板的设计中。它们的上电时序可能会因具体的设备而异,但一般情况下,它们的上电时序应遵循以下一般原则:

  1. VCCK 上电时序:

    • VCCK 通常是芯片内部的核心电压引脚,用于提供芯片内部逻辑电路的电源。其上电时序应该先于其他相关电源引脚。
  2. VDDEE 上电时序:

    • VDDEE 通常是外围电路或者 I/O 电压引脚,用于提供芯片周边电路或者外设电路的电源。其上电时序可以稍晚于核心电压引脚,但应在核心电压稳定之后尽快上电。

   一般来说,电源引脚的上电时序应该满足以下要求:

  • 遵循芯片或者模块厂商提供的规格书中关于电源引脚的推荐或最大时序要求。
  • 核心电压引脚(如 VCCK)通常应该先于外围电压引脚(如 VDDEE)上电。
  • 电源引脚的上电顺序应该是有序的,避免出现不稳定或者不一致的情况。

        最佳的做法是参考相关的芯片或者模块的数据手册、规格书或者应用手册,查找关于电源引脚的详细信息和推荐的上电时序。这些文档通常会提供关于电源引脚的电气特性、最大时序要求和推荐的上电顺序等信息,有助于正确设计和配置电路板的电源系统。

VCCK和VDDEE需要如何设定

       "VCCK" 和 "VDDEE" 是电子设备中常见的电源引脚或电源域的名称,它们通常用于提供芯片、模块或电路板的核心电压和外围电压。在设计电路板时,需要根据具体的芯片或模块规格书中的要求来设定这些电源引脚。以下是一般情况下设定这些电源引脚的一些建议:

VCCK 设定

   VCCK 通常是芯片内部逻辑电路的核心电压引脚。在设定 VCCK 时,需要注意以下几点:

(1)根据芯片规格书中的推荐值或最大值,设定适当的 VCCK 电压。

(2)在设计电路板时,应该提供稳定、干净的电源,以确保芯片内部逻辑电路的稳定运行。

(3)确保提供的电压符合芯片规格书中的要求,包括电压范围、精度和稳定性等。

VDDEE设定

       VDDEE 通常是芯片周边电路或者外设电路的供电引脚。在设定 VDDEE 时,需要注意以下几点:

(1)确保提供的电压符合芯片规格书中的要求,包括电压范围、精度和稳定性等。

(2)VDDEE 通常可以设定为与 VCCK 相同的电压,也可以根据具体的外围电路需求设定为其他电压值。

(3)在设计电路板时,应该提供稳定、干净的电源,以确保外围电路或外设的正常运行。

        总的来说,设定 VCCK 和 VDDEE 时,需要根据芯片规格书中的要求来确定电压值和稳定性要求,并在设计电路板时提供稳定、干净的电源,以确保设备的正常工作和可靠性。此外,一些芯片或模块可能还提供了额外的电源引脚或电源域,需要根据具体的规格书要求来进行设定和配置。

dvfs常用的接口

        动态电压频率调节(DVFS)是一种通过调节处理器的工作频率和电压来降低功耗和提高性能的技术。在实现 DVFS 功能时,通常需要与处理器或者系统的硬件和软件进行交互。以下是一些常用的 DVFS 接口或者方法:

  1. 调节 CPU 工作频率和电压:

           大多数处理器都提供了接口或者命令来调节 CPU 的工作频率和电压。例如,在 Linux 系统中,可以通过 sysfs 接口(/sys/devices/system/cpu/cpu*/cpufreq/)来调节 CPU 的工作频率,通过调节相关参数来实现 DVFS 功能。
  2. 使用调节器(Governor):

           在 Linux 系统中,CPU 调节器(Governor)是一种动态调节 CPU 工作频率的软件模块,它根据系统的负载情况和性能要求来自动调节 CPU 的工作频率和电压。常见的调节器包括 conservative、ondemand、performance 等。通过选择合适的调节器和调节器参数,可以实现 DVFS 功能。
  3. 使用功耗管理框架:

           一些处理器或者系统提供了专门的功耗管理框架,用于实现 DVFS 功能。例如,在 Android 系统中,可以使用 PowerHAL(Power Hardware Abstraction Layer)框架来管理系统的功耗和性能,通过调节 CPU 的工作频率和电压来实现 DVFS 功能。
  4. 使用硬件接口:

          一些处理器或者系统提供了专门的硬件接口来实现 DVFS 功能。通过访问这些硬件接口,可以直接控制处理器的工作频率和电压,实现动态调节功能。
  5. 自定义调节算法:

          在一些特定的场景下,可能需要根据系统的特性和性能要求,自定义调节算法来实现 DVFS 功能。通过分析系统的负载情况、功耗特性等,编写自定义的调节算法来实现最优的功耗和性能平衡。

       综上所述,DVFS 功能的实现可以通过软件接口、功耗管理框架、硬件接口等多种方式来实现。具体选择哪种方式取决于系统的特性、硬件平台和性能要求等因素。

sysfs接口

       sysfs 是 Linux 内核提供的一个虚拟文件系统,用于向用户空间暴露内核数据结构的接口。在 Linux 系统中,sysfs 接口通常被用来管理内核设备、参数和状态信息等,包括 CPU 调频、内存管理、设备管理等。对于 DVFS 功能而言,sysfs 接口通常用于管理 CPU 的调频(频率调节)功能。以下是一些常见的 sysfs 接口用于 CPU 调频:

  1. CPU 调频目录:/sys/devices/system/cpu/cpu*/cpufreq/

    • 这是 CPU 调频相关的目录,其中的 cpu* 表示 CPU 的编号(例如,cpu0、cpu1 等)。
    • 在这个目录下,通常包含了一些文件和子目录,用于控制 CPU 的工作频率、调节器、调节器参数等。
  2. 当前工作频率文件:/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

    • 这个文件显示了当前 CPU 的工作频率,以 Hz 为单位。
  3. 可用调节器文件:/sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors

    • 这个文件显示了可用的调节器(Governor),通常包括 conservative、ondemand、performance 等。
  4. 当前调节器文件:/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

    • 这个文件显示了当前使用的调节器。
  5. 设置调节器文件:/sys/devices/system/cpu/cpu*/cpufreq/scaling_setspeed

    • 通过写入相应的值到这个文件,可以设置 CPU 的工作频率。

       通过在这些文件中读写相应的值,可以实现对 CPU 调频功能的控制和管理。例如,可以通过修改 scaling_governor 文件中的值来切换调节器,通过写入 scaling_setspeed 文件中的值来设置 CPU 的工作频率。这样可以实现 DVFS 功能,根据系统负载情况和性能要求来动态调节 CPU 的工作频率,以实现节能和性能平衡。

CPU 调节器(Governor)

       CPU 调节器(Governor)是一种软件模块,用于在 Linux 系统中动态调节 CPU 的工作频率以平衡功耗和性能。在多核 CPU 系统中,每个 CPU 核心都有自己的调节器。调节器根据系统的负载情况和性能要求,自动调整 CPU 的工作频率,以提高系统的性能或者降低功耗。常见的 CPU 调节器包括以下几种:

  1. Performance(性能):

    • Performance 调节器会让 CPU 始终工作在最高的频率,以获得最大的性能。这种模式下,CPU 不会主动降频,但会消耗更多的电能。
  2. Powersave(省电):

    • Powersave 调节器会让 CPU 工作在最低的频率,以节省电能。这种模式下,CPU 会尽量降低功耗,但可能会牺牲性能。
  3. Ondemand(按需):

    • Ondemand 调节器会根据系统的负载情况自动调节 CPU 的工作频率。当系统负载较低时,CPU 会降低频率以节省电能;当系统负载增加时,CPU 会提高频率以提高性能。
  4. Conservative(保守):

    • Conservative 调节器会根据系统的负载情况逐渐调节 CPU 的工作频率。它比 Ondemand 更加保守,更加平滑地调节 CPU 的频率,以避免频繁的频率切换。
  5. Interactive(交互式):

    • Interactive 调节器会根据系统的负载情况实时调节 CPU 的工作频率。它会根据系统的需求快速调节 CPU 的频率,以提高响应速度和系统性能。

       在 Linux 系统中,可以通过修改 /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 文件中的值来切换 CPU 调节器。不同的调节器适用于不同的应用场景,可以根据系统的需求选择合适的调节器来平衡性能和功耗。

煲机

        "煲机"通常是指让电子设备在最初使用时运行一段时间以达到稳定状态或预防问题。在电脑或其他电子设备中,这通常涉及让设备运行一段时间以检查是否有硬件问题,并确保设备的稳定性和性能。

在煲机电脑时,你可以执行以下操作:

  1. 运行压力测试:使用压力测试工具如Prime95或Memtest86来测试CPU和内存的稳定性。这可以帮助你确定是否有硬件问题。

  2. 进行设备热身:让电脑运行一段时间,使用一些资源密集型的任务,例如游戏或视频渲染,以加热设备并检查是否存在过热问题。

  3. 测试稳定性:在煲机过程中,使用电脑进行常规任务,如浏览网页、运行应用程序等,以确保设备在正常使用情况下稳定运行。

  4. 观察设备行为:在煲机期间,密切观察设备的行为,包括任何异常噪音、过热现象或性能问题。

注意事项

        煲机是一种常见的做法,但在进行煲机时,有一些注意事项可以帮助你确保安全并最大程度地提高设备的性能和稳定性:

  1. 阅读设备手册:在进行煲机之前,确保阅读设备的用户手册或使用指南。这些文档通常包含了关于设备使用和保养的重要信息。

  2. 保持通风:确保设备处于通风良好的环境中,并且周围没有堵塞物,这有助于避免过热问题。

  3. 谨慎选择压力测试工具:如果你选择运行压力测试来检查设备的稳定性,确保选择可靠的测试工具,并避免使用可能会造成过度负载或损害设备的工具。

  4. 定期监控设备:在煲机期间,定期检查设备的温度、风扇转速和性能。如果你观察到任何异常现象,及时停止煲机并检查问题所在。

  5. 小心处理电源:在煲机过程中,确保设备连接到稳定可靠的电源,并使用适当的电源保护设备。

  6. 备份重要数据:在煲机之前,确保备份重要的数据。虽然煲机过程中不太可能发生数据丢失,但备份仍然是一种好习惯。

  7. 遵循制造商建议:最重要的是,遵循制造商的建议和指南。不同设备可能有不同的煲机建议,因此确保按照正确的方式进行煲机。

       通过遵循这些注意事项,你可以安全地进行煲机,并确保设备在使用过程中提供最佳性能和稳定性。

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

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

相关文章

【rust编译错误解读】

PANIC 1cannot index into a value of type std::option::Option<&Vec<Value>> &#xff08;不能访问下标index在一个Option包裹的Vec中&#xff09; 尝试对一个 Option 类型的值进行索引操作&#xff0c;而这个 Option 可能包含一个对 Vec 的引用&#xff0c…

《Linux运维总结:Kylin V10+ARM架构CPU基于docker-compose一键离线部署redis6.2.8之容器版哨兵集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

NLP——序列文本信息处理

序列文本信息处理是指对那些具有明确词序或结构顺序&#xff08;如句子、段落、篇章等&#xff09;的文本数据进行专门的分析和转换&#xff0c;以保留并利用其内在的时序或逻辑关系。在NLP中&#xff0c;处理序列文本信息通常涉及以下几个关键步骤&#xff1a; 分词&#xff0…

idea 设置启动项指定使用的nacos namespace

文章目录 场景如图 场景 各个研发的nacos配置要做隔离&#xff0c;这时候通常有两种方式&#xff0c; 第一种修改bootstarp.yaml文件 指定研发自己的配置&#xff0c;第二种更优雅&#xff0c;只需要修改idea启动项, 对代码没有侵入 如图 –spring.cloud.nacos.discovery.names…

揭秘英伟达Blackwell平台网络拓扑架构,解锁超算新境界

英伟达Blackwell平台网络配置详解 AI算力研究&#xff1a;英伟达B200再创算力奇迹&#xff0c;液冷、光模块持续革新 突破性的GB200 NVL72全互联架构&#xff0c;带来高性能GPU解决方案。铜缆方案有望成为未来趋势&#xff0c;提供低成本、高带宽连接。 1. Blackwell 平台网络…

时序预测 | Transformer时间序列预测 Matlab代码

文章目录 效果一览文章概述源码设计参考资料 效果一览 文章概述 1.时序预测 | Transformer时间序列预测 Matlab代码 2.单变量时间序列预测&#xff1b; 3.多指标评价&#xff0c;评价指标包括&#xff1a;R2、MAE、MBE等&#xff0c;代码质量极高&#xff1b; 4.excel数据&…

程序使用哪个寄存器是由谁决定的?

在程序中使用哪些寄存器的决定通常是由多种因素决定的&#xff0c;包括&#xff1a; 1. 编译器或汇编器 编译器&#xff1a;对于高级编程语言&#xff0c;编译器在寄存器分配中起着重要作用。编译器分析程序的代码&#xff0c;识别常用的变量和表达式&#xff0c;并将它们映射…

政企即时通讯APP:快速构建专属、安全的智慧办公解决方案

在数字化时代&#xff0c;政企单位对信息系统的依赖日益加深&#xff0c;但随之而来的信息安全隐患也不容忽视。组织内部信息系统的安全问题&#xff0c;尤其是在人员调整或离职时&#xff0c;管理员账号管理的混乱&#xff0c;以及敏感资料泄露和业务系统破坏的风险&#xff0…

文献阅读:基于电压规避的汽车CAN入侵检测(一)

论文名称&#xff1a;Evading Voltage-Based Intrusion Detection on Automotive CAN 目录 文章概述 背景 本文工作 提出新型攻击DUET 提出防御系统RAID 第一部分&#xff1a;INTRODUCTION&#xff08;介绍&#xff09; 电压破坏和DUET RAID 文章贡献 文章概述 背景…

Linux根据进程ID查看进程的文件路径

1、执行pwdx PID命令&#xff0c;用来显示进程的当前工作目录和可执行文件的路径。 2、执行ll /proc/PID/cwd或者ls -l /proc/PID/exe命令&#xff0c;也可以查看进程的路径。/proc文件系统是一个虚拟文件系统&#xff0c;它为内核和进程之间提供了一个接口。对于每个进程&…

jar包解压和重新打包

1、Windows系统上解压和重新打包jar包的命令&#xff1a; (1). 解压jar包&#xff1a; jar -xf yourJarFile.jar (2). 重新打包jar包&#xff1a; jar -cf newJarFile.jar * 2、Linux系统上解压和重新打包jar包的命令&#xff1a; (1). 解压jar包&#xff1a; unzip your…

Seal^_^【送书活动第一期】——《Vue.js+Node.js全栈开发实战(第2版)》

Seal^_^【送书活动第一期】——《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;》 一、参与方式二、本期推荐图书2.1 前 言2.2 作者简介2.3 图书简介2.4 本书特色2.5 编辑推荐2.6 书籍目录 三、正版购买 一、参与方式 1、关注博主的账号。 2、点赞、收藏、评论博主的…

Altair® (澳汰尔)Grid Engine® 分布式资源管理系统

Grid Engine 是可靠的分布式资源管理系统&#xff0c;用于优化数千个数据中心的工作负载和资源&#xff0c;提高性能并提高生产力和效率。 Grid Engine 可通过优化应用程序、容器和服务的吞吐量和性能&#xff0c;同时极大化本地、混合和云基础设施之间的共享计算资源&#xf…

Web3技术简介:重新定义互联网的未来

引言 在21世纪的数字时代&#xff0c;互联网已成为我们日常生活的不可或缺的一部分。然而&#xff0c;随着区块链和加密技术的快速发展&#xff0c;一个全新的互联网模型——Web3&#xff0c;正逐渐崭露头角。Web3不仅仅是技术的进步&#xff0c;它更是对传统互联网模型的挑战…

B端:再探列表页,这20个组件能让列表页功能完备,体验过关。

有很多小伙伴反馈设计列表页的时候&#xff0c;好看是好看了&#xff0c;但是用户体验不佳&#xff0c;处理数据十分不方便&#xff0c;这样好看也就失去了意义&#xff0c;贝格前端工场分析这个原因大概率是没有用好列表页的组件&#xff0c;丢三落四的情况比较多导致的&#…

spring boot获取请求参数并响应

获取请求参数并响应&#xff1a; 响应&#xff1a; 在Controller类或方法上加上ResponseBody注解&#xff0c;可以将方法返回值直接响应&#xff0c;如果返回值是实体对象或者集合&#xff0c;将转换为json格式响应。如下例&#xff1a; RestControllerResponseBodyControll…

【必收藏】史上最全 Meta Llama 3 相关网址资料

不要犹豫&#xff0c;先收藏再说&#xff0c;你肯定用得到&#xff01; ✅ 模型相关网址 Meta Llama 3 官网&#xff1a;https://llama.meta.com/llama3 Meta AI 网址&#xff1a;https://ai.meta.com/ 官网下载地址&#xff1a;https://llama.meta.com/llama-downloads Git…

JavaSE:继承 多态

继承 继承的本质 子类能够使用父类的方法和变量 使用场景&#xff1a;代码复用 在一个类中实现了一个很复杂的方法&#xff0c;给一个新类重新实现这个方法&#xff0c;我们直接继承即可 public class Student {public String sno;public void study() {System.out.printl…

Spring Boot 中Mybatis使用Like的使用方式和注意点

说明 模糊查询在项目中还是经常使用的&#xff0c;本文就简单整理Mybatis中使用Like进行模糊查询的几种写法以及一些常见的问题。 使用Springboot简单配置一下Mybatis&#xff0c;然后进行说明。Springboot集成Mybatis这里就不做介绍了&#xff0c;这里我们主要介绍一下在mybat…

【Rust】——项目实例:——命令行实例(一)

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…