As a qualified PHP programmer should grasp what technology?

As a qualified PHP programmer should grasp what technology?
Intermediate PHP programmer

1.Linux

Smooth Shell can use scripts to automate much of the work completed; awk / sed / perl also operate well, can do a lot of text processing and statistical work; basically able to install most of the non-specific Linux programs (including various libraries, package, and so rely on a third party, such as MongoDB / Redis / Sphinx / Luncene / SVN and the like); understand the basic Linux service, know how to view performance data Linux, knowing issue tracking and other basic Linux following

  1. Nginx:

On the basis of the above first phase, some understanding of the complex Nginx configuration; includes multi-core configuration, Events, Proxy Pass, the sendfile / TCP * configuration, and affect the performance of known configuration timeout; know except nginx web server, a proxy server is also able to take reverse static servers configured; know the basic nginx configuration tuning; know how to configure permissions, extended to compile a nginx nginx; know the basic operating principles of nginx (master / worker mechanisms, epoll), know why apache nginx performance than performance and good knowledge;

  1. MySQL/MongoDB:

On the basis of the above first stage in the development of MySQL, have plenty of tips, including conventional SQL optimization (group by / order by / rand optimization, etc.); in addition to build MySQL, MySQL backup data can also be hot and cold, but also know the impact innodb / myisam performance configuration options (such as key_buffer / query_cache / sort_buffer / innodb_buffer_pool_size / innodb_flush_log_at_trx_commit, etc.), but also know that these options are configured to be how much value the right; in addition also understand some of the special configuration options, such as know how to build mysql master-slave synchronization environment , know the difference between various binlog_format of; know the performance of MySQL tracing, including slow_log / explain and so on, but also to know the basic indexing knowledge processing; principle aspects to understand the basic MySQL architecture (Server + storage engine), know the basic InnoDB / MyISAM storage structures and different index (clustered index, B tree); know the basic InnoDB transaction processing; understand the treatment options most unusual circumstances of MySQL (or know where to find treatment options). Conditions permit, it is recommended to find out NoSQL MongoDB database on behalf of, the way to contrast the difference with MySQL, and colleagues were able to secure prudent use of MongoDB in the appropriate application scenarios, combined with the development of basic knowledge of PHP and MongoDB's.

  1. Redis/Memcached:

In most midrange systems which will involve caching, so be sure to understand the basic cache; know Memcached and Redis application scenarios of the similarities and differences and the ability to independently install Redis / Memcached, Memcahed understand some of the basic characteristics and limitations, such as maximum value value, know PHP combined with their use; Redis understand the basic working principle and use for general data types, know what type of application scenarios, understanding Redis transaction and so on. Principle part, can probably understand the Memcached memory structures (slab mechanism), redis on the understanding of common data types stored in the underlying implementation structure (SDS / chain / SkipList / HashTable) and so on, the way to look at Redis transaction, RDB, AOF mechanisms more it is good

  1. PHP:

In addition to the capacity of the first phase of the installation configuration can freely install a variety of third-party extensions and PHP compiler installation configuration; configuration affects performance understanding php-fpm most of the configuration options and implications (such as max_requests / max_children / request_terminate_timeout like ), know the difference mod_php / fastcgi; and PHP in terms of various basic technologies have been able to skillfully, further comprising a variety of PHP some depth, including the special characteristics of the object-oriented-depth understanding of PHP / SPL / level syntax such as reflection or the like ; the framework has read the code happened more conventional PHP the MVC framework, and to know the internal basic PHP framework implements mechanisms and design; have been able to skillfully use the conventional design patterns in PHP development to application development (abstract factory / singleton / observer / command chain / strategy / adapter mode, etc.); recommendations to develop your own PHP MVC framework allows developers to fully liberalize, make their in-depth understanding of the MVC pattern, but also so that they can quickly upgrade project development business in; the familiar PHP various code optimization methods familiar to solve most of the PHP security problem ; Familiar with the basic principles of mechanisms for the implementation of the PHP (Zend Engine / extend the basic mechanism);

  1. system design:

Most midrange systems can be designed site architecture, database, PHP basic framework for selection; investigation and handling performance testing; to complete similar: Browser -> CDN (Squid) -> Nginx + PHP -> Cache -> database structure of the site the basic design development and maintenance; capable of supporting the development of traffic each day, one million to ten million basic website maintenance;

Senior PHP Programmer

Focus: In addition to basic LNMP program, but also be able to have in-depth study in a certain direction or area. (Depth dimension of development)

Objective: In addition to complete basic PHP business development, but also to solve the most complex technical issues in depth, and can be designed independently of the completion of large-scale system design and development work; they can independently hold an in-depth technical direction, in this comparison profession. (For example, in MySQL, Nginx, PHP, Redis and so on in-depth study in either direction)

  1. Linux:

In addition to the capacity of the second phase, in addition to the regular operating under Linux performance monitoring and tracking, but also be able to use a lot less sophisticated command to complete the work (watch / tcpdump / starce / ldd / ar, etc.); in terms of shell scripts, has been able to write more complex shell script (more than 500 lines) to help complete a lot of backup, automation, monitoring the work of shell; for awk / sed / perl applications already fiery pure blue, can freely operate various control processes text statistical analysis complex data formats; have some understanding of the internal mechanisms of Linux, the kernel module is loaded, startup error handling, and so have a basic treatment; while some other things are understood, such as NFS, disk management, and so on;

  1. Nginx:

On the basis of the above second phase, Nginx has been able to operate very skilled, able to carry out more in-depth operation and maintenance work on Nginx, such as monitoring, performance optimization, deal with complex issues and so on; see personal interest, more focused aspects can be considered in-depth study on Nginx principle part of the work, mainly in the beginning of reading the source code, such as specific master / worker working mechanism, internal Nginx event processing, memory management, and so on; at the same time can learn Nginx extensible development, you can customize some of their own private expansion; while there is a certain degree of understanding of Nginx + Lua, see if you can use in conjunction with a better mode; this stage requires an in-depth understanding of the principles of Nginx, can be considered to be a thorough professional who Nginx direction.

  1. MySQL/MongoDB:

On the basis of the above second stage, in MySQL applications, in addition to the basic SQL before optimization, it is possible to complete the operation complex, such as import and export of large quantities of data, change or deletion of a table structure mass index field line data, etc. and other high-risk operations; in addition to the installation configuration, has been able to handle more complex MySQL issues, such as tracing a variety of issues, master-slave synchronization delay problem solving, data synchronization programs across the room, MySQL high availability architecture so on are involved understand; MySQL on the application level, more familiar with MySQL's core and key technologies, such as transaction mechanisms (isolation level, locks, etc.), there is a certain understanding and application of triggers, partitioning technology; performance of MySQL, including a disk optimization (SAS migration to SSD), server optimization (memory, server configures itself), in addition to other core performance two-stage optimization options (innodb_log_buffer_size / back_log / table_open_cache / thread_cache_size / innodb_lock_wait_timeout etc.), connection pooling software selection application, to show * (show status / show Profile action statements) are class Understanding, be able to complete most of the performance problems to trace; in-depth familiarity with MySQL backup technologies, including disaster reduction, in-depth understanding of Binlog hot and cold backups, multi-IDC backup; MySQL in terms of principle, there is more to know, for example, the working mechanism of the MySQL start reading portion of the source code, such as the master-slave synchronization (copy) the source code learning technology, learning or understanding of a source storage engines (MyISAM / Innodb / TokuDB), etc., if conditions allow, can refer to CSV engine to develop their own simple storage engine to store some data, enhance understanding of MySQL; in the process, if they are interested, you can also consider to DBA direction. MongoDB level, for example, can be considered in case of a write read much less start MongoDB online application, or do some operational data analysis and processing line, in accordance with the specific scene can work, but the core is to better understand the depth RMDBS and the scene following the application of different NoSQL, or interest if the conditions permit, you can start going deeper into what MongoDB working mechanism.

  1. Redis/Memcached:

On the basis of the above second stage, more in-depth application and learning. Because Memcached is not particularly complex, it is recommended to read the source code, in particular, memory management, to facilitate in-depth understanding; Redis part, the application can do more complex data structures (zset do leaderboard sorting operation / transaction processing to ensure use application of atomic spike class scene in the class action); synchronization mechanism aof more involved in learning and other applications, to design a highly available architecture and Redis application cluster; suggestions can learn about the depth of the source Redis, in the second stage the accumulation of knowledge can be applied on a particular core can read about include event management, memory management, internal data structures, core full study to find out. If interest allows, it can become a very professional user Redis aspect.

  1. PHP:

As the basic core skills, we in the top of the second stage, the need for more in-depth study and application. From the above code base for application, we can solve the problems encountered in 95% of PHP developers, to understand most of the PHP skills; for most of the PHP framework to quickly get up and running in a day, and for the Priority various mainstream PHP Framework shortcomings in project development can quickly and easily make technology selection; in the configuration, the second phase will be in addition to conventional knowledge, it will understand some of the more vice-business configuration options (php auto_prepend_file / auto_append_file), including the extension of a number of complex advanced configuration and principles (such as memcached expanded configuration memcache.hash_strategy, apc expanded configuration apc.mmap_file_mask / apc.slam_defense / apc.file_update_protection the like); php mechanism for a better understanding, the working mechanism including php-fpm (such as php-fpm open in a different configuration of the machine below the number of process calculations and principles), have a basic familiarity with (vm / gc / stream processing) for zend engine, read basic PHP kernel source (or read related article), the internal PHP mechanism most of the core data structure (basic type / Array / Object) realize there is to know, For the core infrastructure (zval / hashtable / gc) have in-depth understanding of learning; be able to perform basic PHP extension development, senior knowledge to understand some extensions developed (minit / rinit, etc.), be familiar with php apache / nginx different communication interaction details (mod_php / fastcgi); In addition to developing PHP extensions, developers can consider learning Zend extension, from the lower level to understand PHP.

  1. C/C++:

On the basis of the above second stage, to have more in-depth learning about the C / C ++ language, be able to complete development of small and medium C / C ++ system; in addition to the basic second stage of basic C / C ++ syntax and data structures can also be learn some special data structure (b-tree / rb-tree / skiplist / lsm-tree / trie-tree, etc.) to facilitate the needs of the particular work; in systems programming, familiar with multi-process, multi-threaded programming; multi-process below to learn most communication between multiple processes, flexibility to choose the communication (shared memory / semaphore / pipes, etc.); multi-threaded programming can be a good solution to lock conflicts, and to develop debugging multithreaded programs; at the same time network programming are more familiar with, understand the difference and selection of multi-process model / multi-threading model / asynchronous network IO model, familiar with the principles and differences asynchronous network IO model (select / poll / epoll / iocp, etc.), and are familiar with common asynchronous framework (ACE / ICE /libev/libevent/libuv/Boost.ASIO, etc.) and use, if you can also look at a number of domestic leisure to develop their own libraries (such as muduo) At the same time capable of high concurrency program designed architecture (leader-follow / master-worker, etc.); understand the problems (memory management Most C / C ++ development of back-end Server, log printing, high concurrency, the front and rear ends of the communication protocol, service monitoring ), know each back-end service RPC communication issues (struct / http / thirft / protobuf, etc.); can be more conversational with GCC compiler and GDB debugger to develop, after the online program core out quickly track down track to solve the problem; common module development, you can accumulate or develop some common tools or libraries (such as asynchronous network framework, log library, memory pool, thread pool, etc.), but whether the application development to be careful, gravesites province chase bug;

  1. front end:

Depth understanding of the HTTP protocol (including special code and protocols detailed protocols the various reasons behind such a static file cache 302, 502 are linked to rear nginx php and the like); In addition to application integration frameworks before the distal aspect of the distal end aspect If you are interested in learning more deeply, form of expression that can develop some of their own front-end framework similar to jQuery, or develop a rich trivial test of skill Java text editor like;

  1. Other areas of language learning:

There are basically accumulated on the basis of PHP / C / C ++ language, it is recommended to try at this stage of different learning programming languages, see personal interests and hobbies, scripting Language can learn Python / Ruby like, functional programming language can test try Lisp / Haskell / Scala / Erlang like static language can try Java / golang, statistical analysis can learn to understand the R language, if you do want to change the perspective of back-end business, as well as the previously mentioned can try Node.js the combination with Nginx Nginx_Lua and so on. Different learning languages ​​mainly to enhance vision and resolve their differences on means of, for example, will know in addition to process / thread, as well as lightweight coroutines; for example, in cross-machine communication scenarios below, Erlang's solution is simple amazing; for example, in the case of not want to choose C / C ++, as well as similar efficient Erlang / golang available like; mainly to enhance vision.

  1. Other learning professional direction:

Inside this stage, we will be in addition to basic skills LNMP will consider a number of other areas of knowledge, learning, these are possible, of personal interests and long-term goals direction. At present the situation more areas that can be selected, such as cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, statistical applications, personalized recommendation), natural language processing ( Chinese word, etc.), search engine technology, graphics, images, voice recognition and so on. In addition to these directions on the tall, there are many places biased engineering can be learned, such as high-performance systems, mobile development (Android / IOS), computer security, embedded systems, hardware and so on.

  1. system design:

System design on the basis of the second stage, the application can master the skills and experience to design more complex systems in large, complex systems can solve the problem of most of the line, complete a similar browser -> CDN -> after more> - load balancing -> access layer -> Nginx + PHP -> business cache -> database -> RPC brightest complex back-end interaction (storage back-end, back-end logic, anti-cheat back-end external service) Jiang Zi's complex business end; able to support the normal development of tens of millions to hundreds of millions of daily traffic website maintenance.

Guess you like

Origin blog.51cto.com/11623741/2416069