Maison  >  Article  >  Résumé des questions d'entretien PHP courantes (avec réponses)

Résumé des questions d'entretien PHP courantes (avec réponses)

藏色散人
藏色散人avant
2019-02-23 11:39:0379696parcourir

Cet article résume quelques questions d'entretien PHP courantes (avec réponses) pour tout le monde. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Résumé des questions d'entretien PHP courantes (avec réponses)

Je me souviens de mon premier entretien pour le poste PHP, je venais de sortir de l'école et je n'avais aucune idée de ce qu'était le marché, et ça était zéro Expérimenté (insérez une phrase ici, zéro expérience, si vous n'avez jamais été exposé au développement d'un projet complet ou semi-fini, l'entreprise ne voudra généralement pas de vous, car l'entreprise vous recrute parce qu'elle veut que vous l'aidiez à réaliser choses. Pour parvenir à l’amélioration de l’activité et des performances de l’entreprise). A cette époque, je viens de dire que la période d'essai était de 800 yuans. Bien sûr, c'était il y a de nombreuses années ! C’est aussi un prix assez bas, alors l’entreprise vient de le demander ! ! ! La raison est très simple, tout le monde la connaît !

[Recommandations associées : questions d'entretien php (résumé)]

Lorsque vous réalisez des projets dans une entreprise, la croissance est un processus et l'amélioration de vos propres compétences d'apprentissage est une clé situé. Avant d'entrer dans l'entreprise, vous passerez une ou deux séries d'entretiens et d'examens écrits. C'est le cas de tout le monde dans notre secteur, donc en plus des compétences d'expression orale (être capable de parler), il y a aussi de la force et de la capacité. C'est aussi ce que vos questions d'entretien exigent. Il existe de nombreux types de questions d’entretien, mais elles sont toutes indissociables des bases de PHP. Certaines personnes qui viennent de sortir peuvent ne pas comprendre les questions du test. Laissez-moi vous expliquer une méthode, je l'utilisais d'ailleurs à cette époque ! Je viens de mémoriser tous les types de questions ! La méthode est très démodée et irréaliste. Mais c'est très utile, car j'ai rencontré tous les types de questions courants ~~Peut-être que j'ai de la chance !

Vous pouvez apprendre de différentes manières ! Je suis déjà venu ici comme ça ! Maintenant, nous devons encore continuer à apprendre et à améliorer nos compétences, et nous continuerons à apprendre aussi longtemps que nous serons vieux ! Une fois pris dans un piège, il est difficile d'en sortir !

Ce qui suit recommande quelques questions d'entretien courantes, j'espère qu'elles vous seront utiles ! !

1. Le tri des bulles, assurez-vous de vous en souvenir avant l'entretien !

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. Tri rapide, assurez-vous de vous en souvenir avant l'entretien !

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. Veuillez expliquer la différence entre le passage par valeur et le passage par référence en PHP Quand devez-vous passer par valeur et quand devez-vous passer par référence ?

Pass by value : Toute modification de la valeur dans la portée de la fonction sera ignorée en dehors de la fonction.

Pass by reference : Toute modification de la valeur dans la portée de la fonction reflétera également ces modifications en dehors de la fonction. function

Avantages et inconvénients : Lors du passage par valeur, php doit copier la valeur. Cette opération peut s'avérer coûteuse, notamment pour les chaînes et les objets de grande taille. Le passage par référence ne nécessite pas de copier la valeur, ce qui permet d'améliorer les performances. (Les avantages et les inconvénients seront pris en compte)

4. Quelle est la principale différence entre les types de champs varchar et char dans la base de données MySQL ?

Varchar est une variable Long pour économiser de l'espace de stockage, char est une longueur fixe. L'efficacité de la recherche est plus rapide que celle du type char, car varchar est une longueur non fixe, et la longueur doit d'abord être recherchée, puis les données sont extraites, ce qui est une étape de plus que le type char à longueur fixe, donc l'efficacité est moindre.

5. Moteurs de stockage courants pour les bases de données MySQL et leurs différences ?

MyISAM : ne prend pas en charge les transactions, les verrous de table, est sujet à la fragmentation, doit être optimisé fréquemment, a des vitesses de lecture et d'écriture rapides et prend en charge l'indexation de texte intégral.

InnoDB : prend en charge les transactions, les verrous de ligne et les capacités de récupération après incident. La vitesse de lecture et d'écriture est plus lente que celle de MyISAM et l'indexation de texte intégral est prise en charge après la version 5.6.
Le moteur de stockage est basé sur des tables, pas sur des bases de données

(Cette question peut être plus détaillée si possible)

6. Pour les sites Web à fort trafic, quelles méthodes sont utilisées pour résoudre le problème de trafic ?

Tout d'abord, confirmez si le matériel du serveur est suffisant pour prendre en charge le trafic actuel.

Deuxièmement, optimisez l'accès à la base de données.

Troisièmement, les hotlinking externes sont interdits.

Quatrièmement, contrôlez le téléchargement de fichiers volumineux.

Cinquièmement, utilisez différents hôtes pour détourner le trafic principal

Sixièmement, utilisez un logiciel d'analyse du trafic et de statistiques

Septièmement, essayez d'utiliser des pages et un cache statiques

7. Qu'est-ce que l'orientation objet ? Quelles sont les principales caractéristiques ?

L'orientation objet est une méthode de conception de programmes, qui contribue à améliorer la réutilisabilité des programmes et rend la structure du programme plus claire. Principales caractéristiques : encapsulation, héritage, polymorphisme.

8. Quelle est la différence entre SESSION et COOKIE ? C'est le point clé

SESSION est stockée côté serveur, et COOKIE est stocké côté client. La session est relativement sécurisée. Les cookies peuvent être modifiés par certains moyens et ne sont pas sécurisés. La session s'appuie sur des cookies pour la livraison. Après avoir désactivé les cookies, la session peut toujours être utilisée. Dans le fichier stockant la session, l'ID de session est généré et l'ID de session est transmis à la page où la session doit être partagée via les paramètres get, et l'ID de session est lu. pour obtenir les données de la session.

Il est recommandé de rechercher des tutoriels détaillés sur la session et les cookies

9. Connaissez-vous la technologie de mise en cache ? redis est un point de test

1. La technologie de mise en cache consiste à mettre en cache le contenu dynamique dans des fichiers et à accéder aux pages dynamiques dans un certain laps de temps pour appeler directement les fichiers mis en cache sans avoir à revoir le base de données.

2. Utilisez Memcache pour la mise en cache.

10. La différence entre les méthodes de soumission get et post sous la forme

get est explicite et les données peuvent être vues à partir de l'URL. et transmises La quantité de données est faible et la sécurité est faible

la publication est implicite, la quantité de données transmises est importante et la sécurité est élevée

11. Méthodes pour optimiser la base de données

Sélectionnez les attributs de champ les plus applicables, réduisez autant que possible la largeur des champs définis et essayez de définir les champs sur NOTNULL

Utiliser les connexions (JOIN) au lieu de sous-requêtes

Utilisez l'union (UNION) pour remplacer les tables temporaires créées manuellement

Traitement des transactions

Verrouillez les tables et optimisez le traitement des transactions

Utilisez clés étrangères pour optimiser le verrouillage des tables

Utiliser des index

Optimiser les instructions de requête

12. Quelle est la différence entre les instructions include et require ? Quelle est la différence entre les instructions include et require ?

require est une inclusion inconditionnelle, c'est-à-dire que si require est ajouté à un processus, require sera exécuté en premier, que la condition soit vraie ou non. Lorsque le fichier n'existe pas. ou ne peut pas être ouvert, une erreur sera affichée. Et cela mettra fin à l'exécution du programme.

include a une valeur de retour, mais require n'en a pas (peut-être parce que require est plus rapide que include si le fichier inclus ne le fait pas). existe, une erreur sera demandée, mais le programme continuera à s'exécuter

13. Quelle est la différence entre redis, memcacahe et mongoDB ?

Ce sont toutes des bases de données non relationnelles avec de très hautes performances, mais mongoDB, memcache et redis sont deux types différents. Les deux derniers sont principalement utilisés pour la mise en cache des données. Le premier est principalement utilisé pour interroger et stocker des données volumineuses. Il s'agit de la base de données non relationnelle de type document la plus proche de la base de données.

Du point de vue de l'emplacement de stockage des données, les données Memcache sont stockées en mémoire, tandis que Redis peut être stocké en mémoire ou sur disque pour réaliser la fonction de stockage persistant. Une fois Memcache éteint, les données Si tout est. perdues, redis peut utiliser des instantanés et AOF pour stocker les données sur le disque lors de la récupération, il peut lire les données du disque dans la mémoire. Lorsque la mémoire physique est épuisée, les données peuvent être écrites sur le disque.

En termes de type de données stockées, memcache et redis stockent les deux paires clé-valeur, mais les valeurs redis ont des types plus riches, notamment string (string), hash (hash), list ( List), set (set) zset (ensemble ordonné) et memcache stocke principalement les chaînes.

14. Types de variables de base de PHP

Quatre types scalaires : booléen (Boolean), entier (entier), float (Type à virgule flottante, aussi appelé double), string (string)

deux types composites : array (array), object (object)

et enfin deux types spéciaux : ressource (Ressources), NULL (NULL)

15. Comment la staticisation est-elle réalisée ? Comment implémenter le pseudo-statique ?

1. La statique fait référence à la statique de page, c'est-à-dire à la génération de vrais fichiers statiques, c'est-à-dire que les données peuvent être obtenues directement à partir des fichiers sans interroger la base de données.
Il existe deux méthodes principales de mise en œuvre :

L'une est le fichier statique généré lorsque nous ajoutons des informations dans la base de données, également connu sous le nom de technologie de remplacement de modèle.

La première est que lorsque les utilisateurs visitent notre page, ils déterminent d'abord s'il existe un fichier cache correspondant et qu'il n'y a pas de base de données, un fichier cache est généré en même temps.

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 : La falsification de demande intersite fait référence à une demande faite par une page qui ressemble à un utilisateur de confiance du site Web, mais qui est falsifiée
Prévenir : Général Dans en d’autres termes, assurez-vous que l’utilisateur provient de votre formulaire et correspond à tous les formulaires que vous envoyez. Deux points doivent être rappelés :

Utiliser des mesures de sécurité appropriées pour les sessions utilisateur, telles que la mise à jour de l'ID pour chaque session et l'utilisation de SSL pour l'utilisateur.

Générez un autre jeton unique et intégrez-le dans le formulaire, enregistrez-le dans la session (une variable de session), vérifiez-le lors de la soumission. Par exemple, _token

Injection de code dans laravel : l'injection de code est provoquée par l'exploitation de vulnérabilités informatiques en traitant des données invalides. Le problème survient lorsque vous exécutez accidentellement du code arbitraire, généralement via l'inclusion de fichiers. Un code mal écrit peut permettre à un fichier distant d'être inclus et exécuté. Comme de nombreuses fonctions PHP, require peut contenir une URL ou un nom de fichier.
Empêcher l'injection de code

Filtrer les entrées utilisateur

Désactiver Allow_url_fopen et Allow_url_include dans php.ini. Cela désactivera les fichiers distants de require/include/fopen

Il existe de nombreux types de questions. J'espère que tout le monde découvrira et améliorera lentement ses compétences d'apprentissage au cours du processus d'apprentissage. Enfin, je souhaite à tous une bonne étude. . !

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer