目录

1. 软件包管理器

1.1 什么是软件包

1.2 Linux软件生态

1.3 yum具体操作

1.3.1 查看软件包

1.3.2 安装软件

1.3.3 卸载软件

1.3.4 注意事项(测试网络)

1.3.5 yum指令集总结

1.4 yum源目录、安装源

2. Vim编辑器的使用

2.1 Linux编辑器-vim使用

2.2 vim的基本概念

2.3 vim基本操作

2.3.1 模式切换

2.3.2 正常模式命令集

2.3.3 末行模式命令集

2.3.4 其他模式命令集(批量添加/删除)

2.3.5 补充命令

3. 编译器gcc/g++

3.1 gcc编译

3.1.1 预处理(进行宏替换)

3.1.2 编译(生成汇编)

3.1.3 汇编(生成机器可识别代码)

3.1.4 链接(生成可执行文件或库文件)

3.2 动态链接和静态链接

3.3 静态库和动态库

3.4 条件编译用途,为什么C/C++编译时要转汇编

3.5 gcc其他常用选项(了解)


1. 软件包管理器

1.1 什么是软件包

        Linux安装软件的三种方式:

        1. 下载到程序的源代码, 并进行编译, 得到可执行程序.

        2. ".rpm"文件,一种软件包格式,这种格式的文件扩展名通常是 .rpm。它包含了编译好的软件二进制文件、配置文件、文档以及安装/卸载脚本。(不包含软件依赖)

       3. 包管理器(推荐),会分析软件依赖关系,并自动从软件仓库下载并安装所有必需的依赖包。

        •Centos: yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora,RedHat, Centos等发行版上.

        • Ubuntu:主要使用apt(Advanced Package Tool)作为其包管理器。apt同样提供了自动解决依赖关系、下载和安装软件包的功能。

        注意:安装软件需要root权限。

1.2 Linux软件生态

1. Linux下载软件的过程(Ubuntu、Centos、other)

2. 操作系统的好坏评估--- 生态问题

3. 为什么会有人免费特定社区提供软件,还发布?还提供云服务器让你下载?

驱动方主要动机获得回报
个人开发者

理想主义、解决自身需求、获得声誉

名誉、技术提升、更好的就业机会
开源社区协作精神、互利共赢更好的软件、强大的生态
商业公司构建生态、降低行业成本、制定标准销售增值服务、支持服务、托管服务
云服务商吸引用户使用其高利润的云平台丰厚的云服务收入(远超带宽成本)

        所以,这并非纯粹的利他主义。这是一个精心设计的、多方共赢的生态系统:个人获得名誉,企业获得人才和创新,公司获得利润,社会获得技术进步。 免费提供软件和下载,只是这个庞大生态系统得以运转的“入门成本”和“流量入口”。

4. 软件包依赖的问题

5. 国内镜像源

1.3 yum具体操作

1.3.1 查看软件包

        通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用grep 命令只筛选出我们关注的包. 例如:

# Centos,yum list加grep寻找lrzsz
yum list | grep lrzsz
# lrzsz.x86_64 0.12.20-36.el7 @base# 注意事项:
# 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
# "x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配.
# "el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6.
# 最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念.

1.3.2 安装软件

        通过 yum, 我们可以通过很简单的一条命令完成 lrzsz的安装.

# Centos
# sudo yum install -y [软件名]
$ sudo yum install -y lrzsz# Ubuntu
$ sudo apt install -y lrzsz# yum/apt 会自动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装.
# 出现 "complete" 字样或者中间未出现报错, 说明安装完成.
# 注意事项:
# 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
# yum/apt安装软件只能一个装完了再装另一个. 正在yum/apt安装一个软件的过程中, 如果再尝试用yum/apt安装另外一个软件, yum/apt会报错.

1.3.3 卸载软件

# Centos
sudo yum remove [-y] lrzsz# Ubuntu
sudo apt remove [-y] lrzsz

1.3.4 注意事项(测试网络)

        关于 yum / apt 的所有操作必须保证主机(虚拟机)网络畅通!!!

        可以通过 ping 指令验证

ping www.baidu.com

1.3.5 yum指令集总结

指令功能
yum install安装软件包
yum list列出所有可供安装的软件包
yum search搜索包含指定关键字的软件包
yum remove写在指定的软件包
yum makecache将软件包信息缓存到本地
yum search用于在搜索包含有指定关键字的软件包
yum clean all清理老旧的缓存信息
yum update升级所有包同时,也升级软件和系统内核
yum upgrade只升级所有包,不升级软件和系统内核,软件和内核保持原样

1.4 yum源目录、安装源

        Cetnos 安装源路径:

# /etc/yum.repos.d/ 目录下存放的.reps文件就是是各种应用下载源
$ ll /etc/yum.repos.d/
total 16
-rw-r--r-- 1 root root 676 Oct 8 20:47 CentOS-Base.repo # 标准源
-rw-r--r-- 1 root root 230 Aug 27 10:31 epel.repo # 扩展源# 安装扩展源,方便课堂演示
# $ sudo yum install -y epel-release

2. Vim编辑器的使用

2.1 Linux编辑器-vim使用

        vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。我们课堂上,统一按照vim来进行讲解。

2.2 vim的基本概念

        vim三种基础的模式分别是普通模式(Normal mode)插入模式(Insert mode)底行模式(last line mode),各模式的功能区分如下:

        • 正常/普通/命令模式(Normal mode)

        控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 lastline mode

        • 插入模式(Insert mode)

        只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

        • 末行/底行模式(last line mode)

        文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。

        在命令模式下,*shift+:* 即可进入该模式。要查看你的所有模式:打开 vim,底行模式直接输入:help vim-modes(应该一共有12种模式:six BASIC modes和six ADDITIONAL modes.)

2.3 vim基本操作

2.3.1 模式切换

功能指令
进入vim(默认正常模式)vim test.c
正常模式→插入模式a 或 i 或 o
插入模式→正常模式Esc
正常模式→末行模式shift+;
末行模式退出/保存文件指令
保存w
保存并退出wq
不存强制退出q!

2.3.2 正常模式命令集

功能命令具体功能
正常→插入模式i

从光标当前位置开始输入文件;

a

从目前光标所在位置的下一个位置开始输入文字;

o

插入新的一行,从行首开始输入文字。

移动光标h\j\k\l

「h」「j」「k」「l」,分别控制光标左、下、上、右移一格。(光标移动可以带数字#[n])

G

移动到文章的最后

$

移动到光标所在行的“行尾”

^

移动到光标所在行的“行首”

w

光标跳到下个单词的开头(可带数字)

e

光标跳到下个单词的字尾(可带数字)

b

光标回到上个单词的开头(可带数字)

#l光标移到该行的第#个位置,如:5l,56l
gg

进入到文本开始

shift+g

进入文本末端

Ctrl+b

屏幕往“后”移动一页

Ctrl+f

屏幕往“前”移动一页

Ctrl+u屏幕往“后”移动半页
Ctrl+d

屏幕往“前”移动半页

删除/剪切x

每按一次,删除光标所在位置的一个字符

#x

例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符

X

大写的X,每按一次,删除光标所在位置的“前面”一个字符

#X例如,「20X」表示删除光标所在位置的“前面”20个字符
dd删除光标所在行
#dd

从光标所在行开始删除#行

复制yw

将光标所在之处到字尾的字符复制到缓冲区中。

#yw复制#个字符到缓冲区
yy复制光标所在行到缓冲区。
#yy例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
p

将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。(可带数字,粘贴n次)

替换模式r

替换光标所在处的字符。

R

替换光标所到之处的字符,直到按下「ESC」键为止。

更改

cw

更改光标所在处的字到字尾处

c#w例如,「c3w」表示更改3个字
查找shift+3=#选中单词
n逆向查找,N正向查找
 跳至指定的行Ctrl+g列出光标所在行的行号。
#G

例如,「15G」,表示移动光标至文章的第15行首。(也可使以小写模式的shift+g)  

大小写切换shift+~大小写切换

撤销上一次操作

u

如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。

Ctrl+r

撤销的恢复

2.3.3 末行模式命令集

功能命令具体功能
正常→末行模式Esc→:先Esc进入正常模式,shift+; 进入末行模式
列出行号set nu

输入「set nu」后,会在文件中的每一行前面列出行号。

取消行号set nonu取消行号

按行号跳转

#

「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

查找/关键字

先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。

保存文件w

在冒号后输入字母「w」就可以将文件保存起来

离开vim(在wq、w、q后面跟!可以强制执行。

q

按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。

wq

一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

命令行模式!在 ! 后面直接输入命令,可以在vim中执行命令行操作。
批量替换%s/src/dst/g将src字串替换为dst;s是substitute的缩写;%是指整个文件,不加%默认当前行;/g全局替换(一行内所有匹配项)不加 g 则只换每行的第一个 。
分屏操作vs new_src

分屏给new_src

Ctrl+ww切换分屏(正常模式下执行)

2.3.4 其他模式命令集(批量添加/删除)

1. 视图模式(批量添加/删除)

1. 正常模式→视图模式Ctrl+v
2. 移动光标,选中区域同正常模式
3.1 批量添加
视图模式→(特殊)插入模式shift+i=I
在光标所在行添加内容
按下Esc键退出,则在光标选中的所有区域添加相同内容
3.2 批量删除
按d删除选中区域内容

2. 替换模式

替换模式r

替换光标所在处的字符。

R

替换光标所到之处的字符,直到按下「ESC」键为止。(也可用小写的shift+r)

2.3.5 补充命令

        1. 打开时指定光标位置

# 打开文件并让光标跳转到15行
vim test.c +15

        2.执行上一次带#的操作

!v
#执行上一次vim test.c +15的操作,直接打开

3. 编译器gcc/g++

        编译流程的四个步骤:

                1. 预处理(进行宏替换/去注释/条件编译/头文件展开等)

                2. 编译(生成汇编)

                3. 汇编(生成机器可识别代码)

                4. 链接(生成可执行文件或库文件)

3.1 gcc编译

        gcc编译格式 

gcc [选项] 要编译的文件 [选项] [目标文件]

        单文件编译

# 两种格式都可以
gcc code.c -o codegcc -o code code.c

        多文件编译

gcc main.c code1.c code2.c -o code
# 将main.c code1.c code2.c编译生成一个code文件# 两种写法都可以
gcc -o code  main.c code1.c code2.c

3.1.1 预处理(进行宏替换)

        预处理功能主要包括宏定义,文件包含,条件编译,去注释等。

        预处理指令是以#号开头的代码行。

#实例:
gcc –E hello.c –o hello.i
# •选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
# •选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。

3.1.2 编译(生成汇编)

        • 在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。

#实例: 
gcc –S hello.i –o hello.s# 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。

3.1.3 汇编(生成机器可识别代码)

        • 汇编阶段是把编译阶段生成的“.s”文件转成目标文件

# 实例:
gcc –c hello.s –o hello.o
# •读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了# 补:不指定目标文件,会生成同名.o文件
gcc -c code.c

3.1.4 链接(生成可执行文件或库文件)

# 实例
gcc hello.o –o hello

3.2 动态链接和静态链接

        简单来讲:静态链接是将库中实现好的方法拷贝到我们的程序中执行。动态链接是找到库中方法的地址,跳转到库中执行方法,之后跳转回来。静态链接实际是拷贝,动态链接实际是寻址。

1. 静态链接

        实际开发中,程序由多个源文件(.c)组成,它们相互调用,存在依赖关系。每个 .c 文件都会独立编译成目标文件(.o),静态链接负责把这些 .o 文件“打包”成一个完整的可执行程序。(注意:1.打包的是编译好的二进制目标代码.o文件;2.按需打包,只提取使用了的函数所在的目标文件;3.静态库只有在链接的时候有用,一旦形成可执行程序,静态库可以不再需要)

        缺点

                1. 浪费空间:如果多个程序都用了同一个函数(如 printf),那么每个程序里都会有一份这个函数的完整代码副本,导致磁盘和内存中存在多份重复内容。

                2. 更新困难:一旦库代码有更新,所有依赖它的程序都必须重新编译链接才能生效。

        优点

                部署简单,运行快:因为可执行程序自成一体,无需外部依赖,直接就能运行。

2. 动态链接

        动态链接的出现解决了静态链接中提到问题。动态链接的基本思想是把程序按照模块拆分成各个相对独立部分,在程序运行时才将它们链接在一起形成一个完整的程序,而不是像静态链接一样把所有程序模块都打包,形成一个单独的可执行文件。(动态链接在编译阶段向对应位置写入需要执行的方法的地址,运行时根据地址跳转到动态库对应位置执行对应的方法)

        动态链接其实远比静态链接要常用得多。比如我们查看下hello 这个可执行程序依赖的动态库,会发现它就用到了一个c动态链接库

$ ldd hellolinux-vdso.so.1 => (0x00007fffeb1ab000)libc.so.6 => /lib64/libc.so.6 (0x00007ff776af5000)/lib64/ld-linux-x86-64.so.2 (0x00007ff776ec3000)# ldd 用来查看程序或者库文件所依赖的共享库列表。

3. 动静态链接对比:

        1. 动态库形成的可执行程序体积一定很小

        2. 可执行程序对静态库的依赖度小,而动态库不能缺失

        3. 程序运行,需要加载到内存,静态链接的,会在内存中出现大量的重复代码

        4. 动态链接,比较节省内存和磁盘资源。

4. 为什么要汇编生成.o文件

        动静态库的本质是打包起来的.o文件。所以在整个编译过程要进行汇编生成.o文件,然后使我的.o文件和动静态库中的.o文件链接生成可执行程序。

3.3 静态库和动态库

        库是一套方法或者数据集,为我们开发提供最基本的保证(基本接口,功能,加速我们二次开发)

        动静态库的本质是打包起来的.o文件。

        • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。静态库后缀名一般为“.a”

        • 动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。gcc hello.o –o hello

        • gcc默认生成的二进制程序,是动态链接的,这点可以通过file 命令验证。

# file可以查看文件是动态链接还是静态链接
$ file code
#code: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=e8625d13488f2780664671d6e3802e4c0e08abe3, not stripped
# dynamically linked (uses shared libs)
# 动态链接(使用共享库)

        补:一般我们的云服务器,C/C++的静态库并没有安装,可以采用如下方法安装

# Centos
# 安装C静态库
sudo yum install glibc-static# 安装C++静态库
sudo yum install libstdc++-static

3.4 条件编译用途,为什么C/C++编译时要转汇编

        1. 条件编译的用途

                1. 软件进行专业度,收费情况进行区分(业务),使用条件编译,可以进行代码动态裁剪

                2. 内核源代码也是采用条件编译进行代码裁剪

                3. 开发工具,应用软件。

        2. 为什么C/C++编译,要先变成汇编。

                没出现C之前:汇编语言 → 二进制

                出现了C之后:C语言 → 汇编语言 → 二进制(复用之前汇编转二进制,使得C只需要完成C转汇编,实现更简单)

3.5 gcc其他常用选项(了解)

选项功能
-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S编译到汇编语言不进行汇编和链接
-c编译到目标代码
-o文件输出到 文件
-static此选项对生成的文件采用静态链接
-g生成调试信息。GNU 调试器可利用该信息。
-shared此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-O0、-O1、

-O2、-O3

编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-w不生成任何警告信息。
-Wall生成所有警告信息。

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

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

相关文章

3DMAX自动材质开关插件AutoMaterial安装和使用方法

3DMAX自动材质开关AutoMaterial,是一个3dMax脚本插件,它根据材质编辑器中当前活动的材质自动将材质应用于3dMax中新创建的对象,也适用于您复制的没有材质的对象。它作为一个开关,可以绑定到按钮或菜单来打开和关闭它。该工具的创建…

Linux内核调优实战指南

内核调优通常通过修改内核运行时参数来实现,这些参数的配置文件是 Linux 系统中核心的性能调整点。 内核调优配置文件名称 /etc/sysctl.conf: 这是最传统和主要的内核参数配置文件。系统启动时或手动执行 sysctl -p 命令时会读取并应用其中的设置。/etc/sysctl.d/*.…

Java基础常见知识点

Java 中 和 equals() 的区别详解_java中与equals的区别及理解-CSDN博客https://blog.csdn.net/m0_64432106/article/details/142026852深入理解Java中方法的参数传递机制 - 悟小天 - 博客园https://www.cnblogs.com/sum-41/p/10799555.html浮点型精度是什么意思?为…

OD C卷 -【高效货运】

文章目录高效货运高效货运 货车的额定载货量为wt;货物A单件重量为wa,单件运费利润为pa;货物B单件重量wb,单件运费利润为pb;每次出车必须包含A、B货物,且单件货物都不可分割,总重量达到额定的载货量wt;每次出车能够获取…

手动解压并读取geo 文件 series_matrix_table_begin series_matrix_table_end之间的数据

手动解压并读取geo 文件 series_matrix_table_begin series_matrix_table_end之间的数据 1. 手动解压并读取文件内容 file_path <- “K:/download/geo/raw_data/GEO/GSE32967_series_matrix.txt.gz” 使用latin1编码读取文件所有行 con <- gzfile(file_path, “r”) all_…

主板硬件研发基础--DP/DP++

现在的主板大多数使用的是比DP功能更加强大的DP++。 DisplayPort++(DP++)是 DisplayPort 技术的增强版,旨在提升与多种视频接口的兼容性和连接性能。以下是关于它的详细介绍: 功能特性 多协议兼容:DP++ 接口不仅支持 DisplayPort 标准的信号传输,还可以通过内部的转换电…

科技行业新闻发布平台哪家好?多场景推广专业方案服务商推荐

面对海量得新闻发布平台和碎片化的传播场景&#xff0c;如何精准选择推广方案无疑是企业主面临的一大难题&#xff0c;对于技术迭代迅速的科技行业更是如此。针对复杂的市场环境&#xff0c;一些专业的新闻发布平台往往能够针对性地给出营销方案&#xff0c;并提供一定技术支持…

SystemVerilog 学习之SystemVerilog简介

SystemVerilog简介SystemVerilog是一种硬件描述和验证语言&#xff08;HDVL&#xff09;&#xff0c;由Accellera开发并于2005年成为IEEE标准&#xff08;IEEE 1800&#xff09;。它在传统Verilog基础上扩展了高级验证和设计功能&#xff0c;广泛应用于数字电路设计、验证及系统…

JavaWeb--day3--AjaxElement路由打包部署

&#xff08;以下内容全部来自上述课程及课件&#xff09; Ajax &#xff08;此章节纯粹演示&#xff0c;因服务器端url链接失效&#xff0c;所以无法实战&#xff09; 1. 同步与异步 同步&#xff1a; 浏览器页面在发送请求给服务器&#xff0c;在服务器处理请求的过程…

IMF GDP的bug

IMF GDP 数据底子是官方数字&#xff0c;基本是沿用官方的&#xff0c;虽然经过修订或估算&#xff0c;存在4大“bug”&#xff1a;1. 依赖官方上报&#xff0c;真实性不保证2. PPP GDP 虚高&#xff0c;居民实际消费力低很多ppp gdp高&#xff0c;甚至gdp高的地方&#xff0c;…

第2篇:数据持久化实战

在上一篇中&#xff0c;我们构建了一个基于内存存储的食谱助手。说实话&#xff0c;内存存储虽然简单&#xff0c;但有个致命问题&#xff1a;程序一重启&#xff0c;数据就全没了。 所以这篇我们要解决数据持久化的问题&#xff0c;将食谱助手从内存存储升级到SQLite数据库。 …

Java推荐系统与机器学习实战案例

基于Java的推荐系统与机器学习实例 以下是一些基于Java的推荐系统与机器学习实例的参考方向及开源项目,涵盖协同过滤、矩阵分解、深度学习等常见方法。内容根据实际项目和技术文档整理,可直接用于学习或开发。 协同过滤实现 用户-物品评分预测 使用Apache Mahout的基于用户…

AI生成内容检测的综合方法论与技术路径

一、AI内容检测技术的分类与原理当前AI内容检测技术主要分为四大类&#xff0c;每类都有其独特的原理和应用场景&#xff1a;1. 基于语言特征分析的检测方法这类方法通过挖掘人类写作与AI生成文本之间的统计学差异进行判断&#xff1a;1.1 词汇使用模式分析AI生成的文本在词汇选…

可可图片编辑 HarmonyOS(5)滤镜效果

可可图片编辑 HarmonyOS&#xff08;5&#xff09;滤镜效果 前言 可可图片编辑也实现了滤镜效果&#xff0c;主要是利用 Image组件的 colorFilter 属性实现。滤镜的关键属性 colorFilter colorFilter 的主要作用是给图像设置颜色滤镜效果。 其核心原理是使用一个 4x5 的颜色矩阵…

< JS事件循环系列【二】> 微任务深度解析:从本质到实战避坑

在上一篇关于 JS 事件循环的文章中&#xff0c;我们提到 “微任务优先级高于宏任务” 这一核心结论&#xff0c;但对于微任务本身的细节并未展开。作为事件循环中 “优先级最高的异步任务”&#xff0c;微任务的执行机制直接影响代码逻辑的正确性&#xff0c;比如Promise.then的…

STM32 单片机开发 - SPI 总线

一、SPI 总线概念SPI 总线 --- Serial Peripheral Interface&#xff0c;即串行外设接口SPI 是摩托罗拉公司设计的一款 串行、同步、全双工总线&#xff1b;SPI 总线是三线 / 四线制总线&#xff0c;分别是&#xff1a;SPI_SCK&#xff08;时钟线&#xff09;、S…

区域医院云HIS系统源码,云医院管理系统源码,云诊所源码

云HIS源码&#xff0c;云医院管理系统源码&#xff0c;云诊所源码&#xff0c;二级专科医院云HIS系统源代码&#xff0c;有演示云HIS&#xff0c;即云医院管理系统&#xff0c;是一种运用云计算、大数据、物联网等新兴信息技术的医疗信息化解决方案。它重新定义了传统的医院信息…

Java基础 9.11

1.第三代日期类前面两代日期类的不足分析JDK 1.0中包含了一个java.uti.Date类&#xff0c;但是它的大多数方法已经在JDK1.1引Calendar类之后被弃用了。而Calendar也存在问题是&#xff1a;可变性&#xff1a;像日期和时间这样的类应该是不可变的偏移性&#xff1a;Date中的年份…

JavaScript 数组过滤方法

在 JavaScript 编程中&#xff0c;数组是最常用的数据结构之一&#xff0c;而数组过滤则是处理数据集合的关键操作。filter() 方法提供了一种高效的方式来从数组中筛选出符合特定条件的元素&#xff0c;返回一个新的数组&#xff0c;而不改变原始数组。这种方法在处理对象数组时…

《sklearn机器学习——数据预处理》离散化

sklearn 数据预处理中的离散化&#xff08;Discretization&#xff09; 离散化是将连续型数值特征转换为离散区间&#xff08;分箱/bins&#xff09;的过程&#xff0c;常用于简化模型、增强鲁棒性、处理非线性关系或满足某些算法对离散输入的要求&#xff08;如朴素贝叶斯、决…