Maison > développement back-end > tutoriel php > Résumé des questions d'entretien PHP

Résumé des questions d'entretien PHP

不言
Libérer: 2023-03-24 22:28:01
original
2682 Les gens l'ont consulté

Cet article présente principalement un résumé des questions d'entretien PHP, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

csrf. Qu'est-ce que c'est :

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 pour demander à se connecter. 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 normalement envoyer des demandes au site Web A. ;

3. L'utilisateur ne quitte pas le site Web A, ouvrez une page TAB dans le même navigateur pour visiter le site Web B

4. Une fois que le site Web B a reçu la demande de l'utilisateur, il en renvoie. code offensant et envoie une demande d'accès au site tiers A. ;

5. Après avoir reçu ces codes offensants, le navigateur transporte les informations du cookie et envoie une demande 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

La différence entre session et cookie :

1. COOKIE existe côté client. SESSION existe côté serveur.

2. La taille de stockage par défaut du COOKIE est de 4 Ko. Généralement, le nombre de COOKIES ne dépassera pas 20, en fonction des besoins spécifiques.

3.SESSION est stocké sous forme de fichier par défaut. Le temps de survie par défaut est de 24 minutes, la taille de stockage initiale est de 1 Mo et elle peut être modifiée théoriquement sans limite. Peut être configuré en modifiant php.ini.

4.SESSION est basé sur COOKIE par défaut Lorsque SESSION est ouverte, session_id sera généré et stocké dans COOKIE.

5.SESSION COOKIE sont tous des contrôles de session. Parce que notre http est sans état et sans connexion. Un contrôle de session est donc nécessaire pour identifier l'utilisateur.

variable super globale php :

$GLOBALS $_SERVER $_REQUEST $_POST $_GET

$_FILES $_ENV $ _COOKIE         $_SESSION

PHP et MYSQL traitement des transactions :

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

begin. Démarrer une transaction

rollback transaction rollback

confirmation de la transaction de validation

2 Utilisez directement set pour modifier le mode de validation automatique de MySQL


<.>

4 caractéristiques majeures des transactions (ACID) :

Atomicité :

La transaction est l'unité logique de travail de la base de données, et elle a Soit tout les modifications sont exécutées ou aucune n’est exécutée.

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 une transaction terminée, les modifications apportées à la base de données par la transaction sont 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, attaque de script intersite

Prévenir : injection de script, balises de script de filtre d'échappement. La différence entre

union

et unionall : l'union supprime les doublons, unionall ne supprime pas les doublons

RBAC

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

redis

Persistance : Instantané de mémoire (RDB) La persistance RDB peut être générée à des intervalles spécifiés Instantané ponctuel de l'ensemble de données

Log (AOF) AOF enregistre de manière persistante toutes les commandes d'opération d'écriture exécutées par le serveur et restaure l'ensemble de données en réexécutant ces commandes au démarrage du serveur.

Sous-tableau :

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

Division verticale du tableau : la division verticale est divisée par champs.

Fractionnement horizontal des tableaux : 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 tableau horizontal ?

Vous pouvez créer un nouveau service d'identification et enregistrer l'ID de l'utilisateur dans la base de données ou Redis.

jquerySélecteur :

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

Éléments en ligne et éléments en bloc

En ligne : , ,
, ,

En bloc :

,

,

Conversion : affichage : en ligne, bloc, bloc en ligne.

Différence :

bloc,

①Toujours commencer sur une nouvelle ligne, occupant une ligne entière

②Hauteur, hauteur de ligne et marges et remplissage La distance peut être contrôlé ;

③La bande passante est toujours la même que la largeur du navigateur, quel que soit 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 : orderby

Le nombre d'hommes et de femmes dans le tableau est de 20 à 30 :

sélectionnez le nombre (sexe) du tableau où l'âge entre 20 et 30 ans est regroupé par sexe

ORM

Le mode Object Relational Mapping (ORM) est une technologie permettant 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-antu // Afficher tous les ports TCP actuels·

Netstat-ntulp |grep80 //Afficher l'utilisation des 80 ports·

Netstat-an grep3306 //Afficher l'utilisation des 3306 ports Situation·

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

Fonction d'opération de fichier :

ouvrir Ouvrir le fichier

fstat Récupérer le fichier

file Lire l'intégralité du fichier dans un tableau

fclose Fermer le fichier

fwrite Écrire dans le fichier (en toute sécurité utiliser un fichier binaire)

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

Plusieurs façons d'ouvrir le fichier :

Fopen(), file_get_contents ()

Lire et écrire, ajouter

phpCommande de suppression du 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 la classe de base, D peut instancier la classe personnalisée

table

change de couleur sur les lignes alternées : Utilisez JQ pour identifier les nombres pairs et impairs de la table tr td et attribuez différents styles CSS à les nombres impairs et pairs. À travers différents arrière-plans, vous pouvez changer les couleurs sur des lignes alternées.

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.

ajaxSynchronisation et asynchrone : <.>

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

Linux

Afficher tous les fichiers :

ls

Définir un p sur un autre p : Plus la valeur du z-index est grande, plus elle monte

ob

Fonction :

Ob_start(); //Ouvre un tampon de sortie, toutes les informations de sortie ne sont plus envoyées directement au navigateur, mais stocké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 buffer, 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. Manipuler les articles dans le panier

2. Vous pouvez modifier la quantité d'articles dans le panier en cliquant sur le signe + ou -

3. Lorsque le bouton + ou - sera cliqué, 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é

redis

et memecache est : 1. Méthode de stockage :

Memecache stocke toutes les données dans la mémoire après. panne de courant, il se bloquera car 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 types scalaires :

booléen (type booléen)

entier (type entier)

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

chaîne (chaîne)

Deux types composites :

Array NULL (NULL)

Mode Singleton :

La principale caractéristique du mode singleton est "trois privés et un public":

Nécessite une classe de sauvegarde La variable membre statique privée de la seule instance

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

La fonction clone doit être déclarée comme privée pour éviter que l'objet soit nouveau. Le

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

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

 :

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

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

Il existe trois modificateurs d'accès en PHP

, à savoir :

public (public, par défaut)

protégé (protégé)

privé (privé)

Modification de l'autorisation d'accès Portée des opérateurs :

Lorsqu'un membre d'une classe est déclaré avec un modificateur d'accès public, le membre peut être consulté et manipulé par du 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 légèrement plus compliqué Il est déclaré comme membre protégé et autorise uniquement l'accès aux sous-classes de cette classe.

mysql intStockage :

la taille du 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

top Voir la mémoire

df-lh Voir le disque

ps-a Voir tous les processus

Constante :

Utilisez $ pour les variables :

Il n'est pas nécessaire d'utiliser le symbole $ lors de la définition et de l'utilisation de constantes.

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 est :

Les méthodes ordinaires nécessitent qu'un objet soit appelé, et $this doit être lié. Autrement dit, les méthodes ordinaires doivent avoir un objet, puis laisser l'objet appeler

Et les méthodes statiques ne le font pas. appartiennent à n'importe quel objet, ils n'ont donc pas besoin d'être liés. Autrement dit, vous pouvez l'appeler sans objet

Membres statiques : ils sont accessibles sans instanciation. n'appartiennent qu'à cette classe.

Membres de la classe : l'un est défini dans la classe et l'autre est défini 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.

Si les fonctions peuvent être définies dans les fichiers de classe : Non

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

(1) Par valeur Passage : Toute modification de 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 de la valeur dans la portée de la fonction reflétera également ces modifications en dehors de la fonction

(3) Avantages et inconvénients :

A : Lors du passage par valeur, php doit copier la valeur. Surtout pour les chaînes et les objets volumineux, cela peut s'avérer une opération coûteuse.

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();,,

Fonction d'inversion de chaîne :

strrev, mb_string

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

HTTP1.0 stipule que le navigateur et le serveur ne maintiennent qu'une connexion à court terme. Chaque requête du navigateur doit établir une connexion TCP avec le serveur. Le serveur déconnecte immédiatement la connexion TCP une fois terminée. le traitement des demandes,

Le serveur ne garde pas de trace de chaque client ni n'enregistre 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 le fonction actuelle Ou boucle, 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. Le Le cycle de vie est différent : le cycle de vie des variables globales et de la principale Identique au programme, il sera détruit lorsque le programme sera détruit. Les variables locales sont à l'intérieur de la fonction ou à l'intérieur de la boucle et n'existeront plus à la sortie de la fonction ou. la boucle se termine

4. L'utilisation est différente : les variables globales sont utilisées dans chaque partie du programme après leur déclaration. Les parties peuvent être utilisées, 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 les requêtes HTTP

2. Réduire le DNS Trouver

3. Éviter la redirection

4. Utiliser le cache Ajax

5. Chargement différé des composants

6. Précharger les composants

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

8. Divisez les composants en plusieurs domaines

9. Minimisez le nombre d'iframes

10. Ne recevez pas d'erreurs http 404

Deuxièmement : orienté serveur

1. Réduire les cookies

2. Utiliser l'indépendance 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é


niginxComment configurer le numéro de port :

Configurer deux servent dans ce nginx.conf, chacun est un numéro de port différent.

jqObtenir la deuxième ligne du tableau tag :

$(tr:eq(1))

Que sont les variables variables :

Les variables variables nous permettent de changer dynamiquement le nom d'une variable. 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 la progression

Top pa aux|grep

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

chmod-x

MysqlRéplication maître-esclave :

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

i Le thread /o demande le binlog de la bibliothèque principale et écrit le journal binlog obtenu dans le fichier journal de relais (relay log)

La bibliothèque principale générera un thread de vidage de journal pour fournir à la bibliothèque esclave i/ ; o le thread transmet binlog ;

Le thread SQL lira le journal dans le fichier journal du relais et l'analysera en opérations spécifiques pour obtenir des opérations maître-esclave cohérentes et des données cohérentes

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

showmaster status;

startalve;

stopalve;

flushprivileges ;

GRANTREPLICATIONSLAVE,RELOAD,SUPER ON *.*

TOmysql_backup@'%'

IDENTIFIÉ PAR '123456';

  CHANGEMASTER TOmaster_host = '127.0.0.1',

   master_user='mysql_backup',

   master_password='123456',

  log_file='mysql bin.000 001 ',master_log_pos = 3696;

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

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

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

nginxProxy 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 n'est pas adapté à l'utilisation

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 le précédent. Cet algorithme peut effectuer intelligemment l'équilibrage de charge en fonction de la taille de la page. et le 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

Allouez 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, ce sera difficile. Consistent_hash peut résoudre ce problème

Cela peut améliorer l'efficacité du serveur de cache back-end lui-même ne prend pas en charge url_hash et. doit être téléchargé un logiciel de hachage

(6) least_conn

Nombre minimum de connexions, quel que soit l'appareil ayant le moins de connexions, il sera attribué à quel appareil

(7) consistent_hash

Algorithme de cohérence

3, Équilibrage de charge :

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

Mode de routage (recommandé)

Mode pont

Mode retour direct du service

Équilibrage round robin :

Chaque requête du réseau est allouée au réseau interne Serveur, passez de 1 à N puis recommencez. 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;

varchar20

Combien de caractères chinois peuvent être stockés ? Tout d'abord, vous devez déterminer la version de MySQL

Sous 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 (3 octets par caractère chinois)

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 le créer dans votre propre base de données. . Essayons combien de caractères chinois peuvent être mis dans une table. MySQL 5.0 est maintenant disponible, et varchar(20) peut stocker 20 caractères chinois

Nom d'utilisateur et mot de passe lors de la connexion. dans Comment stocker :

Généralement, nous utilisons des cookies pour stocker les informations utilisateur sur le client, comme un système sans connexion pendant sept jours.

Nous définissons d'abord les paramètres des cookies lors de la connexion et stockons le nom d'utilisateur et le mot de passe. La prochaine fois que nous passerons à la page suivante,

Nous pourrons d'abord déterminer s'il y a un cookie. est une valeur, il passera directement à la page suivante. S'il n'y a pas de valeur, il vous demandera de 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 !

Afficher la commande du pare-feu (avant Centos7.0) :

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

Activer le pare-feu : service iptables start

Désactiver le pare-feu : service iptables stop

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, ce qui peut être dit être "direct"

b) La clé primaire l'utilise par défaut

c) Le tri des éléments d'index est tout à fait cohérent avec le tri de stockage des lignes de données. J'en profite, si. vous souhaitez modifier l'ordre de stockage des données, vous pouvez changer la clé primaire (annuler l'original S'il existe une clé primaire, rechercher un autre champ ou un groupe de champs pouvant également répondre aux exigences de la clé primaire, et reconstruire la clé primaire clé)

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 ne peut pas être "directement accessible" et peut accéder à plusieurs objets dans une chaîne Ce n'est qu'après avoir nivelé la table des pages que la page de données peut

être localisé Cliquez pour vous connecter :

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 d'application 1 le temps, il sera connecté car il ne s'est pas encore connecté. Guide du système d'authentification pour se connecter en fonction 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. - le ticket doit être restitué à l'utilisateur ; lorsque l'utilisateur accède à d'autres applications, il apportera le ticket comme identifiant pour sa propre authentification. Après réception de la demande, le système d'application enverra le ticket au système d'authentification pour vérification. la validité du billet. 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 une demande de connexion au centre de vérification des utilisateurs

b) Actuellement connecté au site, via une 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, et enfin

c) Renvoyez les données utilisateur et les tickets obtenus au 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 le classe parent statiquement Méthode

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 0001 000 ouvert 8

pendant que faire pendant Différence :

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

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

Méthodes magiques couramment utilisées :

__desctruct(); __get(); __isset()

Méthode de construction

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

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

Constante magique :

espace de noms de méthode de ligne de fichier de classe de fonction


Sous-requête :

(utiliser le résultat de la requête interne comme condition de comparaison de la requête externe)

#Pas besoin de commander par pour consulter les derniers produits

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

MySAM InnoDB Différence :

innodb a des opérations d'écriture rapides, prend en charge les transactions, les verrous de lignes de données et les clés étrangères, mais ne prend pas en charge les index de texte intégral. La plage de clés primaires d'InnoDB est plus grande, avec un maximum de 2 fois celle 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 par d'autres moyens, 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.

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal