Dieser Artikel fasst einige häufig gestellte PHP-Interviewfragen (mit Antworten) für alle zusammen. Freunde in Not können sich darauf beziehen.
Ich erinnere mich an mein erstes Vorstellungsgespräch für die PHP-Stelle, als ich gerade aus der Schule kam und keine Ahnung hatte, wie der Markt war, und so war es hatte null Erfahrung (fügen Sie hier einen Satz ein, null Erfahrung). Wenn Sie noch nie mit der Entwicklung eines vollständigen oder halbfertigen Projekts in Berührung gekommen sind, wird das Unternehmen Sie im Allgemeinen nicht haben wollen, weil das Unternehmen Sie rekrutiert, weil es möchte, dass Sie bei der Umsetzung mithelfen Dinge zu erreichen. Damals habe ich nur gesagt, dass die Probezeit 800 Yuan betrug. Natürlich ist das viele Jahre her! Es ist auch ein ziemlich niedriger Preis, also hat das Unternehmen einfach danach gefragt! ! ! Der Grund ist ganz einfach, jeder weiß es!
[Verwandte Empfehlungen: php-Interviewfragen (Zusammenfassung)]
Wachstum ist ein Prozess, wenn man Projekte in einem Unternehmen durchführt, und die Verbesserung der eigenen Lernfähigkeiten ist ein Schlüssel gelegen. Bevor Sie in das Unternehmen eintreten, müssen Sie ein oder zwei Interviewrunden absolvieren und schriftliche Tests absolvieren. Dies gilt für alle in unserer Branche. Daher sind neben den mündlichen Ausdrucksfähigkeiten auch Stärke und Fähigkeiten erforderlich ist auch das, was Ihre Interviewfragen verkörpern müssen. Es gibt viele Arten von Interviewfragen, aber sie sind alle untrennbar mit den Grundlagen von PHP verbunden. Einige Leute, die gerade herausgekommen sind, verstehen die Testfragen möglicherweise nicht. Lassen Sie mich Ihnen eine Methode nennen, ich habe sie damals tatsächlich verwendet! Habe gerade alle Fragetypen auswendig gelernt! Die Methode ist sehr altmodisch und unrealistisch. Aber es ist sehr nützlich, weil ich auf alle gängigen Fragetypen gestoßen bin. ~~ Vielleicht habe ich Glück!
Sie können auf unterschiedliche Weise lernen! Ich war schon einmal so hier! Jetzt müssen wir noch weiter lernen und unsere Fähigkeiten verbessern, und wir werden weiter lernen, solange wir alt sind! Wenn man einmal in der Falle steckt, ist es schwer, wieder herauszukommen!
Im Folgenden werden einige häufig gestellte Interviewfragen empfohlen. Ich hoffe, dass sie Ihnen nützlich sein werden! !
1. Blasensortierung, denken Sie unbedingt vor dem Vorstellungsgespräch daran!
function maopao($arr) { $len = count($arr); $n = count($arr) - 1; for ($i = 0; $i < $len; $i++) { for ($j = 0; $j < $n; $j++) { if ($arr[$j] > $arr[$j + 1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $tmp; } } } return $arr; }
2. Schnelle Sortierung, unbedingt vor dem Vorstellungsgespräch merken!
function quick_sort($array) { if (count($array) <= 1) return $array; $key = $array[0]; $left_arr = array(); $right_arr = array(); for ($i=1; $i<count($array); $i++){ if ($array[$i] <= $key) $left_arr[] = $array[$i]; else $right_arr[] = $array[$i]; } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr); }
3. Bitte erläutern Sie den Unterschied zwischen der Wertübergabe und der Referenzübergabe in PHP.
Wertübergabe: Funktion Alle Änderungen am Wert innerhalb des Gültigkeitsbereichs werden außerhalb der Funktion ignoriert
Übergabe als Referenz: Alle Änderungen am Wert innerhalb des Funktionsbereichs werden diese Änderungen auch außerhalb der Funktion widerspiegeln
Vor- und Nachteile: Durch Referenz 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. (Die Vor- und Nachteile werden berücksichtigt)
4. Was ist der Hauptunterschied zwischen den Feldtypen varchar und char in der MySQL-Datenbank?
Varchar ist eine Variable Long, um Speicherplatz zu sparen, char hat eine feste Länge. Die Sucheffizienz ist schneller als beim Typ char, da varchar keine feste Länge hat und zuerst nach der Länge gesucht und dann die Daten extrahiert werden müssen. Dies ist ein Schritt mehr als beim Typ char mit fester Länge, sodass die Effizienz höher ist untere.
5. Gemeinsame Speicher-Engines für MySQL-Datenbanken und ihre Unterschiede?
MyISAM: unterstützt keine Transaktionen und Tabellensperren, ist anfällig für Fragmentierung, muss häufig optimiert werden, hat schnelle Lese- und Schreibgeschwindigkeiten und unterstützt die Volltextindizierung.
InnoDB: unterstützt Transaktionen, Zeilensperren und Funktionen zur Wiederherstellung nach Abstürzen. Die Lese- und Schreibgeschwindigkeit ist langsamer als bei MyISAM und die Volltextindizierung wird ab 5.6 unterstützt.
Die Speicher-Engine basiert auf Tabellen, nicht auf Datenbanken
(Diese Frage kann nach Möglichkeit detaillierter sein)
6. Welche Methoden werden bei Websites mit hohem Datenverkehr verwendet, um das Verkehrsproblem zu lösen?
Bestätigen Sie zunächst, ob die Serverhardware ausreicht, um den aktuellen Datenverkehr zu unterstützen.
Zweitens optimieren Sie den Datenbankzugriff.
Drittens ist das externe Hotlinking verboten.
Viertens kontrollieren Sie den Download großer Dateien.
Fünftens: Verwenden Sie verschiedene Hosts, um den Hauptverkehr umzuleiten
Sechstens: Verwenden Sie Verkehrsanalyse- und Statistiksoftware.
Siebtens: Versuchen Sie, statische Seiten und Cache zu verwenden
7. Was ist objektorientiert? Was sind die Hauptmerkmale?
Objektorientiert ist eine Entwurfsmethode für Programme, die dazu beiträgt, die Wiederverwendbarkeit von Programmen zu verbessern und die Programmstruktur klarer zu machen. Hauptmerkmale: Kapselung, Vererbung, Polymorphismus.
8. Was ist der Unterschied zwischen SESSION und COOKIE? Dies ist der entscheidende Punkt
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 dem Deaktivieren von Cookies kann die Sitzung weiterhin verwendet werden. In der Datei, in der die Sitzung gespeichert ist, wird die Sitzungs-ID generiert und über Get-Parameter an die Seite übergeben, auf der die Sitzung geteilt werden soll, und die Sitzungs-ID wird gelesen um Daten aus der Sitzung zu erhalten.
Es wird empfohlen, nach detaillierten Tutorials zu Sitzungen und Cookies zu suchen
9. Kennen Sie sich mit Caching-Technologie aus? Redis ist ein Testpunkt
1. Die Caching-Technologie besteht darin, dynamische Inhalte in Dateien zwischenzuspeichern und innerhalb eines bestimmten Zeitraums auf dynamische Seiten zuzugreifen, um die zwischengespeicherten Dateien direkt aufzurufen, ohne sie erneut aufrufen zu müssen Datenbank.
2. Verwenden Sie Memcache zum Caching.
10. Der Unterschied zwischen Get- und Post-Übermittlungsmethoden im Formular
get ist explizit und die Daten sind aus der URL ersichtlich und übertragen Die Datenmenge ist gering und die Sicherheit gering.
Beitrag ist implizit. Die übertragene Datenmenge ist groß und die Sicherheit ist hoch.
11. Methoden um die Datenbank zu optimieren
Wählen Sie die am besten geeigneten Feldattribute aus, reduzieren Sie die Breite der definierten Felder so weit wie möglich und versuchen Sie, die Felder auf NOTNULL zu setzen
Verwenden Sie Verknüpfungen (JOIN) anstelle von Unterabfragen
Verwenden Sie Union (UNION), um manuell erstellte temporäre Tabellen zu ersetzen
Transaktionsverarbeitung
Tabellen sperren und Transaktionsverarbeitung optimieren
Verwenden Fremdschlüssel zur Optimierung von Sperrtabellen
Indizes verwenden
Abfrageanweisungen optimieren
12. Was ist der Unterschied zwischen include- und require-Anweisungen? Was ist der Unterschied zwischen den Anweisungen include und require?
require ist eine bedingungslose Einbindung, das heißt, wenn require zu einem Prozess hinzugefügt wird, wird require zuerst ausgeführt, unabhängig davon, ob die Bedingung wahr ist oder nicht, wenn die Datei nicht vorhanden ist oder nicht geöffnet werden kann, wird ein Fehler angezeigt und die Programmausführung wird abgebrochen.
include hat einen Rückgabewert, require jedoch nicht (vielleicht weil require schneller ist als include). Wenn vorhanden, wird ein Fehler angezeigt, das Programm wird jedoch weiterhin ausgeführt
13. Was ist der Unterschied zwischen Redis, Memcacahe und MongoDB?
Es sind alles nicht-relationale Datenbanken mit sehr hoher Leistung, aber MongoDB, Memcache und Redis sind zwei verschiedene Typen. Die beiden letzteren werden hauptsächlich zum Zwischenspeichern von Daten verwendet. Ersteres wird hauptsächlich zum Abfragen und Speichern großer Datenmengen verwendet. Es handelt sich um die nicht relationale Datenbank vom Typ Dokument, die der Datenbank am nächsten kommt.
Aus Sicht des Datenspeicherorts werden Memcache-Daten im Speicher gespeichert, während Redis im Speicher oder auf der Festplatte gespeichert werden kann, um die Funktion des dauerhaften Speichers zu erreichen. Sobald Memcache ausgeschaltet ist, sind die Daten vorhanden Bei Verlust kann Redis Snapshots und AOF verwenden, um die Daten auf der Festplatte zu speichern. Bei der Wiederherstellung können die Daten von der Festplatte in den Speicher gelesen werden. Wenn der physische Speicher aufgebraucht ist, können die Daten auf die Festplatte geschrieben werden.
In Bezug auf die Art der gespeicherten Daten speichern Memcache und Redis beide Schlüssel-Wert-Paare, aber Redis-Werte haben umfangreichere Typen, einschließlich Zeichenfolge (String), Hash (Hash), Liste (Liste), set (set) zset (ordered set) und Memcache speichern hauptsächlich Zeichenfolgen.
14. PHPs grundlegende Variablentypen
Vier Skalartypen: boolean (Boolean), Integer (Ganzzahl), Float (Gleitkommatyp, auch Double genannt), String (String)
zwei zusammengesetzte Typen: Array (Array), Objekt (Objekt)
und schließlich zwei spezielle Typen: Ressource ( Resources), NULL (NULL)
15. Wie wird die Statik erreicht? Wie implementiert man Pseudostatik?
1. Statik bezieht sich auf die Seitenstatik, also auf das Generieren echter statischer Dateien, das heißt, Daten können direkt aus Dateien abgerufen werden, ohne die Datenbank abzufragen.
Es gibt zwei Hauptimplementierungsmethoden:
Eine davon ist die statische Datei, die generiert wird, wenn wir Informationen zur Datenbank hinzufügen, auch bekannt als Template-Replacement-Technologie.
Einer ist, dass Benutzer beim Besuch unserer Seite zunächst feststellen, ob eine entsprechende Cache-Datei vorhanden ist und keine Datenbank vorhanden ist.
2、伪静态不是真正意义上的静态化,之所以使用伪静态,主要是为了SEO推广,搜索引擎对动态的文件获取难度大,不利于网站的推广。实习原理是基于Apache或Nginx的rewrite机智
主要有两种方式:
一种是直接在配置虚拟机的位置配置伪静态,这个每次修改完成后需要重启web服务器。
另一种采用分布式的,可以在网站的根目录上创建.htaccess的文件,在里面配置相应的重写规则来实现伪静态,这种每次重写时不需要重启web服务器,且结构上比较清晰。
16、Mysql的读写分离?(进阶的会遇到)
读写分离的实现原理就是在执行SQL语句的时候,判断到底是读操作还是写操作,把读的操作转向到读服务器上(从服务器,一般是多台),写的操作转到写的服务器上(主服务器,一般是一台,视数据量来看)。当然为了保证多台数据库数据的一致性,需要主从复制。
17、如何处理负载,高并发?
1、HTML静态化
效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
2、图片服务器分离
把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如七牛等
3、数据库集群和库表散列及缓存
数据库的并发连接为100,一台数据库远远不够,可以从读写分离、主从复制,数据库集群方面来着手。另外尽量减少数据库的访问,可以使用缓存数据库如memcache、redis。
4、镜像:
尽量减少下载,可以把不同的请求分发到多个镜像端。
5、负载均衡:
Apache的最大并发连接为1500,只能增加服务器,可以从硬件上着手,如F5服务器。当然硬件的成本比较高,我们往往从软件方面着手。
18、说一下单引号双引号?(基础考点)
单引号内部的变量不会执行, 双引号会执行
单引号解析速度比双引号快。
单引号只能解析部分特殊字符,双引号可以解析所有特殊字符。
19、PHP7的新特性?重点
标量类型声明:PHP 7 中的函数的形参类型声明可以是标量了。在 PHP 5 中只能是类名、接口、array 或者 callable (PHP 5.4,即可以是函数,包括匿名函数),现在也可以使用 string、int、float和 bool 了。
返回值类型声明:增加了对返回类型声明的支持。 类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。
NULL 合并运算符:由于日常使用中存在大量同时使用三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。
use 加强:从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了
匿名类:现在支持通过new class 来实例化一个匿名类
20、PHP 数组排序
sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort() - 根据键,以降序对关联数组进行排序
21、建立索引
(普通索引)-> 创建:CREATE INDEX <索引名> ON tablename (索引字段) 修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段) 创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段)) (唯一索引)-> 创建:CREATE UNIQUE <索引名> ON tablename (索引字段) 修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段) 创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段)) (主键)-> 它是唯一索引,一般在创建表是建立,格式为: CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
22、PHP支持多继承吗?
不支持。PHP中只允许单继承,父类可以被一个子类用关键字“extends”继承。
23、使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?
Memcahce是把所有的数据保存在内存当中,采用hash表的方式,每条数据又key和value组成,每个key是独一无二的,当要访问某个值的时候先按照找到值,然后返回结果。
Memcahce采用LRU算法来逐渐把过期数据清除掉。
24、优化MYSQL数据库的方法
(1)选择最有效率的表名顺序 (2)WHERE子句中的连接顺序 (3)SELECT子句中避免使用‘*’ (4)用Where子句替换HAVING子句 (5)通过内部函数提高SQL效率 (6)避免在索引列上使用计算。 (7)提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。 (1).选取最适用的字段属性,应该尽量把字段设置为NOT NULL (2).使用连接(JOIN)来代替子查询(Sub-Queries) (3).使用联合(UNION)来代替手动创建的临时表 (4).尽量少使用 LIKE 关键字和通配符 (5).使用事务和外键
25、MySQL主从备份的原理?
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
26、error_reporting() 的作用?
设置 PHP 的报错级别并返回当前级别。
27、如何修改session的生存时间
在php.ini 中设置 session.gc_maxlifetime = 1440 //默认时间
代码实现
$lifeTime = 24 * 3600; // 保存一天 session_set_cookie_params($lifeTime); session_start();
28、常见的 PHP 安全性攻击
SQL注入:用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行。
防止:
使用mysql_real_escape_string()过滤数据
手动检查每一数据是否为正确的数据类型
使用预处理语句并绑定变量
参数化SQL:是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,用@或?来表示参数。
XSS攻击 :跨站点脚本攻击,由用户输入一些数据到你的网站,其中包括客户端脚本(通常JavaScript)。如果你没有过滤就输出数据到另一个web页面,这个脚本将被执行。
防止:为了防止XSS攻击,使用PHP的htmlentities()函数过滤再输出到浏览器。
CSRF: Cross-Site Request Forgery bezieht sich auf eine Anfrage, die von einer Seite gestellt wird, die wie ein vertrauenswürdiger Benutzer der Website aussieht, aber gefälscht ist.
Verhindern: Allgemein In Mit anderen Worten: Stellen Sie sicher, dass der Benutzer von Ihrem Formular stammt und mit jedem von Ihnen gesendeten Formular übereinstimmt. Zwei Punkte müssen beachtet werden:
Verwenden Sie geeignete Sicherheitsmaßnahmen für Benutzersitzungen, z. B. die Aktualisierung der ID für jede Sitzung und die Verwendung von SSL für den Benutzer.
Generieren Sie ein weiteres einmaliges Token und betten Sie es in das Formular ein, speichern Sie es in der Sitzung (eine Sitzungsvariable) und überprüfen Sie es beim Absenden. Zum Beispiel _token
Code-Injection in Laravel: Code-Injection wird durch die Ausnutzung von Computerschwachstellen durch die Verarbeitung ungültiger Daten verursacht. Das Problem tritt auf, wenn Sie versehentlich beliebigen Code ausführen, normalerweise über die Dateieinbindung. Schlecht geschriebener Code kann dazu führen, dass eine Remote-Datei eingebunden und ausgeführt wird. Wie viele PHP-Funktionen kann require eine URL oder einen Dateinamen enthalten.
Code-Injection verhindern
Benutzereingaben filtern
allow_url_fopen undallow_url_include in php.ini deaktivieren. Dadurch werden die Remote-Dateien von require/include/fopen deaktiviert.
Es gibt viele Arten von Fragen. Ich hoffe, dass jeder während des Lernprozesses langsam seine Lernfähigkeiten entdeckt und verbessert . ! !