kmp算法一句话概括就是:
主串指针位置不动。
模式串指针回退到该最长前后缀的前缀后面。
匹配了abc,最长前后缀长度为0,模式串回退到0,选A
?
?
$$
- 这个符号代表当前shell进程的PID(进程ID)。它对于编写脚本时,需要基于当前shell进程ID进行某些操作时非常有用。
$?
- 这个符号代表上一个命令的退出状态。在Unix和类Unix系统中,命令执行成功通常返回0,非0值表示出现了某种错误或异常情况。因此,
$?
经常用于检查上一个命令是否成功执行。$*
- 这个符号代表所有传递给脚本或函数的参数列表,但是作为一个单一的字符串。这意味着,如果传递给脚本的参数是
"arg1" "arg2" "arg3"
,则$*
的值将类似于"arg1 arg2 arg3"
(注意,这取决于IFS
(内部字段分隔符)和是否对参数进行了双引号引用)。然而,在一些shell(如bash)中,当被双引号包围时("$*"
),它会将所有参数视为一个整体,并以第一个IFS
字符(通常是空格)作为分隔符来展开。$#
- 这个符号代表传递给脚本或函数的参数个数。这对于根据参数数量进行条件判断非常有用。
结构型模式有
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
静态重定位
地址变换通常是在装入时一次完成的:这是正确的。静态重定位发生在程序编译链接阶段,将程序中的符号地址转换为实际的物理地址。在程序装入内存时,这些地址变换就已经完成,并且在程序运行期间不会改变。
作业一旦进入内存,整个运行期间就不能再申请内存空间:这也是正确的。由于静态重定位在程序装入内存时就确定了所有地址,并且这些地址在程序运行期间不会改变,因此程序在运行期间无法再申请额外的内存空间。
动态重定位
程序在内存中可以发生移动:这是正确的。动态重定位允许程序在运行时根据需要调整其内存地址空间中的部分内容。这意味着程序在内存中的位置不是固定的,可以根据需要进行移动或重新定位。
虽然装入内存后的所有地址均为相对地址,但是这种方式不需要重定位寄存器的支持:这是不正确的。动态重定位确实使用相对地址(逻辑地址),但这些地址在程序执行时需要通过某种机制(如重定位寄存器)转换为实际的物理地址。重定位寄存器存储了当前程序或进程在内存中的基地址,用于动态地调整程序中指令的地址。
以上均是