Maison >développement back-end >tutoriel php >Analyse de quelques réponses aux 'Questions d'entretien de recrutement de stagiaires PHP à Xiaomi Spring Shanghai 2019'

Analyse de quelques réponses aux 'Questions d'entretien de recrutement de stagiaires PHP à Xiaomi Spring Shanghai 2019'

藏色散人
藏色散人avant
2019-12-07 13:33:096918parcourir

Recommandations associées : "Résumé des questions d'entretien PHP en 2019 (collection) "

1 Comment Nginx parvient-il à équilibrer la charge

C'est relativement simple

1 Sondage

C'est la stratégie par défaut, qui alloue chaque requête à un serveur différent une par une dans l'ordre, si le serveur raccroche, il peut être automatiquement éliminé.

upstream  fengzp.com {   
    server   192.168.99.100:42000; 
    server   192.168.99.100:42001;  
}

2. Connexions minimales

Attribuer les requêtes au serveur avec le moins de connexions

upstream  fengzp.com {   
    least_conn;
    server   192.168.99.100:42000; 
    server   192.168.99.100:42001;  
}

3.

Utilisez le poids pour spécifier le taux d'accès au serveur. Le poids par défaut est 1. La configuration suivante rendra le taux d'accès du serveur 2 deux fois supérieur à celui du serveur 1.

upstream  fengzp.com {   
    server   192.168.99.100:42000 weight=1; 
    server   192.168.99.100:42001 weight=2;  
}

4.ip_hash

Chaque requête sera distribuée en fonction de la valeur de hachage de l'adresse IP d'accès, de sorte que les requêtes Web consécutives du même client seront distribuées à le même serveur pour le traitement, ce qui peut résoudre le problème de session. Si le serveur raccroche, il peut être automatiquement éliminé.

upstream  fengzp.com {   
    ip_hash;
    server   192.168.99.100:42000; 
    server   192.168.99.100:42001;  
}

ip_hash peut être utilisé en combinaison avec le poids.

2 丶Commandes Linux couramment utilisées

Article de référence :

https://www.php.cn/linux-415502.html

3 composants couramment utilisés dans les mini-programmes WeChat

vue 丶texte 丶bouton 丶navigateur 丶vue par défilement... etc.

4丶Comment configurer l'hôte virtuel dans Nginx

Article de référence :

https://www.php.cn/php-weizijiaocheng-387454.html

5 Différences entre TP5 et le framework Laravel

Article de référence :

https://www.php.cn/phpkj/thinkphp/422769.html

6 丶Migration de données dans le framework TP5 et Laravel

Article de référence :

https://www.php.cn/js-tutorial-386843 .html

https://www.php.cn/phpkj/laravel/414216.html

7 丶Explication du modèle RBAC

Qu'est-ce que RBAC

RBAC (Role-Based Access Control) : nom anglais Rose base Access Controller. Ce blog présente la conception du système d'autorisation de ce modèle. L'association directe entre les utilisateurs et les autorisations a été annulée et les autorisations des utilisateurs ont été accordées indirectement via des rôles associés à l'utilisateur et des autorisations associées à des rôles. Cela réalise le découplage. RBAC est divisé en versions suivantes au cours de son processus de développement. RBAC0, RBAC1, RBAC2, RBAC3.

8 丶Processus du module de commande

9 丶Opérations après paiement réussi de la commande

10 丶Paramètres Activation par e-mail délai d'expiration de la connexion

Écrire l'horodatage + l'heure d'expiration lors de l'écriture du code d'activation dans la base de données

11 La différence entre Redis et Mongodb

1. Les performances

sont relativement élevées et les performances ne devraient pas être un goulot d'étranglement pour nous.

De manière générale, Redis et Memcache sont similaires en termes de TPS.

2. Commodité de fonctionnement

Redis a ajouté ses propres fonctionnalités de VM après la version 2.0, dépassant les limitations de la mémoire physique pouvant être définie pour la clé ; valeur (semblable à memcache).

mongoDB est adapté au stockage de grandes quantités de données. Il s'appuie sur la VM du système d'exploitation pour la gestion de la mémoire et consomme beaucoup de mémoire. Le service ne doit pas être combiné avec d'autres services.

4. Disponibilité (problème à point unique)

Pour un problème à point unique :

redis, s'appuie sur le client pour implémenter la lecture et l'écriture distribuées ; main Lors de la réplication à partir d'un esclave, chaque fois que le nœud esclave se reconnecte au nœud maître, il doit s'appuyer sur l'intégralité de l'instantané. Il n'y a pas de réplication incrémentielle. En raison de problèmes de performances et d'efficacité, le problème du partitionnement automatique est plus compliqué. n'est pas pris en charge et un mécanisme de hachage cohérent doit être défini par le programme.

Une alternative consiste à utiliser le propre mécanisme de réplication de Redis et à utiliser la réplication active (stockage multiple), ou à passer à la réplication incrémentielle (qui doit être implémentée par vous-même). Problèmes de cohérence et problèmes de performances.

mongoDB prend en charge maître-esclave, réplicaset (en interne utilisant l'algorithme d'élection paxos, récupération automatique en cas de panne), mécanisme de partitionnement automatique, protégeant le client des mécanismes de basculement et de partitionnement.

5. Fiabilité (persistance)

Pour la persistance et la récupération des données, redis prend en charge (snapshot, AOF) : s'appuie sur des instantanés pour la persistance, aof amélioration tout en améliorant la fiabilité , cela a également un impact sur les performances. MongoDB a adopté la méthode binlog depuis la version 1.8 pour prendre en charge la fiabilité de la persistance.

6. Cohérence des données (prise en charge des transactions)

La prise en charge des transactions redis est relativement faible et ne peut garantir que chaque opération de la transaction n'est pas exécutée en continu. transactions.

7. Scénarios d'application

redis : des opérations et des calculs plus performants avec des volumes de données plus petits

MongoDB : résout principalement le problème de l'efficacité d'accès aux données massives

12 La différence entre redis et memcached

Article de référence : https:// www.php.cn/mysql-tutorials-410551.html

13 丶File d'attente dans redis

Il existe deux façons d'implémenter Redis. file d'attente :

1. Modèle producteur-consommateur.

Version normale :

Par exemple, dans une file d'attente, le producteur A y insère une donnée et le consommateur B affiche les données, mais la file d'attente est toujours vide. C'est donc un à un.

En ce qui concerne le premier entré, premier sorti ou premier entré-dernier sorti, etc., vous pouvez suivre la fonction lpush (pousser une donnée du côté gauche de la file d'attente, c'est-à-dire la tête de la file d'attente) rpush (pousse une donnée du côté droit de la file d'attente, c'est-à-dire la queue de la file d'attente) lpop (identique à la gestion) rpop etc. pour contrôler.

Version bloquante :

Mais la commande ci-dessus revient immédiatement, qu'il y ait des données ou non. Il existe une version améliorée de lpop pour récupérer des données, la version bloquante blpop (block left pop). ,

Utilisation : blpop key1 key2 ... keyn 10

Pré-obtenez les valeurs de plusieurs clés en même temps, et réglez le délai d'attente sur 10s si toutes les clés ou certaines. les clés ont des valeurs, elles seront renvoyées immédiatement. Si Si toutes les clés n'ont aucune valeur, bloquez pendant 10 secondes et retournez

2. Mode éditeur-abonné.

Concept :

Trois utilisateurs A, B et C s'abonnent à une chaîne nommée msg en même temps, puis l'éditeur publie une donnée sur la chaîne de msg, puis A, trois utilisateurs B et C recevront les données.

Remarque :

Évidemment, trois utilisateurs ABC doivent être bloqués. La façon de recevoir les données souscrites doit s'appuyer sur la fonction de rappel enregistrée dans Redis.

Les données publiées ne seront pas reproduites dans Redis, ce qui signifie qu'après leur publication, A, B et C ne les ont pas reçues pour diverses raisons.

14 丶Types de données dans redis

Redis prend en charge cinq types de données : string (string), hash (hash), list (list), set (set) et zset (ensemble trié : ensemble ordonné).

15 丶Événements dans le framework TP

16 丶Injection de dépendances du framework TP

Pas différent de Laravel

17 Opération de séparation lecture-écriture MySQL

Article de référence : https://www.php.cn/mysql-tutorials-360278.html

18 丶La différence entre la base de données varchar et char

varchar récupérera l'espace inutilisé

19 丶La différence entre MyIsam et InnoDB

1. MyISAM : le type de table par défaut, basé sur le type ISAM traditionnel, est l'abréviation de Indexed Sequential Access Method, qui est la méthode standard de stockage des enregistrements et des fichiers. Il n'est pas sécurisé pour les transactions et ne prend pas en charge les clés étrangères. Si vous exécutez un grand nombre de sélections, l'insertion MyISAM est plus appropriée.

2. InnoDB : un moteur qui prend en charge la sécurité des transactions. La prise en charge des clés étrangères, des verrous de ligne et des transactions est sa plus grande fonctionnalité. S'il y a un grand nombre de mises à jour et d'insertions, il est recommandé d'utiliser InnoDB, en particulier pour les situations de simultanéité multiple et de QPS élevé.

1. Différences de verrouillage de table

MyISAM :

myisam ne prend en charge les verrous au niveau de la table que lorsque les utilisateurs utilisent des tables myisam. Les instructions , select, update, delete et insert verrouilleront automatiquement la table. Si la table verrouillée répond à la concurrence d'insertion, de nouvelles données peuvent être insérées à la fin de la table. Vous pouvez également verrouiller la table via la commande lock table. Cette opération permet principalement de simuler des transactions, mais elle est très coûteuse et n'est généralement utilisée que dans des démonstrations expérimentales.

InnoDB :

Innodb prend en charge les transactions et les verrous au niveau des lignes, ce qui est la plus grande fonctionnalité d'Innodb.

Propriétés ACIDES des transactions : atomicité, cohérence, isolation, durable.

Plusieurs problèmes causés par des transactions simultanées : mises à jour perdues, lectures sales, lectures non répétables et lectures fantômes.

2. Différences entre les fichiers de base de données

MyISAM :

myisam appartient à la table du tas

myisam est sur le disque Il y a trois fichiers sur le stockage, chaque nom de fichier commence par le nom de la table et l'extension indique le type de fichier.

.frm est utilisé pour stocker les définitions de table

.MYD est utilisé pour stocker des données

.MYI est utilisé pour stocker les index de table

les tables myisam également prend en charge trois formats de stockage différents :

Tableau statique (par défaut, mais veuillez noter qu'il ne peut pas y avoir d'espaces à la fin des données, elles seront supprimées), table dynamique, table compressée.

InnoDB :

innodb est une table organisée en index

innodb a deux méthodes de stockage, le stockage d'espace de table partagé et le stockage d'espace multi-table

La structure de table des deux méthodes de stockage est la même que celle de myisam, en commençant par le nom de la table et l'extension est .frm.

Si vous utilisez un espace table partagé, les fichiers de données et les fichiers d'index de toutes les tables sont stockés dans un seul espace table. Un espace table peut avoir plusieurs fichiers. Définissez l'emplacement et l'emplacement de l'espace table partagé. les paramètres innodb_data_file_path et innodb_data_home_dir Name, généralement le nom de l'espace table partagé est ibdata1-n.

Si plusieurs espaces table sont utilisés, chaque table dispose d'un fichier d'espace table pour stocker les données et les index de chaque table. Le nom du fichier commence par le nom de la table et a une extension .ibd.

3. Différences d'index

1. À propos de la croissance automatique

La colonne de croissance automatique du moteur myisam doit être un index. , s'il s'agit d'un index combiné, la croissance automatique n'a pas besoin d'être la première colonne. Elle peut être triée puis incrémentée en fonction des colonnes précédentes.

La croissance automatique du moteur innodb doit être un index S'il s'agit d'un index composite, il doit également s'agir de la première colonne de l'index composite.

2. À propos des clés primaires

myisam permet aux tables sans index ni clés primaires d'exister

Les index de Myisam sont toutes des adresses de lignes enregistrées.

Si le moteur innodb ne définit pas de clé primaire ou d'index unique non vide, il générera automatiquement une clé primaire de 6 octets (invisible pour l'utilisateur)

Les données d'innodb fait partie de l'index principal, supplémentaire L'index contient la valeur de l'index principal.

3. À propos de la fonction count ()

myisam enregistre le nombre total de lignes dans le tableau Si count(*) from table est sélectionné; sera retiré directement

Innodb ne sauvegarde pas le nombre total de lignes dans la table. Si vous utilisez select count(*) from table, il parcourra toute la table, ce qui consomme beaucoup d'argent. , après avoir ajouté la condition Where, myisam et innodb la gèrent de la même manière.

4. Index de texte intégral

myisam prend en charge l'index de texte intégral de type FULLTEXT

innodb ne prend pas en charge l'index de texte intégral de type FULLTEXT (pris en charge depuis la version 5.6), mais innodb peut utiliser le plug-in sphinx pour prendre en charge l'indexation en texte intégral, et l'effet est meilleur. (sphinx est un logiciel open source qui fournit des interfaces API dans plusieurs langues et peut optimiser diverses requêtes MySQL).

5.delete from table

Lors de l'utilisation de cette commande, innodb ne recréera pas la table, mais supprimera les données une par une si vous souhaitez effacer. it on innodb Il est préférable de ne pas utiliser cette commande lors de la sauvegarde de tables contenant de grandes quantités de données. (Il est recommandé d'utiliser la table tronquée, mais l'utilisateur doit avoir l'autorisation de supprimer cette table).

6. Emplacement de sauvegarde de l'index

L'index de myisam est enregistré séparément dans le nom de la table + le fichier .MYI.

Les index et les données Innodb sont stockés ensemble dans l'espace table.

20 丶Il existe plusieurs types d'index dans MySQL

1 Index ordinaire

L'index le plus basique est simplement. pour accélérer, améliorer la vitesse des requêtes.

2. L'index unique

est similaire à un index normal, sauf que la valeur de colonne de l'index doit être unique, mais les valeurs nulles sont autorisées, cela est nul, si Index de combinaison, la combinaison des valeurs de colonne doit être unique.

3. L'index de clé primaire

est notre identifiant de clé primaire couramment utilisé. Il s'agit d'un index unique spécial qui n'autorise pas les valeurs nulles. une table. Créez un index de clé primaire.

Caractéristiques :

1) Une table n'a qu'un seul index de clé primaire

2) La clé primaire nécessite une incrémentation automatique

4. Index combiné

C'est-à-dire un index établi par plusieurs champs

Indice de texte intégral

fulltext

. Prise en charge du moteur myisam

6. Clés étrangères

Choses à noter lors de l'établissement de clés étrangères :

1) Les moteurs de table doivent être les mêmes

2) Les types de champs doivent être les mêmes

3) La longueur doit être la même

4) La plage de stockage doit être la même

5) Le champ contrainte doit apparaître dans le champ référencé

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer