Maison >développement back-end >Problème PHP >Quelles sont les compétences des développeurs PHP avancés ?
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 champ. (Développement de la dimension de profondeur)
Objectif : En plus de compléter le développement commercial de base de PHP, il peut également résoudre les problèmes techniques les plus approfondis et les plus complexes, et je peux concevoir et réaliser de manière indépendante des travaux de conception et de développement de systèmes de moyenne et grande taille ; je peux indépendamment suivre et approfondir une certaine direction technique, et je suis relativement professionnel dans ce domaine. (Par exemple, des recherches approfondies dans n'importe quelle direction comme MySQL, Nginx, PHP, Redis, etc.)
1. Linux : (Apprentissage recommandé : Programmation PHP à partir de entrée à la compétence )
En plus des capacités de la deuxième étape, en plus des opérations régulières et de la surveillance et du suivi des performances sous Linux, vous pouvez également utiliser de nombreuses commandes avancées et complexes pour terminer le travail (regarder/ tcpdump/starce /ldd/ar, etc.); en termes de scripts shell, j'ai pu écrire des scripts shell relativement complexes (plus de 500 lignes) pour aider à accomplir de nombreuses tâches shell, notamment la sauvegarde, le traitement automatisé, la surveillance, etc.;
Les applications telles que awk/sed/perl sont devenues populaires. Compétentes, capables d'exploiter, de contrôler, de traiter, de rédiger des statistiques et d'analyser librement des données dans divers formats complexes, en ayant une certaine compréhension des mécanismes internes de Linux ; , le traitement de base du chargement du module du noyau, la gestion des erreurs de démarrage, etc. ; et avoir également des connaissances sur d'autres choses connexes, telles que NFS, la gestion des disques, etc. ;
Sur la base de la deuxième étape, j'ai été capable d'exploiter Nginx de manière très habile et je peux effectuer des travaux d'exploitation et de maintenance plus approfondis sur Nginx, tels que la surveillance, l'optimisation des performances, les problèmes complexes traitement, etc. ; en fonction des intérêts personnels, vous pouvez envisager de vous concentrer sur une étude approfondie du principe de fonctionnement de Nginx, principalement en lisant le 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. ; en même temps, vous pouvez apprendre le développement d'extensions Nginx et personnaliser certaines de vos propres extensions privées en même temps, vous pouvez avoir un certain degré de compréhension de Nginx+Lua et voir si de meilleurs modèles peuvent être combinés ; et appliqué ; l'exigence à ce stade est une compréhension approfondie des principes de Nginx, et vous pouvez envisager 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 retard de synchronisation maître-esclave, le schéma de données de synchronisation entre salles de machines, l'architecture MySQL à haute disponibilité, etc. Au niveau de l'application MySQL, je connais les technologies clés de base de MySQL, telles que le mécanisme de transaction (niveau d'isolement), les verrous, etc.), j'ai une certaine compréhension et application des déclencheurs, des partitions et d'autres technologies ; Concernant les performances MySQL, cela inclut 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, avoir une compréhension approfondie des instructions d'opération telles que show * (afficher l'état/afficher le profil) et pouvoir compléter la plupart d'entre elles. Traçage des problèmes de performances Connaissance approfondie de Technologie de sauvegarde MySQL, y compris la reprise après sinistre et la récupération, une compréhension approfondie de Binlog, la sauvegarde à chaud et à froid, la sauvegarde multi-IDC, etc. Mieux comprendre les principes de MySQL, tels que le mécanisme de fonctionnement de MySQL commence par la lecture d'une partie du code source, comme l'apprentissage du code source de la technologie de synchronisation (réplication) maître-esclave, ou l'apprentissage et la compréhension du code source d'un certain moteur de stockage (MyISAM/Innodb/TokuDB), etc. Si les conditions le permettent, vous pouvez vous référer au Moteur CSV Développez votre propre moteur de stockage simple pour sauvegarder certaines données et améliorer votre compréhension de MySQL Au cours de ce processus, si vous êtes intéressé, vous pouvez également envisager de développer dans le sens de 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, 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, notamment la partie gestion de la mémoire, pour faciliter une compréhension approfondie dans la partie
Redis, vous pouvez faire plus d'applications de structures de données complexes ( zset effectue des opérations de classement) /Le traitement des transactions est utilisé pour garantir l'atomicité dans des applications telles que les scénarios de vente flash;
L'apprentissage d'applications impliquant des mécanismes de synchronisation tels que AOF et la conception d'une architecture d'application et d'un cluster Redis hautement disponibles sont recommandés. Il est recommandé d'étudier en profondeur le code source de Redis et d'appliquer les connaissances accumulées dans la deuxième étape. lis Apprenons pleinement la gestion des événements de base, la gestion de la mémoire, les structures de données de base internes, etc. Si votre intérêt le permet, vous pouvez devenir un utilisateur très professionnel de Redis.
5. PHP :
En tant que compétence de base de base, nous devons avoir une étude et 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 comprendrez également certaines options de configuration plus obscures (php auto_prepend_file/auto_append_file), y compris les extensions Certaines configurations et principes avancés complexes (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
Travailler sur PHP Bonne humeur); compréhension du mécanisme, y compris le mécanisme de fonctionnement de php-fpm (comme le calcul et le principe du nombre de processus activés par php-fpm sur des machines avec différentes configurations), avoir une connaissance de base du moteur zend (vm/gc/ traitement de flux), et avoir lu le code source de base du noyau PHP (ou avoir lu des articles pertinents), avoir une compréhension de l'implémentation de la plupart des structures de données de base (types de base/Array/Object) des mécanismes internes de PHP, et avoir une compréhension approfondie de l'infrastructure de base (zval/hashtable/gc)
Être capable de réaliser le développement d'extensions PHP de base, comprendre certaines connaissances intermédiaires et avancées du développement d'extensions (minit/rinit, etc.), et ê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 et de 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 ; Je suis familier avec la programmation réseau et je comprends les différences entre le modèle multi-processus/le modèle multi-thread/le modèle d'E/S de réseau asynchrone et la sélection, je connais les principes et les différences des différents modèles d'E/S de réseau asynchrone (select/poll/epoll/iocp, etc. ), et familier avec les frameworks asynchrones courants (ACE/ICE /libev/libevent/libuv/Boost.ASIO, etc.) et leur utilisation. 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, vous pouvez concevoir une bonne architecture de programme à haute concurrence (leader-follow/master-worker, etc.) après avoir compris la plupart des problèmes C/C++ dans le développement de serveurs finaux ( gestion de la mémoire, impression des journaux, haute simultanéité, protocoles de communication front-end et back-end, surveillance des services), et connaître les problèmes 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 des programmes de compilation et de débogage, et tracer et résoudre rapidement les problèmes une fois le programme en ligne terminé, en termes de développement général de modules, vous pouvez accumuler ou développer des outils ou des bibliothèques générales ; (comme un cadre de réseau asynchrone, une bibliothèque de journaux, un pool de mémoire, un pool de threads, etc.), mais vous devez faire attention à ne pas l'appliquer après le développement, afin de vous éviter de rechercher des bugs; 7. Front-end :
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 sont mis en cache, 502 signifie que php derrière nginx est en panne, etc.); En plus de l'intégration précédente de diverses applications-cadres sur le front-end Ability, si vous souhaitez en savoir plus sur les aspects front-end, vous pouvez approfondir sous la forme de. développer des frameworks front-end comme jQuery, ou développer un éditeur de texte enrichi, qui est un test relativement trivial de compétences JavaScript8. Apprentissage des langues dans d'autres domaines :
Avoir une accumulation de base dans le langage de base PHP/C/C++. 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 passe-temps, des scripts. Pour les langages de classe, vous pouvez apprendre Python/Ruby. , pour les langages de programmation fonctionnels, vous pouvez essayer Lisp/Haskell/Scala/Erlang, pour les langages statiques, vous pouvez essayer Java/Golang, et pour l'analyse statistique des données, vous pouvez en apprendre davantage sur le langage R. Si vous souhaitez faire des affaires back-end sous un angle différent, vous pouvez essayer Node.js et Nginx_Lua susmentionné combinés avec Nginx, etc. 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. Apprendre 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. en fonction des intérêts personnels et des objectifs à long terme. Actuellement, il existe de nombreux domaines parmi lesquels choisir.
Par exemple, le cloud computing (stockage distribué, informatique distribuée, machines virtuelles, etc.), l'apprentissage automatique (exploration de données, reconnaissance de formes, etc., appliqué aux statistiques, recommandations personnalisées), le traitement du langage naturel (chinois segmentation de mots, 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!