Maison > Article > développement back-end > [Compilation d'hématémèse] Plus de 40 questions d'entretien PHP avec réponses (expérience pratique)
Cet article résume pour vous plus de 40 questions et réponses d'entretien PHP. 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.
1. 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.
2. Quelle est la différence entre SESSION et COOKIE ? Veuillez expliquer les raisons et les fonctions du protocole ?
Un protocole http sans état ne peut pas distinguer si l'utilisateur provient du même site Web ou des mêmes utilisateurs demandant des informations différentes. les pages ne peuvent pas être considérées comme le même utilisateur.
B. SESSION est stocké 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 ne peut pas être utilisée normalement. Inconvénients de la session : elle est enregistrée côté serveur, et chaque lecture est lue depuis le serveur, ce qui consomme des ressources sur le serveur. La session est enregistrée dans un fichier ou une base de données côté serveur. Elle est enregistrée dans un fichier par défaut. Le chemin du fichier est spécifié par session.save_path dans le fichier de configuration PHP. Les fichiers de session sont publics.
3. Que signifient les codes 302, 403 et 500 dans le statut HTTP ?
Un, deux, trois, quatre et cinq principes : (c'est-à-dire un : série de messages ; deux : série de succès ; trois : série de redirection ; quatre : série d'erreurs de demande ; cinq : série d'erreurs côté serveur.)
302 : Temporaire Le transfert a réussi, le contenu demandé a été déplacé vers le nouvel emplacement
403 : Interdit
500 : Erreur interne du serveur
401 : Représente un accès non autorisé.
4. Veuillez noter la signification du type de données (int char varchar datetime text) ; quelle est la différence entre varchar et char ?
Int Integer char Caractère de longueur fixe Varchar Caractère de longueur variable Datetime Type datetime Texte Type de texte La différence entre Varchar et char char est un type de caractère de longueur fixe. La quantité d'espace allouée occupera autant d'espace. Varchar est un type de caractère de longueur variable. Il prend autant d'espace que le contenu, ce qui peut effectivement économiser de l'espace. Étant donné que le type varchar est variable, le serveur doit effectuer des opérations supplémentaires lorsque la longueur des données change, l'efficacité est donc inférieure à celle du type char.
5. Quelles sont les différences fondamentales entre MyISAM et InnoDB ? Comment la structure de l’index est-elle mise en œuvre ?
A. Le type MyISAM ne prend pas en charge les transactions et les verrous de table et est sujet à la fragmentation. Il a des vitesses de lecture et d'écriture rapides.
B. Le type InnoDB prend en charge les transactions et les verrous de ligne et a une capacité de récupération en cas de crash, la vitesse de lecture et d'écriture est plus lente que MyISAM, convient aux applications avec de nombreuses opérations d'insertion et de mise à jour, prend beaucoup d'espace, ne prend pas en charge l'indexation de texte intégral, etc. .
Créer un index : alert table tablename add index index name (`field name`)
6. La différence entre isset() et empty()
sset détermine si une variable existe. Plusieurs variables peuvent être transmises. dans. Si si une variable n'existe pas, elle renverra false ; si vide détermine si la variable est vide, elle sera fausse, une seule variable peut être transmise, et si elle est vide, elle retournera vrai.
https://jq.qq.com/?_wv=1027&k=55dPDrC
7. Veuillez expliquer la différence entre transmettre des valeurs et transmettre des références en PHP. Quand passer par valeur et quand passer par référence ?
Pass par valeur : toute modification apportée à la valeur dans la portée de la fonction sera ignorée en dehors de la fonction.
Pass par référence : toute modification apportée à la valeur dans la portée de la fonction reflétera également ces modifications en dehors de la fonction.
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 grandes chaînes et les objets. Le passage par référence ne nécessite pas de copier la valeur, ce qui permet d'améliorer les performances.
8. Quelle est la fonction de error_reporting en PHP ?
Définissez le niveau de rapport d'erreurs PHP et renvoyez le niveau actuel.
9. Parlez-moi de votre compréhension de la technologie de mise en cache ?
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 à revisiter la base de données.
10. La structure à trois couches MVC est souvent adoptée dans la programmation de nos jours. Quels sont les avantages ?
Les trois couches MVC font respectivement référence : modèle commercial, vue, contrôleur. La couche contrôleur appelle le modèle pour traiter les données, puis mappe les données sur la couche de vue pour l'affichage. Les avantages sont : ① Il peut réaliser du code. réutilisabilité et évite la génération de redondance du code ; ②Le code d'implémentation de M et V est séparé, afin que le même programme puisse utiliser différentes formes d'expression
11.
ajax est une technologie de transmission asynchrone qui peut être implémentée via javascript ou le framework JQuery pour obtenir un rafraîchissement partiel, ce qui réduit la pression sur le serveur et améliore l'expérience utilisateur.
12. Dans le développement du programme, comment améliorer l'efficacité opérationnelle du programme ?
A. Optimisez les instructions SQL. Essayez de ne pas utiliser select * dans les instructions de requête. Utilisez quel champ pour vérifier quel champ ; utilisez moins de sous-requêtes au lieu de connexions de table ;
B. ;
C. Génère un cache pour les données fréquemment utilisées dans le programme.
13. Pour les sites Web à fort trafic, quelle méthode utilisez-vous pour résoudre le problème de trafic
A Utilisez efficacement le cache pour augmenter le taux de réussite du cache
B. les fichiers sont stockés et accélérés à l'aide de cdn
D. Idées pour réduire l'utilisation des bases de données
E. Vérifiez où se trouvent les goulots d'étranglement des statistiques
F Proxy inverse
14. ? Afin d'éviter d'inclure le même fichier plusieurs fois, quelles instructions peuvent être utilisées pour les remplacer ? Différence :
En cas d'échec :
15, foo() et @fo Quel est le différence entre o() ?@ représente tous les avertissements et ignore
16. Décrivez brièvement le mécanisme de récupération de place de PHP. Réponse : Les variables en php sont stockées dans le conteneur de variables zval En plus de stocker les types et les valeurs de variables, zval possède également des champs is_ref et refcount. refcount indique le nombre d'éléments pointant vers la variable et is_ref indique si la variable a un alias. Si refcount est 0, le conteneur de variables est recyclé. Si le refcount d'un zval est supérieur à 0 après avoir été réduit de 1, il entrera dans le tampon mémoire. Lorsque le tampon atteint la valeur maximale, l'algorithme de recyclage parcourt le zval pour déterminer s'il s'agit d'un déchet et le libère.
17. Comment maximiser la sécurité de PHP ? Comment éviter les vulnérabilités d’injection SQL et les vulnérabilités de cross-site scripting XSS ? Réponse : Principes de base : Ne montrez pas les détails de conception du serveur ou du programme au monde extérieur (bloquez les erreurs), ne faites confiance à aucune donnée soumise par l'utilisateur (filtrez les soumissions des utilisateurs).
18, la différence entre echo, print_r, print, var_dump
19 Caractéristiques d'écriture de modèles intelligentsVitesse rapide, compilation, technologie de mise en cache, mécanisme de plug-in, logique de performances puissante
.20. Comment implémenter le saut de page en PHPMéthode 1 : saut de fonction PHP Inconvénient : il ne peut pas y avoir de sortie avant l'en-tête. Le programme après le saut continue de s'exécuter et la sortie peut être utilisée pour interrompre le. exécution du programme suivant.
header("Location:网址");//直接跳转 header("refresh:3;url=http://www.jsdaima.com");//三秒后跳转
Méthode 2 : Utilisation de méta
echo"";
21 Comment convertir une chaîne au format GB2312 au format UTF-8 ? iconv('GB2312','UTF-8','js代码(http://www.jsdaima.com)是IT资源下载与IT技能学习平台。');
22. Si vous devez afficher le contenu saisi par l'utilisateur tel quel, quelle fonction doit être utilisée pour traiter les données avant de les saisir dans la base de données ? htmlspecialchars ou htmlentities
23 Qu'est-ce qu'une attaque CSRF ? Attaque XSS ? Comment l’empêcher ? CSRF, falsification de requêtes inter-sites, où l'attaquant se fait passer pour un utilisateur et envoie des requêtes pour voler des informations ou endommager le système.
Parlons du principe de base : l'utilisateur visite le site A pour se connecter et génère un cookie, puis visite le site B. Si le site A présente une vulnérabilité CSRF, la requête du site B au site A à ce moment (ce qui équivaut à une visite d'un utilisateur), le site Web A pensera qu'il s'agit d'une demande envoyée par l'utilisateur, donc le site Web B réussit à dissimuler votre identité, c'est ce qu'on appelle une attaque de script intersite.
Prévention CSRF :
A. Standardisez raisonnablement la méthode de requête API, GET, POST
B Ajoutez une vérification de jeton à la requête POST, générez un code aléatoire et stockez-le dans la session, apportez ce code aléatoire dans le formulaire, et soumettre À ce moment, le serveur vérifie si les codes aléatoires sont les mêmes.
XSS, attaque de cross-site scripting.
Prévention : ne faites confiance à aucune entrée, filtrez l'entrée.
24. La sécurité est cruciale pour un programme. Veuillez me dire à quels mécanismes de sécurité il faut prêter attention pendant le développement ? A. Empêcher la soumission à distance ;
B. Empêcher l'injection SQL et filtrer les codes spéciaux ; C. Empêcher l'inondation de la machine d'enregistrement et utiliser le code de vérification.
25. Comprenez-vous le format de données json ? JSON (javascript object Notation) est un format d'échange de données léger. Le format de données json est fixe et peut être utilisé pour le transfert de données dans plusieurs langues. 26. Qu'est-ce qu'une transaction ? et ses caractéristiques ? Réponse : Transaction : Il s'agit d'une série d'opérations de base de données et de l'unité logique de base des applications de base de données. Caractéristiques des transactions : A. Atomicité : c'est-à-dire indivisibilité. Soit toutes les transactions sont exécutées, soit aucune n'est exécutée. Ou comprenez-le de cette façon : Une transaction est un groupe d'instructions SQL liées entre elles en tant qu'unité de travail logique. Si une opération d'instruction échoue, l'opération entière échouera et les opérations futures seront annulées. état avant l'opération, ou Il y a un nœud dessus. Pour garantir que quelque chose est exécuté ou non, des transactions peuvent être utilisées. Pour qu’une instruction groupée soit considérée comme une transaction, elle doit réussir les tests ACID, à savoir l’atomicité, la cohérence, l’isolement et la durabilité. 27. Qu'est-ce qu'un cadenas ? Réponse : La base de données est une ressource partagée utilisée par plusieurs utilisateurs. Lorsque plusieurs utilisateurs accèdent simultanément aux données, plusieurs transactions accèdent simultanément aux mêmes données dans la base de données. Si les opérations simultanées ne sont pas contrôlées, des données incorrectes peuvent être lues et stockées, détruisant la cohérence de la base de données. Le verrouillage est une technologie très importante pour réaliser le contrôle de la concurrence des bases de données. Avant qu'une transaction n'agisse sur un objet de données, elle envoie d'abord une demande au système pour le verrouiller. Après le verrouillage, la transaction a un certain contrôle sur l'objet de données. Avant que la transaction ne libère le verrou, les autres transactions ne peuvent pas mettre à jour l'objet de données. Types de verrous de base : les verrous incluent les verrous au niveau des lignes et les verrous au niveau des tables 28. Et quels sont ses avantages et ses inconvénients ? Réponse : Un index est une table de requête spéciale que le moteur de recherche de base de données peut utiliser pour accélérer la récupération des données. C'est très similaire à la table des matières d'un livre dans la vraie vie. Vous pouvez trouver les données souhaitées sans interroger l'intégralité du livre. Les index peuvent être uniques et la création d'un index vous permet de spécifier une seule ou plusieurs colonnes. L’inconvénient est que cela ralentit la saisie des données et augmente également la taille de la base de données. 29. Comment comprendre les trois paradigmes de manière populaire ? Première forme normale : 1NF est une contrainte atomique sur les attributs, qui nécessite que les attributs soient atomiques et ne peuvent pas être décomposés ; 30. Quelle est la différence entre clé primaire, clé étrangère et index ? Définition : Fonction : Numéro : 31, Décrivez brièvement les droits d'accès des modificateurs privés, protégés et publics. private : membres privés, accessibles uniquement à l'intérieur de la classe. 32. Quelle est la différence entre tas et pile ? A. Le tas est un espace mémoire alloué dynamiquement lors de l'exécution du programme. Vous pouvez déterminer la taille du tas à allouer en fonction des conditions d'exécution du programme 33. Quelles sont les méthodes magiques couramment utilisées ? Par exemple Réponse : PHP stipule que les méthodes commençant par deux traits de soulignement (__) sont réservées comme méthodes magiques, il est donc recommandé que le nom de votre fonction ne commence pas par __, sauf s'il s'agit de surcharger une méthode magique existante. __construct() 实例化类时自动调用。 34、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用? $this 当前对象 $this在当前类中使用,使用->调用属性和方法 35、作用域操作符::如何使用?都在哪些场合下使用? 调用类常量 36、__autoload()方法的工作原理是什么? 答:使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。 当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。 这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后 就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。 使用自动载入的魔术函数可以不必要写很多个include或者require函数。 37、简述高并发网站解决方案。 A、前端优化(CND加速、建立独立图片服务器) 39、在命令行中运行php程序 php indx.php A、从命令行运行php非常简单。但有些注意事项需要各位了解下,诸如$_SESSION之类的服务器变量是无法在命令行中使用的,其他代码的运行则和web服务器中完全一样; 延伸1: 延伸2:向php脚本传递参数: A、使用$argv or $argc参数接收 B、使用getopt函数 C、提示用户输入 40、你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在? A、PHP脚本的执行效率 a、代码脚本里计时; b、xdebug统计函数执行次数和具体时间进行分析,最好使用工具winCacheGrind分析; c、在线系统用strace跟踪相关进程的具体系统调用。 B、数据库SQL的效率 a、sql的explain(mysql),启用slow query log记录慢查询; b、通常还要看数据库设计是否合理,需求是否合理等。 41、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题。 A. Confirmer si le serveur peut prendre en charge le trafic actuel ; 42. La base de données MySQL est utilisée comme stockage du système de publication. L'augmentation de plus de 50 000 éléments par jour est estimée à trois ans d'exploitation et de maintenance. B. Choisissez le type de données de champ de table et le moteur de stockage appropriés, et ajoutez des index de manière appropriée ; Bibliothèque MySQL Séparation maître-esclave en lecture et en écriture ; A. Le type MyISAM ne prend pas en charge le traitement avancé tel que le traitement des transactions, mais le type InnoDB le fait InnoDB : prend en charge les transactions, les clés étrangères et d'autres fonctionnalités, ainsi que le verrouillage des lignes de données. Il prend beaucoup de place et ne prend pas en charge l'indexation en texte intégral, etc. 1 De nombreux étudiants qui travaillent ont du mal à demander un congé pour un entretien. En fait, de nombreuses entreprises organisent désormais des entretiens en soirée et des entretiens spéciaux le week-end. Tant que vous communiquez bien, cela ne devrait pas poser de problème si vous prenez le temps d'interroger trois entreprises en une journée. 2. L'ordre recommandé des entreprises de livraison est de s'échauffer d'abord avec une ou deux entreprises, puis de comparer les entreprises pour lesquelles vous avez confiance, puis les entreprises qui vous intéressent beaucoup, et enfin l'entretien sélectif. La principale raison pour laquelle vous organisez cette commande est que même si vous êtes très bon dans votre domaine, entrer dans l'état d'entretien nécessite un processus. Il est nécessaire de s'échauffer pour l'entretien. En passant, je tiens à souligner que la préparation à l'entretien est nécessaire. un entretien à l'avance, comme la lecture des questions d'entretien et la révision de livres techniques, sont très utiles. La principale raison de choisir à l’avance une entreprise fiable que vous aimez est d’obtenir une offre, d’une part pour vérifier votre estime de soi, et d’autre part pour vous sentir en confiance. Tutoriel vidéo PHP
B. Cohérence ou cordabilité. L'exécution d'une transaction convertit la base de données d'un état correct à un autre état correct
C. Isolation. Avant que la transaction ne soit correctement validée, toute modification apportée aux données par la transaction ne peut être transmise à aucune autre transaction,
D. Durabilité. Une fois qu'une transaction est soumise correctement, ses résultats seront enregistrés de manière permanente dans la base de données. Même s'il y a d'autres échecs après la soumission de la transaction, les résultats du traitement de la transaction seront enregistrés.
Deuxième forme normale : 2NF est une contrainte unique sur les enregistrements, qui nécessite que les enregistrements aient des identifiants uniques, c'est-à-dire ; , entités Unicité ;
Troisième forme normale : 3NF est une contrainte sur la redondance des champs, c'est-à-dire qu'aucun champ ne peut être dérivé d'autres champs, et nécessite que les champs ne soient pas redondants.
Clé primaire - identifie de manière unique un enregistrement, ne peut pas être dupliquée et ne doit pas être vide
Clé étrangère --la clé étrangère d'une table est la clé primaire d'une autre table, la clé étrangère peut être répété et peut être vide Valeur
Index - ce champ n'a pas de valeurs en double, mais peut avoir une valeur nulle
Clé primaire - utilisée pour garantir l'intégrité des données
Clé étrangère - utilisée pour établir des connexions avec d'autres tables
Index - oui Améliorer la vitesse de tri des requêtes
Clé primaire --il ne peut y avoir qu'une seule clé primaire
Clé étrangère --une table peut avoir plusieurs clés étrangères
Index --une table peut avoir plusieurs index uniques
protected : membres protégés, accessibles au sein de la classe et classes héritées.
public : membres publics, entièrement public, aucune restriction d'accès.
B. La pile est une mémoire ; espace alloué lors de la compilation, donc votre taille de pile doit être clairement définie dans le code.
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
self 当前类
parent 当前类的父类
self也在当前类中使用,不过需要使用::调用
parent在类中使用
调用静态方法
B、服务端优化(页面静态化、并发处理[异步|多线程]、队列处理)
C、数据库优化(数据库缓存[Memcachaed|Redis]、读写分离、分库分表、分区)
D、Web服务器优化(负载均衡、反向代理)
38、PHP遍历文件夹下所有文件e4ef26a3c0542c88b61633ff44decbe4';
read_all($temp);
}else{
if($fl !='.' && $fl != '..'){
echo '文件:'.$temp.'0c6dc11e160d3b678d68754cc175188a';
}
}
}
}
}
read_all("./dir/");
?>
B、在命令行中执行php文件的好处之一就是可以通过脚本实现一些计划任务(crontab)的执行,而无须通过web服务器。
php -v 显示当前PHP版本
php -m 显示当前php加载的有效模块
php -i 输出无html格式的phpinfo
php --rf function
提示:命令行下执行php,是不走Apache/Nginx等这类东西的,没有什么http协议,所以get,post传参数根本不起作用,并且还会报错。有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务。这就涉及到在shell命令下如何给php传参的问题,通常有三种方式传参。echo "接收到{$argc}个参数";
print_r($argv);
$param_arr = getopt('a:b:');
print_r($param_arr);
fwrite(STDOUT,'Please enter your name:');
echo 'Your name is:'.fgets(STDIN);
B. Optimiser l'accès à la base de données ;
C. Interdire les liens d'accès externes (hotlinking), tels que l'anti-hotlinking d'images ;
D. Contrôler les téléchargements de fichiers, en particulier les fichiers volumineux ; E , Utiliser différents hôtes pour décharger le trafic (équilibrage de charge) ;
F. Utiliser un logiciel de statistiques de navigation pour comprendre le nombre de visites et effectuer une optimisation ciblée.
D. Trouver des tables régulières, réduire la quantité de données dans une seule table et améliorer la vitesse des requêtes ;
E. Ajouter des mécanismes de mise en cache, tels que memcached, redis, etc. ; Générez des pages statiques pour les pages qui ne changent pas fréquemment ;
G. Écrivez du SQL efficace. Par exemple, SELECT * FROM TABEL est remplacé par SELECT field_1, field_2, field_3 FROM TABLE.
Autres, principalement quelques opinions personnelles et métaphysiques après l'entretien :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!