Linux下Shell脚本基础知识
主要参考视频:
这可能是B站讲的最好的Linux Shell脚本教程,3h打通Linux-shell全套教程,从入门到精通完整版_哔哩哔哩_bilibili
主要参考文档:
Shell 教程 | 菜鸟教程 (runoob.com)
Bash Shell教程 (yiibai.com)
先用视频入门,然后参考手册学习,之后实践总结。
认识Shell和Bash
计算机里,我们基本都会使用操作系统,对于开发人员来说,我们肯定需要控制操作系统做一些事情,但是有个问题,那就是出于安全性考虑我们用户层没法直接访问操纵系统的内核,这种情况下,就有人提出解决方案,那就是在内核操作上套一层“壳”,也就是Shell,然后提供给用户一些指令,用户层再通过指令去完成要干的活,这样,就避免了直接操作内核,保证了内核的安全性以及系统的稳定性。
Shell命令就是由此而来,Shell命令按照一定格式组成的文本就是Shell脚本。
那Bash是怎么回事呢?
有Shell命令,那肯定要有命令的解释器,也就是将输入的命令转换成实际操作系统内核要干的活,其中,Bash就是Shell命令的解释器。
有了一种解释器,肯定就有它的优点和缺点,必然就会出现其他种类的解释器,各有各的特点,各有各的适用场景,于是,市场上就出现了多种Bash。
事实上,不同的Bash对应的Shell也有些不同。
Linux中默认使用Bash,我们操作Linux就需要学习各种Bash Shell。
Linux操作系统中有不同类型的Shell。其中一些如下:
- Bourne Shell
- C shell
- Korn Shell
- GNU Bourne Shell
要想知道操作系统支持哪种Shell类型,可在终端中输入以下命令:
cat /etc/shells
要想知道bash在操作系统中的位置,可键入以下命令,将获得一个特定的位置:
which bash
如下:
显示的都是绝对路径。
Bash是Linux附带的标准Shell。它是当今最流行的开源Shell,并且具有在下一主题中阅读的各种生产功能。它也可用于Linux发行版,MacOS,Solaris 11和Windows 10。它通过许多改进为用户提供最佳体验。
Bash脚本
创建和执行
在计算机编程中,脚本是用于适当的运行时环境的一组命令,这些命令用于自动执行任务。
Bash Shell脚本是一个纯文本文件,其中包含一组通常在命令行中键入的各种命令。它用于在Linux文件系统上自动执行重复性任务。它可能包含一组命令或一个命令,或者可能包含命令式编程的标志,例如循环,函数,条件构造等。实际上,Bash脚本是用Bash编程语言编写的计算机程序。
如何创建和运行Bash脚本?
- 首先,使用
cd
命令进入保存脚本的目录;- (如果已有脚本则跳过,否则)使用
touch
命令创建零字节大小的脚本,脚本以.sh作为扩展名(经验证,不以.sh结尾也可以,事实上,linux中没有扩展名的概念,之所以常常写扩展名,是为了方便人为查看);touch file_name
- 打开文本,并输入bash脚本的shell命令;
- 使用chmod赋予该脚本以可执行的权限(这一步别忘了,要不文件没有可执行权限);
./file_name
来执行bash脚本(不在当前目录下就需要输入绝对路径或者相对路径);比如,创建一个脚本,并输入如下内容:
#! /bin/bash
echo Hello World!然后执行。
就会在终端打印出Hello World!
开头
每个基于Bash的Linux脚本都以以下行开头:
#!/bin/bash
这里
#!
称为shebang,该行的其余部分是解释器的路径,用于指定bash shell在操作系统中的位置。shebang的格式很重要,格式不正确会导致命令工作不正常。因此,在创建脚本时,要始终记住SheBang格式的这两点:
- 它应该始终在脚本的第一行。
- 在
#!
和解释器的路径之间,#
之前不应有任何空格。经测试,貌似有空格也可以,不过,还是应当遵循标准规范。
注意,单独的#是注释。
注意,linux中路径是以撇/来分隔的,在windows下是以捺\作为分隔的。
echo
echo是bash中常用的linux命令
echo
是Bash中的内置命令,用于通过传递参数来显示标准输出。它是用于将文本/字符串行打印到屏幕上的最广泛使用的命令。echo命令 – 输出字符串或提取后的变量值 – Linux命令大全(手册) (linuxcool.com)
单独的echo可以打印出空行。
比如:
显示结果定向至某个文件,也就是将显示结果写到某个文件里,其中>是重定向符号。
echo "It is a test" > myfile
关于引号
关于有无引号?
如果字符串是个整体,其实可以不用引号,shell也能识别为一个字符串。
但是,当字符串中有空格时,就有问题了,这是因为Bash使用空格来确定单独的项目。 这种情况下,引号就可以用于处理带有空格字符的文本和文件名。
关于单引号和双引号?
使用简单的文本和字符串时,我们使用单引号或双引号都不会有任何区别
但是,当涉及到变量引用时,就有区别了。
shell变量扩展仅适用于双引号。如果在单引号中定义变量,则不会将其视为变量。
下面通过一个例子来理解这一点:
变量
变量部分内容可参考:
Shell 变量 | 菜鸟教程 (runoob.com)
之所以不能有空格,是因为bash是通过空格作为分隔的。
对于Bash,不必在变量声明时定义变量的数据类型。Bash变量是无类型的,只需通过分配其值来键入变量名称,它会自动判断数据类型。
如果将数字值分配给变量,它将自动转为整数工作,如果将字符值分配给该变量,则它将转为字符串类型。
year=2012 comp_name=yiibai
使用
echo
命令,通过在名称之前加上美元($
)号来读取它们,例如:echo $year echo $name
Shell或UNIX系统中都有两种类型的变量。
- 系统定义的变量
- 用户定义的变量
系统定义的变量
是由LINUX操作系统本身创建和维护的预定义变量。它们的标准约定是通常以大写字母进行定义。因此,每当看到以大写字母定义的变量时,很可能它们就是系统定义的变量。要了解系统中这些变量的列表,请在命令行终端上键入命令
env或者
printenv
用户定义的变量
这些变量由用户创建和维护。通常,这些类型的变量以小写形式定义。但是不强制的,也可以将变量名称写成大写。如下简单示例:
变量的操作
通常对Bash中的变量执行两个操作,如下所示:
- 为变量设置值。
- 读取变量的值。
设置变量值有几种方式,其中最常见的方法是直接设置值。
参考:Shell 变量 | 菜鸟教程 (runoob.com)
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。
推荐给所有变量加上花括号,这是个好的编程习惯。
Bash检查识别每个变量后,它将用分配的值替换每个变量名。它解释/运行每一行代码,并针对脚本的每个编码行继续执行此过程。
注:Bash中的两种变量都可以在终端以及Bash脚本上使用
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
删除变量
使用 unset 命令可以删除变量。语法:
获取字符串长度
数组
参考:Shell 变量 | 菜鸟教程 (runoob.com)
Shell 数组 | 菜鸟教程 (runoob.com)
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)例如:
array_name=(value0 value1 value2 value3)注意,数组不需要指定大小。
传递参数
参考:Shell 传递参数 | 菜鸟教程 (runoob.com)
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为 $n,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。
例如可以使用 $1、$2 等来引用传递给脚本的参数,其中 $1 表示第一个参数,$2 表示第二个参数,依此类推。
另外,还有几个特殊字符用来处理参数:
命令替换
其实就是获取命令执行的结果作为最终的内容。
替换的经典形式是使用反引号,如下所示:
也可以通过将命令放在圆括号(以美元符号(
$
)开头)中来进行命令替换。如下:示例:
读取用户输入
读取Bash用户输入,需要使用内置的Bash命令
read
。它用于从用户处获取输入并分配给变量。它仅从Bash shell中读取一行。以下是read
命令的语法。read <variable_name>
以下是从Bash脚本读取用户输入的示例:
运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):
反引号,其实就是将expr命令执行的结果作为最终的结果值。
两点注意:
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,而是在 Esc 键下边的反引号。
更多直接参考
Shell 基本运算符 | 菜鸟教程 (runoob.com)
注意:注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。注意,这里面有四个空格,从方括号开始后面就有空格了。
比较新奇的一个字符串运算符
条件语句-if
注意:在 sh/bash 里,如果 else 分支没有语句执行,就不要写这个 else分支。
Shell 流程控制 | 菜鸟教程 (runoob.com)
以if开头,以fi结尾。
有if就要搭配then,最后分支的else可以不用。
条件放在方括号[……]里。我看两个参考文档里,有的说条件后要加分号,有的又没有加,比较混乱。参考下这篇:shell中的if语句 - 开始认识 - 博客园 (cnblogs.com)
再参考这篇:
Shell if else语句(详解版) (biancheng.net)
可知:
当then和if处于同一行时,分号;才是必须的。
双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令,它的效率很高,写法灵活,是企业运维中常用的运算命令。
注意:(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进行运算
选择语句-case
case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case ... esac 语法格式如下:
更多参考:
Shell 流程控制 | 菜鸟教程 (runoob.com)
循环语句
Shell 流程控制 | 菜鸟教程 (runoob.com)
for循环 while循环 until循环
for循环
shell三种 for循环方式_shell 循环100次-CSDN博客
参考:
Bash for循环 - Bash Shell教程 (yiibai.com)
注意,for-in中列表是以空格来分开每一项。
更多直接参考:
Shell 流程控制 | 菜鸟教程 (runoob.com)
函数
直接参考即可:
Bash函数 - Bash Shell教程 (yiibai.com)
文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:
补充
当Shell脚本运行时,它会先查找系统环境变量ENV,该变量指定了环境文件(加载顺序通常是/etc/profile、~/.bash_profile、~/.bashrc、/etc/bashrc等),在加载了上述环境变量文件后,Shell就开始执行Shell脚本中的内容。
Shell脚本是从上至下、从左至右依次执行每一行的命令及语句的,即执行完了一个命令后再执行下一个,如果在Shell脚本中遇到子脚本(即脚本嵌套)时,就会先执行子脚本的内容,完成后再返回父脚本继续执行父脚本内后续的命令及语句。
通常情况下,在执行Shell脚本时,会向系统内核请求启动一个新的进程,以便在该进程中执行脚本的命令及子Shell脚本。
exit 命令退出shell,判断上一个命令是否执行成功,可用 echo $? ,为0,表示执行成功,不为0表示失败。失败时,可以使用exit命令退出整个shell脚本的进程。
Shell中函数不调用就不会被执行。
shift,输入参数左移命令
Linux shell脚本中shift的用法说明_shell shift-CSDN博客
shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本) 。
Linux—shell中$(( ))、$( )、``与${ }的区别 - chengd - 博客园 (cnblogs.com)
dirname,获取路径的命令
Linux dirname命令教程:如何从给定的路径或文件名中提取目录(附实例用法详解和注意事项)-Linux入门自学网 (bashcommandnotfound.cn)
dirname命令是一个用于从给定的路径或文件名中提取目录部分的有用工具。
readlink命令
readlink命令 – 找出符号链接所指向的位置 – Linux命令大全(手册) (linuxcool.com)
readlink命令来自英文词组“read link”的拼写,中文译为“读取链接”,其功能是用于找出符号链接所指向的位置。
realpath,用于获取指定目录或文件的绝对路径。
Linux 命令:realpath 命令-CSDN博客
trap命令用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。
trap命令 – 指定采取的动作 – Linux命令大全(手册) (linuxcool.com)
相关文章:
Linux下Shell脚本基础知识
主要参考视频: 这可能是B站讲的最好的Linux Shell脚本教程,3h打通Linux-shell全套教程,从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档: Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…...
爬虫初学篇——看完这些还怕自己入门不了?
初次学习爬虫,知识笔记小分享 学scrapy框架可看:孤寒者博主的【Python爬虫必备—>Scrapy框架快速入门篇——上】 目录🌟 一、🍉基础知识二、🍉http协议:三、🍉解析网页(1) xpath的用…...
[数据集][目标检测]减速区域检测数据集VOC+YOLO格式1654张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1654 标注数量(xml文件个数):1654 标注数量(txt文件个数):1654 标注…...
OpenGL3.3_C++_Windows(8)
材质&&漫反射,光照贴图 使用struct为材质建立结构体,以便方便管理漫反射贴图是物体的颜色值(纹理)(通过 UV 坐标映射到渲染物体的表面),材质是物体的属性(物体对光的交互&a…...
GPU的工作原理
location: Beijing 1. why is GPU CPU的存储单元和计算单元的互通过慢直接促进了GPU的发展 先介绍一个概念:FLOPS(Floating Point Operations Per Second,浮点运算每秒)是一个衡量其执行浮点运算的能力,可以作为计算…...
Linux常⽤服务器构建-samba
目录 1. 介绍 2. 安装 3. 配置 3.1 创建存放共享⽂件的路径 3.2 创建samba账户 4 重启samba 5. 访问共享⽂件 5.1 mac下访问⽅式 5.2 windows下访问⽅式 1. 介绍 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的⼀个免费软件,能够完成在 windows 、 mac 操作系统…...
【Java】已解决java.lang.UnsupportedOperationException异常
文章目录 问题背景可能出错的原因错误代码示例正确代码示例注意事项 已解决java.lang.UnsupportedOperationException异常 在Java编程中,java.lang.UnsupportedOperationException是一个运行时异常,通常表示尝试执行一个不支持的操作。这种异常经常发生…...
在ubuntu中恢复误删除的文件
1、安装 TestDisk 在 Ubuntu 上,可以使用以下命令安装 TestDisk: sudo apt-get install testdisk2、查询你删除的文件所在那个分区 #查询分区 df -h #我这里是/dev/sda2 #也可以使用下面命令查看具体哪个分区 lsblk3、查询该分区是什么系统类型 sudo …...
Sklearn中逻辑回归建模
分类模型的评估 回归模型的评估方法,主要有均方误差MSE,R方得分等指标,在分类模型中,我们主要应用的是准确率这个评估指标,除此之外,常用的二分类模型的模型评估指标还有召回率(Recallÿ…...
【ARM】MDK出现报错error: A\L3903U的解决方法
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决MDK出现报错error: A\L3903U这样类型的报错 2、 问题场景 电脑或者软件因为意外情况导致崩溃,无法正常关闭,强制电脑重启之后,打开工程去编译出现下面的报错信息(…...
0018__字体的kerning是什么意思
泰山OFFICE技术讲座:字体的kerning是什么意思-CSDN博客 了解CSS属性font-kerning,font-smoothing,font-variant-CSDN博客...
LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
文章汇总 总体来看像是一种带权重的残差,但解决的如何高效问题的事情。 相比模型的全微调,作者提出固定预训练模型参数不变,在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数,用以模拟参数的变化量。 模型架构 h W 0 x △…...
cmake、make、makefile、ninga的关系
CMake是一种跨平台的构建系统,它用来管理软件的编译过程。CMake可以生成本地平台特定的构建文件,例如Makefile或者Microsoft Visual Studio项目文件,以便开发人员更轻松地在不同的平台上构建他们的项目。它的主要功能是配置和生成构建脚本&am…...
StarRocks详解
什么是StarRocks? StarRocks是新一代极速全场景MPP数据库(高并发数据库)。 StarRocks充分吸收关系型OLAP数据库和分布式存储系统在大数据时代的优秀研究成果。 1.可以在Spark和Flink里面处理数据,然后将处理完的数据写到StarRo…...
【C语言】进程间通信之管道pipe
进程间通信之管道pipe 一、进程间通信管道pipe()管道的读写行为 最后 一、进程间通信 管道pipe() 管道pipe也称为匿名管道,只有在有血缘关系的进程间进行通信。管道的本质就是一块内核缓冲区。 进程间通过管道的一端写,通过管道的另一端读。管道的读端…...
03.VisionMaster 机器视觉 位置修正 工具
VisionMaster 机器视觉 位置修正 工具 官方解释:位置修正是一个辅助定位、修正目标运动偏移、辅助精准定位的工具。可以根据模板匹配结果中的匹配点和匹配框角度建立位置偏移的基准,然后再根据特征匹配结果中的运行点和基准点的相对位置偏移实现ROI检测…...
Oracle 是否扼杀了开源 MySQL
Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家,曾在MySQL公司担任性能工程师。大约15年前,当甲骨文收购Sun公司并随后收购MySQL时,有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…...
机器学习归一化特征编码
特征缩放 因为对于大多数的机器学习算法和优化算法来说,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1——10,第二个特征的取值范围为1——10000。在梯度…...
抛光粉尘可爆性检测 打磨粉尘喷砂粉尘爆炸下限测试
抛光粉尘可爆性检测 抛光粉尘的可爆性检测是一种安全性能测试,用于确定加工过程中产生的粉尘在特定条件下是否会爆炸,从而对生产安全构成威胁。如果粉尘具有可爆性,那么在生产环境中就需要采取相应的防爆措施。粉尘爆炸的条件通常包括粉尘本身…...
python14 字典类型
字典类型 键值对方式,可变数据类型,所以有增删改功能 声明方式1 {} 大括号,示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …...
深入了解 .url文件中的 Prop3属性
在使用 Windows 操作系统时,我们经常会遇到以 .url 结尾的文件,它们通常被用来快速访问互联网上的特定网页。这些文件虽然看起来简单,但其中包含的 Prop3 属性却有其特殊的作用和意义。 1. Prop3 是什么? 在 .url 文件中&#x…...
vue3+vite:动态引入静态图片资源
目录 第一章 前言 第二章 vue2与vue3动态引入静态图片资源 2.1 vue2 webpack动态引入静态图片资源 2.1.1 了解 2.1.2 vue2项目动态引入静态图片资源 2.2 vue3 vite动态引入静态图片资源 2.2.1 了解 2.2.2 require vs import了解 2.2.3 vue3vite 项目动态引入静态图片…...
【K8s】专题五(3):Kubernetes 配置之 ConfigMap 与 Secret 异同
以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、相同点 二、不同点 一、相同点 功能作用:ConfigMap 与 Secret 都用于存储…...
用Python分析《三国演义》中的人物关系网
用Python分析《三国演义》中的人物关系网 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计构建人物关系网完整代码 三国演义 《三国演义》是中国古代四大名著之一,它以东汉末年到晋朝统一之间的历史为背景,讲述了魏、蜀、吴三国之间…...
k8s上使用ConfigMap 和 Secret
使用ConfigMap 和 Secret 实验目标: 学习如何使用 ConfigMap 和 Secret 来管理应用的配置。 实验步骤: 创建一个 ConfigMap 存储应用配置。创建一个 Secret 存储敏感信息(如数据库密码)。在 Pod 中挂载 ConfigMap 和 Secret&am…...
hexo实战:(二)个人独立博客优化合集
前言 上次介绍了使用 HexoGitHub Pages,零成本搭建一个专属自己的独立博客网站。我觉得那篇文章是没有入门门槛的,不管你是什么行业,只要想打造个人 IP,又不太想受博客平台约束,那么读完后动手操作一下也能轻松完成。…...
PostgreSQL的pg_relation_filepath函数
PostgreSQL的pg_relation_filepath函数 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777在 PostgreSQL 中&…...
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
文章目录 一、vue中使用el-table的typeindex有时不显示序号Table 表格显示索引自定义索引报错信息解决方案 二、vue中Missing required prop: “value” 报错报错原因解决方案 三、el-table的索引值index在翻页的时候可以连续显示方法一方法二 四、vue3中Element Plus全局组件配…...
安装golang
官网:All releases - The Go Programming Language (google.cn) 下载对应的版本安装即可...
Kubernetes面试整理-Kubernetes的主要组件有哪些?
Kubernetes 的主要组件分为控制平面组件和节点组件。以下是每个组件的详细介绍: 控制平面组件 1. API 服务器(kube-apiserver): ● 是 Kubernetes 控制平面的前端,接收、验证并处理所有的 API 请求。 ● 提供集群的管理接口,所有的集群操作都是通过 API 服务器进行的。...
网站建设维护培训班/网站关键词如何快速上首页
相信大家都遇到过这样的问题,有手机浏览器的问题导致服务端SESSION读取不正常,目前在项目中的解决方法是采取H5手机本地存储唯一KEY解决的 代码片段 //定义json格式字符串 var userData {name: "sankyu Name",account:"sankyu",lev…...
营销4p/南宁百度seo
Java字符串对象和常量池的总结 字符串对象 new 当执行String str1 new String("123");时,虚拟机会创建几个对象呢,答案是两个。 当一个字符串对象被new出来的时候,有两种情况: 当字符串常量池中已经有这个对象时&…...
手机网站开发注意的问题/竞价是什么工作
项目在debug环境下运行没有问题,在混淆打包之后却发现了闪退,无奈只能打开Log日志打印毛病~ 程序打印空指针异常,定位到空指针异常的地方~ 问题直指javaBean,于是我检查了我参考网上关于fastjson混淆的方法如下图 感觉没毛病啊…...
清远做网站的公司/免费推广软件工具
题目链接 题目大意 给了n,m,k分别代表有几只猫,同样的一套动作要做m次,这套动作有k个 有n只猫,给每只猫放食物: g i 代表给第i只猫加一块食物 e i 代表第i只猫吃完自己的所有食物 s i j 代表第i只猫,与第j只猫的食物互换 问这一…...
外贸做网站要多久做好/俄罗斯搜索引擎yandex推广
原文:redis 系列26 Cluster高可用 (1)一.概述 Redis集群提供了分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。在大数据量方面的高可用方案,cluster集群比Sentinel有优势。但Redis集群并不支持处理多个keys的命令,因…...
科讯cms怎么做网站地图/关键词优化排名哪家好
目录前言第一种解法:先排序再找第二种解法:线性布局总结前言 这题太简单了,就是从数组里找出三个数乘积最大项目网址:https://leetcode-cn.com/problems/maximum-product-of-three-numbers/ 第一种解法:先排序再找 …...