常用4种限流算法介绍及比较

1、计数器(固定窗口)算法计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。此算法在单机还是分布式环境下实现都非常简单,使用redis的incr原子自增性和线程安全即可轻松实现。2、滑动窗口算法滑动窗口算法是将时间周期分为N个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期。如下图,假设时间周期为1min,将1min再分为2个小周期,统计每个小周期的访问数量,则可以看到,第一个时间周期内,访问数量为75,第二个时间周期内,访问数量为100,超过100的访问则被限流掉了 Read More

想得多,睡得少之生活、工与学习

最近,喜欢胡思乱想。一个人如果想得太多,甚至胡乱地想,可能就是太闲了。如果,想得多,睡得少,那可就是失眠的前兆了。然而,我好像已经失眠了。生活我们想最求一种幸福的、有激情的、多彩的生活状态。但是,这并不现实。因为作为平凡的人来说,我们需要工作。用自己的知识、时间与精力,去为“老板”创造价值。这在很大程度上,是牺牲了我们的生活了的。所以,我们有一些渴望甚至有些幻想。何时能够走出这个怪圈,实现自己的理想的生活状态?因此,我们可能去设定一些目标来达成我们的理想状态。但是,生活还是我们的,不能够无视他。在一次采访中,张朝阳提到大学时因考得“不好”而冬泳来“自虐”。这其中,我更多看到的是不断地对自身极限的挑战,以证明自己是最牛X的。然而,后面他提到现在自己已经和自己“和平”相处,不去和自己对抗。我想,面对平日的生活,也需要保持一颗“平和”的心。和自己的生活“平和”相处,不要对抗。在平淡无趣的生活中,... Read More

软件工程师面试中要注意什么?

最近,有机会作为面试官参与了一些软件工程师的技术一面面试。所以,以面试官的角度来提出面试者的问题,能够更加针对性地帮助到面试者在面试中有更好的表现。所以,今天我来谈谈,作为软件工程师技术面试一面的面试官,面试者需要尤其重视的两点。表达清晰、准确、简洁这个问题往往会在自我介绍和项目介绍的环节中暴露出来。然而,自我介绍和项目介绍往往是面试中的第一个环节,所以这一环节的好坏会直接影响面试官的第一印象。自我介绍最重要的是能够在 2 到 3 分钟的有限时间内,表述出自己的履历,并能够着重地强调出自己的亮点。比如,在现在的工作中做了哪些事情,达到了什么样的效果;平日是否保持积极学习状态,对哪些领域有所深入研究;算法竞赛能够达到的排名等等。然而,会有一些面试者在时间上的把握有些欠缺,并且介绍得过于简单或者没有亮点。甚至,会有些面试者把自我介绍搞成了项目介绍。从头到尾,都是在讲自己的项目。那么,作为面试官... Read More

Install GCC 4.9.3

#!/bin/bas# this script installs GCC 4.9.# to use it navigate to your home directory and type# sh install-gcc-4.9.3.s# download and install gcc 4.9.wget https://ftp.gnu.org/gnu/gcc/gcc-4.9.3/gcc-4.9.3.tar.gtar xzf gcc-4.9.3.tar.gcd gcc-4.9../contrib/download_prerequisitecd ..mkdir objdicd objdi../gcc-4.9.3/configure --prefix=$HOME/gcc-4.9.3 --enable-languages=c,c++,fortran,go --disable-... Read More

Git Module

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。我们举一个例子。 假设你正在开发一个网站然后创建了 Atom 订阅。 你决定使用一个库,而不是写自己的 Atom 生成代码。 你可能不得不通过 CPAN 安装或 Ruby gem 来包含共享库中的代码,或者将源代码直接拷贝到自己的项目中。 如果将这个库包含进来,那么无论用何种方式都很难定制它,部署则更加困难,因为你必须确保每一个客户端都包含该库。 如果将代码复制到自己的项目中,那么你做的任何自定义修改都会使合并上游的改动变得困难。Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立... Read More

C++ 动态数组初始化

int *pia = new int[10];//array of 10 uninitializedints此new表达式分配了一个含有 10 个int型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针pia。在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象。注意:C++使用new和delete在堆(自由存储区)上分配和释放动态数组。 Read More

Change the mirror of HomeBrew to AliYun’s

简介Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 系统上的软件安装过程。它拥有安装、卸载、更新、查看、搜索等很多实用的功能,通过简单的一条指令,就可以实现包管理,十分方便快捷。配置方法首先确保你已经安装好了 Homebrew 了, 如果没有, 请参考 OPSX 指引页的 Homebrew 文档;然后你只需要粘贴下述命令在对应终端运行。 Read More

Exuberant Ctags Manual

Thectagsandetagsprograms (hereinafter collectively referred to asctags, except where distinguished) generate an index (or "tag") file for a variety of language objects found infile(s). This tag file allows these items to be quickly and easily located by a text editor or other utility. A "tag" signifies a language object for which an index entry is available (or, alternatively, the index entry crea... Read More

PHP-FPM Configuration

pmstrin设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。static- 子进程的数量是固定的(pm.max_children)。ondemand- 进程在有需求时才产生(当请求时才启动。与 dynamic 相反,在服务启动时pm.start_servers就启动了。dynamic- 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。pm.max_childreninpm设置为static时表示创建的子进程的数量,pm设置为dynamic时表示最大可创建的子进程的数量。必须设置。该选项设置可以同时提供服务的请求数限制。类似 Apache 的 mpm_prefork 中 MaxClients 的设置... Read More

Layers of OSI Model

OSI stands for Open Systems Interconnection. It has been developed by ISO – ‘International Organization of Standardization‘, in the year 1984. It is a 7 layer architecture with each layer having specific functionality to perform. All these 7 layers work collaboratively to transmit the data from one person to another across the globe.1. Physical Layer (Layer 1) The lowest layer of the OSI referenc... Read More