Maison >développement back-end >tutoriel php >Partage récapitulatif des questions clés de l'entretien PHP (2)

Partage récapitulatif des questions clés de l'entretien PHP (2)

小云云
小云云original
2018-03-22 13:41:293850parcourir

Plus tôt, nous avons partagé avec vous les questions clés de l'entretien PHP (1). Cet article partage principalement avec vous le résumé des questions clés de l'entretien PHP (2).

1. Connaissances théoriques

1.1. PHP est-il sensible à la casse ?

PHP n'est pas sensible à la casse pour les fonctions système, les fonctions définies par l'utilisateur, les noms de classe, etc.

Les variables et constantes en PHP sont Sensible à la casse

Le nom du fichier dépend du système d'exploitation du serveur. Il se distingue sous Linux mais pas sous Win

1.2, $. _POST , quelle est la différence entre $HTTP_RAW_POST_DATA et php://input ?

$_POST :

sert à obtenir les données POST du formulaire, le type de média est "application/x-www-form-urlencoded" .

Cela signifie que le nom et la valeur du champ sont codés. Chaque paire clé-valeur est séparée par des caractères « & », la clé et la valeur sont séparées par « = » et d'autres caractères spéciaux. sera Encode en utilisant urlencode.

$HTTP_RAW_POST_DATA :

Vous pouvez obtenir les données POST d'origine, mais elles doivent être activées dans php.ini et ne prennent pas en charge méthode enctype=" Données transmises dans multipart/form-data"

php://input :

peut obtenir les données POST d'origine, et c'est mieux que $ HTTP_RAW_POST_DATA consomme moins de mémoire et ne prend pas en charge "multipart/form-data"

Vous pouvez utiliser la fonction file_get_contents() pour obtenir son contenu

1.3. Une méthode qui n'est pas définie statiquement peut-elle être appelée sous la forme de « nom d'objet :: nom de méthode » ?

générera une erreur stricte, mais l'exécution du code continuera. Reportez-vous à « PHP appelant statiquement des méthodes non statiques ». Cet article parle également d'un concept "call scope". Un appel statique ne signifie pas qu'il y a : cela signifie un appel statique, mais cela dépend de la portée de l'appel. L'objet pointé par le pointeur $this est la portée appelante lorsque cette méthode est appelée.

Lisez cet article pour plus de détails : http://www.cnblogs.com/whoamme/p/3728052.html

1.4. Expliquez brièvement votre travail de développement le plus fier

1.5 Pour les sites Web à fort trafic, quelles méthodes utilisez-vous pour résoudre le problème des statistiques de visites de pages

a. Confirmez si le serveur peut prendre en charge le trafic actuel.

b. Optimiser l'accès à la base de données. (Référence 3.5)

c. Interdire l'accès externe aux liens (hotlinking), comme le hotlinking d'images.

d. Contrôler les téléchargements de fichiers.

e. Utilisez différents hôtes pour répartir le trafic.

f. Utiliser un logiciel de statistiques de navigation pour comprendre le nombre de visites et effectuer une optimisation ciblée.

1.6. Veuillez présenter le principe de la session

Parce que HTTP est sans état, le client et le serveur ne changeront pas une fois la requête terminée. Il n’y a plus de relation, personne ne connaît personne.

Cependant, en raison de certains besoins (tels que le maintien du statut de connexion, etc.), le serveur et le client doivent rester en contact, et l'ID de session devient le support de ce contact.

Lorsqu'un utilisateur visite le site pour la première fois, PHP utilisera la fonction session_start() pour créer un identifiant de session pour l'utilisateur, qui est l'identifiant unique de cet utilisateur,

Chaque utilisateur visiteur obtiendra un identifiant de session unique. Cet identifiant de session sera stocké dans le cookie dans l'en-tête de réponse puis envoyé au client.

De cette façon le client se verra attribuer un identifiant de session qui lui sera attribué par le site.

Lorsque l'utilisateur visite le site pour la deuxième fois, le navigateur enverra le cookie stocké localement (qui contient l'ID de session obtenu la dernière fois) au serveur avec la demande <.>

Après avoir reçu la demande, le serveur détectera s'il existe un identifiant de session. S'il y en a, il trouvera le fichier de session de réponse et lira les informations ; comme la première fois. Créez-en un nouveau.

1.7. Solution au problème de partage de session

a Le cookie client est enregistré côté client de manière cryptée par cookie, chacun. time Les informations de session sont écrites sur le client puis soumises à nouveau au serveur via le navigateur.

b. La synchronisation de session entre les serveurs utilise l'architecture de serveur maître-esclave Lorsque l'utilisateur se connecte sur le serveur maître, les informations de session sont transférées à chaque serveur via un script ou un processus démon. . Depuis le serveur

c. Utilisez le cluster pour gérer la session de manière uniforme Lorsque le système d'application a besoin d'informations de session, il les lit directement à partir du serveur du cluster de session. utilisez Memcache pour gérer le stockage de la session.

d. Conserver la session dans la base de données La base de données actuellement utilisée lors de l'utilisation de cette solution est généralement MySQL.

Reportez-vous à "Recherche sur les solutions de mise en œuvre du partage de session"

1.8, aux outils pour tester les performances PHP et aux méthodes pour trouver les goulots d'étranglement.

XHProf (voir ici pour la méthode d'installation de Windows) est un outil d'analyse des performances PHP en couches. Il rapporte le nombre de requêtes et diverses mesures au niveau de la fonction, notamment le temps de blocage, le temps CPU et l'utilisation de la mémoire.

Il dispose d'une interface utilisateur HTML simple. L'interface utilisateur d'analyse des performances basée sur un navigateur est plus facile à visualiser et peut également dessiner des diagrammes d'appels. Afficher les valeurs des paramètres.

1.9. Présenter les principes communs du SSO (single sign-on).

SSO est un mécanisme d'authentification et d'autorisation unifié. Après avoir réussi la vérification de sécurité dans une application, vous n'avez plus besoin de vous reconnecter pour vérifier lorsque vous accédez à des ressources protégées dans d'autres applications.

Solution : les utilisateurs n'ont besoin de se connecter qu'une seule fois pour accéder à tous les systèmes d'application mutuellement fiables sans avoir à se connecter à plusieurs reprises.

Un système d'authentification unifié est l'une des conditions préalables au SSO. La fonction principale du système d'authentification est de comparer les informations de connexion de l'utilisateur avec la base de données d'informations utilisateur et d'authentifier l'utilisateur

Après une authentification réussie, le système d'authentification doit générer une marque d'authentification unifiée ( ticket) ), restitué à l’utilisateur. De plus, le système d'authentification doit également vérifier le ticket pour déterminer sa validité.

Référez-vous à "Single Sign-On SSO"

1.10. Caractéristiques du framework PHP que vous avez étudié, quels problèmes il résout principalement, et comment il se compare aux différences d'autres frameworks.

1.11. Plan d'utilisation de session qui désactive les cookies

a. Transmettez la valeur via l'URL et ajoutez l'identifiant de session à l'URL (inconvénients : Il ne peut pas y avoir de pages purement statiques dans l'ensemble du site, car l'identifiant de session de la page purement statique ne sera pas transmis à la page suivante)

b En masquant le formulaire, mettez l'identifiant de session. dans la partie cachée du formulaire Soumettez la zone de texte avec le formulaire (inconvénient : cela ne s'applique pas aux situations hors formulaire où la balise saute directement)

c . Configurez directement le fichier php.ini, définissez session.use_trans_sid= 0 dans le fichier php.ini sur 1 (il ne semble pas pris en charge sur Win)

d Enregistrez l'ID de session dans. un fichier, une base de données, etc., sur une page croisée Appeler manuellement

1.12 Quelles sont les technologies de mise en cache PHP ?

1. Mise en cache statique pleine page, c'est-à-dire que toutes les pages sont générées sous forme de pages statiques HTML, auxquelles les utilisateurs accèdent directement lors de leur visite, sans passer par le processus d'analyse du serveur PHP

2. Mise en cache partielle des pages, mise en cache statique des parties d'une page qui ne changent pas fréquemment, tandis que les blocs qui changent fréquemment ne sont pas mis en cache et sont finalement assemblés pour être affichés

3 . Mise en cache des données, les données demandées via un identifiant sont mises en cache dans un fichier php. L'identifiant et le fichier correspondent. La prochaine fois qu'une requête est faite via cet identifiant, le fichier php est directement lu

.

4. Cache de requêtes, similaire au cache de données, mis en cache en fonction des instructions de requête

5. >Reportez-vous à « Résumé des 9 principales technologies de mise en cache en PHP »

1.13. Quelles sont les caractéristiques des données au format JSON

a. JSON est un format d'échange de données léger. Il est basé sur un sous-ensemble d'ECMAScript.

b. JSON utilise un format de texte totalement indépendant du langage, mais utilise également des conventions similaires à la famille des langages C (notamment C, C++, C#, Java, JavaScript, Perl, Python, etc. .)

c. Ces fonctionnalités font de JSON un langage d'échange de données idéal. Facile à lire et à écrire pour les humains, et facile à analyser et à générer pour les machines (taux de transmission réseau).

d. Une collection de paires "nom/valeur". Dans différentes langues, il est compris comme objet, enregistrement, structure, dictionnaire, table de hachage, liste à clés, etc. 🎜>

e. Une liste ordonnée de valeurs, qui est comprise dans la plupart des langages comme un tableau

Reportez-vous à "Introduction à JSON"

1.14, la différence entre isset(), empty() et is_null

isset() : uniquement lorsque null et indéfini, renvoie false

empty() : "", 0, "0", NULL, FALSE, array(), non défini, all Return true

is_null () : déterminer uniquement s'il est nul, avertissement non défini

1.15, avantages et inconvénients de MVC

Avantages :

Concentration diffuse, couplage lâche, réutilisation logique, définition standard

a Développeur Vous ne pouvez vous concentrer que sur une certaine couche de la structure entière pour faciliter la division de. travail entre plusieurs développeurs

b Vous pouvez facilement remplacer la couche d'implémentation d'origine par une nouvelle implémentation

c. 🎜>

d. Faciliter la réutilisation de la logique à chaque couche et la standardisation

e. Inconvénients :

a. Architecture claire avec du code Au détriment de la complexité, l'optimisation des petits projets peut en fait réduire l'efficacité du développement

b. . Performances du système réduites, par exemple, l'accès des entreprises à la base de données doit désormais être effectué via la couche intermédiaire

c. La couche de contrôle et la couche de présentation sont parfois trop proches, ce qui entraîne non. séparation et réutilisation réelles

d. Parfois, cela entraînera des modifications en cascade, si dans la représentation Pour ajouter une fonction au calque, afin d'assurer le respect de la structure en couches, cela peut être nécessaire d'ajouter le code correspondant à la couche de contrôle et à la couche de modèle correspondantes

Compréhension de MVC :

MVC est l'idée de​ ​un projet de développement. Un projet peut être divisé en trois parties : partie données (Modèle modèle), partie logique métier (Contrôleur), représentation externe des données (Vue Vue),

Le client demande au contrôleur du projet. Si des données sont nécessaires pendant l'exécution, le contrôleur obtiendra les données du modèle, puis affichera les données obtenues via la vue.

1.16. Quelle est la différence entre les guillemets simples et les guillemets doubles en PHP ? Lequel est le plus rapide ?

Les guillemets simples sont plus rapides

Les données entre guillemets simples ne seront pas analysées (les variables et les caractères d'échappement spéciaux), elles sont donc plus rapides.

Les guillemets doubles doivent d'abord rechercher s'il y a des variables dans l'instruction. Les données entre guillemets doubles seront analysées. Par exemple, la valeur de la variable ($var) sera remplacée. dans la chaîne. Caractères d'échappement spéciaux Il sera également analysé en un seul caractère spécifique

Au fait, voici un délimiteur (syntaxe heredoc) "<<<",

Sa fonction est d'afficher ce qu'il contient tel quel, y compris le format de nouvelle ligne, etc. Les caractères spéciaux n'ont pas besoin d'être échappés. Les variables seront remplacées par leurs valeurs ​. ​normalement

1.17. Brève description de GBK, GBK2312, BIG5, GB18030

GB2312 prend en charge moins de caractères chinois que GBK. GB2312, y compris tous les caractères chinois chinois, japonais et coréens

Par rapport au GBK, GB18030 ajoute quelques caractères chinois de minorités ethniques et la bibliothèque de caractères chinois est plus diversifiée, ce qui est rarement utilisé par les ordinaires. people

Généralement, le chinois simplifié utilise GBK à la place. Le chinois traditionnel utilise BIG5

1.18. Quelle est la différence entre l'interface et la classe abstraite ?

Classe abstraite :

La classe abstraite est une classe qui ne peut pas être instanciée et ne peut être utilisée que comme classe parent d'autres classes abstraites. class Elle est déclarée via le mot-clé abstract

Les classes abstraites sont similaires aux classes ordinaires, contenant toutes deux des variables membres et des méthodes membres. La différence entre les deux est que la classe abstraite en contient au moins une. méthode abstraite

Les méthodes abstraites n'ont pas de corps de méthode, et cette méthode doit intrinsèquement être remplacée par des sous-classes

Le format d'une méthode abstraite est : abstract function abstractMethod()

Les sous-classes héritent des classes abstraites en utilisant l'interface extends

 :

L'interface se fait via le mot-clé interface Pour déclarer que les constantes membres et les méthodes de l'interface sont publiques, la méthode n'a pas besoin d'écrire le mot-clé public

La méthode dans l'interface a également pas de corps de méthode, et la méthode dans l'interface est également née L'interface

à implémenter par les sous-classes peut implémenter l'héritage multiple

les sous-classes implémentent l'interface utilisant des implémentations

1.20. La différence entre le passage par valeur et le passage par référence en PHP

Passer par valeur : toute modification apportée au 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

1.21, constructeur et destructeur php5

__construct : Cette fonction sera traitée comme un constructeur et sera exécutée lors de la création d'une instance d'objet

__destruct : PHP détruira l'objet avant qu'il ne soit détruit. Appelez cette fonction. Elle s'appelle le destructeur

1.22.

PHP est un langage géré. Dans la programmation PHP, les programmeurs n'ont pas besoin de gérer manuellement l'allocation et la libération des ressources mémoire, ce qui signifie que PHP lui-même implémente un mécanisme de récupération de place (Garbage Collection). )

L'algorithme de recyclage utilisé par PHP est la méthode de comptage de références. Chaque variable PHP est stockée dans un conteneur de variables appelé "zval".

Un conteneur de variable zval, en plus de contenir le type et la valeur de la variable, il comprend également deux octets d'informations supplémentaires. Le premier est "is_ref", qui est une valeur booléenne utilisée pour identifier si cette variable appartient à l'ensemble de référence.

Le deuxième octet supplémentaire est "refcount", qui est utilisé pour représenter le nombre de variables (également appelées symboles) pointant vers ce conteneur de variables zval.

L'attribution d'une variable à une autre variable augmentera le nombre de références (refcount)

Lorsqu'une variable associée à un conteneur de variables quitte sa portée ( par exemple : fin d'exécution de la fonction), ou lorsque la fonction unset() est appelée sur une variable, "refcount" sera réduit de 1

Le conteneur de la variable deviendra Détruit à 0 : 00

1.23. Dites-moi quelques modèles de conception que vous connaissez ?

Mode Singleton : Assurez-vous qu'une classe n'a qu'une seule instance et fournissez un point d'accès global pour y accéder, comme une connexion à une base de données dans le framework

Modèle d'usine simple : il dispose de certaines méthodes pour créer des objets. Vous pouvez utiliser des classes d'usine pour créer des objets sans utiliser directement new. Par exemple, il sera utilisé lors de l'initialisation d'une base de données, comme MySQL, MSSQL

Mode stratégie : Pour un ensemble d'algorithmes, encapsuler chaque algorithme dans une classe indépendante avec une interface commune, tels que la saisie Lors de la configuration d'une page d'accueil personnelle, différents affichages et opérations sont proposés en fonction de différents visualiseurs

Mode d'enregistrement : fournit un stockage et une gestion ordonnés d'un ensemble d'objets globaux (objets) dans le programme. Par exemple, le mode adaptateur Zend_Registry::set

dans le framework ZF : adaptez différentes interfaces dans une interface API unifiée, telles que les opérations de données telles que mysql, mysqli, pdo. , etc., vous pouvez utiliser le mode adaptateur Unified Interface

Modèle observateur : Un objet se rend observable en ajoutant une méthode. Lorsqu'un objet observable change, il envoie des messages aux observateurs enregistrés. Par exemple, implémentez le message push

Mode décorateur : étendez dynamiquement la fonction de la classe sans modifier le code de la classe d'origine et l'héritage. Par exemple, chaque fichier Controller du framework fournira avant et. méthodes after.

Mode Iterator : Fournit une méthode pour accéder séquentiellement à chaque élément d'un objet agrégé. En PHP, la classe Iterator sera héritée. Mode prototype : implémente une interface prototype utilisée pour créer un clone de l'objet actuel. Ce mode est utilisé lorsque le coût de création directe d'objets est relativement élevé. Par exemple, un objet doit être créé après une opération de base de données coûteuse.

2. Codage PHP

2.1. Quelle est la différence entre mysqli_real_connect() et mysqli_connect() ?

a. mysqli_real_connect() nécessite un objet valide créé par mysqli_init()

b mysqli_real_connect() peut être utilisé avec mysqli_options(). Utilisé ensemble pour définir différentes options de connexion

c. mysqli_real_connect() a un paramètre flag

2.2 Parcourir les répertoires et sous-répertoires.

Vous pouvez utiliser la fonction scandir() ou glob() ici. Il y a un article ici qui présente les "Quatre méthodes".

2.3 Étant donné n'importe quelle URL, extrayez l'extension contenue dans l'URL. Par exemple, "http://www.pwstrick.com/test.php?somevar" renvoie .php ou php

en utilisant 5 méthodes, pathinfo(), explosive(), The combinaison de basename(), strpos() et substr(),

utilise des expressions régulières (vous pouvez vous référer à mon article précédent "Expressions régulières en JavaScript et PHP") et parse_url() . Consultez le code en ligne.

2.4. Comment PHP empêche-t-il l'injection SQL ?

Utilisez des instructions préparées et des requêtes paramétrées. Les instructions et paramètres préparés sont envoyés au serveur de base de données pour analyse respectivement, et les paramètres seront traités comme des caractères ordinaires.

Cette méthode empêche les attaquants d'injecter du SQL malveillant. Vous avez deux options pour implémenter cette méthode : PDO et MySQLI, voir le code en ligne. Reportez-vous à "Comment empêcher l'injection SQL en PHP"

2.5, la différence entre include, require, include_once et require_once

a include. et exigent que tous les fichiers spécifiés soient importés. _once signifie qu'il n'est introduit qu'une seule fois, c'est-à-dire que ce qui a été introduit auparavant ne le sera plus.

b. Les échecs de chargement sont gérés différemment :

include génère un avertissement lors de l'introduction d'un fichier inexistant et le script continuera à s'exécuter. .inclus. Pour faire simple : emmenez-la avec vous !

require provoquera une erreur fatale et le script cessera de s'exécuter, en fonction de ce fichier. Pour faire simple : je la veux !

c. include est une fonction d'inclusion conditionnelle, tandis que require est une fonction d'inclusion inconditionnelle.

d. Les fichiers qui doivent être référencés lorsque include() est exécuté doivent être lus et évalués à chaque fois, et les fichiers qui doivent être référencés lorsque require() est exécuté sont traité une seule fois (en fait lors de l'exécution, le contenu du fichier qui doit être cité remplace l'instruction require())

e include a une valeur de retour, mais require n'en a pas. Reportez-vous à "La différence entre include require include_once require_once en PHP"

2.6 Écrivez quelques méthodes magiques PHP

PHP se terminera toutes par __. (deux méthodes Class commençant par un trait de soulignement) sont réservées comme méthodes magiques. Par conséquent, lors de la définition des méthodes de classe, il est recommandé de ne pas utiliser __ comme préfixe. Consultez le manuel PHP.

2.7. Trois façons de transmettre des paramètres à PHP via la commande shell

Utiliser $argc $argv ; utilisateur pour l'entrée, puis obtient les paramètres d'entrée. Reportez-vous aux "Paramètres entrants PHP"

2.8. Écrivez une fonction pour calculer les chemins relatifs de deux fichiers, tels que $a = "/a/b/c/d/e. php "; $b = "/a/b/12/34/c.php";

Le chemin relatif calculé de $a par rapport à $b devrait être "../ ./12/34/c.php"

Divisez d'abord les deux chaînes en tableaux à l'aide de "/", puis utilisez array_diff_assoc pour vérifier d'abord la différence entre $a et $. b tableaux . Faites ensuite la différence entre $b et $a. Consultez le code en ligne.

2.9. Utilisez PHP pour écrire le code et l'adresse de la page Web qui affiche l'IP du client et l'IP du serveur

IP du client : $_SERVER[ "REMOTE_ADDR"]

IP du serveur : $_SERVER["SERVER_ADDR"]

Adresse de la page Web : $_SERVER["REQUEST_URI"]

Le chemin d'exécution du script actuel : $_SERVER["SCRIPT_FILENAME"] ou __FILE__

Le nom du script actuel : $_SERVER[ "PHP_SELF" ] ou $_SERVER["SERIPT_NAME"]

Le lien URL vers la page précédente : $_SERVER["HTTP_REFERER"]

2.10, Quel est le rôle de error_reporting(2047)

error_reporting, définir le type d'erreurs PHP à signaler, ici cela signifie afficher toutes les erreurs E_ALL

2.11 , echo, print(), print_r(), printf(), sprintf(), var_dump() Quelle est la différence ?

echo : C'est une instruction, pas une fonction, n'a pas de valeur de retour et peut être générée avec plusieurs valeurs de variable, aucune parenthèse n'est requise. Les tableaux et les objets ne peuvent pas être générés, seuls les types simples (tels que int, string) peuvent être imprimés

print : C'est une instruction, pas une fonction. Elle a une valeur de retour de 1 et ne peut générer qu'une seule variable. Aucune parenthèse n'est nécessaire. Les tableaux et les objets ne peuvent pas être générés, seuls les types simples (tels que int, string) peuvent être imprimés.

print_r : C'est une fonction qui peut imprimer des types composites, tels que chaîne, int, float, tableau, objet, etc. Lors de la sortie du tableau, il sera représenté par une structure ,

Et vous pouvez utiliser print_r($str,true) pour que print_r ne soit pas affiché et renvoie la valeur après le traitement de print_r

printf : C'est une fonction qui formate le texte puis le sort. (Voir langage C)

sprintf : C'est une fonction similaire à printf, mais elle n'imprime pas, mais renvoie formaté. text. D'autres sont identiques à printf.

var_dump : fonction, affiche le contenu, le type de la variable ou le contenu, le type et la longueur de la chaîne. Souvent utilisé pour le débogage.

2.12, $a = 1; $x =&$a; $b=$a++; Trouver les valeurs de $b et $x

$b=1, $x=2

2.13 Fonctions pour sérialiser et désérialiser des tableaux en php, et convertir utf-8 en gbk

.

sérialiser, désérialiser, iconv("utf-8", "gbk", $strs)

2.14, les fonctions de strlen() et mb_strlen respectivement Qu'est-ce que il?

strlen() ne peut pas gérer correctement l'espace réservé des chaînes chinoises. Pour gb2312, le résultat est 2 fois le nombre de caractères chinois, et pour utf8, le résultat est 3 fois le nombre de caractères chinois. Les caractères chinois

mb_strlen() résout très bien ce problème. Son deuxième paramètre est de définir l'encodage des caractères

2.15. avec les répertoires PHP multi-niveaux

mkdir($path, 0777, true);

2.16, les fonctions et les différences de mysql_num_rows() et mysql_affected_rows()

Les deux renvoient le nombre de lignes dans le jeu de résultats. La différence est que le premier n'est valide que pour l'opération de sélection, tandis que le second est valide pour le nombre de lignes. lignes affectées par la mise à jour, l'insertion et la suppression

2.17 Veuillez lister tous les algorithmes de recherche de chaînes auxquels vous pouvez penser et ajouter des commentaires pour expliquer brièvement

. Recherche séquentielle, recherche binaire, recherche de bloc, recherche par table de hachage

2.18 Écrivez le résultat selon le code suivant

$. a = 2;$b = &$a ;unset($a);
echo$b;

Bien que unset soit utilisé pour libérer la variable donnée, il ne fait que rompre le la liaison entre le nom de la variable et le contenu de la variable est corrigée, cela ne signifie pas que le contenu de la variable est détruit. Le résultat de sortie est donc "2".

$a = 2;$b = 3;$c = &$a;$c = 2;
if(($a=5)>0 || ($b=$a)>0) {
$a++;$b++;

}
echo$a.'-'.$b.'- '.$c;

Faites attention au symbole "||" ici $a=5 remplit déjà les conditions, donc $b=$a n'a pas besoin d'être exécuté, alors $ b vaut toujours 3.

Après $a++ et $b++, les deux variables sont augmentées de 1 et deviennent 6 et 4. Et $c fait déjà référence à $a, donc la valeur devient également 6. Le résultat final est "6-4-6". Reportez-vous à "Explication détaillée de l'utilisation de la référence PHP (&)"

2.19>2.19 Écrivez une fonction pour résoudre le problème de la lecture et de l'écriture de plusieurs threads en même temps <.>

Utilisez d'abord fopen pour ouvrir un fichier, puis flock pour le verrouiller, puis utilisez fwrite pour écrire le contenu, puis flock pour déverrouiller, et enfin fclose pour fermer le document. Consultez le code en ligne.

2.20. Méthode de définition de l'expiration de la session, fonction correspondante

a. setcookie() définit directement le cycle de vie de session_id.

b. Utilisez session_set_cookie_params() et session_regenerate_id(true). Lorsque c'est vrai, modifiez la valeur de session_id et effacez le tableau de session actuel.

Voir le code en ligne.

2.21. Méthode PHP pour obtenir le contenu du fichier, fonction correspondante

a file_get_contents pour obtenir le contenu du fichier (peut être obtenu avec get et post pour obtenir), le fichier entier est lu dans une chaîne

b. Utilisez fopen pour ouvrir l'url et obtenez le contenu en utilisant la méthode get (à l'aide de la fonction fgets())

c. Utilisez la fonction fsockopen pour ouvrir l'url (peut être obtenue par get et post), et obtenez les données complètes par get, y compris l'en-tête et le corps.

d. Utilisation La bibliothèque curl obtient du contenu. Avant d'utiliser la bibliothèque curl, vous devez vérifier php.ini pour voir si l'extension curl a été activée

2.22. Quelles sont les fonctions de tableau PHP courantes ?

a. Fonctions de base des opérations sur les tableaux (array_values, array_keys, array_flip, array_search, array_reverse, in_array, array_key_exists, array_count_values)

b. Segmentation et remplissage de tableaux (array_slice, array_splice, array_chunk)

c. Tableau et pile, file d'attente (array_push, array_pop, array_shift, array_unshift)

d. Tri de tableau (sort, asort, ksort)

e Calcul de tableau (array_sum, array_merge, array_diff, array_intersect)

f. .Autres fonctions de tableau (array_unique, shuffle)

2.23 Écrire un code pour télécharger des fichiers

Téléchargement par méthode POST, Permet aux utilisateurs de télécharger du texte. et les fichiers binaires. Grâce aux fonctions d'authentification et d'exploitation de fichiers de PHP, vous pouvez contrôler entièrement qui est autorisé à télécharger et comment le fichier est traité après son téléchargement.

Recevez les fichiers téléchargés sur le serveur via HTTP via $_FILES. Le contenu téléchargé est stocké dans $_FILES['xx']['tmp_name'], puis téléchargé via move_uploaded_file Les fichiers. sont déplacés vers le nouvel emplacement.

Lorsque je regardais certaines classes de téléchargement packagées, j'ai vu une fonction strrchr, qui recherche la dernière occurrence d'un caractère spécifié dans une chaîne. Utilisez cette fonction pour obtenir le suffixe.

2.24. Écrivez une expression régulière pour filtrer tous les scripts JS/VBS sur la page Web (c'est-à-dire supprimer les balises et leur contenu)

/<[^>].*?>.*?/si. Consultez l'outil en ligne regex pour obtenir des instructions regex prêtes à l'emploi.

2.25. Utilisez PHP pour imprimer l'heure de la veille au format 2006-5-10 22:21:21

echo date('Y-m-d H:i:s', strtotime('-1 day')); Voir plus de fonctions Date/Heure.

2.26. Quelle est la différence entre foo() et @foo() ?

foo() exécutera cette fonction. Toutes les erreurs d'interprétation, de syntaxe et d'exécution seront affichées sur la page

@foo. ( )Lors de l'exécution de cette fonction, le message d'erreur ci-dessus sera masqué

2.27 Quelles sont les différences entre sort(), asort(), ksort(), arsort() et. rsort()

sort : Trie le tableau, les cellules du tableau seront réorganisées du plus bas au plus élevé à la fin de la fonction

rsort : Trier le tableau Tri inverse

asort : trier le tableau et maintenir la relation d'index

arsort : trier le tableau à l'envers et maintenir la relation d'index

ksort : Trie le tableau par nom de clé et conserve l'association entre le nom de clé et les données. Il est principalement utilisé pour associer des tableaux

2.28. ? Quelles sont les valeurs d'entrée pour le programme suivant ?

Une variable variable consiste à obtenir la valeur d'une variable ordinaire comme nom de variable de la variable variable. La valeur de sortie est "ok".

$str = 'cd';

$$str = 'hot-dog';

$$str = 'ok';echo$cd;

2.29. Que produira echo count("abc") ?

La fonction count() compte le nombre de cellules dans un tableau ou le nombre d'attributs dans un objet, généralement un tableau()

pour un objet, si SPL est installé, count() peut être appelé en implémentant l'interface Countable. Cette interface n'a qu'une seule méthode count(), qui renvoie la valeur de retour de la fonction count().

Si le paramètre n'est pas un type de tableau ou un objet qui implémente l'interface dénombrable, 1 sera renvoyé. Il n'y a qu'une seule exception. Si le paramètre est NULL, le résultat est 0. .

2.30. Quel est le rôle de la bibliothèque GD ?

La bibliothèque GD fournit une série d'API pour le traitement des images. Vous pouvez utiliser la bibliothèque GD pour traiter des images ou générer des images.

Sur les sites Web, la bibliothèque GD est généralement utilisée pour générer des vignettes ou pour ajouter des filigranes aux images ou pour générer des rapports sur les données du site Web.

3. Base de données

3.1 Supposons une base de données avec un volume de données de plusieurs dizaines de millions. Grâce à la surveillance, on constate que 90 %. des requêtes de requêtes Elles pointent toutes vers la même partie de données, et cette partie de données ne représente que 1% de la capacité totale de la base de données.

a. Ces 1 % de données prennent en charge 90 % du travail de requête. Ces données pratiques se trouvent dans le tampon de données et améliorent l'efficacité des requêtes.

b. Sous-bibliothèque : les performances sont rapidement améliorées. Si l'efficacité ne peut toujours pas être améliorée, vous pouvez envisager de faire une mise en cache nosql sur 1 % des données.

c. Table divisée : elle peut obtenir une certaine évolutivité horizontale lorsque la base de données ne dispose pas d'une solution de cluster, et la charge peut également être partagée sur plusieurs périphériques physiques. De ce point de vue, elle peut également résoudre. quelques goulots d'étranglement en termes de performances.

d. Si les conditions le permettent, cette application peut également être résolue grâce à des solutions de mise en cache, telles que la mise en cache de 1 % des résultats définis via Memcached et Redis.

Reportez-vous à « Discussion sur les questions et réponses de ChinaUnix » et à « Discussion sur les questions morales »

Comment MySQL divise-t-il les bases de données et les tables ?

Reportez-vous à "Schéma de génération d'ID global dans la sous-base de données MySQL et le sous-environnement de table", "Leçons et expérience dans la sous-table de base de données pour la première fois", "Quelques conseils sur Sous-base de données et tables MySQL" Conseils》

3.3. Quels sont les moteurs de stockage de base de données MySQL ?

MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV, etc.

3.4. La différence entre MyISAM et InnoDB

a. Structure de stockage : MyISAM est stocké dans trois fichiers sur le disque. Toutes les tables d'InnoDB sont stockées dans le même fichier de données, généralement 2 Go

b Espace de stockage : MyISAM peut être compressé et dispose d'un espace de stockage plus petit. InnoDB nécessite plus de mémoire et de stockage, et établira son propre pool de tampons dédié dans la mémoire principale pour la mise en cache des données et des index.

c. Prise en charge des transactions : MyISAM ne fournit pas de prise en charge des transactions. InnoDB fournit une prise en charge des transactions, des clés étrangères et d'autres fonctionnalités avancées de base de données.

d. AUTO_INCREMENT : MyISAM peut créer un index conjoint avec d'autres champs. InnoDB doit contenir un index avec uniquement ce champ.

e. Différences de verrouillage de table : MyISAM ne prend en charge que les verrous au niveau de la table. InnoDB prend en charge les transactions et les verrous au niveau des lignes.

f. Index de texte intégral : MyISAM prend en charge l'index de texte intégral de type FULLTEXT. InnoDB ne le prend pas en charge.

g. Clé primaire de table : MyISAM permet à une table d'exister sans aucun index ni clé primaire. L'index est l'adresse où la ligne est enregistrée. Si InnoDB ne définit pas de clé primaire ou d'index unique non vide, il générera automatiquement une clé primaire de 6 octets (non visible par l'utilisateur). Les données font partie de l'index primaire et l'index supplémentaire enregistre la valeur. de l’indice primaire.

h. Le nombre spécifique de lignes dans le tableau : MyISAM enregistre le nombre total de lignes dans le tableau. InnoDB ne stocke pas le nombre total de lignes dans le tableau. Mais après avoir ajouté la condition wehre, myisam et innodb la gèrent de la même manière.

i. Clés étrangères : MyISAM ne le prend pas en charge. InnoDB prend en charge

j Opération CURD : MyISAM Si vous effectuez un grand nombre de SELECT, MyISAM est un meilleur choix. Si vos données effectuent beaucoup d'INSERT ou de UPDATE, vous devez utiliser une table InnoDB pour des raisons de performances.

Reportez-vous à "MyISAM et InnoDB dans le moteur de stockage MySQL"

3.5.

Reportez-vous à "Types de données SQL"

3.6 La base de données MySQL est utilisée comme stockage pour le système de publication. articles par jour est attendu après trois ans d’exploitation et de maintenance, comment optimiser ?

a. Concevez une bonne structure de base de données, autorisez une redondance partielle des données et essayez d'éviter les requêtes de jointure pour améliorer l'efficacité.

b. Sélectionnez le type de données de champ de table et le moteur de stockage appropriés, et ajoutez les index de manière appropriée.

c. Séparation maître-esclave de la bibliothèque MySQL en lecture et en écriture.

d. Recherchez des tables régulières pour réduire la quantité de données dans une seule table et améliorer la vitesse des requêtes.

e. Ajoutez des mécanismes de mise en cache, tels que memcached, apc, etc.

f. Pour les pages qui ne changent pas fréquemment, générez des pages statiques.

g. Écrire du SQL efficace

3.7. Quelle sécurité faut-il prendre en compte pour les instructions SQL ?

Principalement pour éviter l'injection, échappez aux caractères spéciaux tels que ' " /, faites attention au filtrage HTML lors de la soumission des données, faites attention aux commentaires comme --, #, faites attention aux sous-requêtes et certaines fonctions MySQL sleep, load_file, etc.

3.8 Quelle est la fonction que MYSQL utilise pour obtenir l'heure actuelle

maintenant ( ) ;date_format();Voir plus de fonctions intégrées à MySQL. >

Avec l'augmentation des visites, presque la plupart des sites Web utilisant l'architecture MySQL ont commencé à avoir des problèmes de performances sur la base de données. Les programmeurs ont commencé à utiliser la technologie de mise en cache. considérablement pour soulager la pression sur la base de données et optimiser la structure et l'index. En tant que serveur de cache distribué indépendant, Memcached fournit un service de cache partagé hautes performances pour plusieurs serveurs Web, l'extension de plusieurs services de cache Memcached. est développé sur la base de l'algorithme de hachage. , puis un hachage cohérent est apparu pour résoudre les inconvénients d'un grand nombre de pannes de cache causées par un rehachage provoqué par l'ajout ou la réduction de serveurs de cache

MySQL. Séparation maître-esclave en lecture et en écriture

Memcached ne peut que soulager la pression de lecture de la base de données. La concentration de la lecture et de l'écriture sur une seule base de données rend la base de données submergée. utiliser la technologie de réplication maître-esclave pour obtenir une séparation lecture-écriture afin d'améliorer les performances de lecture-écriture et l'évolutivité de la base de données de lecture

Sous-table et sous-base de données

Alors que le Web2.0 continue de se développer à grande vitesse, la pression d'écriture de la base de données principale MySQL commence à apparaître des goulots d'étranglement et la quantité de données continue d'augmenter. Puisque MyISAM utilise des verrous de table, de graves problèmes de verrouillage surviendront. se produisent dans des conditions de concurrence élevée, un grand nombre d'applications MySQL à haute concurrence ont commencé à utiliser le moteur InnoDB au lieu de MyISAM. Dans le même temps, il est devenu courant d'utiliser des sous-tables et des sous-bases de données pour atténuer la pression d'écriture et les problèmes d'expansion liés à la croissance des données.

Le goulot d'étranglement en matière d'évolutivité de MySQL

Le développement d'applications MySQL dans un grand volume de données et un environnement à forte concurrence devient de plus en plus complexe. Techniquement difficile. Maîtriser les règles de sous-table et de sous-base de données demande de l'expérience. Les sous-bases de données contenant des sous-bases de données et des tables seront confrontées à des problèmes d'expansion à un certain stade. Il y a également un changement dans les exigences, qui peut nécessiter une nouvelle méthode de sous-bibliothèque. Les bases de données MySQL stockent également souvent des champs de texte volumineux, ce qui entraîne des tables de base de données très volumineuses, ce qui rend la récupération de la base de données très lente et rend difficile la restauration rapide de la base de données. Dans le contexte du Big Data, la pression des E/S est élevée et les changements de structure des tables sont difficiles, ce qui correspond exactement aux problèmes rencontrés par les développeurs utilisant actuellement MySQL.

3.10. Qu'est-ce qu'une base de données relationnelle ?

La base de données relationnelle est une base de données qui prend en charge le modèle relationnel. En termes simples, le modèle relationnel fait référence au modèle de table bidimensionnelle.

Les bases de données relationnelles stockent les données sous forme de lignes et de colonnes pour faciliter la compréhension des utilisateurs. Cette série de lignes et de colonnes s’appelle une table et un groupe de tables constitue une base de données.

4. Bases de Linux

4.1. Quelques méthodes pour vérifier les informations de charge actuelle du système sous Linux

Reportez-vous à « Affichage des ressources et des charges système et à la surveillance des performances sous Linux »

4.2, touches de raccourci de base pour vim

Référez-vous à "Historique" La carte des touches de raccourci Vim la plus complète - de l'entrée à avancée》

4.3 Veuillez expliquer l'utilisation des 10 commandes shell suivantes top, ps, mv, find, df. , cat, chmod, chgrp, grep, wc

top vérifie les ressources occupées par les processus système. ps affiche des informations détaillées sur le processus.

mv consiste à renommer un fichier ou un répertoire, ou à transplanter un fichier d'un répertoire à un autre.

trouver Rechercher un fichier ou un répertoire.

df Vérifiez l'utilisation de l'espace disque du système de fichiers.

cat affiche le contenu du fichier, crée un nouveau fichier et fusionne le contenu du fichier.

chmod modifie les autorisations d'accès aux fichiers ou aux répertoires.

chgrp modifie le groupe auquel appartient un fichier ou un répertoire.

grep est un puissant outil de recherche de texte.

wc compte les informations de données du fichier spécifié, telles que le nombre de lignes et le nombre d'octets

4.4. fichier core et à quoi sert-il ?

core est le noyau du système Unix. Lorsque la mémoire de votre programme dépasse les limites, le système d'exploitation met fin à votre processus et vide l'état actuel de la mémoire dans le fichier principal pour une analyse plus approfondie.

Les programmeurs peuvent découvrir le problème via le fichier principal. Il enregistre une description détaillée de l'état lorsque le programme se bloque.

5. Notions de base du réseau

5.1 Notez l'objectif des services suivants et les ports par défaut ftp, ssh, http, telnet, https

Le protocole de transfert de fichiers FTP est une méthode de copie de fichiers courante. La valeur par défaut est 20 pour la connexion de données et 21 pour le port de connexion de contrôle.

SSH se connecte au serveur pour effectuer des opérations. Le numéro de port par défaut est 22.

Le protocole de transfert hypertexte HTTP fournit une méthode pour publier et recevoir des pages HTML. Le numéro de port est 80

.

Le protocole Telnet est membre de la famille des protocoles TCP/IP. Il s'agit du protocole standard et de la méthode principale pour les services de connexion à distance Internet. Le port par défaut est 23

HTTPS est basé sur Le canal HTTP ciblé sur la sécurité est simplement une version sécurisée de HTTP. Le port par défaut est 443

5.2 Écrivez toutes les valeurs d'état de retour HTTP que vous pouvez. réfléchir et expliquer leurs utilisations (telles que : Renvoie 404 indiquant une page introuvable)

200 La requête OK est réussie (suivie des documents de réponse aux requêtes GET et POST)

301 Déplacé définitivement La page demandée a été déplacée vers la nouvelle URL

302 Trouvé La page demandée a été temporairement déplacée vers la nouvelle URL

304 Non modifié, le serveur indique au client que le document original mis en mémoire tampon peut continuer à être utilisé

401 Non autorisé La page demandée nécessite un nom d'utilisateur et un mot de passe

403 Interdit L'accès à la page demandée est interdit

500 Erreur interne du serveur, la demande n'est pas terminée. Le serveur a rencontré une situation imprévisible

502 Bad Gateway, la requête n'a pas été complétée. Le serveur a reçu une réponse invalide du serveur en amont

503 Service non disponible La demande n'a pas été complétée. Le serveur est temporairement surchargé ou en panne

Pour plus de codes d'état, veuillez vous référer à "Messages d'état HTTP"

5.3 Quelle est la différence. entre POST et GET ?

a. GET consiste à obtenir des données du serveur, et POST doit transmettre des données au serveur

b. le protocole HTTP via les paramètres URL sont transmis pour la réception, tandis que POST sont des données d'entité, soumises via le formulaire

c La quantité de données transmises par GET est faible et ne peut pas être supérieure à. 2 Ko. La quantité de données transmises par POST est importante et est généralement illimitée par défaut. Mais en théorie, la quantité maximale dans IIS4 est de 80 Ko, et dans IIS5, de 100 Ko

d La sécurité GET est très faible et la sécurité POST est élevée <.>

5.4. Veuillez écrire l'en-tête HTTP et répondre aux exigences suivantes :

1) Ceci est une demande de publication

2 ) Cible : http://www.example.com:8080/test

3) Variable POST : nom d'utilisateur : test pwd : test2 intro : Bonjour tout le monde !

4) Contient les informations COOKIE suivantes : cur_query : you&me

POST http://www.example.com:8080/test HTTP/1.1

Cookie:cur_query=you&me

username=test&pwd:=test2&intro=Bonjour tout le monde !

Voir plus de propriétés "Explication détaillée de l'en-tête HTTP"

6. Notions de base du serveur

Comparaison des avantages et des inconvénients d'Apache et de Nginx

. 🎜>

a. Avantages de nginx par rapport à Apache :

Léger, occupant moins de mémoire et de ressources qu'Apache. Conception hautement modulaire, l'écriture des modules est relativement simple

Anti-concurrence, nginx gère les requêtes de manière asynchrone et non bloquante, plusieurs connexions (10 000 niveaux) peuvent correspondre à un processus, alors qu'Apache bloque Il s'agit d'un modèle multi-processus synchrone.Une connexion correspond à un processus.Dans des conditions de concurrence élevée, nginx peut maintenir de faibles ressources, une faible consommation et des performances plus élevées qu'Apache

b. Avantages d'Apache par rapport à Nginx :

La réécriture d'Apache est plus puissante que la réécriture de nginx. Il existe de nombreux modules. Vous pouvez trouver pratiquement tout ce à quoi vous pouvez penser. Elle est relativement stable et contient relativement plus de bugs.

.

c. Raison :

Bénéficiez de Nginx en utilisant le dernier modèle d'E/S réseau epoll (noyau Linux 2.6) et kqueue (freebsd), tandis qu'Apache utilise le modèle traditionnel sélectionnez Modèle.

Actuellement, Squid et Memcached sous Linux, qui peuvent supporter un accès simultané élevé, utilisent tous deux le modèle d'E/S réseau epoll.

Pour gérer la lecture et l'écriture d'un grand nombre de connexions, le modèle d'E/S réseau sélectionné utilisé par Apache est très inefficace.

Reportez-vous à "Comparaison des avantages et des inconvénients d'Apache et de Nginx"

6.2 La différence entre cgi et fastcgi

CGI : il était davantage utilisé en 2000 ou avant. Dans le passé, les serveurs Web ne traitaient généralement que les requêtes statiques. En fonction du contenu de cette requête, le serveur Web créait un nouveau processus pour exécuter un processus externe. Programmes C (ou script Perl...), ce processus renverra les données traitées au serveur Web Enfin, le serveur Web enverra le contenu à l'utilisateur, et le processus qui vient d'être bifurqué se terminera également. Si l'utilisateur demande à modifier le script dynamique la prochaine fois, le serveur Web lancera à nouveau un nouveau processus et le processus continuera encore et encore.

Module Web intégré : Plus tard, une méthode plus avancée est apparue, le serveur Web peut avoir un interpréteur Perl ou un interpréteur php intégré. En d’autres termes, ces interpréteurs sont transformés en modules, et le serveur web démarrera ces interpréteurs à son démarrage. Lorsque de nouvelles requêtes dynamiques arrivent, le serveur Web analyse lui-même ces scripts Perl ou PHP, éliminant ainsi le besoin de relancer un processus et améliorant l'efficacité.

fastcgi : Lorsque le serveur Web reçoit une requête, il ne relancera pas un processus (car ce processus est démarré au démarrage du serveur Web et ne se terminera pas), web Le serveur transmet directement le contenu à ce processus (communication inter-processus, mais fastcgi utilise une autre méthode, la communication TCP). Ce processus traite la requête après l'avoir reçue, renvoie le résultat au serveur Web et attend enfin la prochaine requête. , pas dehors.


Reportez-vous à "Quelle est la différence entre fastcgi et cgi"

6.3, la différence entre Memcached et Redis

a. Dans Redis, toutes les données ne sont pas toujours stockées en mémoire. C'est la plus grande différence par rapport à Memcached.

b. Redis a les caractéristiques d'une base de données à bien des égards, ou est un système de base de données, tandis que Memcached n'est qu'un simple cache K/V.

c. Dans les données de plus de 100 000, les performances de Memcached sont supérieures à celles de Redis.

d. Si vous souhaitez parler de l'efficacité de l'utilisation de la mémoire, si vous utilisez un simple stockage clé-valeur, Memcached a une utilisation de la mémoire plus élevée et si Redis utilise une structure de hachage pour la valeur-clé. stockage, en raison de sa compression combinée, son utilisation de la mémoire sera supérieure à celle de Memcached. Bien entendu, cela dépend de votre scénario d’application et des caractéristiques des données.

e. Si vous avez des exigences en matière de persistance et de synchronisation des données, il est recommandé de choisir Redis, car Memcached n'a pas ces deux fonctionnalités. Même si vous espérez simplement que les données mises en cache ne seront pas perdues après la mise à niveau ou le redémarrage du système, il est sage de choisir Redis.

f. Redis et Memcache ont peu de différence dans les performances d'écriture, tandis que Memcache est plus fort en performances de lecture, en particulier les performances de lecture par lots.

Reportez-vous à "La différence entre Redis et Memcached"

6.4.Quels sont les avantages et les inconvénients de PHP ?

Avantages :

a Une syntaxe simple, une prise en main rapide, et il existe de nombreux outils de développement très pratiques, comme Zend Studio, EclipsePHP Studio, etc.

b. Multiplateforme et gratuit Vous pouvez rapidement créer LAMP (Linux Apache MYSQL, PHP) et prendre en charge de nombreux systèmes de bases de données grand public, tels que MYSQL, Oracle, PostgreSQL, etc.

c. Prend en charge les technologies grand public actuelles, telles que WebService, XML, AJAX, etc.

d. PHP dispose déjà d'un système orienté objet très mature et peut prendre en charge. Développement orienté objet (PHP5)

e. Il existe de nombreux bons frameworks, forums et blogs open source, etc.

f. . Suite Les mises à jour et la maintenance, ainsi que le soutien de la communauté et les efforts conjoints de nombreux passionnés de technologie ont permis à PHP d'être largement utilisé. De nombreux sites Web bien connus utilisent également PHP comme langage de développement

<.>

Inconvénients :

a. Le support du multi-threading n'est pas très bon et il ne peut faire que quelques threads simulés simples

b. La syntaxe n'est pas assez rigoureuse, si lorsque vous faisiez du C++ dans le passé, Java serait très familier. Par exemple, si une variable n'a pas été définie, vous pouvez utiliser directement

.

c. La partie la plus pénible pour les programmeurs PHP expérimentés est peut-être le mécanisme d'interprétation et de fonctionnement de PHP. Ce mécanisme d'exploitation garantit qu'après l'interprétation et l'exécution de chaque page PHP, toutes les ressources associées seront recyclées. En d’autres termes, PHP n’a aucun moyen de faire résider un objet en mémoire au niveau du langage. En PHP, toutes les variables sont au niveau de la page. Qu'il s'agisse de variables globales ou de membres statiques de la classe, elles seront effacées après l'exécution de la page. Prenons JSP comme exemple. Dans JSP, la portée de Java Bean a quatre valeurs valides : Page, Application, Session et Demande, qui correspondent respectivement aux quatre durées de vie de la page, du programme, de la session et de la demande. Mais en PHP, il n’y a qu’une seule durée de vie de Page.

Recommandations associées :

Partage des questions clés de l'entretien PHP (1)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn