比如从整数数组arr中,查找有没有整数num。
应用:假设一个乱序数组,需要查找一个元素是否在该数组中,这时需要用到顺序查找,也就是遍历数组。
一般情况下我们会写下如下代码:
int Sequential_Search(int *a,int n,int key)
{
//数组从1开始
int i
for(int i=1i<=ni++)
{
if(a[i]==key)
return i
}
return 0//查找失败
}
有的数据结构书上,会运用哨兵元素,改成这样的代码:
int Sequential_Search2(int *a int n,int key)
{
int i=0
a[0]=key//哨兵
i=n
while(a[i]!=key)
{
i--
}
return i//返回0就是查找失败
}
int array[] = {1,2}只定义了两个元素,而这里array[2] = 3所以奔溃,数组一旦定义申请了内存大小,就不允许改变,除过使用动态数组。哨兵值主要用来做遍历,比如STL中的vector,end返回指向最后一个值的下一个内存地址,这样通过测试是否指向该指针,就可以判断是否遍历结束,尤其在给函数传一个数组指针时候,这时候sizeof只能得到指针长度,得不到数组的长度,利用哨兵值,可以很容易判断长度
Sentinel(哨兵)进程的作用:
1.监控(Monitoring): sentinel会不断地检查你的Master和Slave是否运作正常
2.提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知
3.自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移 *** 作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。
主观下线(Subjectively Down, 简称 SDOWN)指的是单个 Sentinel 实例对服务器做出的下线判断
客观下线 (Objectively Down, 简称 ODOWN)指的是多个 Sentinel 实例在对同一个服务器做出 SDOWN 判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的服务器下线判断。(一个 Sentinel 可以通过向另一个 Sentinel 发送 SENTINEL is-master-down-by-addr 命令来询问对方是否认为给定的服务器已下线。)
https://www.cnblogs.com/JJY-/articles/12066861.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)