
数据结构与算法
不积跬步无以至千里,不积小流无以成江海。数据结构与算法在于日积月累,想吃饭一样学习算法。
志波同学
做一个有担当的程序猿,为互联网贡献自己的一份力量
展开
-
Java编程:API接口防篡改、签名、验签原理
定义在客户端与服务端请求交互的过程中,请求的数据容易被拦截并篡改,比如在支付场景中,请求支付金额为 10 元,被拦截后篡改为 100 元,由于没有防篡改校验,导致多支付了金钱,造成了用户损失。因此我们在接口设计时必须考虑防篡改校验,加签、验签就是用来解决这个问题的。划重点,敲黑板:加签、验签是用来解决防篡改问题的。签名主要包含摘要和非对称加密两部分内容,首先对需要签名的数据做摘要(类似于常见的...原创 2019-08-02 16:17:43 · 14335 阅读 · 7 评论 -
负载均衡算法--最小连接数法(Least Connections)
接上一篇博文:负载均衡算法–源地址哈希法(Hash)。最小连接数法是根据服务器当前的连接情况进行负载均衡的,当请求到来时,会选取当前连接数最少的一台服务器来处理请求。由此也可以延伸出,根据服务器 CPU 占用最少,根据单位时间内处理请求的效率高低等进行服务器选择。最小连接数法只是动态分配服务器的一种算法,通过各种维度的参数计算,可以找到适合不同场景的更均衡的动态分配服务器的方案。算法描述假设...原创 2019-05-17 11:43:18 · 20198 阅读 · 2 评论 -
负载均衡算法--源地址哈希法(Hash)
接上一篇博文:负载均衡算法–平滑加权轮询法(Smooth Weight Round Robin)。顾名思义,该算法是根据请求来源的地址求哈希值获取服务器的。算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn-1},算法可以描述为:1、通过指定的哈希函数,计算请求来源的地址的哈希值2、对哈希值进行求余,底数为 N3、将余数作为索引值,从 S 中获取对应的服务器;假...原创 2019-05-17 10:45:14 · 13771 阅读 · 1 评论 -
负载均衡算法--平滑加权轮询法(Smooth Weight Round Robin)
接上一篇博文:负载均衡算法–加权轮询法(Weight Round Robin),在加权轮询算法中我们讲到“从宏观的角度讲,权重高的服务器被访问的次数高一些,近似均衡;微观的角度讲,权重高的服务器会被连续访问到,看起来没有那么均衡。”,为了更好的解决均衡的问题,nginx 的作者提出了均衡加权轮询算法。算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},默认权重为 W ...原创 2019-05-16 22:11:42 · 6859 阅读 · 0 评论 -
负载均衡算法--加权随机法(Weight Random)
接上一篇博文:负载均衡算法–随机法(Random),文本讲解加权随机算法。算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},默认权重为 W = {W0, W1, W2, …, Wn},权重之和为 weightSum, 服务器列表为 serverList,算法可以描述为:1、初始化 serverList,将 W0 个 S0 加入至serverList,将 W1 个 ...原创 2019-05-16 20:52:32 · 8457 阅读 · 2 评论 -
负载均衡算法--随机法(Random)
接上一篇博文:负载均衡算法–加权轮询法(Weight Round Robin),文本讲解随机算法。算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},算法可以描述为:1、通过随机函数生成 0 到 N 之间的任意整理,将该数字作为索引,从 S 中获取对应的服务器;假定我们现在有如下四台服务器:服务器地址权重192.168.1.11192...原创 2019-05-16 20:34:16 · 5687 阅读 · 0 评论 -
负载均衡算法--加权轮询法(Weight Round Robin)
接上一篇博文:负载均衡算法–轮询法(Round Robin),文本讲解加权轮询算法算法描述假设有 N 台服务器 S = {S0, S1, S2, …, Sn},默认权重为 W = {W0, W1, W2, …, Wn},服务器列表为 serverList,算法可以描述为:1、初始化 serverList,将 W0 个 S0 加入至serverList,将 W1 个 S1 加入至serverL...原创 2019-05-16 17:57:46 · 8014 阅读 · 5 评论 -
负载均衡算法--轮询法(Round Robin)
在分布式系统中,为了实现系统的高性能、高并发、高可用,在构架中都会进行负载均衡设计,它是分布式系统的核心和中枢,负载均衡的好坏直接影响着整个系统的性能。负载均衡分为软件均衡和硬件均衡两类,比如apache、nginx、dubbo 等属于软件负载均衡,F5属于硬件负载均衡,当然他们都会使用到负载均衡算法。常见的负载均衡算法包含:1、轮询法(Round Robin)2、加权轮询法(Weight ...原创 2019-05-16 16:58:46 · 42617 阅读 · 2 评论 -
算法:MCS锁的原理及实现
一、背景1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台计算机由多个CPU组成,并共享内存和其他资源,所有的CPU都可以平等地访问内存、I/O和外部中断。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。操作系统将任务队列对称地分布于多个CPU之上,从而极大地...原创 2018-11-08 11:11:42 · 2936 阅读 · 3 评论 -
算法:CLH锁的原理及实现
一、背景1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台计算机由多个CPU组成,并共享内存和其他资源,所有的CPU都可以平等地访问内存、I/O和外部中断。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。操作系统将任务队列对称地分布于多个CPU之上,从而极大地...原创 2018-11-07 19:17:41 · 16785 阅读 · 13 评论 -
Java编程:10进制数、62进制数进行相互转换
场景:要求随机生成长度较短的用户名,保证用户名唯一,同时保证用户名不易被推测出。 解决思路:按序生成唯一序列号,通过算法将序列号进行混淆,之后将其转化为 62 进制的 11 位字符串。通过以上的策略可以保证生成的用户名唯一,通过混淆算法使用户名不易被推测出,并且最大可以支持 2^62 - 1 个用户名。 以下代码是将10进制、62进制互转的方法,后续会写一篇关于混淆算法的文章。文章仅代表个人观...原创 2018-05-21 17:41:47 · 9032 阅读 · 1 评论 -
Java编程:浅析来自 Twitter 的分布式 ID 生成算法 Snowflake
浅析来自 Twitter 分布式 ID 生成算法 snowflake。如有不正之处,欢迎批评指正。原创 2018-05-17 22:57:58 · 1012 阅读 · 0 评论 -
Java编程:随机生成数字串
介绍两种随机生成数字串的方法,该方法生成的随机串,小概率情况下会产生重复值,因此该方法只可用于生成验证码,不可以用于生成数字串类型的主键。如有不正之处,欢迎批评指正。方法一:效率高,但是最大可以生成 19 位数字串 /** * 随机生产 factor 位的数字,最大不超过 19位,因为long的最大值为19位 * @param factor * @ret...原创 2018-05-12 22:32:21 · 8254 阅读 · 0 评论