Fassen Sie 39 PHP-Interviewfragen zusammen und organisieren Sie sie (Zusammenfassungsfreigabe)

WBOY
Freigeben: 2023-04-10 22:34:02
nach vorne
8676 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über PHP. Er stellt hauptsächlich PHP-Interviewfragen vor und fasst 39 häufige Interviewfragen zusammen. Es gibt viele Arten von PHP-Interviewfragen, aber sie sind alle untrennbar mit den Grundlagen verbunden Häufige PHP-Interviewfragen. Ich hoffe, dass sie für alle hilfreich sind.

Fassen Sie 39 PHP-Interviewfragen zusammen und organisieren Sie sie (Zusammenfassungsfreigabe)

Empfohlene Studie: „PHP-Tutorial

Häufige PHP-Interviewfragen

1. Detailliert einen vollständigen HTTP-Anfrageprozess

Das ist der Kern des Problems Domänennamenauflösung und Serverauflösung (Nginx). Grundsätzlich können diese beiden Teile im Detail erklärt werden.

Schritt 1. Analysieren Sie die URL

Der Browser analysiert die aktuellen URL-Daten, um festzustellen, ob es sich bei der URL um einen legalen Link handelt. Wenn es sich um einen legitimen Link handelt, fahren Sie normal mit dem nächsten Schritt fort. Wenn es sich nicht um einen legalen Link handelt, wird die Suchfunktion ausgeführt, z. B. Baidu, 360, Google-Suche usw.

Schritt 2, Domänennamen auflösen

Der Server existiert in Form einer IP. Der Domänenname muss in IP aufgelöst werden. Es gibt drei kleine Schritte, um IP aufzulösen:

1), die Domänennamendaten aus dem Browser-eigenen Cache analysieren

2), den Domänennamen aus der HOST-Datei des lokalen auflösen Computer

3), den Domänennamen über den DNS-Server auflösen

Schritt 3, Informationen abrufen

In diesem Schritt erhalten wir die URL-Informationen, hauptsächlich die IP- und Portinformationen.

Schritt 4. Paketieren und Drei-Wege-Handshake durchführen

Der Browser packt die Anforderungsinformationen und überträgt die Daten über den Drei-Wege-Handshake von TCP an den Server.

Schritt 5: Server analysiert, verarbeitet und gibt Daten zurück

Der Server erhält die übergebenen Daten über verschiedene Ebenen und Methoden, analysiert und verarbeitet die Daten und gibt schließlich Antwort-MIME-Typdaten zurück. Der normale Statuscode ist 200 und die abnormalen Fehlercodes sind 404, 500, 501 usw.

Schritt 6. Der Browser ruft die Daten ab, rendert sie und zeigt sie an

Der Browser ruft die Daten vom Server ab, lädt Ressourcen, rendert die Seite usw. und zeigt die Seite dem Benutzer an.

2. Was ist der Unterschied zwischen SESSION und COOKIE?

1) Das HTTP-Stateless-Protokoll kann nicht unterscheiden, ob der Benutzer von derselben Website kommt oder nicht Seiten können nicht als derselbe Benutzer betrachtet werden.

2), SESSION wird auf der Serverseite gespeichert und COOKIE wird auf der Clientseite gespeichert. Sitzungen sind relativ sicher. Cookies können auf bestimmte Weise geändert werden und sind nicht sicher. Die Sitzung ist für die Bereitstellung auf Cookies angewiesen.

Nach der Deaktivierung von Cookies kann die Sitzung nicht normal genutzt werden. Nachteile der Sitzung: Sie wird auf der Serverseite gespeichert und jeder Lesevorgang wird vom Server gelesen, was Ressourcen auf dem Server verbraucht. Die Sitzung wird in einer Datei oder Datenbank auf der Serverseite gespeichert. Der Dateipfad wird standardmäßig durch session.save_path in der PHP-Konfigurationsdatei angegeben. Sitzungsdateien sind öffentlich.

3. Was bedeuten die Codes 302, 403 und 500 im HTTP-Status?

Eins, zwei, drei, vier und fünf Prinzipien: 1. Nachrichtenserie 2, Erfolgsserie 3. Redirect-Serie 4. Request-Fehlerserie 5. Serverseitige Fehlerserie

302: Temporäre Übertragung erfolgreich, der angeforderte Inhalt ist vorhanden wurde an den neuen Standort übertragen 403 :Zugriff verboten 500: Interner Serverfehler 401 bedeutet nicht autorisiert.

4. Befehle zum Erstellen und Dekomprimieren eines komprimierten Pakets unter Linux

Tar.gz:

Verpackung: tar czf file.tar.gz file.txt

Dekomprimieren: tar xzf file.tar.gz

Bz2 :

Paket: bzip2 [-k]-Datei

Dekomprimieren: bunzip2 [-k]-Datei

Gzip (nur Dateien, Originaldatei nicht behalten)

Paket: gzip-Datei1.txt

Dekomprimieren: gunzip-Datei1. txt.gz

Zip: -r Packen Sie das Verzeichnis

: zip file1.zip file1.txt

Dekomprimieren: entpacken Sie file1.zip

5. Bitte notieren Sie die Bedeutung des Datentyps (int char varchar datetime text); was ist der Unterschied zwischen varchar und char?

Int Integer char Zeichen mit fester Länge Varchar Zeichen mit variabler Länge Datetime Datetime-Typ Text Texttyp Der Unterschied zwischen Varchar und char char besteht darin, wie viel Platz ein Zeichentyp mit fester Länge belegt. Varchar ist ein Zeichentyp mit variabler Länge. Er nimmt genauso viel Platz ein wie der Inhalt, wodurch effektiv Platz gespart werden kann. Da der Typ varchar variabel ist, muss der Server zusätzliche Vorgänge ausführen, wenn sich die Datenlänge ändert, sodass die Effizienz geringer ist als beim Typ char.

6. Was sind die grundlegenden Unterschiede zwischen MyISAM und InnoDB? Wie wird die Indexstruktur implementiert?

Der MyISAM-Typ unterstützt keine Transaktionen und Tabellensperren und ist anfällig für Fragmentierung. Er muss häufig optimiert werden und verfügt über schnellere Lese- und Schreibgeschwindigkeiten, während der InnoDB-Typ Transaktionen und Zeilensperren unterstützt und über Funktionen zur Wiederherstellung nach Abstürzen verfügt. Die Lese- und Schreibgeschwindigkeiten sind langsamer als bei MyISAM.

Index erstellen: Alarmtabelle Tabellenname Index hinzufügen (‘Feldname’)

7. Senden Sie ein Cookie an den Client, ohne Cookies zu verwenden.

Verstehen: Wenn session_start() aktiviert ist, wird eine konstante SID generiert. Wenn COOKIE aktiviert ist, ist diese Konstante leer. Wenn COOKIE geschlossen ist, wird der Wert von PHPSESSID in dieser Konstante gespeichert. Durch Hinzufügen eines SID-Parameters nach der URL zur Übergabe des Werts von SESSIONID kann die Clientseite den Wert in SESSION verwenden. Wenn der Client COOKIE öffnet und der Server SESSION öffnet. Wenn der Browser die erste Anfrage stellt, sendet der Server ein COOKIE an den Browser, um die SESSIONID zu speichern. Wenn der Browser die zweite Anfrage stellt, speichert er die vorhandene

8 Der Unterschied zwischen isset() und empty().

Isset Um festzustellen, ob eine Variable vorhanden ist, können Sie mehrere Variablen übergeben. Wenn eine der Variablen nicht vorhanden ist, wird false zurückgegeben übergeben werden. Wenn es leer ist, wird true zurückgegeben.

9. Wie viele Möglichkeiten gibt es, Redis beizubehalten?

Antwort: Es gibt zwei Hauptmethoden:

1) Die Snapshot-Persistenz

wurde in der Redis-Konfigurationsdatei automatisch aktiviert.

Das Format lautet: N M speichern

bedeutet, dass Redis mindestens N Sekunden lang gespeichert hat M Vorkommen Nach der Änderung erstellt Redis einen Snapshot auf der Festplatte.

Natürlich können wir den Befehl save oder bgsave (asynchron) auch manuell ausführen, um einen Snapshot zu erstellen

2) Nur Datei anhängen AOF-Persistenz

Insgesamt gibt es drei Modi, z. B.

appendfsync everysec Der Standardwert ist erzwingen einmal pro Sekunde auf die Festplatte schreiben

appendfsync erzwingt bei jedem Schreibvorgang immer das Schreiben auf die Festplatte

appendfsync hängt nicht vollständig vom Betriebssystem ab, die Leistung ist am besten, die Persistenz kann jedoch nicht garantiert werden

Der dritte Modus ist der beste . Redis übernimmt standardmäßig auch den dritten Modus.

10.mysql-Speicher-Engine

Antwort: Die häufig verwendeten sind hauptsächlich in zwei Typen unterteilt, einer ist Innodb und der andere ist Myisam. Der Hauptunterschied zwischen den beiden ist

1) Myisam unterstützt keine Transaktionsverarbeitung , während innoDB die Transaktionsverarbeitung durchführt

2) myisam unterstützt keine Fremdschlüssel, innoDB unterstützt Fremdschlüssel

3) myisam unterstützt den Volltextabruf, während innoDB den Volltextabruf erst nach MySQL5.6-Version unterstützt

4) Die Die Speicherform der Daten ist unterschiedlich, Mysiam-Tabelle wird in drei Dateien gespeichert: Struktur, Index und Daten, und der Index und die Daten werden als eine Datei gespeichert Hinzufügen von Daten und innoDB führt eine höhere Stapellöschung durch.

6) myisam unterstützt Tabellensperren, während innoDB Zeilensperren unterstützt

11 Was ist SQL-Injection und wie kann man SQL-Injection verhindern?

Antwort: SQL-Injection-Angriffe beziehen sich darauf, dass Benutzer oder Hacker spezielle Eingaben erstellen und diese als Parameter an unsere Webanwendung übergeben und diese dann vom Angreifer ausführen, indem sie SQL-Anweisungen ausführen Der erforderliche Vorgang besteht darin, dass der Programmierer die vom Benutzer eingegebenen Daten nicht sorgfältig gefiltert hat, was dazu führt, dass illegale Daten in das System eindringen. Daher müssen wir die SQL-Injektion während des Entwicklungsprozesses verhindern, hauptsächlich aus zwei Aspekten:

1) Die Platzhaltermethode besteht darin, die SQL-Anweisung vorzuverarbeiten und dann die SQL-Anweisung auszuführen

2) Über addslashes oder mysql_real_escape_string Die beiden Funktionen maskieren die Werte Vom Benutzer eingegebene Zeichen und Escapezeichen für einige Sonderzeichen.

12. Haben Sie eine Vorverarbeitung verwendet?

Antwort: In der PDO-Klasse gibt es eine Prepare-Methode, die eine Vorverarbeitung durchführen kann. Eine davon ist: String-Platzhalter ., der andere ist? Platzhalter: String-Platzhalter werden in einem assoziativen Array übergeben, während? Platzhalter in einem Index-Array übergeben wird. Die beiden können nicht gemischt werden, es wird jedoch allgemein empfohlen, Folgendes zu verwenden: Zeichenfolgenplatzhalter.

13. Müssen Sie bei der Verwendung eines Frameworks Ihre eigene Verarbeitung verwenden?

Antwort: Im Allgemeinen berücksichtigen ausgereifte Open-Source-Frameworks die Datensicherheit, aber manchmal, wenn wir einige native SQL-Anweisungen verwenden, müssen Sie dies tun Erwägen Sie, die SQL-Anweisung selbst vorzuverarbeiten. Natürlich möchten wir manchmal die Filtermethode im Framework nicht verwenden. Wenn wir beispielsweise einen Texteditor verwenden, können wir unsere eigene Filtermethode verwenden.

14. Wie optimiert man MySQL?

Antwort: MySQL-Optimierung wird hauptsächlich aus den folgenden Aspekten erreicht:

1) Entwurfsperspektive: Auswahl der Speicher-Engine, Auswahl des Feldtyps, Paradigma

2) Funktionale Perspektive: Sie können die eigenen Eigenschaften von MySQL nutzen, z Indizes, Abfrage-Caching, Defragmentierung, Partitionierung, Tabellenaufteilung usw.

3) Optimierung von SQL-Anweisungen: Versuchen Sie, Abfrageanweisungen so weit wie möglich zu vereinfachen, so wenige Abfragefelder wie möglich zu verwenden, Paging-Anweisungen, Gruppierungsanweisungen usw. zu optimieren.

4) Stellen Sie ein Architektursystem mit großer Last bereit: Der Datenbankserver ist getrennt. Wenn die Last hoch ist, können Master-Slave-Replikation und Lese-/Schreib-Trennmechanismus für das Design verwendet werden.

5) Aktualisieren Sie den Datenbankserver von der Hardware.

15. Bitte erläutern Sie den Unterschied zwischen der Wertübergabe und der Referenzübergabe in PHP. Wann soll ein Wert und wann eine Referenz übergeben werden?

Übergabe als Wert: Alle Änderungen am Wert innerhalb des Funktionsumfangs werden außerhalb der Funktion ignoriert.

Übergabe als Referenz: Alle Änderungen am Wert innerhalb des Funktionsumfangs spiegeln diese Änderungen auch außerhalb der Funktion wider.

Vor- und Nachteile : Drücken Sie Wenn ein Wert übergeben wird, muss PHP den Wert kopieren. Insbesondere bei großen Strings und Objekten kann dies ein kostspieliger Vorgang sein. Bei der Referenzübergabe ist kein Kopieren des Werts erforderlich, was sich positiv auf die Leistungsverbesserung auswirkt.

16. Welche Funktion hat error_reporting in PHP?

Stellen Sie die Fehlerstufe von PHP ein und geben Sie die aktuelle Stufe zurück.

17. Verwenden Sie PHP, um den Schnellsortierungsalgorithmus zu beschreiben.

Prinzip: Die Schnellsortierung verwendet die Divide-and-Conquer-Strategie, um die zu sortierende Datensequenz in zwei Teilsequenzen aufzuteilen :

(1) Wählen Sie ein Element aus der Sequenz aus und nennen Sie dieses Element das „Datum“.

(2) Scannen Sie das Array einmal und ordnen Sie alle Elemente, die kleiner als die „Basis“ sind, vor der Basis und alle Elemente, die größer als die „Basis“ sind, hinter der Basis an.

(3) Teilen Sie jede Teilsequenz durch Rekursion in kleinere Sequenzen auf, bis das Unterarray von Elementen, die kleiner als der Referenzwert sind, und das Unterarray von Elementen, die größer als der Referenzwert sind, sortiert sind.

//快速排序(数组排序)
function QuickSort($arr){
 $num = count($arr);
 $l=$r=0;
 for($i=1;$i<$num;$i++){
  if($arr[$i] < $arr[0]){
   $left[] = $arr[$i];
   $l++;
  }else{
   $right[] = $arr[$i];
   $r++;
  }
 }
 if($l > 1){
  $left = QuickSort($left);
 }
 $new_arr = $left;
 $new_arr[] = $arr[0];
 if($r > 1){
  $right = QuickSort($right);
 }
 for($i=0;$i<$r;$i++){
  $new_arr[] = $right[$i];
 }
 return $new_arr;
}
Nach dem Login kopieren

18. Verwenden Sie PHP, um sequentielle Such- und Binärsuchalgorithmen zu beschreiben. Bei der sequentiellen Suche muss die Effizienz berücksichtigt werden. Das Objekt kann eine zweidimensionale Array-Sortierung sein Algorithmusfunktion, kann universell sein, Sie können die in PHP integrierte Funktion (array_multisort()) aufrufen

//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
 if ($low <= $high){
  $mid = intval(($low+$high)/2);
  if ($array[$mid] == $k){
   return $mid;
  }elseif ($k < $array[$mid]){
   return bin_sch($array, $low, $mid-1, $k);
  }else{
   return bin_sch($array, $mid+1, $high, $k);
  }
 }
 return -1;
}
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
 $array[$n] = $k;
 for($i=0; $i<$n; $i++){
  if($array[$i]==$k){
   break;
  }
 }
 if ($i<$n){
  return $i;
 }else{
  return -1;
 }
}
Nach dem Login kopieren

20 Damit der Benutzer eine Zeichenfolge $string eingeben kann, ist es erforderlich, dass $string nur Zahlen größer als enthalten kann 0 und englische Kommas, bitte verwenden Sie die Überprüfung regulärer Ausdrücke. Es wird eine Fehlermeldung für $string zurückgegeben, der die Anforderungen nicht erfüllt. Der Singleton-Modus erstellt ein Singleton-Objekt, das mit der MySQL-Datenbank verknüpft ist. Die PHP-Sitzungserweiterung speichert Sitzungsdaten standardmäßig in Wo? PHPs strtolower() und strtoupper() Die Funktion kann dazu führen, dass chinesische Zeichen in verstümmelte Zeichen umgewandelt werden, wenn sie auf einem Server mit einem nicht-chinesischen System installiert werden. Bitte schreiben Sie zwei alternative Funktionen, um eine mit Unicode-Text kompatible Zeichenkettenkonvertierung zu erreichen

Antwort : Der Grund ist: Chinesisch besteht aus mehreren Bytes. Nur das englische System verfügt nur über ein Byte für ein einzelnes englisches Zeichen. Daher führt das System für jedes Chinesisch-Byte eine strtolower ()-Verarbeitung durch und die geänderten chinesischen Zeichen werden verstümmelt zusammengefügt (neu generiert) Die der Codierungszuordnung entsprechenden Zeichen sind möglicherweise nicht chinesisch)Manuelle Lösung: Verwenden Sie str_split(string string, intstring, intsplit_length = 1), um jedes Byte wie Chinesisch zu schneiden, in das geschnitten werden kann drei Bytes. Handelt es sich bei den erkannten Bytes um englische Buchstaben, werden diese konvertiert.

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
 if (!is_array($arr)) {
  return false;
 }
 $keysvalue = array();
 foreach($arr as $key => $val) {
  $keysvalue[$key] = $val[$keys];
 }
 if($order == 0){
  asort($keysvalue);
 }else {
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach($keysvalue as $key => $vals) {
  $keysort[$key] = $key;
 }
 $new_array = array();
 foreach($keysort as $key => $val) {
  $new_array[$key] = $arr[$val];
 }
 return $new_array;
}
Nach dem Login kopieren

24. Die Funktion is_writeable() von PHP weist einen Fehler auf und kann nicht genau bestimmen, ob ein Verzeichnis/eine Datei beschreibbar ist.

Antwort: Es gibt zwei Aspekte von der Fehler. , 1) Wenn die Datei unter Windows nur ein schreibgeschütztes Attribut hat, gibt die Funktion is_writeable() false zurück. Wenn true zurückgegeben wird, ist die Datei nicht unbedingt beschreibbar. Wenn es sich um ein Verzeichnis handelt, erstellen Sie eine neue Datei im Verzeichnis und prüfen Sie, indem Sie die Datei öffnen.

Wenn es sich um eine Datei handelt, können Sie testen, ob die Datei beschreibbar ist, indem Sie die Datei öffnen (fopen).

2) Unter Unix ist is_writeable() ebenfalls nicht verfügbar, wenn „safe_mode“ in der PHP-Konfigurationsdatei aktiviert ist (safe_mode=on).

Lesen Sie die Konfigurationsdatei, um zu sehen, ob der Safe_Mode aktiviert ist.

/**
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers when you really can't write to
* the file, based on the read-only attribute. is_writable() is also unreliable
* on Unix servers if safe_mode is on.
*
* @access   private
* @return   void
*/
if ( ! function_exists('is_really_writable'))
{
    function is_really_writable($file)
    {
    // If we're on a Unix server with safe_mode off we call is_writable
    if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE)
    {
        return is_writable($file);
    }
 
    // For windows servers and safe_mode "on" installations we'll actually
    // write a file then read it. Bah...
    if (is_dir($file))
    {
        $file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100));
 
        if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
        {
            return FALSE;
        }
 
        fclose($fp);
        @chmod($file, DIR_WRITE_MODE);
        @unlink($file);
        return TRUE;
    } elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
        return FALSE;
    }
 
    fclose($fp);
    return TRUE;
    }
}
Nach dem Login kopieren

25.PHP处理上传文件信息数组中的文件类型$_FILES[‘type’]由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠

答:用getimagesize来判断上传图片的类型比$_FILES函数的type更可靠 
同一个文件,使用不同的浏览器php返回的type类型是不一样的,由浏览器提供type类型的话, 
就有可能被黑客利用向服务器提交一个伪装撑图片后缀的可执行文件。 
可以通过getimagesize()函数来判断上传的文件类型,如果是头像文件 会返回这样的一个数组

Array
(
    [0] => 331
    [1] => 234
    [2] => 3
    [3] => width="331" height="234"
    [bits] => 8
    [mime] => image/png
);
Nach dem Login kopieren

26.如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?

答:基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交) 

1)屏蔽错误,将display_errors 设置为off 
2)过滤用户提交参数,这里需要注意的是不能仅仅通过浏览器端的验证,还需要经过服务器端的过滤

这里是需要注意最多的地方,因为所有用户提交的数据入口都在这里,这是过滤数据的第一步。
      1 考虑是否过滤select,insert,update,delete,drop,create等直接操作数据的命令语句
      2 使用addslashes 将所有特殊字符过滤
      3 打开magic_quotes_gpc,开启该参数数后自动将sql语句转换,将 ' 转换成  \'
Nach dem Login kopieren

3)可以考虑设置统一入口,只允许用户通过指定的入口访问,不能访问未经许可的文件等内容 
4)可以考虑对安全性要求高的文件进行来源验证,比如要想执行b.php必须先执行a.php,可以在b.php中判断来自a.php的referer,避免用户直接执行b.php

27.请写出让PHP能够在命令行下以脚本方式执行时安装PHP所必须指定的configure参数,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

答:由于 –enable-cli 和 –enable-cgi 同时默认有效,因此,不必再配置行中加上 –enable-cli 来使得 CLI 在 make install 过程中被拷贝到 {PREFIX}/bin/php

php -f “index.php” 
php -r “print_r(get_defined_constants());”
Nach dem Login kopieren

28.PHP的垃圾收集机制是怎样的?

说明: 
1)如果,你熟悉PHP源码,那么请从源码入手,回答些问题,会获得额外加分 
2)如果,你不熟悉PHP源码,那么尽你所能,多写点东西,包括利用自己的编程直觉得到的信息,都可以。 
3)对,则有分,错误不扣,不写无分。

答:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

29.get和post的区别?

1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
Nach dem Login kopieren

30.如何修改会话的生存时间?

一:在php.ini中设置session.gc_maxlifetime = 1440 //默认时间
二:代码实现      $ lifeTime = 24 * 3600; //保存一天
    session_set_cookie_params($ lifeTime); 
    在session_start();
Nach dem Login kopieren

31.微信支付回调失败该如何处理?

他问的是已经支付成功后,但是回调失败了。

自己可以创建定时任务在每天的凌晨执行,去微信那边对账,然后更新数据库订单状态。

32.调用区块链接口的安全措施,有那些实现方法?

来自PHP技术交流群 群友分享

  1. 使用MD5实现对接口加签,目的是为了防止篡改数据。
  2. 基于网关实现黑明单与白名单拦截
  3. 可以使用rsa非对称加密 公钥和私钥互换
  4. 如果是开放接口的话,可以采用oath2.0协议
  5. 使用Https协议加密传输,但是传输速度慢
  6. 对一些特殊字符实现过滤 防止xss、sql注入的攻击
  7. 定期使用第三方安全扫描插件
  8. 接口采用dto、do实现参数转化 ,达到敏感信息脱敏效果
  9. 使用token+图形验证码方法实现防止模拟请求
  10. 使用对ip访问实现接口的限流,对短时间内同一个请求(ip)一直访问接口 进行限制。

33.服务器受到dos攻击,这个问题如何应付?

看看你的服务的访问日志,在防火墙中加过滤,或者在web服务器中加过滤吧。方法有以下几种。

  • 对于特定的IP访问的情况,限制IP访问
  • 限制同一IP在单位时间内的访问次数
  • 上级服务器,提高吞吐能力

是消耗服务器资源为主还是纯流量攻击?消耗资源的可以通过配置防火墙过滤规则防御中小规模的攻击。如果是纯流量攻击,考虑你用的是linode真心无解。即便你封了IP封了端口也没用,人家不管你接不接受他的请求,他都会塞满你的带宽。linode必然认为你是被流量攻击或者消耗过多资源然后给你挂起。

34.简述Linux下安装Mysql的过程?

Groupadd mysql 添加一个用户组mysql
Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
Cd /lamp/mysql 进入mysql目录
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make
Make all
Nach dem Login kopieren

35.对于大流量的网站,您采用什么样的方法来解决访问量问题?

优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:

  • 确定当前服务器设备是否满足流量需求。
  • 使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
  • 禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
  • 控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
  • 使用不同的主机分流主要流量,使服务器均衡负载。
  • 使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。

36.对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

1)索引的目的是什么?

  • 快速访问数据表中的特定信息,提高检索速度
  • 创建唯一性索引,保证数据库表中每一行数据的唯一性
  • 加速表和表之间的连接
  • 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

2) 索引对数据库系统的负面影响是什么?

负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

3) 为数据表建立索引的原则有哪些?

  • 在最频繁使用的、用以缩小查询范围的字段上建立索引
  • 在平频繁使用的、需要排序的字段上建立索引

4) 什么情况下不宜建立索引?

  • 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
  • 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的知道等。

37.PHP字符串中单引号与双引号的区别?

单引号不能解释变量,而双引号可以解释变量。

单引号不能转义字符,在双引号中可以转义字符。

38.求两个日期的差数,例如2021-2-5 ~ 2021-3-6 的日期差数

方法一:
<?php
class Dtime{
 function get_days($date1, $date2){
  $time1 = strtotime($date1);
  $time2 = strtotime($date2);
  return ($time2-$time1)/86400;
 }
}
$Dtime = new Dtime;
echo $Dtime->get_days(’2021-2-5′, ’2021-3-6′);
?>
方法二:
<?php
$temp = explode(‘-’, ’2021-2-5′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’2021-3-6′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法三:echo abs(strtotime(“2021-2-5″)-strtotime(“2021-3-1″))/60/60/24 计算时间差
Nach dem Login kopieren

39.有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)

<?php
function BubbleSort(&$arr){
 $cnt=count($arr);
 $flag=1;
 for($i=0;$i<$cnt;$i++){
 if($flag==0){
  return;
 }
 $flag=0;
 for($j=0;$j<$cnt-$i-1;$j++){
  if($arr[$j]>$arr[$j+1]){
   $tmp=$arr[$j];
   $arr[$j]=$arr[$j+1];
   $arr[$j+1]=$tmp;
   $flag=1;
  }
 }
 }
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
Nach dem Login kopieren

推荐学习:《PHP视频教程

Das obige ist der detaillierte Inhalt vonFassen Sie 39 PHP-Interviewfragen zusammen und organisieren Sie sie (Zusammenfassungsfreigabe). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:csdn.net
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage