Cet article divise les programmeurs PHP en deux catégories : les programmeurs intermédiaires et avancés, et explore les compétences que ces deux catégories de programmeurs devraient posséder.
Programmeur PHP intermédiaire
1.Linux
peut fonctionner en douceur utiliser des scripts Shell pour effectuer de nombreuses tâches automatisées ; awk/sed/perl fonctionne également bien et peut effectuer de nombreux traitements de texte et statistiques de données ; peut essentiellement installer la plupart des programmes Linux non spéciaux (y compris diverses bibliothèques, packages et dépendances tierces) , etc., tels que MongoDB/Redis/Sphinx/Luncene/SVN, etc.) ; comprendre les services Linux de base, savoir comment afficher les données des indicateurs de performances Linux, connaître le suivi des problèmes de base sous Linux, etc.
2. Nginx :
Sur la base de la première étape, comprenez la configuration plus complexe de Nginx ; y compris la configuration multicœur, les événements, proxy_pass, la configuration sendfile/tcp_*, la connaissance des délais d'attente, etc. impact sur la configuration et les performances ; savoir qu'en plus du serveur Web, nginx peut également entreprendre un serveur proxy, un serveur statique inversé et d'autres configurations ; connaître le réglage de base de la configuration de nginx ; savoir comment configurer les autorisations, compiler une extension nginx vers nginx ; Principe (mécanisme maître/travailleur, epoll), savoir pourquoi les performances de nginx sont meilleures que les performances d'Apache, etc.
3. MySQL/MongoDB :
Dans le premier. stage En gros, en termes de développement MySQL, j'ai maîtrisé de nombreux conseils, y compris l'optimisation SQL régulière (optimisation group by/order by/rand, etc.) ; en plus de pouvoir construire MySQL, je peux également sauvegarder MySQL à chaud et à froid ; données, et je connais également les facteurs qui affectent les performances d'innodb/myisam. ;En outre, nous connaissons également certaines options de configuration spéciales, comme savoir comment configurer un environnement de synchronisation maître-esclave mysql et connaître chaque binlog_format La différence ; Connaître le suivi des performances de MySQL, y compris slow_log/explain, etc., et également savoir. création et traitement d'index de base ; comprendre l'architecture de base de MySQL (serveur + moteur de stockage) en termes de principes, et connaître la structure de base de stockage d'index InnoDB/MyISAM et ses différences (index clusterisé, B-tree) ; ; comprendre les solutions pour la plupart des exceptions MySQL (ou savoir où trouver les solutions). Si les conditions le permettent, il est recommandé de se renseigner sur la base de données MongoDB, un représentant de NoSQL, et de comparer les différences avec MySQL. Les collègues peuvent utiliser MongoDB en toute sécurité et prudemment dans des scénarios d'application appropriés, et connaître le développement combiné de base de PHP et MongoDB.
4. Redis/Memcached :
Dans la plupart des systèmes de taille moyenne, le traitement du cache sera certainement impliqué, vous devez donc comprendre le cache de base ; Similitudes, différences et scénarios d'application, être capable d'installer Redis/Memcached indépendamment, comprendre certaines fonctionnalités et limitations de base de Memcached, telles que la valeur maximale, et savoir comment combiner PHP avec leur utilisation, comprendre les principes de fonctionnement de base et l'utilisation de Redis ; , comprendre les types de données conventionnels et savoir quels types de scénarios doivent être utilisés, comprendre les transactions Redis, etc. Dans la partie principale, vous pouvez avoir une compréhension approximative de la structure de la mémoire de Memcached (mécanisme de dalle Redis comprend la structure de stockage d'implémentation sous-jacente des types de données courants (SDS/liste chaînée/SkipList/HashTable), etc. vous pouvez en savoir plus sur les transactions de Redis, RDB, AOF et autres mécanismes. Bon
5 PHP :
En plus des capacités de la première étape, en termes d'installation. et la configuration, vous pouvez installer librement PHP et la configuration de compilation et d'installation de diverses extensions tierces ; comprendre PHP -La plupart des options de configuration et des significations de fpm (telles que max_requests/max_children/request_terminate_timeout et d'autres configurations qui affectent les performances), connaissent le différence entre mod_php/fastcgi ; maîtrisent diverses technologies de base en PHP, y compris diverses technologies PHP plus approfondies, y compris une compréhension approfondie des fonctionnalités orientées objet/SPL/spéciales de PHP au niveau de la syntaxe telles que la réflexion en termes de ; frameworks, j'ai lu le code d'au moins un framework PHP MVC conventionnel et je connais le mécanisme de mise en œuvre interne et la conception du framework PHP de base. Pensée : dans le développement PHP, vous maîtrisez l'utilisation de modèles de conception conventionnels pour le développement d'applications (usine abstraite /cas unique/observateur/chaîne de commande/stratégie/adaptateur et autres modèles) ; il est recommandé de développer votre propre framework PHP MVC pour libéraliser complètement le développement, vous permettre de comprendre en profondeur le modèle MVC et également de vous permettre de mettre à niveau rapidement votre projet d'entreprise. développement ; être familier avec diverses méthodes d'optimisation de code de PHP et être familier avec la résolution de la plupart des problèmes de sécurité PHP ; être familier avec les principes de base du mécanisme d'exécution de PHP (mécanisme de travail Zend Basic du moteur/extension
6. Conception du système :
Capable de concevoir l'architecture de sites Web, la base de données et la sélection de framework PHP de base pour la plupart des systèmes de taille moyenne ; les tests de performances, le dépannage, etc. peuvent compléter la conception, le développement et le développement de base ; maintenance de sites Web similaires à : navigateur-> CDN (Squid) -> Nginx + PHP -> la structure de la base de données peut prendre en charge des millions à des dizaines de millions de trafic chaque jour. Travaux de base de développement et de maintenance de sites Web ; >Programmeur PHP senior Points clés : En plus du programme de base LNMP, vous pouvez également avoir un apprentissage approfondi dans une certaine direction ou un certain domaine. (Développement de la dimension de profondeur) Objectif : En plus d'être capable de réaliser le développement commercial de base de PHP, vous pouvez également résoudre les problèmes techniques les plus approfondis et les plus complexes, et vous pouvez concevoir et réaliser de manière indépendante des projets à moyenne et grande échelle. travail de conception et de développement de systèmes ; vous pouvez indépendamment Hold approfondir une certaine direction technique et est relativement professionnel dans ce domaine. (Par exemple, des recherches approfondies dans n'importe quelle direction comme MySQL, Nginx, PHP, Redis, etc.) 1 Linux : En plus du capacités de deuxième étape, sous Linux En plus des opérations régulières et de la surveillance et du suivi des performances, vous pouvez également utiliser de nombreuses commandes avancées et complexes pour terminer le travail (watch/tcpdump/starce/ldd/ar, etc.) ; , vous pouvez déjà écrire des scripts shell relativement complexes (plus de 500 lignes). C'est un shell qui permet d'effectuer de nombreuses tâches, notamment la sauvegarde, le traitement automatisé, la surveillance, etc. ; il maîtrise déjà des applications telles que awk/sed/perl et peut librement exploiter, contrôler et traiter des statistiques de texte et analyser des données dans divers formats complexes ; il a une certaine connaissance des mécanismes internes de Linux, du traitement de base du chargement des modules du noyau, de la gestion des erreurs de démarrage, etc. ; , comme NFS, la gestion des disques, etc. ; 2 Nginx : Sur la base de la deuxième étape, j'ai pu utiliser Nginx de manière très compétente. et peut effectuer des travaux d'exploitation et de maintenance plus approfondis sur Nginx, tels que la surveillance, l'optimisation des performances, le traitement de problèmes complexes, etc. Pour vos intérêts personnels, vous pouvez envisager de vous concentrer sur une étude approfondie du principe de fonctionnement de Nginx, principalement ; à partir de la lecture du code source, tel que le mécanisme de travail spécifique maître/travailleur, le traitement des événements internes de Nginx, la gestion de la mémoire, etc., vous pouvez apprendre Nginx en même temps. Pour un développement étendu, vous pouvez personnaliser certaines de vos propres extensions privées. ; en même temps, vous pouvez avoir un certain degré de compréhension de Nginx+Lua pour voir si un meilleur modèle peut être combiné et appliqué ; l'exigence à ce stade est une compréhension approfondie des principes de Nginx, et vous pouvez envisagez de devenir un professionnel approfondi dans la direction de Nginx. 3. MySQL/MongoDB : Basé sur la deuxième étape, en termes d'applications MySQL, en plus de l'optimisation SQL de base précédente, il peut également compléter certaines Opérations complexes, telles que l'importation et l'exportation de gros lots de données, la modification des structures de tables ou l'ajout ou la suppression de champs d'index pour de gros lots de données en ligne, et d'autres opérations à haut risque En plus de l'installation et de la configuration ; a été capable de gérer des problèmes MySQL plus complexes, tels que l'enquête sur divers problèmes, la solution du problème de délai de synchronisation maître-esclave, la solution de synchronisation des données entre salles de machines, l'architecture MySQL à haute disponibilité, etc. ; Je connais le niveau d'application MySQL et les technologies clés de MySQL Par exemple, les mécanismes de transaction (niveaux d'isolement, verrous, etc.), une certaine compréhension et application des déclencheurs, des partitions et d'autres technologies. Pour les performances MySQL, y compris l'optimisation du disque (migration SAS vers SSD), l'optimisation du serveur (mémoire, configuration du serveur lui-même), en plus d'autres options d'optimisation des performances de base dans la deuxième étape (innodb_log_buffer_size/back_log/table_open_cache / thread_cache_size/innodb_lock_wait_timeout, etc.), application de sélection de logiciel de pool de connexions et connaissance approfondie des instructions d'opération telles que show * (show status/show profile) Comprendre et être capable d'effectuer la plupart des suivis de problèmes de performances Familiarité approfondie avec la technologie de sauvegarde MySQL, y compris la reprise après sinistre et la restauration, une compréhension approfondie de Binlog, la sauvegarde à chaud et à froid, la sauvegarde multi-IDC, etc. En termes de principes MySQL, j'ai plus ; des connaissances, comme commencer à lire une partie du code source sur le mécanisme de fonctionnement de MySQL, comme apprendre le code source de la technologie de synchronisation (réplication) maître-esclave, ou apprendre à connaître un certain moteur de stockage (MyISAM/Innodb/TokuDB), etc. Apprentissage et compréhension du code source. Si les conditions le permettent, vous pouvez vous référer au moteur CSV pour développer votre propre moteur de stockage simple afin de sauvegarder certaines données et d'améliorer votre compréhension de MySQL. Au cours de ce processus, si vous êtes intéressé, vous pouvez également envisager. se développant dans le sens de DBA. Au niveau MongoDB, vous pouvez envisager, par exemple, de commencer à appliquer MongoDB en ligne en écrivant moins et en lisant plus, ou en effectuant des opérations d'analyse et de traitement de données en ligne. Les scénarios spécifiques peuvent être basés sur le travail, mais l'essentiel est de mieux comprendre les applications de RMDBS et NoSQL dans différents scénarios, si les conditions ou les intérêts le permettent, vous pouvez commencer à en apprendre davantage sur le mécanisme de fonctionnement de MongoDB. 4. Redis/Memcached : Sur la base de la deuxième étape, une application et un apprentissage plus approfondis peuvent être réalisés. Parce que Memcached n'est pas particulièrement compliqué, il est recommandé de lire le code source, en particulier la partie gestion de la mémoire, pour faciliter une compréhension approfondie Partie Redis, vous pouvez faire plus d'applications de structures de données complexes (zset peut être utilisé pour les opérations de classement) / Le traitement des transactions est utilisé pour garantir l'atomicité dans des applications telles que les scénarios de ventes flash ; La plupart des applications d'apprentissage impliquant des mécanismes de synchronisation tels que aof, conçoivent une architecture d'application Redis hautement disponible et cluster; Il est recommandé d'étudier en profondeur le code source de Redis et d'appliquer les connaissances accumulées dans la deuxième étape. Vous pouvez notamment lire sur la gestion des événements de base, la gestion de la mémoire, la structure interne des données de base, etc. pour bien le comprendre. Si votre intérêt le permet, vous pouvez devenir un utilisateur très professionnel de Redis. 5. PHP : En tant que compétences de base de base, nous avons besoin d'une étude et d'une application plus approfondies basées sur la deuxième étape. En termes d'application de code de base, il peut résoudre 95 % des problèmes rencontrés dans le développement PHP et comprendre la plupart des compétences PHP Être capable de commencer rapidement à utiliser la plupart des frameworks PHP en une journée et d'en comprendre les avantages ; et les inconvénients de chaque framework PHP grand public peuvent faire une sélection rapide et pratique de la technologie pendant le développement du projet En termes de configuration, en plus des connaissances générales de la deuxième étape, vous comprendrez également certaines options de configuration plus obscures ( php auto_prepend_file /auto_append_file), y compris certaines configurations et principes avancés complexes dans l'extension (tels que memcache.hash_strategy dans la configuration de l'extension memcached, apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection dans la configuration de l'extension apc 6. C/C++ : 7 Front-end : 8. Apprentissage des langues dans d'autres domaines : 9. Apprentissage dans d'autres directions professionnelles : Actuellement, les domaines sont nombreux, comme le cloud computing (stockage distribué, informatique distribuée, machines virtuelles, etc.), le machine learning (data mining, reconnaissance de formes, etc., appliqué aux statistiques, les recommandations personnalisées ), bien entendu Traitement du langage (segmentation des mots chinois, etc.), technologie des moteurs de recherche, graphiques et images, reconnaissance vocale, etc. En plus de ces cours avancés, il existe également de nombreux endroits où vous pouvez en apprendre davantage sur l'ingénierie, comme les systèmes hautes performances, le développement mobile (Android/IOS), la sécurité informatique, les systèmes embarqués, le matériel, etc. 10. Conception de systèmes : Sur la base de la deuxième étape, la conception de systèmes peut appliquer l'expérience et les compétences maîtrisées pour concevoir des systèmes relativement complexes de taille moyenne et grande. la plupart des problèmes de divers systèmes en ligne complexes et tâches complètes telles que le navigateur-> équilibrage de charge-> Nginx+PHP -> -interactions RPC finales (back-end de stockage, back-end logique, back-end anti-triche, services externes) -> Activité back-end plus complexe capable de prendre en charge le fonctionnement normal de sites Web avec des dizaines à des centaines de millions de circulation quotidienne. Travaux d'aménagement et de maintenance.
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!