Maison >développement back-end >tutoriel php >Questions d'entretien de base PHP
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
querySé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 · 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 Fopen(), file_get_contents() Lire et écrire, ajouter Dissocier(); 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 : M instancie le classe de base, et D peut instancier la classe personnalisée 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. . 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_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_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. . c. Rechargez le panier dans la session. 2. Afficher les articles du panier 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 ? Type d'index : La différence entre redis et memecache est : SKU Comment faire : tp fichier de configuration : common/config.php php type de données : Ressource (Ressources) NULL (NULL) 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. : //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 , à savoir : public (public, par défaut) protected (protégé) ) privé (privé) 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. 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 : 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; Créez une table principale et les identifiants sont distribués à partir de la table principale. 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 (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) <.> 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; 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 : Commande pour afficher le pare-feu : Index clusterisé et Index non clusterisé : 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) , 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 Authentification unique : 1. Description du principe de connexion Processus de connexion : 1. Connectez-vous à un site pour la première fois : 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 9, qu'est-ce que jsonp 10.yiiWidgets de framework 11.tpFichier de configuration du framework 12.tpMéthodes à une seule lettre du framework 13 .Fonction de rappel 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(); > Sous-requête : MySAM InnoDB Différence : 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). 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 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 <.> . 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. . 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. . 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 8 9 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
, ,
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!