Senior PHP Programmer
Key points: In addition to basic LNMP programs, you can also have in-depth study in a certain direction or field. (Depth dimension development)
##Goal: In addition to being able to complete basic PHP business development, it is also able to solve most in-depth and complex technical problems, and can Independently design and complete medium and large system design and development work; I can independently hold and go deep into a certain technical direction, and I am relatively professional in this area. (For example, in-depth research in any direction such as MySQL, Nginx, PHP, Redis, etc.)
1. Linux: (Recommended learning: PHP programming from entry to proficiency )
In addition to the second-stage capabilities, in addition to regular operations and performance monitoring and tracking under Linux, you can also use many advanced and complex commands to complete the work (watch/tcpdump/starce/ldd/ar, etc.); in In terms of shell scripts, I have been able to write relatively complex shell scripts (more than 500 lines) to assist in completing many shells including backup, automated processing, monitoring, etc.;has become popular with applications such as awk/sed/perl Proficient, capable of freely operating, controlling, processing, text statistics and analyzing data in various complex formats; having some understanding of the internal mechanisms of Linux, basic processing of kernel module loading, startup error handling, etc.; and also having knowledge of some other related things. Understand, such as NFS, disk management, etc.;2. Nginx:
On the basis of the second stage, I have been able to operate Nginx very skillfully and can Carry out more in-depth operation and maintenance work on Nginx, such as monitoring, performance optimization, complex problem processing, etc.; depending on personal interests, you can consider focusing on in-depth study of the working principle of Nginx, mainly by reading the source code, such as The specific master/worker working mechanism, Nginx internal event processing, memory management, etc.; at the same time, you can learn the development of Nginx extensions and customize some of your own private extensions; at the same time, you can have a certain degree of understanding of Nginx Lua and see if it can be done Combine applications to develop better models; the requirement at this stage is an in-depth understanding of Nginx principles, and you can consider becoming an in-depth professional in the Nginx direction.3. MySQL/MongoDB:
Based on the second stage, in terms of MySQL applications, in addition to the previous basic SQL optimization, some complex tasks can also be completed. Operations, such as importing and exporting large batches of data, changing table structures or adding or deleting index fields for online large batches of data, and other high-risk operations; In addition to installation and configuration, it has been able to handle more complex MySQL problems, such as The investigation of various problems, the solution of master-slave synchronization delay problem, cross-machine room synchronization data scheme, MySQL high-availability architecture, etc. are all involved; for the MySQL application level, I am familiar with the core key technologies of MySQL, such as transaction mechanism (isolation level) , locks, etc.), have a certain understanding and application of triggers, partitions and other technologies;For MySQL performance, including disk optimization (SAS migration to SSD), server optimization (memory, server itself configuration), In addition to other core performance optimization options in the second stage (innodb_log_buffer_size/back_log/table_open_cache /thread_cache_size/innodb_lock_wait_timeout, etc.), connection pool software selection application, have an in-depth understanding of operation statements such as show * (show status/show profile), and can complete most of them Performance problem tracing;In-depth familiarity with MySQL backup technology, including disaster recovery and recovery, in-depth understanding of Binlog, hot and cold backup, multi-IDC backup, etc.; Have more understanding of MySQL principles, such as The working mechanism of MySQL begins with reading part of the source code, such as learning the source code of master-slave synchronization (replication) technology, or learning and understanding the source code of a certain storage engine (MyISAM/Innodb/TokuDB), etc. If conditions permit, you can refer to the CSV engine Develop your own simple storage engine to save some data and enhance your understanding of MySQL;In this process, if you are interested, you can also consider developing in the direction of DBA. At the MongoDB level, you can consider, for example, starting to apply MongoDB online when writing less and reading more, or doing some online data analysis and processing operations. The specific scenarios can be based on the work, but the core is to have a better and in-depth understanding of RMDBS. For applications in different scenarios from NoSQL, if conditions or interests permit, you can start to learn more about the working mechanism of MongoDB.4. Redis/Memcached:
On the basis of the second stage, more in-depth application and learning can be achieved. Because Memcached is not particularly complex, it is recommended to read the source code, especially the memory management part, to facilitate in-depth understanding; in the Redis part, you can do more applications of complex data structures (zset does ranking ranking operations) /Transaction processing is used to ensure atomicity in applications such as flash sale scenarios);It involves learning applications of synchronization mechanisms such as aof and designing a highly available Redis application architecture and cluster; it is recommended to study the source code of Redis in depth and apply the knowledge accumulated in the second stage, especially reading Let’s fully learn about core event management, memory management, internal core data structures, etc. If your interest allows, you can become a very professional user of Redis.
5. PHP:
As a basic core skill, we need more in-depth study and application based on the second stage. In terms of basic code application, you can solve 95% of the problems encountered in PHP development and understand most PHP techniques; you can quickly start using most PHP frameworks within a day, and understand the advantages of each mainstream PHP framework. Disadvantages, it can quickly and conveniently make technology selection in project development;
In terms of configuration, in addition to the knowledge of the regular second stage, you will also know some more obscure configuration options (php auto_prepend_file/auto_append_file), including extensions Some complex advanced configurations and principles (such as memcache.hash_strategy in the memcached extension configuration, apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection in the apc extension configuration);
Work on PHP Have a good understanding of the mechanism, including the working mechanism of php-fpm (such as the calculation and principle of the number of processes enabled by php-fpm on machines with different configurations), have a basic familiarity with the zend engine (vm/gc/stream processing), and have read the basic PHP kernel source code (or have read relevant articles), have an understanding of the implementation of most core data structures (basic types/Array/Object) of PHP's internal mechanisms, and have an in-depth understanding of the core infrastructure (zval/hashtable/gc);
Be able to carry out basic PHP extension development, understand some intermediate and advanced knowledge of extension development (minit/rinit, etc.), and be familiar with the details of different communication and interaction methods between php and apache/nginx (mod_php/fastcgi); in addition to developing PHP extensions, you can consider Learn to develop Zend extensions and understand PHP from a lower level.
6. C/C:
On the basis of the second stage, you can have a deeper understanding of the C/C language and be able to complete small and medium-sized C programs. /C system development work; in addition to the basic C/C syntax and data structure in the second stage, you can also learn some special data structures (b-tree/rb-tree/skiplist/lsm-tree/trie-tree, etc.) for convenience Required in special work; in terms of system programming, familiar with multi-process and multi-thread programming; in multi-process situations, understand most of the communication methods between multi-processes, and be able to flexibly choose communication methods (shared memory/semaphore/pipeline, etc.);
Multi-threaded programming can well solve lock conflict problems, and can develop and debug multi-threaded programs; at the same time, it is familiar with network programming and understands the differences between multi-process model/multi-thread model/asynchronous network IO model and selection, familiar with the principles and differences of different asynchronous network IO models (select/poll/epoll/iocp, etc.), and familiar with common asynchronous frameworks (ACE/ICE /libev/libevent/libuv/Boost.ASIO, etc.) and their use, If you have free time, you can also take a look at some domestically developed libraries (such as muduo);
At the same time, you can design good high-concurrency program architecture (leader-follow/master-worker, etc.); after understanding most of C/C Issues in end-server development (memory management, log printing, high concurrency, front-end and back-end communication protocols, service monitoring), and know the RPC communication issues of each back-end service (struct/http/thirft/protobuf, etc.);
Be able to use GCC and GDB more familiarly to develop compilation and debugging programs, and quickly trace and solve problems after the online program is cored; in terms of general module development, you can accumulate or develop some general tools or libraries (such as asynchronous network framework, log Library, memory pool, thread pool, etc.), but you should be careful whether to apply it after development, so as to save yourself from chasing bugs;
7. Front-end:
In-depth understanding HTTP protocol (including each detailed protocol, special protocol code and the reasons behind it, such as 302 static files are cached, 502 means that php behind nginx is down, etc.);
In addition to the integration of various framework applications in the previous front-end Ability, if you are interested in front-end learning, you can go deeper. In the form of developing some front-end frameworks similar to jQuery, or developing a rich text editor, which is a relatively trivial test of JavaScript skills;
8. Language learning in other fields:
Have basic accumulation in basic PHP/C/C language. It is recommended that you try to learn different programming languages at the current stage, depending on personal interests and hobbies, scripts You can learn Python/Ruby for class languages, Lisp/Haskell/Scala/Erlang for functional programming languages, Java/Golang for static languages, and R language for data statistical analysis.
If you want to do back-end business from a different perspective, you can try Node.js and the aforementioned Nginx_Lua combined with Nginx, etc. Learning different languages is mainly about improving your own vision and the differences in problem-solving methods. For example, you will understand that in addition to processes/threads, there are also lightweight coroutines; for example, in cross-machine communication scenarios, Erlang's solution is surprisingly simple; for example If you don't want to choose C/C, there are also similar efficient Erlang/Golang available, etc.; mainly to improve your horizons.
9. Learning in other professional directions:
At this stage, in addition to basic LNMP skills, you will also consider learning knowledge in other fields. These are all possible. , depending on personal interests and long-term goal directions. Currently, there are many areas to choose from.
For example, cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, etc., applied to statistics, personalized recommendations), natural language processing (Chinese word segmentation, etc. ), search engine technology, graphics and images, speech recognition, etc. In addition to these advanced ones, there are also many places where you can learn more about engineering, such as high-performance systems, mobile development (Android/IOS), computer security, embedded systems, hardware, etc.
10. System design:
Based on the second stage, system design can apply the experience and skills mastered to design relatively complex medium and large systems. It can solve most of the problems of various complex online systems and complete tasks such as browser-> CDN -> load balancing-> access layer-> Nginx PHP -> business cache-> database-> Various complex back-end RPC interactions (storage back-end, logic back-end, anti-cheating back-end, external services) -> More complex back-end business; able to support the normal development of websites with tens to hundreds of millions of traffic every day maintenance work.
The above is the detailed content of What skills do advanced PHP developers have?. For more information, please follow other related articles on the PHP Chinese website!