zhenlanghuo's Blog

zhenlanghuo's Blog

正、反向代理,负载均衡,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 三个部分来实现。 在复制操作刚开始的时候, 从服务器会成为主服务器的客户端, 并通过...
Redis设计与实现(第二部分 单机数据库的实现)
《Redis设计与实现》一书的重要内容摘抄,方便回看复习 1.数据库要点 Redis 服务器的所有数据库都保存在 redisServer.db 数组中, 而数据库的数量则由 redisServer.dbnum 属性保存。 客户端通过修改目标数据库指针, 让它指向 redisServer.db 数组中的不同元素来切换不同的数据库。 数据库主要由 dict 和 expires 两个字典构成, 其中 dict 字典负责保存键值对, 而 expires 字典则负责保存键的过期时间。 因为数据库由字典构成, 所以对数据库的操作都是建立在字典操作之上的。 数据库的键总是一个字符串对象, 而值则...
Redis设计与实现(第一部分 数据结构与对象)
《Redis设计与实现》一书的重要内容摘抄,方便回看复习 1.简单动态字符串要点 Rredis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态字符串)作为字符串表示。 比起C字符串,SDS具有以下优点: 1) 常数复杂度获取字符串长度(len属性保存长度) 2) 杜绝缓冲区溢出(修改时对空间进行检查) 3) 减少修改字符串长度时所需的内存重分配次数(空间预分配、惰性空间释放) 4) 二进制安全(可以保存任意格式的二进制数据) 5) 兼容部分C字符串函数 数据结构 12345678910111213struc...
Storm总结
核心概念 组件 概念 Topology 一个实时计算应用程序逻辑上被封装在Topology对象中,类似Hadoop中的作业。与作业不同的是,Topology会一直运行直到显式地杀死它 Nimbus 负责资源分配和任务调度,类似Hadoop的JobTracker Supervisor 负责接收Nimbus分配的任务,启动和停止属于自己管理的Worker进程,类似Hadoop的TaskTracker Worker 运行具体处理组件逻辑的进程 Executor Storm 0.8之后,Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的...
avatar
zhenlanghuo
work hard, play hard