六种限流实现方案为什么要限流车辆限行就是一种生活中很常见的限流策略,他除了给我带来了以上的好处之外,还给我们美好的生活环境带来了一丝改善,并且快速增长的私家车已经给我们的交通带来了巨大的“负担”,如果再不限行,可能所有的车都要被堵在路上,这就是限流给我们的生活带来的巨大好处。
从生活回到程序中,假设一个系统只能为 10W 人提供服务,突然有一天因为某个热点事件,造成了系统短时间内的访问量迅速增加到了 50W,那么导致的直接结果是系统崩溃,任何人都不能用系统了,显然只有少人数能用远比所有人都不能用更符合我们的预期,因此这个时候我们要使用「限流」了。
限流分类限流的分类:
合法性验证限流:比如验证码、IP 黑名单等,这些手段可以有效的防止恶意攻击和爬虫采集;
容器限流:比如 Tomcat、Nginx 等限流手段,其中 Tomcat 可以设置最大线程数(maxThreads),当并发超过最大线程数会排队等待执行;而 Nginx 提供了两种限流手段:一是控制速率,二是控制并发连接数;
服务端限流:比如我们在服务器端通过限流算法实现限流,此项也是我们本文介绍的重点。
合法性验证限流为最常规的 ...
计算机技术
未读Go语言特点Go语言相比C++/Java等语言是优雅且简洁的,它既保留了C++的高性能,又可以像Java,Python优雅的调用三方库和管理项目,同时还有接口,自动垃圾回收和goroutine等让人拍案叫绝的设计。有许多基于Go的优秀项目。Docker,Kubernetes,etcd,deis,flynn,lime,revel等等。Go无疑是云时代的最好语言!题外话到此为止,在面试中,我们需要深入了解Go语言特性,并适当辅以源码阅读(Go源码非常人性化,注释非常详细,基本上只要你学过Go就能看懂)来提升能力。常考的点包括:切片,通道,异常处理,Goroutine,GMP模型,字符串高效拼接,指针,反射,接口,sync,go test和相关工具链。)
切片与数组的区别在Go语言中,数组(Array)和切片(Slice)是两种不同的数据类型,它们有以下区别:
长度固定 vs 动态长度:
数组是长度固定的,在声明时需要指定长度,并且无法改变长度。
切片是动态长度的,可以根据需要自动调整长度,无需在声明时指定长度。
值类型 vs 引用类型:
数组是值类型,赋值或传递数 ...
计算机技术
未读介绍swoole首先 swoole 是 php 的一个扩展程序,swoole 是一个为 php 用 c 和 c++ 编写的基于事件的高性能异步 & 协程并行网络通信引擎。swoole 是一个多进程模型的框架,当启动一个进程 swoole 应用时,一共会创建 2+n+m 个进程,n 为 worker 进程数,m 为 TaskWorker 进程数,1 个 master 进程和一个 manager 进程,关系如下图所示
Reactor 线程
负责维护客户端 TCP 连接、处理网络 IO、处理协议、收发数据
完全是异步非阻塞的模式
全部为 C 代码,除 Start/Shudown 事件回调外,不执行任何 PHP 代码
将 TCP 客户端发来的数据缓冲、拼接、拆分成完整的一个请求数据包
Reactor 以多线程的方式运行
Worker 进程
接受由 Reactor 线程投递的请求数据包,并执行 PHP 回调函数处理数据
生成响应数据并发给 Reactor 线程,由 Reactor 线程发送给 TCP 客户端
可以是异步非阻塞模式,也可以是同步阻塞模式
Worker 以多进程的方式运行
...
计算机技术
未读PHP面试常见问题总结
部分题目收集自网络
1. echo(),print(),print_r(),var_dump()的区别?echo 和 print 只能打印出string,不能打印出结构;print(string $arg)只有一个参数;echo arg1,arg2 可以输出多个参数;print_r和var_dump能打印出结构。比如:
123$arr = array("key"=>"value");print_r($arr);var_dump(arr);
print_r和var_dump区别:print_r() 只能打印一些易于理解的信息,且print_r()在打印数组时,会将把数组的指针移到最后边,使用reset() 可让指针回到开始处。 而var_dump()不但能打印复合类型的数据,还能打印资源类型的变量
2. 语句include和require的区别是什么?在失败的时候:include 产生一个 warning ,而 require 直接产生错误中断;require 在运行前载入;include 在运行时载入;requir ...
计算机技术
未读
# PHP是什么语言?
PHP 是一种服务器端编程语言,对用户免费且开源,也可用于制作各种类型的应用程序、网站、CRM 等等。它是一种经常使用的通用语言,可以集成到超文本标记语言 (HTML) 中。基本上在系统中,PHP 提供的八种原始数据类型进一步分为三个内部类别:脚本类型(预先建立)、化合物类型(用户定义)和唯一类型。
如何在 Ubuntu 上安装 PHP?Ubuntu 被称为最常用的开源作系统之一,它负责我们想要开发的应用程序的任何 Web 界面的整体开发,我们将在 Ubuntu 上安装 PHP 并了解在 Ubuntu 上安装 PHP 是多么容易
我们可以通过两种方法在 Ubuntu 上安装 PHP,让我们了解每种方法:
使用 apt/terminal 安装 PHP
更新apt
1sudo apt update
输出如下:
安装 PHP 软件包
1sudo apt install php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php ...
搭建Hexo博客本文介绍如何使用hexo搭建个人博客,并将博客部署到Github Pages和Cloudflare Pages上。主要内容包括:
环境准备:安装Node.js和Git
配置Git和Github:设置SSH密钥,创建Github仓库
初始化Hexo项目:安装Hexo,创建一篇博文
部署到GitHub Pages:配置部署设置,推送静态文件
部署到Cloudflare Pages:连接GitHub仓库,自动部署
基本使用方法:创建新文章,本地预览,发布更新
这个教程适合那些想要快速搭建个人博客,但又不想花费太多成本的人。通过使用Hexo、GitHub和Cloudflare的免费服务,您可以轻松创建一个高效、简洁的博客网站。
1. 事前准备
域名(非必须,可以使用免费域名或者Github.io或者Pages.dev分配域名)
Github(必须,你需要注册一个GitHub帐号)
Cloudflare(非必须,你需要注册一个Cloudflare帐号,这样你就可以将博客部署在CF的CDN里加速,但是你也可以直接使用GitHub.io分配的域名)
2. 软件支持
Node(必 ...