zhenlanghuo's Blog

zhenlanghuo's Blog

shell脚本 学习笔记
变量 定义变量 12my_name="zhenlanghuo" #变量名和等号之间不能有空格for file in `ls /etc` #用for语句给变量赋值 使用变量 12echo $your_name echo ${your_name} #加花括号可以帮助解释器识别变量的边界 参数的传递我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:**$n**。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 几个特殊字符: 字符...
Linux 常用命令操作
查看文件内容 cat 连接文件并打印到标准输出设备上,经常用来显示文件的内容 当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清显示的内容。因此一般用more等命令分屏显示。 123cat m1 在屏幕上显示文件ml的内容cat m1 m2 同时显示文件ml和m2的内容cat m1 m2 > file 将文件ml和m2合并后放入文件file中 more 基于vi编辑器文本过滤器,以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。 常用快捷键:H(获得帮助信息),Enter(向下翻滚一行...
AVL平衡二叉树的实现
普通的二叉查找树在插入有序的数据的时候会退化为链表,查找的时间复杂度退化为O(n)。而平衡二叉树在插入数据的时候一直保持二叉树的平衡,从而保证查找的时间复杂度维持在O(logn)。 平衡二叉树的定义一棵平衡二叉树是其每个结点的左子树和右子树的高度最多相差1的二叉查找树(空树的高度为-1)。 二叉树的高度——当前结点到叶子结点的最长路径 四种旋转的情况若平衡二叉树种某个结点的左子树和右子树的高度相差大于1,该树就是失衡了,该结点称为失衡点,就要通过旋转来保持二叉树的平衡。 一共分四种情况导致结点失衡: 在结点的左孩子的左子树中插入数据(LL) 在结点的左孩子的右子树中插入数据(L...
正、反向代理,负载均衡,URL重写
正向代理与反向代理 正向代理概念正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。 使用场景正向代理一般用于为在防火墙内的局域网客户端提供访问 Internet 的途径,如果不采用代理、用户的IP、端口号直接暴露在 Internet(尽管地址转换 NAT ),外部主机依然可以根据IP、端口号来开采主机安全漏洞,所以在企业网,一般都是采用代理服务器访问互联网(相比于千千万万的用户主机,...
分布式一致性算法 Raft
raft 算法学习笔记&个人理解 概述Raft 论文对 raft 的描述:“raft是一种为了管理复制日志的一致性算法”;在我的理解中,分布式系统通常都会对数据进行复制备份来达到容错的目的(因为数据会复制到集群中的不同机器中,当某一台服务器宕机后,可以通过请求别的服务器来获取相同的数据),因此保持复制数据的一致性非常重要,而raft就是一种可以用来保持复制数据的一致性算法。 一致性模块 Consensus Module 执行的就是raft算法,它保证拷贝到所有 server 上的每一条日志是一致的。State Machine 状态机对应我们的业务逻辑,日志作为状态机的输...
动态规划题集及题解
记录做过的的动态规划的题目不定期更新 最长递增子序列 面试常考算法题(九)-经典动态规划1-牛客网 [编程题]最长递增子序列-牛客网 题目对于一个数字序列,请设计一个复杂度为O(nlogn)的算法,返回该序列的最长上升子序列的长度,这里的子序列定义为这样一个序列U1,U2…,其中Ui < Ui+1,且A[Ui] < A[Ui+1]。给定一个数字序列A及序列的长度n,请返回最长上升子序列的长度。 测试样例[2,1,4,3,1,5,6],7返回:4 解题思路dp[i]记录长度为i的上升子序列的最后一个数中的最小值(可能有多个长度为i的上升子序列,我们只记录最后一个数最小...
IO中的同步异步、阻塞非阻塞
上一篇已经讲了同步异步和阻塞非阻塞各自的区别,这一篇来讲一下IO中的同步异步、阻塞非阻塞 UNIX中的5种IO模型 摘自:《UNIX网络编程 卷1》第6章 一个输入操作通常包括两个不同阶段:(1)等待数据准备好;(2)从内核向进程复制数据。 下面我们来看看不同的IO模型,这两个阶段是怎么进行的 阻塞式IO模型默认情况下,所有套接字都是阻塞的。 进程调用recvfrom,其系统调用直到数据报到达且被复制到应用进程的缓冲区中或者错误才返回。进程在从调用recvfrom开始到它返回的整段时间内是被阻塞的。recv成功返回后,应用进程开始处理数据报。 非阻塞式IO模型进程把一个套接字设...
同步异步、阻塞非阻塞的区别
最近看面经的时候看到说BIO、NIO、AIO的区别,查了下发现BIO是同步阻塞的、NIO是同步非阻塞的、AIO是异步非阻塞的,这时候我就懵逼了,同步还能非阻塞[尼克扬问号脸]?然后好好地查了一下同步异步的区别、阻塞非阻塞的区别和同步异步与阻塞非阻塞的区别。 同步与异步同步和异步关注的是消息通信机制 同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。一旦调用返回,就得到返回值。异步,就是调用在发出之后,这个调用就直接返回了,所以没有返回结果。被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用 如果把调用一个函数当做成完成一件事的角度看:同步,就是自己亲自去完...
哈希碰撞攻击
最近同学阿里面试的时候被问到什么是哈希碰撞攻击,然后今天巧合下看到这篇文章: PHP哈希表碰撞攻击原理,就决定做一下简单的记录 基本原理哈希表的原理是用数组来保存键值对,键值对存放的位置(下标)由键的哈希值决定,键的哈希值可以在参数时间内计算出来,这样哈希表插入、查找和删除的时间复杂度为O(1),但是这是理想的情况下,真实的情况是,键的哈希值存在冲突碰撞,也就是不同的键的哈希值可能相等,一个好的哈希函数应该是尽可能的减少碰撞。解决冲突碰撞的方法有分为两种:开放地址法和 链接法,这里不具体展开。哈希表一般都采用链接法来解决冲突碰撞,也就是用一个链表来将分配到同一个桶(键的哈希值...
Reids设计与实现(第三部分 多机数据库的实现)
《Redis设计与实现》一书的重要内容摘抄,方便回看复习 复制要点 复制功能分为同步和命令传播两个操作。 同步操作作用于将从服务器的数据库状态更新至组服务器当前所处的数据库状态。 命令传播操作则作用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出现不一致时,让主从服务器的数据库重新回到一致状态。 Redis 2.8 以前的复制功能不能高效地处理断线后重复制情况, 但 Redis 2.8 新添加的部分重同步功能可以解决这个问题。 部分重同步通过复制偏移量、复制积压缓冲区、服务器运行 ID 三个部分来实现。 在复制操作刚开始的时候, 从服务器会成为主服务器的客户端, 并通过...
avatar
zhenlanghuo
work hard, play hard