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 :
Être capable d'utiliser les scripts Shell en douceur 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 ; il peut essentiellement installer la plupart des programmes Linux non spéciaux (y compris diverses bibliothèques, packages, dépendances tierces, etc., tels que MongoDB/ Redis /Sphinx/Luncene/SVN et similaires) ; 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.
Nginx :
Sur la base de la première étape, comprendre la configuration plus complexe de Nginx ; y compris la configuration multicœur, les événements, proxy_pass, la configuration sendfile/tcp_*, connaître le délai d'attente et d'autres configurations associées et les impacts sur les performances ; nginx est en plus du serveur Web, peut également assumer la configuration de serveurs proxy, de serveurs statiques inversés, etc. ; connaître le réglage de base de la configuration de nginx ; savoir comment configurer les autorisations, compiler une extension nginx vers nginx ; mécanisme maître/travailleur, epoll), savoir pourquoi les performances de Nginx sont meilleures que les performances d'Apache3 MySQL/MongoDB :
Basé sur la première étape, J'ai maîtrisé de nombreuses petites compétences en développement MySQL, y compris l'optimisation générale de SQL (optimisation de groupe par/ordre par/rand, etc.) ; vous connaissez également les options de configuration qui affectent les performances d'innodb/myisam (telles que key_buffer/query_cache /sort_buffer/innodb_buffer_pool_size /innodb_flush_log_at_trx_commit, etc.), et connaissez également les valeurs appropriées pour configurer ces options. les options de configuration, telles que savoir comment configurer un environnement de synchronisation maître-esclave MySQL, connaître les différences entre les différents binlog_format ; connaître le suivi des performances de MySQL, y compris slow_log/explain, etc., vous pouvez également connaître la création et le traitement d'index de base ; comprendre l'architecture de base de MySQL (serveur + moteur de stockage) en termes de principes, connaître la structure de base de stockage des index InnoDB/MyISAM et les différences (index clusterisé, B-tree) connaître le mécanisme de base de traitement des transactions InnoDB ; comprendre les solutions pour la plupart des MySQL ; exceptions (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 doivent être utilisés dans quels scénarios, comprendre les transactions Redis, etc. Dans la partie principale, vous pouvez avoir une compréhension générale 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., et en passant, en savoir plus sur les transactions de Redis, RDB, AOF et autres mécanismes Bon5. PHP :
En plus des capacités de la première étape, en termes d'installation et de 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 la 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, etc.); 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 -> Cache-> peut prendre en charge des millions à des dizaines de millions de trafic chaque jour. Travaux de développement et de maintenance de base ; >
Programmeur PHP senior
Points clés : En plus des programmes LNMP de base, vous pouvez également avoir une étude approfondie dans une certaine direction ou un certain domaine. (Développement en profondeur)
Objectif : en plus d'être capable d'effectuer 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 pouvez concevoir et réaliser de manière indépendante des travaux de conception et de développement de systèmes à moyenne et grande échelle ; plongez en profondeur dans une certaine direction technique et travaillez dans celle-ci est plus professionnelle. (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). Shell pour vous aider à accomplir de nombreuses tâches, notamment la sauvegarde, le traitement automatisé, la surveillance, etc., maîtrise désormais des applications telles que awk/sed/perl et peut fonctionner librement ; , contrôler, traiter, rédiger des statistiques et analyser des données dans divers formats complexes ; possède une connaissance des mécanismes internes de Linux. Une certaine compréhension du traitement de base du chargement des modules du noyau, de la gestion des erreurs de démarrage, etc. ainsi qu'une certaine compréhension d'autres éléments connexes, tels que NFS, 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 je peux effectuer davantage de tâches dans -des travaux approfondis d'exploitation et de maintenance 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 des sources. code, 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 envisager de devenir approfondi ; professionnel en 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 Des 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, ont été capables de gérer davantage d'opérations complexes. des problèmes MySQL complexes, tels que le traçage de divers problèmes, la résolution du problème de délai de synchronisation maître-esclave, les solutions de synchronisation des données entre salles informatiques, l'architecture MySQL à haute disponibilité, etc. sont tous impliqués au niveau de l'application MySQL ; avec les technologies clés de base de MySQL, telles que les mécanismes de transaction (niveaux d'isolement, verrous, etc.), Avoir une certaine compréhension et application des technologies telles que les déclencheurs et les partitions, les performances de MySQL incluent l'optimisation du disque (migration SAS vers SSD), l'optimisation du serveur ; (mémoire, configuration du serveur) et d'autres options d'optimisation des performances de base en plus de la deuxième étape (innodb_log_buffer_size/ back_log/table_open_cache /thread_cache_size/innodb_lock_wait_timeout, etc.), l'application de sélection de logiciel de pool de connexions, ont une compréhension approfondie des instructions d'opération telles que show * (afficher l'état/afficher le profil) et peut effectuer la plupart des recherches de problèmes de performances ; familiarité approfondie avec la technologie de sauvegarde MySQL, y compris la récupération et la restauration après sinistre, une compréhension approfondie de Binlog, la sauvegarde à chaud et à froid, la sauvegarde multi-IDC, etc. ; avoir une meilleure compréhension des principes de MySQL, comme commencer à lire certains codes sources pour le mécanisme de travail de MySQL, tels que la technologie de synchronisation maître-esclave (réplication), ou l'apprentissage du code source et la compréhension d'un certain stockage. moteur (MyISAM/Innodb/TokuDB), etc. 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. Dans ce processus, si vous êtes intéressé, vous peut également envisager d’évoluer dans le sens du DBA. Au niveau de 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 d'avoir. une compréhension meilleure et approfondie de RMDBS Pour les applications dans différents scénarios de NoSQL, 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, vous pouvez postuler et apprendre plus en profondeur. Parce que Memcached n'est pas particulièrement complexe, il est recommandé de lire le code source, en particulier la partie gestion de la mémoire, pour faciliter une compréhension approfondie ; dans la partie Redis, vous pouvez réaliser des applications de structure de données plus complexes (zset est utilisé pour les opérations de classement ; /traitement des transactions pour garantir qu'Atomicity est utilisé dans les applications de scénarios de vente flash) ; cela implique principalement l'apprentissage d'applications de mécanismes de synchronisation tels que aof, et la conception d'une architecture et d'un cluster d'application Redis hautement disponibles, il est recommandé d'étudier le code source de Redis dans ; En profondeur et mettez-le dans la deuxième étape. Les connaissances accumulées peuvent être appliquées. En particulier, vous pouvez lire sur la gestion des événements de base, la gestion de la mémoire, la structure interne des données de base, etc. 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, vous pouvez résoudre 95 % des problèmes rencontrés dans le développement PHP et comprendre la plupart des techniques PHP ; vous pouvez rapidement commencer à utiliser la plupart des frameworks PHP en une journée et comprendre les avantages de chaque framework PHP traditionnel. Il peut effectuer une sélection technologique rapide et pratique pendant le développement du projet ; en termes de configuration, en plus des connaissances acquises dans la deuxième étape, vous connaîtrez également certaines options de configuration plus obscures (php auto_prepend_file/auto_append_file), y compris certaines configurations avancées complexes dans extensions et principes (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, etc.) ; avoir une bonne compréhension du mécanisme de fonctionnement de php, y compris le fonctionnement de php-fpm ; mécanisme (tel que php-fpm permet le calcul et le principe du numéro de processus sous différentes machines de configuration), a une connaissance de base du moteur zend (traitement vm/gc/stream), a lu le code source de base du noyau PHP (ou lu des articles connexes), et a une compréhension du mécanisme interne de PHP Avoir une compréhension de l'implémentation de la plupart des structures de données de base (types de base/Array/Object) et avoir une compréhension approfondie de l'infrastructure de base (zval/hashtable/gc be) ; capable de réaliser le développement de base d'extensions PHP, et de comprendre certaines connaissances intermédiaires et avancées en matière de développement d'extensions (minit/rinit, etc.), être familier avec les détails des différentes méthodes de communication et d'interaction entre php et apache/nginx (mod_php/fastcgi ); en plus de développer des extensions PHP, vous pouvez envisager d'apprendre à développer des extensions Zend pour comprendre PHP à un niveau inférieur.
6. C/C++ :
Sur la base de la deuxième étape, vous pouvez avoir une compréhension plus approfondie du langage C/C++ et être capable de réaliser des tâches petites et moyennes. un travail de développement de système C/C++ de grande taille ; en plus de la syntaxe de base C/C++ et des structures de données dans la deuxième étape, vous pouvez également apprendre certaines structures de données spéciales (b-tree/rb-tree/skiplist/lsm-tree/trie -tree, etc.) pour plus de commodité Requis dans les travaux particuliers ; en termes de programmation système, familier avec la programmation multi-processus et multi-thread, comprendre la plupart des méthodes de communication entre multi-processus, et être capable pour choisir de manière flexible les méthodes de communication (mémoire partagée/sémaphore/pipeline, etc.) ; la programmation multithread peut bien résoudre les problèmes de conflit de verrouillage, et peut développer et déboguer des programmes multithread en même temps, il est familier avec la programmation réseau ; comprend les différences et les sélections des modèles multi-processus/modèles multi-thread/modèles d'E/S de réseau asynchrone, et est familier avec les différents principes et différences des modèles d'E/S de réseau asynchrone (select/poll/epoll/iocp, etc.), et familier avec des frameworks asynchrones courants (ACE/ICE /libev/libevent/libuv/Boost.ASIO, etc.) et leurs utilisations. Si vous avez du temps libre, vous pouvez également jeter un œil à certaines bibliothèques développées au niveau national (telles que muduo) ; en même temps, capable de concevoir une bonne architecture de programme à haute concurrence (leader-follow/master-worker, etc.) ; comprendre la plupart des problèmes liés au développement de serveurs back-end C/C++ (gestion de la mémoire, impression de journaux, haute concurrence, front-end) ; -protocoles de communication end et back-end, surveillance des services), connaître les enjeux de communication RPC de chaque service back-end (struct/http/thirft/protobuf, etc.) être capable d'utiliser GCC et GDB de manière plus familière pour développer la compilation et programmes de débogage et programmes en ligne Une fois le noyau abandonné, le problème peut être rapidement retracé et résolu ; en termes de développement général du module, vous pouvez accumuler ou développer des outils ou des bibliothèques générales (tels que des cadres de réseau asynchrones, des bibliothèques de journaux, des pools de mémoire). , pools de threads, etc.), mais vous devez faire attention à les appliquer après le développement :
Compréhension approfondie du protocole HTTP (y compris chaque protocole détaillé, le code de protocole spécial et les raisons qui le sous-tendent, comme 302 fichiers statiques mis en cache, 502 signifie que php derrière nginx est en panne, etc.) ; capacités d'intégration de diverses applications-cadres dans le front-end, si vous souhaitez apprendre le front-end, vous pouvez aller plus loin, en développant vous-même quelque chose de similaire au framework Front-end jQuery ou en développant un éditeur de texte riche. est un test relativement trivial de compétences JavaScript ;
8. L'apprentissage des langues dans d'autres domaines :
Dans le langage PHP/C/C++ de base, c'est une accumulation de base. Il est recommandé d'essayer d'apprendre différents langages de programmation au stade actuel, en fonction de vos intérêts personnels et de vos loisirs. Pour les langages de script, vous pouvez apprendre Python/Ruby, et pour les langages de programmation fonctionnels, vous pouvez essayer Lisp/Haskell/. Scala./Erlang et autres. Pour les langages statiques, vous pouvez essayer Java/Golang. Pour l'analyse statistique des données, vous pouvez en apprendre davantage sur le langage R. Si vous souhaitez changer de perspective et faire des affaires en back-end, vous pouvez essayer Node. js et Nginx_Lua susmentionné combinés avec Nginx wait. Apprendre différentes langues consiste principalement à améliorer votre propre vision et les différences dans les méthodes de résolution de problèmes. Par exemple, vous comprendrez qu'en plus des processus/threads, il existe également des coroutines légères, par exemple dans les scénarios de communication inter-machines ; , la solution d'Erlang est étonnamment simple ; par exemple, si vous ne souhaitez pas choisir C/C++, il existe également des Erlang/Golang efficaces similaires, etc. ;
9. Étudier dans d'autres directions professionnelles :
À ce stade, en plus des compétences de base du LNMP, vous envisagerez également d'acquérir des connaissances dans d'autres domaines. Tout cela est possible, en fonction des intérêts personnels et des objectifs à long terme. Aujourd'hui, 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, recommandations personnalisées), le naturel. 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.