Heim  >  Artikel  >  Backend-Entwicklung  >  Teilen Sie einige wichtige PHP-Wissenspunkte in PHP

Teilen Sie einige wichtige PHP-Wissenspunkte in PHP

小云云
小云云Original
2018-03-16 16:08:195427Durchsuche

1. Eine kurze Einführung in das automatische Laden in PHP

Wenn wir Klassen in PHP verwenden, müssen wir sie vor der Verwendung laden, sei es über require oder include, aber es gibt zwei Möglichkeiten. Diese Frage beeinflusst unsere Entscheidung laden. Erstens weiß ich nicht, wo diese Klassendatei gespeichert ist, und zweitens weiß ich nicht, wann ich diese Datei verwenden muss. Besonders wenn es viele Projektdateien gibt, ist es unmöglich, an den Anfang jeder Datei eine lange Liste von Anforderungen zu schreiben.
Autoload-Lademechanismus: Wenn eine Klasse über new instanziiert wird, lädt PHP die entsprechende Datei über die definierte Autoload-Funktion. Wenn diese Klassendatei Extends oder Implements verwendet und andere Klassendateien verwenden muss, wird PHP neu gestartet. Führen Sie Autoload aus, um zu suchen und Klassendateien laden Wenn zwei Anfragen für dieselbe Klassendatei auftreten, wird ein Fehler gemeldet.

 2. Was sind die Vor- und Nachteile statischer Variablen?

Eigenschaften statischer lokaler Variablen: 1. Sie ändern sich nicht, wenn die Funktion aufgerufen und beendet wird. Obwohl die Variable weiterhin existiert, kann sie nicht verwendet werden. Wenn die Funktion, die sie definiert, erneut aufgerufen wird, kann sie weiterhin verwendet werden und der nach dem vorherigen Aufruf verbleibende Wert wird gespeichert. 2. Statische lokale Variablen werden nur einmal initialisiert. 3. Statische Eigenschaften können nur mit einem Zeichenwert oder einer Konstante initialisiert werden und Ausdrücke können nicht verwendet werden. Auch wenn die lokale statische Variable ohne Anfangswert definiert ist, weist das System automatisch einen Anfangswert von 0 (für numerische Variablen) oder ein Nullzeichen (für Zeichenvariablen) zu. Wenn eine Funktion mehrmals aufgerufen wird und Sie den Wert einiger Variablen zwischen Aufrufen beibehalten müssen, sollten Sie die Verwendung statischer lokaler Variablen in Betracht ziehen. Obwohl globale Variablen auch zum Erreichen des oben genannten Zwecks verwendet werden können, verursachen globale Variablen manchmal unerwartete Nebenwirkungen. Daher ist es immer noch besser, lokale statische Variablen zu verwenden.

3 Was ist der Unterschied zwischen strtr und str_replace? werden in welchem ​​Szenario verwendet?

str_replace()-Funktion ersetzt einige Zeichen in der Zeichenfolge durch andere Zeichen (Groß-/Kleinschreibung beachten)

strtr()-Funktion konvertiert bestimmte Zeichen in der Zeichenfolge.

Die 5.6-Version von str_replace ist mehr als zehnmal effizienter als strtr, und die 7.0-Version weist grundsätzlich die gleiche Effizienz auf, aber str_replace in 5.6 ist dreimal effizienter als 7.0

4. Magische Methode

__construct(): Die Standardkonstruktormethode der Klasse. Wenn __construct() und eine Methode mit demselben Namen wie die Klasse zusammen erscheinen, wird standardmäßig __construct() anstelle der Methode aufgerufen den gleichen Namen.

__call(): Beim Aufrufen einer Methode, die nicht existiert oder auf die nicht zugegriffen werden kann, wird die Methode __call($name, $arguments) aufgerufen.

__toString(): Wird direkt beim Drucken des Objekts aufgerufen. Zum Beispiel echo $object;

__clone(): wird direkt aufgerufen, wenn das Objekt kopiert wird.

__isset(): Wenn isset() oder empty() für nicht vorhandene oder nicht zugängliche Eigenschaften verwendet wird, wird __isset() aufgerufen

__destruct(): Destruktor der Klasse, wird ausgeführt, wenn alle Verweise auf das Objekt entfernt werden oder das Objekt explizit zerstört wird.

5. Wie wird die Ausgabe aussehen, wie unten gezeigt?

foreach ($array as $key => $item) 
{            $array[$key + 1] = $item + 2;            
echo "$item";        }        
print_r($array);
结果示例: $array = [3,6,7,8];
3678 //echo 输出数组内元素的值Array(   
 [0] => 3  //$key 保持不变    
 [1] => 5 //每次的$eky + 1,对应的值加2,    [2] => 8    [3] => 9    [4] => 10)

Laravel

Die Vor- und Nachteile von Laravel im Vergleich zu anderen Frameworks

Laravel

Vorteile: Weltweit führender Benutzer, vollständige Dokumentation Die Struktur des Frameworks ist klar und es stehen zahlreiche Erweiterungspakete von Drittanbietern als Referenz zur Verfügung. Es eignet sich für die gemeinsame Entwicklung großer Websites und die bereitgestellten handwerklichen Entwicklungstools weisen eine hohe Entwicklungseffizienz auf. Composer-Erweiterung wird automatisch geladen, Middleware

Nachteile: etwas komplex, langsamer zu starten als allgemeine Frameworks; es wird auf eine große Anzahl von Paketen von Drittanbietern verwiesen, aber in einigen Szenarien verwenden wir nur einige Methoden in der Klasse und Der Code scheint etwas überflüssig zu sein.

ThinkPHP

Vorteile: Es handelt sich um ein schnelles und einfaches, leichtes PHP-Entwicklungsframework, das auf MVC basiert und objektorientiert ist. Es wird gemäß der Open-Source-Vereinbarung Apache2 veröffentlicht Unter Einhaltung einfacher und praktischer Designprinzipien unter Beibehaltung exzellenter Leistung und minimalem Code legt es besonderen Wert auf Entwicklungserfahrung und Benutzerfreundlichkeit und verfügt über viele originelle Funktionen und Features, die die Entwicklung von WEB-Anwendungen stark unterstützen. Einfach, klar, bequem und schnell zu starten

Nachteile: Fehlendes objektorientiertes Design, Version 5 ist grundsätzlich objektorientiert und es gibt nur wenige Hilfstools im Zusammenhang mit der Framework-Community

Mysql

1. In Mysql ist der Unterschied zwischen int(10) und int(11)

BIT[M] Bitfeldtyp, M stellt die Anzahl der Ziffern in jedem Wert dar, im Bereich von 1 bis 64, wenn M ignoriert wird, ist der Standardwert 1

TINYINT [(M)] [UNSIGNED] [ZEROFILL] M ist standardmäßig 4. Sehr kleine ganze Zahl. Der vorzeichenbehaftete Bereich liegt zwischen -128 und 127. Der vorzeichenlose Bereich liegt zwischen 0 und 255.

SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M ist standardmäßig 6. kleine ganze Zahl. Der vorzeichenbehaftete Bereich liegt zwischen -32768 und 32767. Der vorzeichenlose Bereich liegt zwischen 0 und 65535.

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] M ist standardmäßig 9. Mittelgroße Ganzzahl. Der vorzeichenbehaftete Bereich ist -8388608 bis 8388607. Der vorzeichenlose Bereich liegt zwischen 0 und 16777215.

INT[(M)] [UNSIGNED] [ZEROFILL] M ist standardmäßig 11. Eine Ganzzahl normaler Größe. Der vorzeichenbehaftete Bereich ist -2147483648 bis 2147483647. Der vorzeichenlose Bereich liegt zwischen 0 und 4294967295.

BIGINT[(M)] [UNSIGNED] [ZEROFILL] M ist standardmäßig 20. Große ganze Zahl. Der vorzeichenbehaftete Bereich ist -9223372036854775808 bis 9223372036854775807. Der vorzeichenlose Bereich liegt zwischen 0 und 18446744073709551615.

Hinweis: M stellt hier nicht die spezifische Länge dar, die in der Datenbank gespeichert ist. In der Vergangenheit wurde fälschlicherweise immer angenommen, dass int(3) nur Zahlen mit 3 Längen speichern kann und int(11) 11 Längen. Die Zahlen sind absolut falsch. Wenn wir uns für die Verwendung des Typs int entscheiden, unabhängig davon, ob es sich um int(3) oder int(11) handelt, wird eine Länge von 4 Bytes in der Datenbank gespeichert. Wenn Sie int(3) verwenden, beträgt die Länge 10. Es gibt Ihnen standardmäßig das Speicherbit 010, was bedeutet, dass 3 eine Standardlänge darstellt. Wenn Sie weniger als 3 Ziffern haben, hilft es Ihnen bei der unvollständigen Länge. Wenn Sie 3 Ziffern überschreiten, hat dies keine Auswirkungen.
**int(M) M gibt die maximale Anzeigebreite an. Die maximale effektive Anzeigebreite beträgt 255. Die optionale Angabe der Anzeigebreite wird verwendet, um die Breite von links zu füllen, wenn die Anzeigebreite kleiner als die angegebene Spaltenbreite ist. Die Anzeigebreite schränkt weder den Wertebereich ein, der in der Spalte gespeichert werden kann, noch begrenzt sie die Anzeige von Werten, die die angegebene Spaltenbreite überschreiten.

2. Index-Links-Prinzip:

z. B. beim Abgleichen von Zeichenfolgen nicht mit einem Platzhalterzeichen beginnen, die linke Seite muss festgelegt werden, der Feldindex funktioniert

Zusammengesetzter Index: Wenn das Feld links festgelegt ist, ist der Index rechts nur gültig, wenn der Index übereinstimmt. Da die Schlüsselwortsortierung im zusammengesetzten Index auf dem linken Feld basiert, wird, wenn das linke Feld identisch ist, nach dem rechten Feld sortiert.

3. Vor- und Nachteile der Indexerstellung:

Vorteile:

Die Erstellung eines Index kann die Leistung des Systems erheblich verbessern

Durch eindeutige Indizierung, Die Datenbank kann garantiert werden. Die Einzigartigkeit jeder Datenzeile in der Tabelle.

Beschleunigt den Abruf erheblich.

Beschleunigt die Verbindung zwischen Tabellen.

Bei Verwendung von Gruppierungs- und Sortierklauseln für Daten Abrufen, reduzieren Sie die Zeit für das Gruppieren und Sortieren in Abfragen

Durch die Verwendung von Indizes können Sie Optimierungs-Hider während des Abfrageprozesses verwenden, um die Systemleistung zu verbessern

Nachteile:

Erstellen und verwalten Indizes Es braucht Zeit und nimmt mit der Datenmenge zu

Der Index nimmt physischen Platz ein

Beim Hinzufügen, Löschen oder Ändern von Daten in der Tabelle muss der Index dynamisch verwaltet werden, was zu einer Verringerung führt die Datenwartungsgeschwindigkeit

4. Bitte beschreiben Sie, wie die MySQL-Master- und Slave-Server Daten synchronisieren. Welche Art von SQL führt dazu, dass Master und Slave nicht korrekt synchronisiert werden?

Netzwerkverzögerung

Da es sich bei der MySQL-Master-Slave-Replikation um eine asynchrone Replikation auf Binlog-Basis handelt, werden Binlog-Dateien natürlich über das Netzwerk übertragen. Die überwiegende Mehrheit der Gründe für die Master-Slave-Replikation ist. Insbesondere bei der Datensynchronisierung zwischen Computerräumen ist die Wahrscheinlichkeit, dass dies geschieht, sehr hoch. Trennen Sie daher das Lesen und Schreiben und achten Sie auf den frühen Entwurf der Geschäftsschicht.

Die Lasten der Master- und Slave-Maschinen sind inkonsistent

Da die MySQL-Master-Slave-Replikation 1 IO-Thread in der Master-Datenbank startet und unter anderem 1 SQL-Thread und 1 IO-Thread von oben startet Die Auslastung einer Maschine ist sehr hoch und sie ist zu ausgelastet. Infolgedessen verfügt jeder Thread über unzureichende Ressourcen und es kommt zu einer Master-Slave-Inkonsistenz.

max_allowed_packet-Einstellungen sind inkonsistent

Der auf der Master-Datenbank festgelegte max_allowed_packet ist größer als der auf der Slave-Datenbank. Wenn eine große SQL-Anweisung auf der Master-Datenbank ausgeführt werden kann, ist die Einstellung auf dem Slave Die Datenbank ist zu klein und kann nicht ausgeführt werden, was zu einer Master-Slave-Inkonsistenz führt.

Master-Slave-Inkonsistenz, verursacht durch Inkonsistenz zwischen dem Schlüsselwert ausgehend von der Schlüssel-Auto-Inkrement-Taste und der Einstellung für den Auto-Inkrement-Schritt.

Wenn MySQL ungewöhnlich ausgefallen ist und sync_binlog=1 oder innodb_flush_log_at_trx_commit=1 nicht gesetzt ist, ist es sehr wahrscheinlich, dass die Binlog- oder Relaylog-Datei beschädigt wird, was zu einer Master-Slave-Inkonsistenz führt.

Der Fehler in MySQL selbst führt zur Master-Slave-Synchronisierung.

Die Versionen sind inkonsistent, insbesondere wenn die höhere Version der Master und die niedrigere Version der Slave ist. Die von der Master-Datenbank unterstützte Funktion wird von der Slave-Datenbank nicht unterstützt.

5 ist eine Bestelltabelle. Finden Sie wie folgt die beiden Benutzer mit den meisten Einkäufen

Bestell-ID

Benutzer-ID

Waren

100000 100 Apple

100001 100 Apfel

100002 101 Orange

100003 102 Apfel

100004 102 Banane

sql:

SELECT order_id,user_id ,COUNT(order_id) AS count FROM order GROUP BY user_id ORDER BY count DESC limit 2

Linux

So finden Sie heraus, dass der Webdienst langsam ist

oben: Systemleistung prüfen

Nginx: $request_time zum letzten Feld hinzufügen

Listen Sie die Seiten auf, deren PHP-Seitenanforderungszeit 3 ​​Sekunden überschreitet, zählen Sie die Anzahl der Vorkommen und zeigen Sie die ersten 100 an Einträge
cat access.log|awk '($ NF > 1 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

Im Code implementiert, Schreibzeit am Anfang und Schreibzeit am Ende

Umfassend

1. Der Unterschied zwischen AES und RSA:

RSA ist eine asymmetrische Verschlüsselung , Verschlüsselung mit öffentlichem Schlüssel, Entschlüsselung mit privatem Schlüssel und umgekehrt. Nachteile: Langsame Laufgeschwindigkeit und schwierig in Hardware zu implementieren. Übliche Längen privater Schlüssel sind 512 Bit, 1024 Bit, 2048 Bit und 4096 Bit. Je länger die Länge, desto sicherer ist sie, aber desto langsamer ist die Schlüsselgenerierung und desto zeitaufwändiger ist die Verschlüsselung und Entschlüsselung.

AES-symmetrische Verschlüsselung, der längste Schlüssel ist nur 256 Bit, schnelle Ausführung und einfach in Hardware zu implementieren. Da es sich um eine symmetrische Verschlüsselung handelt, muss der Schlüssel vor der Übertragung beiden Kommunikationspartnern bekannt sein.

AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥 长度不足时,会补齐)

总结:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

RBAC:基于角色的访问控制

一个用户属于多个角色

角色拥有多个动作的权限

用户是否具有某些动作的权限

表:用户表、角色表、动作表,用户角色关联表、角色动作关联表

MongoDB

MongoDB数据类型:

String(字符串): mongodb中的字符串是UTF-8有效的。

Integer(整数): 存储数值。整数可以是32位或64位,具体取决于您的服务器。

* Boolean(布尔): 存储布尔(true/false)值。

Double(双精度): 存储浮点值。

Min/ Max keys(最小/最大键): 将值与最低和最高BSON元素进行比较。

Arrays(数组): 将数组或列表或多个值存储到一个键中。

Timestamp(时间戳): 存储时间戳。

Object(对象): 嵌入式文档。

Null (空值): 存储Null值。

Symbol(符号): 与字符串相同,用于具有特定符号类型的语言。

Date(日期): 以UNIX时间格式存储当前日期或时间。

Object ID(对象ID) : 存储文档ID。

Binary data(二进制数据): 存储二进制数据。

Code(代码): 将JavaScript代码存储到文档中。

Regular expression(正则表达式): 存储正则表达式

算法

1. 排序算法

* 快速排序

快速排序是十分常用的高效率的算法,其思想是:我先选一个标尺,用它把整个队列过一遍筛选,以保证其左边的元素都不大于它,其右边的元素都不小与它function quickSort($arr){  // 获取数组长度

 $length = count($arr);  // 判断长度是否需要继续二分比较
  if($length <= 1){    return $arr;
  }  // 定义基准元素
  $base = $arr[0];  // 定义两个空数组,用于存放和基准元素的比较后的结果
  $left = [];
  $right = [];  // 遍历数组
  for ($i=1; $i < $length; $i++) { 
    // 和基准元素作比较
    if ($arr[$i] > $base) {
      $right[] = $arr[$i];
    }else {
      $left[] = $arr[$i];
    }
  }  // 然后递归分别处理left和right
  $left = quickSort($left);
  $right = quickSort($right);  // 合并
  return array_merge($left,[$base],$right);
  
}

冒泡排序

思路:法如其名,就像冒泡一样,每次从数组中冒出一个最大的数
比如:2,4,1
第一次冒出4:2,1,4
第二次冒出2:1,2,4

function bubbleSort($arr){  // 获取数组长度
  $length = count($arr);  // 第一层循环控制冒泡轮次
  for ($i=0; $i < $length-1; $i++) { 
    
    // 内层循环控制从第0个键值和后一个键值比较,每次冒出一个最大的数
    for ($k=0; $k < $length-$i; $k++) { 
      if($arr[$k] > $arr[$k+1]){
        $tmp = $arr[$k+1];
        $arr[$k+1] = $arr[$k];
        $arr[$k] = $tmp;
      }
    }
  }  return $arr;
}

选择排序

思路:每次选择一个相应的元素,然后将其放到指定的位置

function selectSort($arr){   
 // 实现思路  // 双重循环完成,外层控制轮数,当前的最小值,内层控制比较次数  // 获取长度  $length = count($arr);  
 for ($i=0; $i < $length - 1; $i++) { 
   // 假设最小值的位置    $p = $i;  
   // 使用假设的最小值和其他值比较,找到当前的最小值    for ($j=$i+1; $j < $length; $j++) { 
     // $arr[$p] 是已知的当前最小值  
     // 判断当前循环值和已知最小值的比较,当发下更小的值时记录下键,并进行下一次比较      if ($arr[$p] > $arr[$j]) {        $p = $j; // 比假设的值更小
     }
   }  
   // 通过内部for循环找到了当前最小值的key,并保存在$p中    // 判断 日光当前$p 中的键和假设的最小值的键不一致增将其互换    if ($p != $i) {      $tmp = $arr[$p];      $arr[$p] = $arr[$i];      $arr[$i] = $tmp;
   }
 }  // 返回最终结果
 return $arr;
}

相关推荐:

PHP中的运算符及PHP知识基础

关于PHP知识点的详细介绍

对PHP知识的有关介绍介绍

Das obige ist der detaillierte Inhalt vonTeilen Sie einige wichtige PHP-Wissenspunkte in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn