Maison >développement back-end >Problème PHP >De quelles compétences les programmeurs PHP ont-ils besoin ?

De quelles compétences les programmeurs PHP ont-ils besoin ?

青灯夜游
青灯夜游original
2019-10-11 17:01:173120parcourir

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.

De quelles compétences les programmeurs PHP ont-ils besoin ?

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

Avoir une bonne compréhension du mécanisme de fonctionnement de php, 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 sous différentes machines de configuration), et avoir une connaissance de base avec le moteur zend (traitement vm/gc/stream), lisez Avoir le code source de base du noyau PHP (ou lisez les 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) du système interne de PHP mécanismes et avoir une étude approfondie de l'infrastructure de base (zval/hashtable/gc) Comprendre ;

Être capable d'effectuer le développement de base d'extensions PHP, comprendre certaines connaissances intermédiaires et avancées du développement d'extensions (minit/rinit , etc.), et soyez familier avec les détails des différentes méthodes de communication et d'interaction entre php et apache/nginx (mod_php/fastcgi) ; sauf lors du développement d'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. -travail de développement de système C/C++ ;

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 répondre aux besoins de travaux particuliers

En termes de programmation système, vous êtes familier avec la programmation multi-processus et multi-thread dans des situations multi-processus ; , vous comprenez la plupart des méthodes de communication entre multi-processus et pouvez choisir de manière flexible la méthode de communication (mémoire partagée/sémaphore/pipeline, etc.) ;

La programmation multithread peut bien résoudre le problème des conflits de verrouillage, et peut développer et déboguer des programmes multi-thread ;

Programmation réseau en même temps Être relativement familier avec, comprendre les différences et les sélections des modèles multi-processus/modèles multi-thread/modèles d'E/S réseau asynchrones, être familier avec les principes et les différences des différents modèles d'E/S de réseau asynchrone (select/poll/epoll/iocp, etc.), et être familier avec les frameworks asynchrones courants ( ACE/ICE /libev/libevent/libuv/Boost.ASIO, etc.) et utiliser Si vous avez du temps libre, vous pouvez également consulter 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.);

Comprendre la plupart des problématiques du développement de serveurs back-end C/C++ (gestion de la mémoire, impression des journaux, haute concurrence, protocoles de communication front-end et back-end, surveillance des services) , connaître les problèmes de communication RPC avec divers services backend (struct/http/thirft/protobuf, etc.) ;

peut être plus familier avec l'utilisation de GCC et GDB pour développer des programmes de compilation et de débogage, et peut rapidement tracer et résoudre problèmes après la perte du cœur du programme en ligne Question ;

En termes de développement général de modules, vous pouvez accumuler ou développer certains outils ou bibliothèques généraux (tels que des cadres de réseau asynchrones, des bibliothèques de journaux, des pools de mémoire, des pools de threads, etc. .), mais vous devez faire attention à ne pas les appliquer après le développement. Enterrez les trous pour chasser les bugs

7 Front-end :

Comprendre en profondeur le protocole HTTP ; (y compris chaque protocole détaillé, le code de protocole spécial et les raisons qui le sous-tendent, telles que 302 fichiers statiques sont mis en cache, 502 signifie que php derrière nginx est en panne, etc.) ;

En plus des capacités d'intégration précédentes de Diverses applications-cadres dans le front-end, si vous souhaitez apprendre le front-end, vous pouvez aller plus en profondeur, et la forme est que vous pouvez le développer vous-même. Certains frameworks front-end comme jQuery, ou développer un riche l'éditeur de texte sont des tests relativement triviaux de compétences JavaScript ;

8. Apprentissage des langues dans d'autres domaines :

Avoir essentiellement une accumulation de base en langage 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. Pour les langages de script, vous pouvez apprendre Python/Ruby, etc. Pour les langages de programmation fonctionnels, vous pouvez essayer Lisp. /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 faire des affaires back-end sous un angle différent, vous pouvez essayer Node. .js et ceux mentionnés précédemment Nginx combinés avec Nginx_Lua, etc.

Apprendre différentes langues, c'est 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 entre machines, la solution d'Erlang La solution est étonnamment simple ; par exemple, si vous ne voulez pas choisir C/C++, il existe des Erlang/Golang tout aussi efficaces, etc. ; .

9. Apprentissage dans d'autres directions professionnelles :

Dans cette étape, en plus des compétences de base du LNMP, l'apprentissage de connaissances dans d'autres domaines sera envisagé. Oui, cela dépend des intérêts personnels et des objectifs à long terme.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn