深入解析PHP超全局变量与垃圾回收机制的工作原理

$ argc - 传递给脚本的参数数量

深入解析PHP超全局变量与垃圾回收机制的工作原理

PHP中的许多预定义变量都是“ Hyperglobal”,这意味着它们在脚本的整个范围中可用。可以访问它们,而无需执行函数或方法中的全局$变量。

这些超漏变量是:

$ GLOBALS

$ _server

$ _get

$ _ post

$ _files

$ _cookie

$ _Session

$ _request

$ _ENV

4。简要描述PHP的垃圾收集机理

PHP 5.3之前使用的垃圾收集机制只是“参考计数”,即每个内存对象都分配为计数器。当变量引用内存对象时,计数器+1;删除变量引用时,counter -1;当计数器= 0时,这意味着不使用内存对象,并且内存对象被破坏并完成垃圾收集。

“参考计数”存在问题,也就是说,当两个或多个对象相互指代形成环时,内存对象的计数器将不会减少为0;目前,这组内存对象是没有用的,但无法回收。这导致内存泄漏;

从PHP5.3开始,使用了一种新的垃圾收集机构。基于参考计数,实现了复杂的算法来检测内存对象中的参考环,以避免内存泄漏。

PHP变量存在于称为“ Zval”的变量容器中。 “ ZVAL”变量容器包括变量的类型和值,还包括两个信息的信息,即“ IS_REF”,指示该变量是否属于参考,以及“重新拨号”,指向该Zval变量的变量数量容器。

5。列表PHP性能优化方法和技术

opcache

通信缓存

查询缓存

6。在MySQL存储引擎中InnoDB和Myisam之间的区别

Myisam和InnoDB的解释

InnoDB和Myisam是许多人使用MySQL时最常用的两种表类型。这两种表类型具有自己的优势和缺点,具体取决于特定应用程序。基本区别是:Myisam类型不支持高级处理,例如交易处理,而InnoDB类型支持它。 Myisam类型表强调性能,该性能比InnoDB类型快几个度,但不提供交易支持,而InnoDB提供了高级数据库功能,例如交易支持已经是外部键。

以下是一些细节和特定的实施差异:

◆1. INNODB不支持FullText类型索引。

◆2。 InnoDB中的特定行数不能保存表。也就是说,当从表执行选择计数(*)时,InnoDB需要扫描整个表以计算有多少行,但是Myisam只需要简单地读取保存的行即可。只是数。请注意,当计数(*)语句包含在哪里条件时,两个表的操作是相同的。

◆3。对于类型Auto_increment的字段,InnoDB必须仅包含一个具有该字段的索引,但是在Myisam表中,可以与其他字段建立一个联合索引。

◆4。从表中删除时,InnoDB不会重新创建表,而是会行删除它。

◆5。主操作的负载表不适用于InnoDB。解决方案是首先将InnoDB表更改为MyISAM表,然后在导入数据后将其更改为InnoDB表,但是对于所使用的其他InnoDB功能(例如外键),该表不适用。

此外,InnoDB表的行锁定不是绝对的。如果MySQL无法确定执行SQL语句时要扫描的范围,则InnoDB表还将锁定整个表格,例如,更新表set num = 1,其中诸如“%aaa%”之类的名称

两种类型之间的主要区别在于,InnoDB支持交易处理,外键和行级锁。但是,Myisam没有。因此,通常很容易被认为是适合在小型项目中使用的。

作为使用MySQL的用户,InnoDB和Myisam都更加受欢迎,但是从我当前的数据库平台的角度来看,我操作和维护必须满足要求:99.9%的稳定性,方便的可伸缩性和高可用性,Myisam绝对是我的第一个选择。

原因如下:

1。首先,我目前在平台上进行的大多数项目都是读取和读取更少的项目,而Myisam的阅读性能比InnoDB好得多。

2。迈萨姆的索引和数据分开,索引被压缩,因此内存使用率增加了很多。它可以加载更多的索引,而InnoDB则与索引和数据紧密捆绑在一起。没有压缩,它将导致InnoDB比Myisam更大。

3。从平台的角度来看,通常在1或2个月后,应用程序开发人员意外地更新了一个表格范围错误的表,这使该表无法正常使用。目前,迈萨姆的优越性反映了。然后,从同一天复制的压缩软件包中取出相应的表文件,将它们放入数据库目录中,然后将它们转储到SQL中,然后将它们导入到主库中,然后填充相应的Binlog。如果它是InnoDB,那么可能不可能如此之快。不要告诉我InnoDB定期使用导出XXX.SQL机制来备份,因为我平台上最小的数据库实例的数据量基本上是G。

4。从我已经接触的应用程序逻辑中,选择计数(*)和订单是最常见的,可以占总SQL语句的60%以上。 InnoDB实际上是锁定桌子。 ,许多人认为InnoDB是一个行级锁,但这正是它对其主要键有效的地方。非主要键将锁定整个桌子。

5。此外,许多应用程序部门通常要求我定期在某些表上给他们数据。 Myisam非常方便。只需向他们发送与表相对应的FRM.MYD和MYI文件,以便他们可以使用数据库的相应版本。只需启动它,InnoDB就需要导出xxx.sql,因为仅给别人的文件受到字典数据文件的影响,另一方无法使用它。

6。如果将插入写入操作与Myisam进行比较,InnoDB将无法实现Myisam的写作表现。如果是用于基于索引的更新操作,尽管Myisam可能不如InnoDB,但图书馆可以跟随如此高的并发写作。以上也是一个问题,最好通过多实施库和表结构解决它。

7。如果您使用Myisam,合并引擎可以大大提高应用程序部门的开发速度。他们只需要在此合并表上进行一些精选的(*)操作,这非常适用于一定类型的行,总共有大约数亿个项目(例如日志公司的业务表,调查统计数据)。

当然,InnoDB并非绝对不使用。我使用交易项目,例如模拟股票交易项目。我使用InnoDB。当我拥有超过200,000个活跃用户时,我可以轻松处理它。因此,我个人非常喜欢InnoDB,但是如果我出发时从数据库平台上应用它,我仍然会首先选择Myisam。

此外,有些人可能会说,迈萨姆不能抗拒太多的写作操作,但是我可以通过建筑弥补这一点。让我告诉您我现有数据库平台的能力:主奴隶数据的总量超过几百吨,每天的PV超过十亿个PV动态页面,以及通过数据接口和数据接触其他几个主要项目不计入PV的总数(包括一个大型项目,因为MEMCACHED在早期没有部署,从而导致单个数据库处理每天9000万个查询)。我的总体数据库服务器平均负载约为0.5-1。

7。mySQL的存储类型是什么?什么是聚类索引非簇索引?

1。B+树索引(O(log(n))):对于B+树索引,您可以参考MySQL索引背后的数据结构和算法原理。

2。哈希索引:

a只能满足“和”查询中的“ =”,“”,并且不能使用范围查询

B的检索效率很高。索引的搜索可以一次放置。与B-Tree索引不同,它需要从根节点到分支节点的多个IO访问,最后访问页面节点,哈希索引的查询效率要高得多。在B树上索引

C仅存储存储引擎显示哈希索引

3。fullText索引(现在由Myisam和InnoDB引擎支持)

4。R-Tree索引(用于为GIS数据类型创建空间索引)

从物理存储的角度

1。群集索引

2。非集群索引

从逻辑的角度来看

1。主键索引:主键索引是一个特殊的唯一索引,不允许零值。

2。普通索引或单列索引

3。多列索引(复合索引):复合索引是指在多个字段上创建的索引。仅当创建索引时的第一个字段在查询条件下使用时,才会使用索引。使用复合索引时,请按照最左侧的前缀集合

4。唯一或非唯一索引

5。空间索引:空间索引是为空间数据类型字段建立的索引。 MySQL中有四种类型的空间数据,即几何,点,linestring和Polygon。 MySQL使用空间关键字扩展,从而为创建常规索引类型的语法创建空间索引。创建一个带有空间索引的列,必须将其声明为无效,并且空间索引只能在使用存储引擎Myisam的表中创建空间索引。

创建表table_name [col_name数据类型]

[唯一| fullText |空间] [index |键] [index_name](col_name [length])[asc | desc]

1。唯一| fullText |空间是可选参数,分别代表唯一的索引,全文索引和空间索引;

2。索引和键是同义词,两个函数是相同的,用于指定索引的创建。

3。COL_NAME是需要创建的字段列,必须从数据表中定义的多个列中选择该列;

4。index_name指定索引的名称,该名称是可选参数。如果未指定,mySQL默认col_name是索引值;

5。长度是一个可选参数,指示索引的长度。仅字符串类型的字段才能指定索引长度;

6。ASC或DESC指定索引值存储以ASC或降序订单

8. memcache和redis的到期机制是什么?什么是一致的哈希?

数据存储方法:平板分配

数据到期方法:懒惰到期 + LRU

平板分配器的基本原理是将分配的内存分为预先指定大小的特定长度的块,以完全解决内存碎片问题。

平板分配的原理非常简单。将分配的内存分为各种尺寸的块(Chuks),然后将相同大小的块分成组(一组块)

页面:分配给平板的内存空间,默认为1MB。分配给平板后,根据平板的大小将其分为块。

块:用于缓存记录的内存空间。

平板类:一组特定尺寸的块。

MEMCACHED选择最适合数据大小的平板,该平板根据接收到的数据的大小。

Memcached存储在平板中存储空闲块的列表,根据列表选择块,然后将数据缓存。

平板分配缺点

问题在于,由于分配了特定长度的内存,因此无法有效利用分配的内存。例如,如果将100个字节的数据缓存到128个字节块中,则将浪费其余的28个字节。

数据到期方法

懒惰到期

内部内部不监视记录是否到期,而是在检查记录是否到期时检查记录的时间戳。该技术称为懒惰到期。因此,MEMCACHED在有效期监控时不会消耗CPU时间

lru

Memcached将优先使用超时记录空间,但即使如此,在附加新记录时仍将没有足够的空间。目前,必须使用称为最近使用的机制(LRU)分配空间。这是删除“最近使用”记录的机制。因此,当Memcached的内存空间不足(当无法从平板类获得新空间时)时,搜索尚未使用的记录并将其空间分配给新记录

人们经常说,MEMCACHED的命中率低也是LRU策略引起的。您可能经常遇到为什么当我的内存足够大时会触发LRU。因为LRU是用于平板的。

例如:我存储的数据约为100k。适合大小的平板将在内部选择。目前,他将在上图中选择SLBA 2。如果板2级全部或小于100k。他将称之为LRU机制。它将清理板2类中很少使用的数据,这些数据即使没有到期,也会导致数据清理。

因此,使用备忘录时,您必须注意数据尺寸匹配模式和生长因子。

重新到期时间机制

1. Volatile-lru:从到期时间集的数据集中,选择最新未使用的数据发布

2. Allkeys-lru:从数据集中(包括设置到期时间和无设置的到期时间的数据集),选择最新未使用的数据发布。

3.挥发性随机:从具有到期时间集的数据集中,随机选择一个数据以进行发布

4.Allkeys-mandom:从数据集中随机选择一个数据(包括设置到期时间,而不是设置到期时间)进行发布

5.挥发性-TTL:从到期时间集的数据集中,选择将很快发布的数据

6.不删除任何数据(但REDIS也将根据参考计数器发布)。如果内存不足,将直接返回错误。

默认的内存策略是无词。在Redis中,LRU算法是一种近似算法。默认情况下,REDIS随机选择5个键,并选择一个最近尚未用于消除的键。在配置文件中,您可以使用MaxMemory-Samples。要设置redis的值,需要检查键的数量,但是检查越多,所需的时间越长,但是结构越精确(即,REDIS从内存中消除的对象越长,则不会使用〜 ),设置多少特定业务权衡通常是基于默认设置的。

REDIS还具有定期删除过期的缓存数据以节省内存的常规策略。这种方法很好。该策略优先于LRU。

当前,比较了纪念和redis的到期时间机制。

重新命中率明显高于备用的命中率。每个人都可以将业务与适合该业务的方案相匹配!目前,我认为Redis是由Memcached补充的NOSQL产品。

一致的哈希,分布式节点键分布算法,可选;

9。如何存储MySQL索引的基础数据结构,为什么使用索引查询更快?

数据结构和算法基础

索引的本质

B树和B+树

特殊的存储结构,低搜索成本;

MySQL索引实现

Myisam索引实施

非集群索引

InnoDB索引实现

聚类索引

第一个主要区别是InnoDB数据文件本身是索引文件。

与Myisam索引的第二个区别在于,InnoDB的辅助索引的数据字段存储相应的记录主键的值,而不是地址。

群集索引的实现方法使通过主键进行搜索非常有效,但是辅助索引搜索需要搜索两个索引:首先搜索辅助索引以获取主键,然后使用主键在主索引中搜索以获取记录。

10。优化MySQL的方法

避免重新检查

避免模​​糊查询

避免使用数据库操作

避免大量吞吐量

尽可能减少搜索范围

尽可能多地使用索引,独特或接近唯一索引

尝试在联合搜索中使用const字段

11。查找和Grep之间的区别

查找是找到文件

GREP是要找到文件中的内容

12.写出以下服务的目的和默认端口

FTP:| 21/TCP |根据FTP协议提供服务的协议,专门用于传输文件。

SSH:| 22/TCP |旨在为远程登录会话和其他网络服务提供安全性的协议。使用SSH协议可以有效防止在远程管理过程中信息泄漏。

http:| 80/TCP |是Internet上使用最广泛的网络协议。所有www文件都必须遵守此标准。

Telnet:| 23/TCP | Telnet协议是TCP/IP协议家族的成员。这是Internet远程登录服务的标准协议和主要方法。它为用户提供了在本地计算机上完成远程主机工作的能力。

https:| 443/TCP 443/UDP |它是针对安全性的HTTP频道,简而言之,它是HTTP的安全版本。也就是说,在HTTP下添加了SSL层。 HTTPS的安全基础是SSL,因此详细的加密内容需要SSL。

13.除了所有者之外,将执行权限添加到text.txt文件中,并最终用数字写出文件权限。

chmod g+x,o+x text.txt

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读