shell语法概论终端可以看做逐条执行的shell脚本,Linux默认使用bash,脚本文件第一行必须为
12#! /bin/bash
可通过两种方式执行shell脚本
解释器执行:bash xxx.sh
作为可执行文件执行
添加执行权限chmod +x xxx.sh
执行./xxx.sh
注释单行注释:类似python,用#注释
多行注释:
1234:<<EOF...EOF
其中EOF可替换成任意字符串,例如abc
变量定义变量
定义不需要$,而且=两边不能有空格。字符串可用单引号、双引号或不用引号描述,例如下边三种变量声明都是正确的。
1234name1='abc'name2="abc"name3=abc
引用变量
需要用$,可用{}限定变量名边界,实现字符串与变量混合表示
12echo ${name1}defg # 输出abcdefg
只读变量
声明前加上readonly或declare -r
123readonly name1declare -r name2
删除变 ...
tmux 和 vimtmuxtmux 优势
不需要本地编译器,只需要终端编译器
不用担心断网,自动恢复现场
分屏
结构:tmux 允许有多个 session,一个 session 允许有多个 window,一个 window 允许有多个 pane
修饰键:ctrl a
通常修饰键的使用规则是,按下并释放后,再按其它键,而不是同时按下。
键盘操作
操作
快捷键
说明
新建 session
tmux
在终端中输入,不能在 tmux 中嵌套
左右分屏
修饰键 %
把当前 pane 拆分成左右两部分
上下分屏
修饰键 "
把当前 pane 拆分成上下两部分
关闭当前 pane
ctrl d
如果没有 pane,则关闭 window;如果没有 window,则关闭 session
选择相邻 pane
修饰键 方向键
选择界面汇中相邻的 pane
调整分割线
修饰键 方向键(同时按下)
调整 pane 分割线位置
全屏
修饰键 z
将当前 pane 全屏/取消全屏
挂起 session
修饰键 d
将当前 session 移至后台
...
Linux
未读常用命令总结1. 命令行常用快捷键查找
Ctrl + r:在命令行中查找之前输入过的命令,回车直接执行,可以通过多次按 Ctrl + r 继续向前查找。
移动
Ctrl + a:光标移动到行头
Ctrl + e:光标移动到行尾
Alt + f:移动光标到单词的末尾,再次按移动到后一个单词的末尾(以单词为单位移动)
Alt + b:移动光标到单词的开头,再次按移动到前一个单词的开头(以单词为单位移动)
删除
Ctrl + u:删除当前光标位置之前的命令
Ctrl + k:删除当前光标位置之后的命令
Alt + d:删除后边的一个单词
Alt + Backspace:删除前边的一个单词
Ctrl + y:删除之后的命令可以通过 Ctrl + y 找回
其他
Ctrl + c:终止当前输入,切换到下一行
Ctrl + Insert:鼠标选中
Tab:命令智能补全
Up、Down:上下方向键切换历史命令
参考链接:
https://www.cnblogs.com/cocowool/p/move-cursor-quick-in-bash.html
2. Linux 常用命令
ls:查 ...
Linux
未读管道、环境变量及其常用命令1. 管道 |管道简介管道可以连接多条命令,并将前一个命令的标准输出 stdout 作为下一个命令的标准输入 stdin。当我们可以把一个任务分解成多条命令的时候,管道操作非常常用。
注意:
管道命令仅处理标准输出 stdout,忽略错误 stderr
管道右边的命令必须能够接收标准输入 stdin,才能将当前命令的标准输出传给它。
管道命令与文件重定向类似,最主要的区别:
文件重定向左边是命令,右边是文件,将左边命令的标准输出输出到文件中。
管道左右两遍都是命令,且左边要有 stdout 右边要能够接收 stdout。
管道可以接多条命令,ps -aux | grep "java",而文件重定向将左边一条命令的输出重定向到指定的文件。
示例1、统计当前目录下所有 python 文件总行数
12find . -name "*.py" | xargs cat | wc -l
find:查找当前目录下所有后缀名是 .py 的文件
xargs:将 find 的输出结果作为参数传给 cat 命令,即查看这些 .py ...
GitGit 简介Git 是一个版本控制工具,可以记录我们每次提交到 Git 中的版本,便于版本控制,以及还有一个重要的功能就是协作开发。
Git 的版本控制是基于树结构的,开始状态只有根节点(空节点),之后每提交一个版本就会在根节点下添加一个节点,同时 HEAD 指针会指向这个节点。默认是在 master 分支上操作,可以创建其他分支多人协作开发,比如 dev 分支,在 dev 分支上开发完成之后再合并到 master 分支上。
Git 命令1. Git 配置配置全局用户名和邮箱用于唯一标识一个用户
123git config --global user.name tonngwgit config --global user.email xxx@qq.com
配置的信息会存在家目录下 ~/.gitconfig 文件中不使用 --global 的话则当前信息只在此项目中生效
2. 快速开始首先创建一个项目文件夹,比如 project,想让 git 管理这个文件夹里的所有内容。
第一步:git init
进入 project 文件夹,初始化 git 仓库 git init
ls -a ...
🔺设计模式
创建型设计模式(5种)1. Simple Factory(简单工厂)简单工厂模式属创建型模式,但不属于23种设计模式之一。
定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152/* *简单工厂模式 */public class SimpleFactory { public static void main(String[] args) { Product productA = Factory.createProduct("A"); productA.info(); Product productB ...
嵌入式原理振荡周期、状态周期、机器周期、指令周期的关系什么是嵌入式关键字: 受限受限的设备 资源受限 成本受限 性能受限
嵌入式系统有什么CPU运算器,控制器
内存寄存器1.累加器 A也叫 ACC。用作累加(加减乘除都可以变化为加法)
2.寄存器 B作为执行乘法和除法操作而设置的
3.特殊寄存器(如 P1.0,p0.1 等)4.PSW(*)
CY(PSW.7):进位标志位
AC(PSW.6):辅助进位标志位,当低四位向高四位进位或借位时,AC 置为 1
F0 (PSW.5): 标志位
RS1、RS0:用于选择工作寄存区
OV(PSW.2) : 溢出标志位,溢出则置 0
PSW.1 位:该位是保留位
P(PSW.0):奇偶标志位:奇偶标志位对串行口通讯中的数据传输有重要的意义,常用奇偶检验的方法来检验数据传输的可靠性
程序状态寄存器 PSW 的格式
注意:(ODO).5 =>D5 考试中遇到要能分辨
D7<—————————————————–D0
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
OV
-——
P
工 ...
算法思路希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成多个组。所有距离为的记录分在同一组内,并对每一组内的记录进行直接插入排序。然后,取重复上述分组和排序的工作。当到达=1 时,所有记录在统一组内排好序。
图解
算法特性希尔排序的特性总结:希尔排序是对直接插入排序的优化。直接插入排序的特定就是数据越有序,速度越快。
当 gap > 1 时都是预排序,目的是让数组更接近于有序。当 gap == 1 时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
时间复杂度:希尔排序的时间复杂度不好计算,因为 gap 的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定: 有学者通过大量的试验统计,得出结果为:O(n1.25) - O(1.6*n1.25)
空间复杂度:O(1)
稳定性:不相邻的元素也会进行位置交换,是不稳定。
算法实现C++123456789101112131415161718192021222324252627282 ...
算法思路堆排序(heap sort)是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”实现堆排序。
输入数组并建立小顶堆,此时最小元素位于堆顶。
不断执行出堆操作,依次记录出堆元素,即可得到从小到大排序的序列。
以上方法虽然可行,但需要借助一个额外数组来保存弹出的元素,比较浪费空间。在实际中,我们通常使用一种更加优雅的实现方式。
算法流程设数组的长度为 n ,堆排序的流程如下图所示。
输入数组并建立大顶堆。完成后,最大元素位于堆顶。
将堆顶元素(第一个元素)与堆底元素(最后一个元素)交换。完成交换后,堆的长度减 1 ,已排序元素数量加 1 。
从堆顶元素开始,从顶到底执行堆化操作(sift down)。完成堆化后,堆的性质得到修复。
循环执行第 2. 步和第 3. 步。循环 n−1 轮后,即可完成数组排序。
算法特性
时间复杂度为 O(nlogn)、非自适应排序:建堆操作使用 O(n) 时间。从堆中提取最大元素的时间复杂度为 O(logn) ,共循环 n−1 轮。
空间复杂度为 O(1)、原地排序:几个指针变量使用 O(1) 空间 ...
算法思路归并排序(merge sort)是一种基于分治策略的排序算法,包含下图所示的“划分”和“合并”阶段。1.划分阶段:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题。2.合并阶段:当子数组长度为 1 时终止划分,开始合并,持续地将左右两个较短的有序数组合并为一个较长的有序数组,直至结束。
“划分阶段”从顶至底递归地将数组从中点切分为两个子数组。
计算数组中点 mid ,递归划分左子数组(区间 [left, mid] )和右子数组(区间 [mid + 1, right] )。
递归执行步骤 1. ,直至子数组区间长度为 1 时终止。
“合并阶段”从底至顶地将左子数组和右子数组合并为一个有序数组。需要注意的是,从长度为 1 的子数组开始合并,合并阶段中的每个子数组都是有序的。
归并排序与二叉树后序遍历的递归顺序是一致的。
后序遍历:先递归左子树,再递归右子树,最后处理根节点。
归并排序:先递归左子数组,再递归右子数组,最后处理合并。
动画演示
算法特性
时间复杂度为 O(nlogn)、非自适应排序:划分产生高度为 logn 的递归树,每层合并的总 ...