mysql的索引是由mysql的server层的优化器决定的
Memcache单个key(变量)存放的数据有1M的限制
Redis单个key(变量)存放的数据有1G的限制
事前:进行系统压力测试,在负载均衡层做限流处理,过载丢弃请求或者进入队列
事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。
事中:本地缓存 + 限流降级,避免 MySQL 被打死。
事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。
缓存雪崩、击穿、穿透,该如何避免?
Redis中缓存雪崩、缓存穿透等问题的解决方案
缓存穿透、缓存并发、缓存雪崩、缓存抖动、热点缓存、缓存双写一致性等问题
4.分布式id算法?
雪花算法是 twitter 开源的分布式 id 生成算法,采用 Scala 语言实现,是把一个 64 位的 long 型的 id,1 个 bit 是不用的,用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。雪花算法SnowFlake生成唯一ID
1 bit:不用,为啥呢?因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。
41 bit:表示的是时间戳,单位是毫秒。41 bit 可以表示的数字多达 2^41 - 1,也就是可以标识 2^41 - 1 个毫秒值,换算成年就是表示69年的时间。
10 bit:记录工作机器 id,代表的是这个服务最多可以部署在 2^10台机器上哪,也就是1024台机器。但是 10 bit 里 5 个 bit 代表机房 id,5 个 bit 代表机器 id。意思就是最多代表 2^5个机房(32个机房),每个机房里可以代表 2^5 个机器(32台机器)。
12 bit:这个是用来记录同一个毫秒内产生的不同 id,12 bit 可以代表的最大正整数是 2^12 - 1 = 4096,也就是说可以用这个 12 bit 代表的数字来区分同一个毫秒内的 4096 个不同的 id。
Redis过期--淘汰机制的解析和内存占用过高的解决方案
ActiveMQ 基于 Java 开发的, RabbitMQ 是基于 erlang 开发的。
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
单机吞吐量 | 万级,比 RocketMQ、Kafka 低一个数量级 | 同 ActiveMQ | 10 万级,支撑高吞吐 | 10 万级,高吞吐,一般配合大数据类的系统来进行实时数据计算、日志采集等场景 |
topic 数量对吞吐量的影响 | topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic | topic 从几十到几百个时候,吞吐量会大幅度下降,在同等机器下,Kafka 尽量保证 topic 数量不要过多,如果要支撑大规模的 topic,需要增加更多的机器资源 | ||
时效性 | ms 级 | 微秒级,这是 RabbitMQ 的一大特点,延迟最低 | ms 级 | 延迟在 ms 级以内 |
可用性 | 高,基于主从架构实现高可用 | 同 ActiveMQ | 非常高,分布式架构 | 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 |
消息可靠性 | 有较低的概率丢失数据 | 基本不丢 | 经过参数优化配置,可以做到 0 丢失 | 同 RocketMQ |
功能支持 | MQ 领域的功能极其完备 | 基于 erlang 开发,并发能力很强,性能极好,延时很低 | MQ 功能较为完善,还是分布式的,扩展性好 | 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用 |
有序树的定义:若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree)
无序树的定义:若将树中每个结点的各子树从左到右是没有次序的(即可以互换),则称该树为无序树
1.数据(Data):数据就是用户输入到计算机被计算机程序处理的一些符号,比如图片还有声音等....
2.数据元素(Data Element):是数据的基本单位,数据元素用于完整的描述一个对象,比如一个学生表,学生表也是由 数据元素和数据项组成的.
3.数据项(Data ltem):是组成数据元素的!例如 学生表 的中的 "学号 姓名 性别"等数据项.
4.数据对象:是性质相同的数据元素的集合,是数据的一个子集,例如:整数数据对象的集合 N={1,2,3,4,5,6,7,...};
301 Moved Permanently 永久重定向 302 Moved Temporarily 临时重定向(POST改为GET) 307 Temporary Redirect 临时重定向(保持POST)
301一般用作永久跳转,除非用户清浏览器缓存,否则不会修改跳转地址; 302和307可以在后端修改跳转地址,不同在于302会把POST转为GET请求,307可以保持POST
//301跳转
header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://www.baidu.com");
//302
Header("Location: http://www.baidu.com");
//403
header('HTTP/1.0 403 Forbidden');
//404
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found");
复合索引只有在前面的字段为精确查询时,才会用上后面的复合索引,一旦出现不精确查询,则不会使用复合索引。
select * from test where a= and b> order by c
使用了a_b索引,order by c不使用索引
查询结果的数据量越大返回时间越长,远远超过其他环节的占用时间。
模式修饰符 含义
- | - | 示例 |
---|---|---|
vary | 告诉代理服务器/缓存/CDN,如何判断请求是否一样 | Vary: Accept-Encoding,User-Agent |
Rang | 请求一段内存,如0到2000字节,可用于断点下载 | Rang bytes=0-2000 |
Referer | 来源地址 | |
Upgrade | 切换协议版本 | Upgrade: HTTP/2.0, SHTTP/1.3 |
User-Agent | 用户信息 | User-Agent: Mozilla/5.0 (Linux; X11) |
X-Requested-With | null 传统请求;XMLHttpRequest Ajax请求 |
外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。
外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装人内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行归并排序。大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下,那么如何减少树的深度(当然是不能减少查询的数据量),一个基本的想法就是:采用多叉树结构(由于树节点元素数量是有限的,自然该节点的子树数量也就是有限的)。这样我们就提出了一个新的查找树结构——多路查找树。根据平衡二叉树的启发,自然就想到平衡多路查找树结构,也就是B-tree(B树结构)
内核、zend引擎、以及扩展层
参考:[PHP内核]
opcode 是Php脚本编译后的中间码,Zend引擎将源文件转换成opcode代码,然后在虚拟机上运行
缓存opcode 后 可以加快网站的运行速度
用apc 或者xcache 缓存可以缓存php的opcode
A的ASCII码是65,16进制对应41,二进制对应01000001
a的ASCII码是97,16进制对应61,二进制对应01100001
魔术方法
__construct
__destruct
__call
__callStatic
__get
__set
__isset
__clone
__unset
__sleep
__wakeup
__toString
__invoke //反射:当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
__set_stat
魔术常量:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位置而变化。
__LINE__ 获取文件中的当前行号。
__FILE__ 获取文件的完整路径和文件名。
__DIR__ 获取文件所在目录。
__FUNCTION__ 获取函数名称(PHP 4.3.0 新加)。
__CLASS__ 获取类的名称(PHP 4.3.0 新加)。
__METHOD__ 获取类的方法名(PHP 5.0.0 新加)。
__NAMESPACE__ 当前命名空间的名称(区分大小写)。
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 *Foo\Bar*)。
超全局变量(9个)
$GLOBALS :储存全局作用域中的变量
$_SERVER :获取服务器相关信息
$_REQUEST :获取POST和GET请求的参数
$_POST : 获取表单的POST请求参数
$_GET : 获取表单的GET请求参数
$_FILES :获取上传文件的的变
$_ENV : 获取服务器端环境变量的数组
$_COOKIE:获取浏览器的cookie
$_SESSION : 获取session
/etc/skel/目录是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。这个目录下的所有文件都是隐藏文件(以.点开头的文件)。
【国标码】指国家标准汉字编码:GB-2312
【区位码】区位码在GB-2312中预留了一些空位,便于补充和扩展
【机内码】汉字ASCII码。指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。
【机器码】计算机直接使用的程序语言,其语句就是机器指令码。