Maison >développement back-end >tutoriel php >Questions d'entretien de base PHP

Questions d'entretien de base PHP

不言
不言original
2018-04-26 14:44:341961parcourir

Cet article partage avec vous quelques questions d'entretien de base sur PHP. Les amis intéressés peuvent y jeter un œil



csrfQu'est-ce que :

Faux de demande intersite CSRF,

1. L'utilisateur C ouvre le navigateur, visite le site Web de confiance A, saisit le nom d'utilisateur et le mot de passe. demande de connexion au site Web A ;

2. Une fois les informations de l'utilisateur vérifiées, le site Web A génère des informations de cookie et les renvoie au navigateur. À ce moment, l'utilisateur se connecte avec succès au site Web A et peut les envoyer. demandes au site Web A normalement ;

3. Avant que l'utilisateur ne quitte le site Web A, il ouvre une page TAB dans le même navigateur pour visiter le site Web B

4. , il renvoie du code offensant et fait une demande d'accès au site tiers A

5. Après avoir reçu ces codes offensants, le navigateur enverra les informations du cookie au site Web A selon la demande du site Web B sans. les connaissances de l'utilisateur. Le site Web A ne sait pas que la demande est réellement initiée par B

, il traitera donc la demande avec les autorisations de C en fonction des informations du cookie de l'utilisateur C, provoquant l'exécution du code malveillant du site Web B

PHP et MYSQL traitement des transactions :

1. Utilisez start, rollback, commit pour implémenter

begin Start. a Transaction

rollback Transaction rollback

commit Confirmation de la transaction

2. Utilisez directement set pour changer le mode de validation automatique de MySQL

Les 4caractéristiques majeures des transactions (ACID) :

Atomicité :

Une transaction est une unité logique de travail de la base de données de toutes les modifications qu'elle apporte à la base de données. sont soit exécutés, soit ne les exécutez pas tous.

Cohérence :

Avant et après une transaction, l'état de la base de données satisfait à toutes les contraintes d'intégrité.

Isolement :

Les transactions exécutées simultanément sont isolées et l'une n'affecte pas l'autre. S'il y a deux transactions exécutées en même temps et remplissant la même fonction, l'isolation des transactions garantira que chaque transaction dans le système pense que seule cette transaction utilise le système. Cette propriété est parfois appelée sérialisation. Pour éviter toute confusion entre les opérations de transaction, les requêtes doivent être sérialisées ou désérialisées afin qu'il n'y ait qu'une seule requête pour les mêmes données à la fois.

En définissant le niveau d'isolement de la base de données, différents effets d'isolement peuvent être obtenus.

Durabilité :

Une fois la transaction terminée, les modifications apportées à la base de données par la transaction seront conservées dans la base de données et ne seront pas annulées.

xss

Comment prévenir :

XSS est également appelé CSS , le nom complet est CrossSiteScript, attaques de scripts intersites

Prévenir : injection de script, balises de script d'échappement et de filtre.

La différence entre union

et unionall : Union supprime les doublons, unionall ne le fait pas .

RBAC

Contrôle des autorisations basé sur les rôles : 5 tables Table des utilisateurs, table des rôles, table des fonctions et plus Il existe des tables liées les unes aux autres : table des utilisateurs et des rôles, table des rôles et des fonctions

redis

Persistance : La persistance RDB de l'instantané de mémoire (RDB) peut générer des instantanés ponctuels de l'ensemble de données dans un intervalle de temps spécifié.

La persistance du journal (AOF) AOF enregistre toutes les opérations d'écriture effectuées par le commandes du serveur et restaurez l'ensemble de données en réexécutant ces commandes au démarrage du serveur.

Sous-table :

Réduisez la charge sur la base de données et réduisez le temps de requête.

Fractionnement vertical du tableau : le fractionnement vertical est divisé par champs

Fractionnement horizontal du tableau : placez les lignes de données dans deux tableaux indépendants en fonction des valeurs d'une ou plusieurs colonnes de données.

Comment s'assurer que l'identifiant inséré

est unique dans le partitionnement de table horizontale ? Vous pouvez créer un nouveau service d'identification et enregistrer l'ID de l'utilisateur dans la base de données ou Redis.

j

query

Sélecteur : 1. Élément 2. Attribut 3.id 4. Classe 5. Global .

Éléments en ligne et en bloc

Dans les lignes : , ,
, ,

Dans les blocs :

,

,< ; h1>

Conversion : display:inline,block,inline-block.

Différence :

bloc,

①Toujours commencer sur une nouvelle ligne et occuper une ligne entière

②La hauteur, la hauteur de la ligne, les marges et le remplissage peuvent tous être contrôlés

③La large bande est toujours comme la largeur du navigateur ; , cela n'a rien à voir avec le contenu

④ Il peut accueillir des éléments en ligne et d'autres éléments de bloc.

rangée,

① et les autres éléments sont tous sur une seule ligne

② La hauteur, la hauteur de la ligne et les parties de marge et de rembourrage peuvent être modifiées

; ③La largeur est uniquement liée au contenu ;

④Les éléments en ligne ne peuvent accueillir que du texte ou d'autres éléments en ligne.

Requête de groupe : tri par

Le nombre d'hommes et de femmes dans la table est de 20 à 30

sélectionnez le nombre (sexe) dans la table où l'âge entre 20 et 30 est regroupé par sexe

ORM

Le mode Object Relational Mapping (ORM) est une technologie permettant de résoudre l'inadéquation entre les bases de données orientées objet et relationnelles

LinuxAfficher le port : brosser le fichier sélectionné : afficher le processus :

netstat-ntlp //Afficher tous les ports TCP actuels·

           netstat- ntulp | grep80                                                                                                                   utilisation du port ·

Linux

Afficher le nombre de commandes exécutées : historique

Fonction d'opération de fichier :

open Ouvrir le fichier

fstat Récupérer le fichier file Lire l'intégralité du fichier dans un tableau

fclose Fermez le fichier

fwrite Écrivez dans un fichier (sans danger pour les fichiers binaires)

file_get_contents() lit le fichier entier dans une chaîne

Plusieurs façons d'ouvrir un fichier :

Fopen(), file_get_contents()

Lire et écrire, ajouter

php

Commande Supprimer le dossier

Dissocier();

Interception de chaîne chinoise :

mb_substr

mb_substr($str,$start, $length, $encoding)

$str, la chaîne qui doit être tronquée $start, le point de départ de la troncature, Le point de départ est 0

$length, le nombre de mots à intercepter

$encoding, encodage de page Web, tel que utf-8 , GB2312, GBK

La différence entre

D

et M

:

M instancie le classe de base, et D peut instancier la classe personnalisée

table

Changement de couleur de ligne alternatif :

Utilisez JQ pour identifier les nombres pairs et impairs du tableau tr td et donner les nombres pairs et impairs correspondants. Différents styles CSS et différents arrière-plans peuvent obtenir des effets de changement de couleur entrelacés. Lorsque la souris passe, JQ appelle le jeu d'arrière-plan trtd séparément, de sorte que la couleur d'arrière-plan change lorsque la souris passe.

.

ajax

Synchrone et asynchrone :

Attendez de manière synchrone le résultat de retour du serveur puis effectuez d'autres opérations

Après avoir envoyé la requête de manière asynchrone, effectuez d'autres opérations directement sans attendre le résultat de retour du serveur

La valeur par défaut est : asynchrone

LinuxAfficher tous les fichiers : ls

Définir un p sur un autre p :

Plus la valeur du z-index est grande, plus elle est élevée. ();                //Ouvrez un tampon de sortie, toutes les informations de sortie ne sont plus envoyées directement au navigateur, mais sont enregistrées dans le tampon de sortie.

Ob_clean(); //Supprime le contenu du tampon interne sans fermer le tampon (pas de sortie).

OB_END_CLEAN (); // Supprime le contenu du tampon interne et ferme le tampon (pas de sortie).

                                                                                                                                                                                                             . Équivaut à l'exécution de ob_get_contents() et ob_end_clean()

    ob_flush();     //Envoie le contenu du tampon interne au navigateur, supprime le contenu du tampon et ne ferme pas le tampon. Ob_end_flush(); //Envoyer le contenu du tampon interne au navigateur, supprimer le contenu du tampon et fermer le tampon.

Ob_get_flush(); //Renvoie le contenu du tampon interne, ferme le tampon, puis libère le contenu du tampon. Équivalent à ob_end_flush() et renvoie le contenu du tampon.

flush(); // Affiche le contenu publié par ob_flush et le contenu qui ne se trouve pas dans le tampon PHP vers le navigateur ; actualise le contenu du tampon interne et l'affiche.

Ob_get_contents(); //Renvoie le contenu du tampon sans sortie.

OB_GET_LENGTH (); // La longueur du tampon interne est renvoyée Si le tampon n'est pas activé, la fonction renvoie false.

Ob_get_level(); //Renvoyer le niveau d'imbrication du mécanisme de mise en mémoire tampon de sortie.

ob_get_status(); //Obtenir l'état des tampons de sortie 🎜>3.

Comment. faire un panier ? processus. .

1. Ajoutez le produit au panier

1. Ajoutez d'abord un lien sur la page

1. Obtenez d'abord l'identifiant du produit

2. Recherchez le produit par ID dans la base de données.

3. Ajoutez le produit au panier

a. Récupérez le panier de la session, sinon créez-en un nouveau

b. est dans le panier Existe-t-il ? Sinon, la quantité est de 1. Si elle existe, la quantité est augmentée de 1

c. Rechargez le panier dans la session.

Problème : Nos achats utilisent une collection HashMap, la clé est unique, la seule façon de garantir la clé est via la méthode hashCode et égal

Nous utilisons donc Lors de la réécriture, nous devons réécrire les méthodes hashCode et equals de la classe Product. Lorsque nous réécrivons, il nous suffit de comparer les valeurs d'identifiant.

2. Afficher les articles du panier

Notre panier existe dans la session. Il nous suffit de collecter la Cartt Map lors de la session sur la page cart.jsp et de l'afficher.

1. Opérez les articles dans le panier

2. En cliquant sur le signe + ou -, vous pouvez modifier la quantité des articles dans le panier

3 . En cliquant sur le signe + ou - Lorsque le bouton est enfoncé, nous appellerons une fonction en javascript. changeCount(); Grâce à cette fonction, nous envoyons une requête au serveur, obtenons les données du panier à partir de la session côté serveur et modifions le nombre spécifié d'articles dans le panier en fonction des données soumises avant de revenir à la page du panier pour affichage.

Comment obtenir le volume des ventes du mois dernier ? Trois mois ? Et environ un an ?

Interroger un certain champ dans la base de données

Comment récupérer 300 000 données en 3 secondes ? Quel index créer ?

Index ordinaire

Type d'index :

Index ordinaire, index unique, index de clé primaire, index combiné

La différence entre redis et memecache est :

1. Méthode de stockage :

memecache stocke toutes les données dans la mémoire et raccrochera après une panne de courant. Les données ne peuvent pas dépasser la taille de la mémoire. Une partie de Redis est stockée sur le disque dur, ce qui garantit la persistance des données.

2. Type de support de données :

Redis a beaucoup plus de support de données que Memecache.

3. Le modèle sous-jacent est différent :

La nouvelle version de redis construit directement son propre mécanisme de VM, car si le système général appelle les fonctions système, il perdra un certain temps à déménagement et demande.

4. Différents environnements d'exploitation :

Redis ne prend actuellement officiellement en charge que LINUX, éliminant ainsi le besoin de prise en charge d'autres systèmes, afin que vous puissiez mieux consacrer votre énergie à cet environnement système Optimisation, bien que plus tard, une équipe de Microsoft a écrit un correctif pour cela. Mais il n'est pas mis sur le coffre

SKU Comment faire :

Spécifications des attributs.

En fait, le sku est l'unité d'inventaire unique du produit, y compris la table des produits, la table des attributs du produit, la table des produits

tp fichier de configuration : common/config.php

php type de données :

Quatre scalaires Type :

booléen (Booléen)

entier (entier)

float (type à virgule flottante, également appelé double)

chaîne (Chaîne de caractères)

Deux types composites :

tableau (tableau)

objet (objet)

Enfin, il existe deux types spéciaux :

Ressource (Ressources)

NULL (NULL)

Mode unique :

Les principales caractéristiques du mode exemple unique C'est "trois privés et un public":

Vous avez besoin d'une variable membre statique privée pour enregistrer la seule instance de la classe

Le constructeur doit être déclaré privé pour empêcher les programmes externes de créer un objet et de perdre le singleton. La signification de

La fonction de clonage doit être déclarée privée pour empêcher l'objet d'être cloné

Une méthode statique publique (généralement nommée getInstance) doit être fournie. pour accéder à cette instance, renvoyant ainsi une référence à l'instance unique.

Requérez le nombre d'hommes et de femmes entre 20 et 30

 : //sélectionnez le nombre (sexe) de Tableau où l'âge est compris entre 20 et 30 ans, regroupé par sexe

Sélectionnez le nombre (*) dans le nom de la table où l'âge est compris entre 20 et 30 ans, regroupé par âge

.

Il existe trois modificateurs d'accès en PHP

, à savoir : public (public, par défaut)

protected (protégé) )

privé (privé)

Portée du modificateur d'accès :

Lorsqu'un membre d'une classe est déclaré comme modificateur d'accès public, ce membre est accessible et manipulé par un code externe.

privé (privé)

Les membres définis comme privés sont visibles par tous les membres de la classe et n'ont aucune restriction d'accès. L’accès n’est pas autorisé en dehors du cours.

protected (protected)

protected est un peu plus compliqué. Il est déclaré comme membre protégé et n'autorise l'accès que par les sous-classes de cette classe.

mysql int

Stockage :

La taille de stockage bigint est de 8 octets.

la taille de stockage int est de 4 octets.

La taille de stockage Smallint est de 2 octets.

tinyint Données entières de 0 à 255. La taille de stockage est de 1 octet.

Portée du cookie :

domaine lui-même. Tous les noms de domaine sous domaine.

Il s'agit de définir une autorisation pour le cookie. Lorsque le domaine est défini sur vide, le domaine utilise par défaut le nom de domaine actuel et les sous-domaines sous ce nom de domaine peuvent recevoir des cookies.

Mais lorsque le paramètre de domaine définit son nom de sous-domaine, tous les noms de domaine ne peuvent pas être reçus, y compris ce nom de sous-domaine.

linuxAfficher la commande du contenu du fichier journal

tail, cat, tac, head, echo

tail-f test.log

mémoire de vue de dessus

disque de vue df-lh

ps-a voir tout Processus

Constante :

Utilisation de la variable $ :

Lors de la définition et de l'utilisation de constantes Il y a pas besoin d'utiliser le signe $.

La valeur d'une constante doit être une valeur fixe et ne peut pas être une variable, un attribut de classe, le résultat d'une opération mathématique ou un appel de fonction.

Des constantes peuvent également être définies dans les interfaces.

Les classes abstraites ne peuvent pas être instanciées. Les classes abstraites peuvent avoir des méthodes statiques. Il ne peut y avoir de méthodes abstraites dans les classes abstraites.

Méthodes ordinaires, stockées dans la classe, une seule copie

Méthodes statiques, également stockées dans la classe, une seule copie

La différence réside dans :

Les méthodes ordinaires ont besoin d'objets pour appeler et doivent lier $this C'est-à-dire que les méthodes ordinaires doivent avoir des objets, puis laisser les objets appeler

Et statique. Les méthodes n'appartiennent pas à Which objet, il n'est donc pas nécessaire de lier $this. Autrement dit, vous pouvez appeler

sans objet

Membres statiques : ils sont accessibles sans instanciation. Les variables membres statiques de la classe appartiennent uniquement aux membres de cette classe

 : l'une est définie dans la classe et l'autre est définie dans le constructeur.

La différence entre les méthodes et les fonctions :

Les fonctions existent seules, tandis que les méthodes dépendent des classes et ne peuvent être appelées que via des objets.

Les fonctions peuvent-elles être définies dans les fichiers de classe : Non

Transfert de valeur et référence de valeur :

(1) Passage par valeur : toute modification apportée à la valeur dans la portée de la fonction sera ignorée en dehors de la fonction.

(2) Passage par référence : toute modification apportée à la valeur dans la la portée de la fonction sera ignorée en dehors de la fonction Ces modifications peuvent également être reflétées en dehors de la fonction

(3) Avantages et inconvénients :

A : 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.

B. Le passage par référence ne nécessite pas de copier la valeur, ce qui est très bon pour améliorer les performances.

Empêcher la soumission répétée de commandes :

1. Utilisez JS pour désactiver le bouton après avoir cliqué une fois dessus. L'utilisation de cette méthode peut empêcher plusieurs clics

2. Définissez la valeur de session Après l'avoir soumise une fois, supprimez-la S'il n'y a pas de valeur de session, n'autorisez pas la soumission.

3 cookies sont. le même

Fonctions de chaîne :

strlen();strpos();echo();implode() ;trim(); etc.,,,

Fonction d'inversion de chaîne :

strrev, mb_string; >

La différence entre http1.0 et http1.1 :

Réglementation HTTP1.0 Le navigateur ne maintient qu'une connexion à court terme avec le serveur. Chaque requête du navigateur doit établir une connexion TCP avec le serveur. Le serveur déconnecte immédiatement la connexion TCP après avoir terminé le traitement de la requête. 🎜> Le serveur ne suit pas chaque client et n'enregistre pas les demandes passées.

HTTP1.1 prend en charge les connexions persistantes. Plusieurs requêtes et réponses HTTP peuvent être transmises sur une connexion TCP, réduisant ainsi la consommation et le délai d'établissement et de fermeture des connexions.

HTTP1.1 permet également au client de faire la requête suivante sans attendre le résultat de la requête précédente, mais le serveur doit renvoyer les résultats de la réponse dans l'ordre dans lequel la requête du client est reçue ,

Pour garantir que le client puisse distinguer le contenu de la réponse de chaque requête, cela réduit également considérablement le temps requis pour l'ensemble du processus de téléchargement

HTTP1.0 ne prend pas en charge le champ d'en-tête de requête Host .

H Le champ d'en-tête de requête Host a été ajouté dans TTP1.1.

La différence entre les variables globales et les variables locales :

1. Différentes portées : La portée des variables globales est L'ensemble du programme, tandis que la portée des variables locales est la fonction ou la boucle actuelle, etc.

2. Les méthodes de stockage en mémoire sont différentes : les variables globales sont stockées dans la zone de données globales et les variables locales sont stockées dans la zone de pile

3 .Différentes durées de vie : La durée de vie des variables globales est la même que celle du programme principal. Elles sont détruites lorsque le programme est détruit. Les variables locales sont à l'intérieur de la fonction ou à l'intérieur de la boucle et cessent. exister lorsque la fonction se termine ou que la boucle se termine

4. Elles sont utilisées de différentes manières : les variables globales peuvent être utilisées dans toutes les parties du programme après leur déclaration, mais les variables locales ne peuvent être utilisées que localement. Dans la fonction, les variables locales seront utilisées en premier avant les variables globales

. Une chose à noter est que les variables locales ne peuvent pas se voir attribuer la valeur d'une variable globale du même nom.

Optimisation front-end :

Premièrement : optimisation orientée contenu

1. Réduire Requête HTTP

2. Réduire les recherches DNS

3. Évitez les redirections

4. Utiliser la mise en cache Ajax

5. Chargement paresseux des composants

6. Précharger les composants

7. Réduire le nombre d'éléments DOM

8. Diviser les composants en plusieurs domaines

9. Réduire le nombre d'iframes

10. Ne recevez pas d'erreurs http 404

Deuxièmement : orienté serveur

1. Réduisez les cookies

2. Utilisez des cookies indépendants du nom de domaine pour les composants Web

Qu'est-ce que l'avalanche de cache ?

Lorsque le serveur de cache est redémarré ou qu'un grand nombre de caches échouent au cours d'une certaine période de temps, cela mettra également beaucoup de pression sur le système back-end (tel que la base de données) lorsqu'il échoue.

Comment l'éviter ?

1 : Une fois le cache expiré, contrôlez le nombre de threads qui lisent la base de données et écrivent le cache via le verrouillage ou la mise en file d'attente. Par exemple, un seul thread est autorisé à interroger les données et à écrire dans le cache pour une certaine clé, tandis que les autres threads attendent.

2 : Définissez différents délais d'expiration pour différentes clés afin de rendre le délai d'invalidation du cache aussi uniforme que possible.

3 : Créez un cache de deuxième niveau. A1 est le cache d'origine et A2 est le cache de copie. Lorsque A1 échoue, vous pouvez accéder à A2. Le délai d'expiration du cache de A1 est défini sur court terme et A2. est réglé sur long terme (ce point est supplémentaire)

tpMode routage :

1. Mode normal 2. Mode réécriture 3. Mode compatibilité

niginx Comment configurer le numéro de port :

Dans ce nginx.conf Configurez deux serveurs avec des numéros de port différents.

jqObtenir la deuxième ligne du tableau tag :

$(tr: eq (1))

Qu'est-ce qu'une variable variable :

Les variables variables nous permettent de modifier dynamiquement une variable nom. Utilisez la valeur d'une variable comme nom d'une autre variable.

Vérifiez si le port est occupé : Modifier les autorisations Modifier le propriétaire Modifier le groupe d'utilisateurs

netstat –apn chmod chown chgrp

Afficher le processus

Top pa aux|grep

Ajouter des autorisations d'exécution pour tout le monde :

 chmod-x

MysqlCopie maître-esclave :

Générez deux threads à partir de la bibliothèque, un thread d'E/S et un thread SQL

Le thread d'E/S demande le binlog de la bibliothèque principale et écrit le binlog obtenu dans fichier de journal de relais (journal de relais) ;

La bibliothèque principale générera un thread de vidage de journal, qui est utilisé pour transférer le binlog vers le thread d'E/S de la bibliothèque esclave

Le thread SQL lira le fichier ; relay Le journal dans le fichier journal est analysé en opérations spécifiques pour obtenir des opérations maître-esclave cohérentes et des données finales cohérentes

Commandes requises pour la réplication maître-esclave :

statut showmaster;

startalve;

stopalve;

flushprivileges;

GRANT REPLICATIONSLAVE,RELOAD, SUPER ON *.*

    TOmysql_backup@'%'

     IDENTIFIÉ PAR '123456'; ',

master_log_file='mysql-bin.000001',master_log_pos = 3696;

Résoudre le problème du conflit de clé primaire

Créez une table principale et les identifiants sont distribués à partir de la table principale.

Réplication maître-maître :

1. Autoriser les comptes sur deux machines respectivement : accorder l'esclave de réplication, fichier, sélectionner sur *.* à 'repl'@'10.17.%'identifié par 'xxxx'

2. Fichier de configuration/etc/my.cnf, lors de l'utilisation du fichier de configuration de la bibliothèque principale En gros, ajoutez les éléments de configuration suivants

nginx

Proxy inverse :

(1 ) Polling rr (par défaut)

Il est attribué à chaque RS selon l'ordre de la requête. C'est le même que l'algorithme rr dans lvs. Si le RS est en panne, il sera automatiquement éliminé par défaut. le port 80 est détecté. Si le RS signale les erreurs 402, 403, 503 et 504, il sera renvoyé directement au client. (2) Poids (poids) Ajoutez du poids (la valeur par défaut est rr+weight) sur la base de rr L'interrogation de poids est proportionnelle à l'accès. plus alloué De plus, le poids peut être défini en fonction de la configuration du serveur, ce qui peut résoudre le problème des performances inégales du serveur et de l'allocation des demandes

(3) ip_hash

Résoudre le problème de la page Web dynamique partage de session

Chaque Chaque demande d'accès est allouée en fonction de la valeur de hachage de l'adresse IP Tant que la valeur de hachage de l'IP est la même, elle sera allouée au même serveur (le paramètre -p. de l'équilibrage de charge lvs, persistence_timeout50 dans la configuration keepalived). Cet algorithme de planification peut résoudre le problème des pages Web dynamiques, mais cela entraînera parfois une répartition inégale des requêtes

Conseils : Depuis le nat. Le mode est utilisé en Chine, le hachage ne convient pas

ip_hash ne peut pas être utilisé avec d'autres algorithmes, c'est-à-dire que vous ne pouvez pas faire de poids ou de sauvegarde

(4) équitable (tiers) <.>

Il est configuré en fonction du temps de réponse du serveur back-end. Celui avec le temps de réponse court est alloué en premier, ce qui est plus intelligent que celui ci-dessus. Cet algorithme peut effectuer intelligemment l'équilibrage de charge en fonction de la page. taille et temps de chargement. nginx lui-même ne prend pas en charge fair. Vous devez télécharger le module upstrea_fair de nginx

(5) url_hash (tiers)

Main appliqué au serveur de cache

Attribuez les requêtes en fonction de l'URL consultée, afin que la même URL soit dirigée vers le même serveur. L'effet est plus significatif lorsque le serveur back-end est un serveur de cache. Ajoutez des instructions de hachage et des instructions de serveur aux autres paramètres en amont. tels que le poids ne peuvent pas être écrits. hash_method est l'algorithme de hachage utilisé.

Inconvénients : Si une machine est en panne, il sera difficile de résoudre ce problème avec Consistent_hash.

Cela peut améliorer l'efficacité du serveur de cache back-end. nginx lui-même ne prend pas en charge url_hash, vous devez télécharger le logiciel de hachage

(6) least_conn

Nombre minimum de connexions. , la connexion ayant le moins de connexions se verra attribuer un périphérique

(7) consistent_hash

Algorithme de cohérence

3, Équilibrage de charge :

Méthode de déploiement d'équilibrage de charge :

Mode routage (recommandé)

Mode pont

Mode retour direct du service

Équilibrage Round Robin :

Chaque requête du réseau est affectée tour à tour aux serveurs internes, de 1 à N et puis recommence. Cet algorithme d'équilibrage convient aux situations dans lesquelles tous les serveurs du groupe de serveurs ont la même configuration matérielle et logicielle et où les demandes de service moyennes sont relativement équilibrées.

Equilibrage à tour de rôle des poids :

Selon les différentes capacités de traitement du serveur, différents poids sont attribués à chaque serveur afin qu'il puisse accepter des services avec le correspondant nombre de poids demander. Par exemple : le poids du serveur A est conçu pour être de 1, le poids de B est de 3 et le poids de C est de 6, alors les serveurs A, B et C recevront 10 %, 30 % et 60 % du service. demandes respectivement. Cet algorithme d'équilibrage garantit que les serveurs hautes performances sont davantage utilisés et empêche la surcharge des serveurs peu performants.

Équilibrage aléatoire :

Distribuez de manière aléatoire les requêtes du réseau vers plusieurs serveurs internes.

Equilibrage aléatoire des poids :

Cet algorithme d'équilibrage est similaire à l'algorithme de round robin pondéré, mais il s'agit d'un processus de sélection aléatoire lors du traitement des demandes de partage

4, la différence entre l'équilibrage de charge et le proxy inverse

Le proxy inverse est une méthode pour réaliser l'équilibrage de charge.

Parlons d’abord du proxy inverse. Lorsque l'utilisateur fait une demande, il envoie d'abord la demande au serveur proxy, puis le serveur proxy demande au serveur réel selon l'algorithme et la renvoie enfin à l'utilisateur. Cette approche, premièrement, améliore la sécurité ;

Deuxièmement, elle partage les demandes des utilisateurs via plusieurs serveurs réels, réalisant ainsi un équilibrage de charge.

Parlons de l’équilibrage de charge. L'émergence de l'équilibrage de charge consiste à réduire autant que possible la pression sur un seul serveur grâce à une expansion horizontale. Les solutions d'équilibrage de charge courantes au niveau WEB incluent le matériel F5, le proxy Nginx, LVS, les services d'équilibrage de charge de divers fournisseurs de cloud (tels que le service ELB d'AWS), etc. Ce qui est connecté derrière l'équilibrage de charge est généralement le serveur qui fournit réellement le service. Par exemple, via le service ELB, le trafic peut être partagé de manière égale, réduisant ainsi la pression sur le serveur autonome.

En raison de l'ajout de la couche d'équilibrage de charge, le simple fait d'utiliser une certaine solution doit toujours prendre en compte un seul point problématique. Le serveur responsable de l'équilibrage de charge n'a pas résisté à la pression, est tombé en panne et le service n'est pas disponible. Par conséquent, Nginx et LVS tentent de configurer plusieurs proxys pour activer le basculement et les alarmes de panne, afin de résoudre rapidement les problèmes de serveur de couche proxy. ELB est un service fourni par Amazon. Son implémentation comporte des centaines, voire des milliers de machines en bas, alors considérez-le simplement comme un cluster proxy.

Comment mettre en œuvre le partagede session :

Tout d'abord, nous devons clarifier pourquoi le partage est requis, en supposant que votre site est stocké sur une seule machine, alors ce problème n'existe pas, car les données de session se trouvent sur cette machine, mais que se passe-t-il si vous utilisez l'équilibrage de charge pour distribuer les requêtes sur différentes machines ? Pour le moment, il n'y a aucun problème avec l'ID de session dans le client. Cependant, en supposant que les deux requêtes de l'utilisateur soient envoyées sur deux machines différentes et que ses données de session puissent exister sur l'une des machines, il y aura une situation où la session sera terminée. les données ne peuvent pas être obtenues. Le partage de session devient donc un problème

1. Partage de session basé sur NFS

2. Partage de session basé sur la base de données

3. Partage de session basé sur Cookie

4. Partage de session basé sur le cache (Memcache)

5. Copie de session

Portée des variables :

Variables globales, variables locales.

Créer des fichiers compressés :

zip, gzip, bzip2, tar Zcvf;

Combien de caractères chinois peuvent être stockés dans

varchar20 ?

Tout d'abord, vous devez déterminer la version de mysql

En dessous de la version 4.0, varchar(20) fait référence à 20 octets Si les caractères chinois UTF8 sont stockés, seuls 16 peuvent être stockés (chacun). Caractères chinois 3 octets)

Version 5.0 ou supérieure, varchar(20) fait référence à 20 caractères, qu'il s'agisse de chiffres, de lettres ou de caractères chinois UTF8 (chaque caractère chinois fait 3 octets), 20 peuvent être stockés

En fait, le meilleur moyen est de créer une table dans votre propre base de données pour essayer combien de caractères chinois peuvent être stockés. Maintenant que MySQL 5.0 est disponible, varchar(20) peut stocker 20 caractères chinois

Comment stocker le nom d'utilisateur et le mot de passe lors de la connexion :

Généralement, nous utilisons des cookies pour stocker des informations utilisateur sur le client, comme la mise en œuvre d'une connexion de sept jours. système gratuit, etc.

Nous définissons d'abord les paramètres du cookie lors de la connexion et stockons le nom d'utilisateur et le mot de passe la prochaine fois, lorsque nous passerons à la page suivante,

Nous pourrons d'abord déterminer s'il y a un cookie. s'il y a une valeur, passez directement à la page suivante. Sinon, vous serez invité à vous connecter.

Après avoir mis en œuvre le stockage des cookies, les utilisateurs peuvent se connecter avec succès sans saisir de mot de passe !

Commande pour afficher le pare-feu :

Afficher l'état du pare-feu : état du service iptables

Activer le pare-feu : démarrage du service iptables

Désactiver le pare-feu : arrêt du service iptables

Index clusterisé et Index non clusterisé :

1. Index clusterisé

a) Un élément d'index correspond directement à la page de stockage de l'enregistrement de données réel, que l'on peut dire "direct "

b) La clé primaire est manquante Enregistrez-la en l'utilisant

c) Le tri des éléments d'index est exactement le même que le tri de stockage des lignes de données. Profitez-en, si vous le souhaitez pour modifier l'ordre de stockage des données, vous pouvez changer la clé primaire (annuler la clé primaire d'origine et en trouver une autre. Un champ ou un groupe de champs pouvant répondre aux exigences de la clé primaire, reconstruire la clé primaire)

d) Une table ne peut avoir qu'un seul index clusterisé (raison : une fois les données stockées, il ne peut y avoir qu'une seule commande)

2

, index non clusterisé a) Il n'est pas "directement accessible", et il peut être possible d'accéder à des tables de pages à plusieurs niveaux dans une chaîne. Localisez la page de données

<.> b) Une table peut avoir plusieurs index non clusterisés

Authentification unique :

1. Description du principe de connexion

Mécanisme technique de mise en œuvre de l'authentification unique : Lorsque l'utilisateur accède pour la première fois au système applicatif 1, car il ne s'est pas encore connecté, il sera dirigé vers le système d'authentification. dans ; Sur la base des informations de connexion fournies par l'utilisateur, le système d'authentification effectue une vérification d'identité. Si la vérification est réussie, un identifiant d'authentification doit être renvoyé à l'utilisateur lorsque l'utilisateur accède à d'autres applications, il apportera ce ticket avec ; lui comme ses propres informations d'authentification. Une fois que le système d'application a reçu la demande, il enverra le ticket au système d'authentification pour vérification afin de vérifier la validité du ticket. Si la vérification est réussie, l'utilisateur peut accéder au système d'application 2 et au système d'application 3 sans se reconnecter.

On constate que pour mettre en œuvre le SSO, les fonctions principales suivantes sont requises :

a) Tous les systèmes d'application partagent un système d'authentification d'identité

b) Tous les systèmes d'application ; peut identifier et extraire les informations sur les tickets ;

c) Le système d'application peut identifier les utilisateurs qui se sont connectés et peut déterminer automatiquement si l'utilisateur actuel s'est connecté, complétant ainsi la fonction d'authentification unique

Sur la base des principes de base ci-dessus, j'ai conçu un programme de système d'authentification unique utilisant le langage PHP, et il a été officiellement mis en service pour générer le serveur. Ce programme système utilise les informations du ticket avec l'identifiant de session unique de l'ensemble du système comme moyen pour obtenir les informations complètes du site de l'utilisateur en ligne actuel (informations sur l'état de connexion et autres informations sur le site à l'échelle de l'utilisateur qui doivent être traitées).

Processus de connexion :

1. Connectez-vous à un site pour la première fois :

a) L'utilisateur saisit le nom d'utilisateur + Mot de passe, envoyer la demande de connexion au centre de vérification des utilisateurs

b) Actuellement connecté au site, via demande de webservice, le centre de vérification des utilisateurs vérifie la légitimité du nom d'utilisateur et du mot de passe. Si la vérification est réussie, un ticket est généré pour identifier l'utilisateur de la session en cours, et l'identifiant du site du sous-site actuellement connecté est enregistré dans le centre utilisateur. Enfin

c) Renvoyez l'obtenu. données utilisateur et ticket pour le stand du sous-site. Si la vérification échoue, le code d'état d'erreur correspondant est renvoyé.

d) Selon le résultat renvoyé par la requête du webservice à l'étape précédente, le sous-site actuel enregistre l'utilisateur : si le code d'état indique un succès, le site actuel enregistre le ticket via le cookie de ce site, et le site enregistre le statut de connexion de l'utilisateur. Si le code d'état indique un échec, l'utilisateur recevra une invite d'échec de connexion correspondante.

2. Une fois connecté, l'utilisateur accède à une autre sous-section :

a) Vérifiez le statut de connexion de l'utilisateur via le cookie ou la session du site : Si la vérification est réussie, entrez dans le programme de traitement normal du site ; Sinon, le centre utilisateur vérifie l'état de connexion de l'utilisateur (envoie un ticket au centre de vérification de l'utilisateur). Si la vérification est réussie, le traitement de connexion local est effectué sur les informations utilisateur renvoyées. l'utilisateur n'est pas connecté.

Processus de déconnexion :

a) La déconnexion actuelle efface le statut de connexion de l'utilisateur sur le site et l'ID aléatoire unique de l'utilisateur enregistré localement pour l'ensemble du site

b) Via l'interface du service Web, effacez l'identifiant aléatoire unique enregistré sur l'ensemble du site. L'interface du service Web reviendra, déconnectera le code javascript des autres sous-sites connectés, et ce site affichera ce code.

c) Le code js accède au script de déconnexion standard W3C du site correspondant

Comment définir constantes de classe :

Const

Qu'est-ce qu'une méthode abstraite :

Une méthode sans corps de méthode est une méthode abstraite, utiliser Keyword abstract est utilisé pour modifier le type de données des paramètres

ajax,  :

1 .json 2.jsonp 3.xml 4.html

Lien à trois niveaux :

La sous-classe appelle la classe parent ID récursivement

Résoudre le conflit de clé primaire Commande du fichier de configuration

#auto_increment_offset =1

#auto_increment_increment=2

5. Pourquoi utiliser le contrôle de session

Le protocole http est un protocole sans état qui identifie les utilisateurs via l'ID de session

6.Quoi sont les protocoles

httpHTTPS ip

7 Qu'est-ce que le protocole HTTP

Protocole de transfert hypertexte

8. Que sont XML et HTML

XML est un langage de balisage extensible

HTML est un langage de balisage hypertexte

9, qu'est-ce que jsonp

Une façon de faire des requêtes inter-domaines utilise

10.yiiWidgets de framework

Les petits widgets sont essentiellement utilisés dans les vues, et la méthode yiibaseWidget::widget() peut être appelée dans la vue pour utiliser des widgets.

11.tpFichier de configuration du framework

common/config.php

12.tpMéthodes à une seule lettre du framework

C Récupérer la valeur de configuration

D Instancier la classe Model

Fonction de définition du langage L

I obtient les paramètres d'entrée

M est utilisé pour instancier un modèle sans fichier de modèle

...

13 .Fonction de rappel

array_map, array_walk, array_reduce

La sous-classe appelle la méthode statique de la classe parent

parent::$a

phpNiveau d'erreur :

fatalerror erreur fatale : 0000 0000 0000 001 ouvert 1

avertissement erreur d'avertissement : 0000 0000 0000 010 ouvert 2

AVIS avertissement : 0000 0000 0 001 000 ouvert 8

while faire while Différence :

while consiste à juger d'abord puis à exécuter

dowhile consiste à exécuter en premier puis jugez ;

Méthodes magiques couramment utilisées :

__desctruct(); __set(); >

Méthode de construction

Appelée automatiquement lors de l'instanciation du programme __construct() :

Méthode de destruction, appelée automatiquement à la fin du programme __destrcut() :

Sous-requête :

(Utilisez les résultats de la requête interne comme conditions de comparaison de la requête externe)

#Pas besoin de commander par pour interroger les derniers produits

selectgoods_id,goods_name from marchandises où marchandises_id = (select max(goods_id)fromgoods);

MySAM InnoDB Différence : Les opérations d'écriture d'InnoDB sont rapides, prennent en charge les transactions, les verrous de ligne de données, prennent en charge les clés externes, mais ne prennent pas en charge les index de texte intégral, la plage de clés principale d'InnoDB est plus grande et le maximum est 2 fois celui de MyISAM.

MyISAM ne prend pas en charge les transactions et les clés étrangères. Il propose des opérations de lecture rapide et prend en charge les tables de verrouillage de données, les données SIG et les index de texte intégral (car il ne prend pas en charge la segmentation des mots chinois, l'index de texte intégral de MyISAM est en fait inutile).

La différence entre session

et cookie : 1. La session est sur le serveur côté, cookie Sur le client (navigateur)

2. La session est stockée dans un fichier sur le serveur par défaut (pas en mémoire)

3. Le fonctionnement de la session dépend du identifiant de session, et l'identifiant de session est l'existence d'un cookie, c'est-à-dire que si le navigateur désactive les cookies, la session sera également invalide (mais cela peut être obtenu d'autres manières, comme en passant session_id dans l'URL)

4. La session peut être placée dans des fichiers, des bases de données ou en mémoire.

5. La session est généralement utilisée pour la vérification des utilisateurs

Quelle est la différence entre l'interface et la classe abstraite :

1 Ni les classes abstraites ni les interfaces ne peuvent être instanciées directement. Si elles doivent être instanciées, les variables de classe abstraite doivent pointer vers des objets de sous-classe qui implémentent toutes les méthodes abstraites, et les variables d'interface doivent pointer vers des objets de classe qui implémenter toutes les méthodes d'interface.

2 Les classes abstraites doivent être héritées par les sous-classes et les interfaces doivent être implémentées par les classes.

3. Les interfaces ne peuvent être utilisées que pour les déclarations de méthodes. Les classes abstraites peuvent être utilisées pour les déclarations de méthodes et les implémentations de méthodes <.>  

4

. Les variables définies dans l'interface ne peuvent être que des constantes statiques publiques, et les variables des classes abstraites sont des variables ordinaires.

5

. Toutes les méthodes abstraites d'une classe abstraite doivent être implémentées par la sous-classe. Si la sous-classe ne peut pas implémenter toutes les méthodes abstraites de la classe parent, alors la sous-classe. la sous-classe ne peut être qu'une classe abstraite. De même, lorsqu'une classe implémente une interface, si elle ne peut pas implémenter toutes les méthodes de l'interface, alors la classe ne peut être qu'une classe abstraite.

6

. Les méthodes abstraites ne peuvent être déclarées, pas implémentées. Les interfaces sont le résultat de la conception et les classes abstraites sont le résultat de la reconstruction  7

, Il ne peut y avoir de méthode abstraite dans une classe abstraite

 8

, S'il y a un résumé méthode dans une classe, alors cette classe Cela ne peut être qu'une classe abstraite

9

Les méthodes abstraites doivent être implémentées, elles ne peuvent donc pas être statiques ou privées.

10. Les interfaces peuvent hériter d'interfaces et peuvent hériter de plusieurs interfaces, mais les classes ne peuvent hériter que d'une seule racine.

boucle for ou boucle foreach, laquelle est la plus rapide ?

Lorsque foreach boucle le tableau, le pointeur pointe automatiquement vers l'élément suivant. Il n'est pas nécessaire de calculer la longueur du tableau. Il n'y a pas de jugement conditionnel ni de variables auto-incrémentées, les performances sont donc nettement supérieures. pour.

Supprimer toutes les données des hommes du tableau entre 20-30 ans :

Supprimer le nom du tableau où sexe =0 et âge entre 20 et 30;

Quelles sont les différences et les avantages de la staticisation et de la pseudo-statique ?

Les pages web statiques se terminent généralement par .html ou htm, et l'adresse correspond à un fichier, qui existe réellement dans un répertoire du serveur du site.

Avantages : 1. Lorsqu'un visiteur accède à une page Web, la base de données n'est pas lue et les fichiers correspondant à l'espace du site Web sont directement accessibles. (Lire les fichiers directement)

2. Les pages Web purement statiques sont conviviales pour les moteurs de recherche et sont les plus faciles à inclure dans les moteurs de recherche. (Facile à inclure)

3. Étant donné que le serveur n'a pas besoin de faire trop de traitement lors de l'accès à une page Web, la pression sur le serveur est minime, il est donc plus facile de faire face à des visites élevées. (Économiser la pression du serveur)

4. Certaines attaques visant les bases de données, telles que les attaques par injection SQL, sont souvent difficiles à démarrer avec l'adresse face à des pages Web statiques. (Haute sécurité)

Le pseudo-statique est en fait dynamique, et le processus de traitement des données est le même que dynamique.

Avantages : En termes de forme de l'URL, l'adresse pseudo-statique et l'adresse statique peuvent être exactement les mêmes. Il n'est pas facile pour les visiteurs ordinaires de distinguer s'il s'agit d'une vraie adresse statique ou d'un pseudo. -statique (facile à inclure)

Rappel synchrone Alipay et rappel asynchrone :

Lorsqu'une demande de paiement est envoyée au paiement canal, le canal de paiement renverra rapidement un résultat. Mais ce résultat vous indique seulement que l'appel a réussi, pas que la déduction a réussi. C'est ce qu'on appelle un appel synchrone . De nombreux novices considéreront ce résultat comme un paiement réussi, et ils seront trompés. Le résultat est que le taux de réussite des paiements est extrêmement élevé, accompagné d'un tas de taux de créances irrécouvrables inexpliqués. Les testeurs doivent accorder une attention particulière à la falsification des données de test. : montant, synchronisation Résultats du retour, numéro de commande, etc.

Il y aura une adresse de rappel dans les paramètres de la demande synchrone. Cette adresse est appelée par le canal de paiement une fois la déduction réussie. C'est ce qu'on appelle un appel asynchrone. Généralement, l'interface de synchronisation vérifie uniquement si les paramètres sont corrects, si la signature est correcte, etc. L'interface asynchrone vous indiquera le résultat de la déduction. Généralement, les interfaces asynchrones ont un délai inférieur à 5 secondes. Si l'appel échoue, il sera réessayé. Parfois, cela réussit ici, mais le canal de paiement ne reçoit pas de retour, il continuera donc à s'ajuster. Il est normal que le paiement effectué le même jour soit appelé de manière asynchrone jusqu'au lendemain. C’est également un point auquel les développeurs doivent prêter une attention particulière, et non pas le considérer comme un paiement répété. Les testeurs doivent également tester les rappels répétés, qui ne doivent être valides qu'une seule fois. Ce n’est pas le plus gros écueil. Généralement, côté canal de paiement, vous ne serez averti que si le paiement réussit. Si le paiement échoue, nous ne vous le dirons pas du tout. D’un autre côté, pourquoi ne puis-je pas toujours recevoir des résultats asynchrones ? Ensuite, vous devez le vérifier. Les résultats synchrones ne sont pas fiables et les appels asynchrones ne sont pas fiables. Alors, comment déterminer le résultat du paiement ? La dernière astuce consiste à vérifier la commande et à contre-vérifier. Généralement, le côté du canal de paiement fournira une interface de contre-vérification, obtiendra régulièrement les commandes à payer dans la base de données et appellera l'interface de contre-vérification du côté du canal de paiement, et enfin terminera. les commandes avec des déductions réussies du côté du canal de paiement perdent.


Repost https://blog.csdn.net/weialemon/article/details/77898502

Recommandations associées :

Compilation et partage des questions d'entretien PHP

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

Questions d'algorithme de Questions d'entretien PHP

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