PHP Programmer Route Development Plan

Source: Internet
Author: User
Tags apc epoll php framework mysql backup zend

  Phase 1: Basic stage (basic PHP programmer)   Focus    LNMP (core is installation configuration basic operation)   target   1. Able to complete basic LNMP system installation, simple configuration maintenance;   2. Be able to do basic simple system PHP development   3. Ability to support the development   time of a function module in a PHP medium-sized system    individual   knowledge   1.linux:     basic commands, operations, startup, Basic service configuration (including RPM installation files, various service configurations, etc.); write simple shell scripts and awk/sed script commands.   2.nginx:     to be able to install configuration nginx+php, know basic Nginx core configuration options, know Server/fastcgi_pass/access_log and other basic configuration , the goal is to enable NGINX+PHP_FPM to work smoothly.   3.mysql:     will build its own MySQL, know the basic MySQL configuration options; know the difference between InnoDB and MyISAM, Know the different configuration options for the InnoDB and MyISAM two engines, know the difference between the basic two engines and choose the difference above, be able to build a MySQL database by hand, and configure the code for normal and stable operation; The core thrust is the ability to build a running MySQL database.   4.PHP:    basic Syntax array, string, database, XML, Socket, gd/imagemgk image processing, etc. familiar with various APIs linked to MySQL operations (mysql/ MYSQLI/PDO), know the solution of various coding problems; know the regular skilled PHP framework (thinkphp, Zendframework, Yii, YAF, etc.); Understand how basic MVC works and why, and know a little about the differences between different PHP frameworks ; be able to quickly learn an MVC framework. Be able to know the file directory organization in the development project, have the basic good code structure and the style, can complete the small system development and the medium system one module development work.   5. Front-end:    If the condition time allows, you can properly learn the html/css/js and other phaseKnowledge, know what web standards, div+css web/wap page patterns, know the difference between HTML5 and HTML4; understand some basic frontend just and JS framework (jquery, etc.); understand some basic JavaScript programming knowledge; (this item is not required, If you have time, it is possible to understand a little, but it is not recommended as a priority, unless the individual has a strong interest in   6. System design:    can complete the basic design of small system, including simple database design, can complete basic: browser Design and development of database architecture, nginx+php-I, capable of supporting the development and maintenance of hundreds of thousands of to millions of traffic sites per day; Phase 2: Improve stage (Intermediate PHP programmer)   Focus:   improve skills for LNMP Can be more comprehensive to the LNMP has the skilled application.   Target:   1. Can build the LNMP environment anytime and anywhere, and complete the routine configuration quickly;   2. Able to track down most problems encountered in development and online environment;   3. Be able to undertake the architecture and development work of the medium-sized system independently;   4. Ability to undertake development work on a medium-sized module in a large system;  Knowledge Mastery:   1. Linux:     in the first phase of the foundation, can be used to smooth the use of shell scripts to complete a lot of automated work, Awk/sed/perl is also very good, able to complete a lot of text processing and data statistics and other work Basic ability to install most of the non-special Linux programs (including various libraries, packages, third-party dependencies, etc., such as MONGODB/REDIS/SPHINX/LUNCENE/SVN); Learn about basic Linux services and know how to view performance metrics data for Linux Know basic Linux following problem tracking and so on.   2. Nginx:     in the first stage of the foundation, understand the complex nginx configuration, including multi-core configuration, events, proxy_pass,sendfile/tcp_* configuration, know the time-out and other related configuration and performance impact Know Nginx In addition to Web server, can also assume proxy server, reverse static server and other configuration; know the basic Nginx configuration tuning; Know how to configure permissions, compile a nginx extension to nginx; know the basic nginx operating principle (master/ WorkerMechanism, epoll), know why Nginx performance is better than Apache performance and other knowledge;   3. mysql/mongodb:    in the first stage of the foundation, in MySQL development, master a lot of tips, including regular SQL optimization (group By/order by/rand optimization, etc.), in addition to the ability to build MySQL, It also provides the ability to back up MySQL data in hot and cold, as well as configuration options that affect Innodb/myisam performance (such as Key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_ Flush_log_at_trx_commit, etc.), also know how many of these options are configured to be appropriate, and also know some special configuration options, such as know how to build MySQL master-slave synchronization environment, know the difference between the different Binlog_format Know MySQL performance tracing, including Slow_log/explain, can also know the basic knowledge of indexing and processing, and understand basic MySQL architecture (server+ storage engine), know basic innodb/ MyISAM index storage structure and different (clustered index, B-tree); know the basic INNODB transaction mechanism; Understand most of the MySQL exception scenarios (or know where to find the processing solution). Conditions allow, it is recommended to understand the NoSQL representative MongoDB database, by contrast with the MySQL differences, colleagues can safely use MongoDB in the appropriate application scenarios, know the basic PHP with MongoDB development.   4. redis/memcached:    in most of the medium-sized system will be involved in cache processing, so be sure to understand the basic cache; know the similarities and differences between Memcached and Redis and the application scenarios, can be installed independently redis/ Memcached, understand some of the basic features and limitations of memcahed, such as the largest value values, know PHP with their use, Redis understand the basic working principle and use, understand the general data types, know what kind of scenarios to apply what type, understand Redis transactions and so on. Principle part, can understand the memory structure of memcached (slab mechanism), Redis understand the common data type underlying implementation of the storage structure (sds/linked list/skiplist/hashtable), and so on, by the way, know the Redis transaction, RDB, AoF and other mechanisms better   5. Php:    In addition to the first phase of the capability, installation configuration can be arbitrarily installed PHP and a variety of third-party extensions of the compiled installation configuration, understand most of the PHP-FPM configuration options and implications (such as max_requests/max_children/ Request_terminate_timeout such as the impact of performance configuration), know the difference between mod_php/fastcgi, PHP has been able to master a variety of basic technology, but also a variety of in-depth PHP, including the PHP object-oriented deep understanding/spl/ Special features such as reflection and so on, the framework has read at least one of the regular PHP MVC framework Code, know the basic PHP framework internal implementation mechanism and design ideas, in PHP development has been able to skillfully use the conventional design patterns to apply development (abstract Factory/singleton/Observer/ Command chain/policy/adapter, etc.); It is recommended to develop your own PHP MVC framework to fully liberalize the development of the MVC model, and allow yourself to upgrade quickly in Business Project development, familiarize yourself with PHP's various code optimization methods, and familiarize yourself with most of the PHP security issues. Familiar with basic mechanism of PHP execution (Zend Engine/extension basic working mechanism);   6. C + +:     begins to dabble in a certain C + + language and is able to write basic C + + code that is familiar with basic C + + syntax (pointers, array manipulations, strings, general standard APIs) and data structures (linked lists, trees, hashes, Queue) have a certain familiarity with the basic knowledge of C language development below Linux, will be simple makefile file writing, can use simple GCC/GDB program to compile simple debugging work, basic network programming have a general understanding. (This is to lay the groundwork for a higher level)   7. Front-end:    in the first stage of the foundation, familiar with the basic HTTP protocol (Protocol Code 200/300/400/500, basic HTTP interaction header), conditions allow, can be in-depth write a slightly elegant html+css+ JavaScript, or the ability to use some of the front-end frameworks roughly simple (jquery/yui/extjs/requirejs/bootstrap, etc.), and if conditions permit, you can learn more about JavaScript programming, such as the closure mechanism, DOM processing And go deeper into the jquery source to learn more. (This item does not focus on learning, unless it is interested in the front end)   8. System Design:    canTo design most of the medium-sized system Web site architecture, database, basic PHP framework selection, performance testing and processing, etc. can be done similar to: browser----CDN (SQUID)-----cache-------Database structure Web site basic design development and maintenance ; capable of supporting the development and maintenance of millions of to tens of thousands of daily traffic basic Web sites; Phase 3: Advanced (Advanced PHP Programmer)   Focus:   In addition to the basic LNMP program, you can have in-depth learning in a certain direction or field. (depth dimension development)   target:   1. In addition to the ability to complete basic PHP business development, but also to solve most of the deep complex technical problems, and can be independently designed to complete the large-scale system design and development work;   2. I can independently hold into a technical direction, in this piece of comparative professional. (such as MySQL, Nginx, PHP, Redis, and so on in any direction in-depth research)   Knowledge Mastery:   1. linux:    In addition to the second phase of the ability, under Linux in addition to the general operation and performance monitoring tracking, but also can use a lot of advanced complex commands to complete the work (watch/tcpdump/starce/ldd/ar, etc.) In shell scripting, it has been possible to write more complex shell scripts (more than 500 lines) to assist with many shells, including backup, automation, monitoring, etc., for applications such as Awk/sed/perl, such as fire pure green, Be able to manipulate and control the text statistical analysis of the data in various complex formats; there is some understanding of the Linux internals, a basic processing of kernel module loading, startup error handling, and some other related things, such as NFS, Disk Management, etc.   2. Nginx:     in the second stage of the foundation, has been able to operate the nginx is very skilled, can be more in-depth operation of nginx work, such as monitoring, performance optimization, complex problem processing and so on; Look at personal interests, More aspects can be considered to focus on the work principle of nginx in-depth study, mainly in the reading source, such as the specific master/worker work mechanism, nginx internal event processing, memory management and so on, and can learn the development of Nginx extension, Can customize some of their own private extensions, at the same time can have a certain degree of understanding of the Nginx+lua to see if it can be combined to apply a better model, this stage of the requirements of the nginx principle of deep understanding, can be considered as the Nginx sideTo an in-depth professional.   3. mysql/mongodb:    in the second stage of the foundation, in the MySQL application, in addition to the basic SQL optimization, but also in the completion of some complex operations, such as large quantities of data import and export, High-risk operations such as changing the table structure of large quantities of data on the line or adding or removing index fields, etc. in addition to the installation configuration, has been able to handle more complex MySQL problems, such as the tracing of various problems, master-Slave synchronization delay problem resolution, cross-room synchronization data solution, MySQL high-availability architecture, etc. are involved in understanding For MySQL application level, the key technology of MySQL is familiar with, such as the transaction mechanism (isolation level, lock, etc.), the trigger, partition and other technologies have a certain understanding and application; For MySQL performance, there are disk optimizations (SAS migration to SSD), Server optimizations (memory, Server itself), in addition to the other core performance tuning options in the two phase (Innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_ Timeout, etc.), connection pooling software selection application, in-depth understanding of the show Status/show profile class operation statement, to complete most of the performance problem tracing; MySQL backup technology in-depth familiarity, including disaster recovery, In-depth understanding of binlog, hot and cold backup, multi-IDC backup, etc. in the MySQL principle, there is more understanding, such as the working mechanism of MySQL began to read some of the source code, such as the master-slave Synchronization (replication) technology source learning, or a storage engine (myisam/innodb/ TOKUDB) and so on the source learning understanding, if the conditions allow, you can refer to the CSV engine to develop its own simple storage engine to save some data, enhance the understanding of MySQL, in this process, if you are interested, you can also consider the direction of the DBA. MongoDB level, you can consider, for example, in the case of writing less read more and start to apply MongoDB online, or do some online data analysis processing operations, specific scenarios can follow the work, but the core is to better understand the Rmdbs and NoSQL different scenarios below the application, If the conditions or interests allow, you can begin to learn more about MongoDB's working mechanism.   4. redis/memcached:    in the second stage of the foundation, can be more in-depth application and learning. Because memcached is not particularly complex, it is suggested that the source code can be read, especially the memory management part, to facilitate in-depth understanding; Redissection, can do more complex data structure application (Zset to do leaderboard sorting operations/transactions to ensure atomicity in the second-class scenario application, such as the use of operations), more involved in aof and other synchronization mechanisms of learning applications, design a highly available Redis application architecture and Cluster , it is suggested that we can study the source of Redis in depth, put the knowledge accumulated in the second stage can be applied, especially can read the core event management, memory management, internal core data structure and so on to learn a bit. If interest permits, you can become a very professional user of Redis.   5. php:    as the basic core skills, we need to have more in-depth learning and application on the basis of the second stage. From the basic code application above, can solve the PHP development encountered 95% of the problem, understand most of the PHP skills, for most of the PHP framework can be quickly used in a day, and understand the pros and cons of various mainstream PHP framework, can quickly facilitate project development to do technology selection; In addition to the general second stage of knowledge, you will learn some of the more biased gate configuration options (PHP auto_prepend_file/auto_append_file), Includes some complex advanced configurations and principles in the extension (such as the memcache.hash_strategy in the memcached extension configuration, apc.mmap_file_mask/apc.slam_defense/in the APC extended configuration Apc.file_update_protection and so on), the working mechanism of PHP, including the PHP-FPM work mechanism (such as PHP-FPM under different configuration machine to open process number calculation and principle), Zend Engine has a basic familiarity (vm/gc/ Stream processing), read the basic PHP kernel source code (or read the related article), the most core data structure of PHP internal mechanism (basic type/array/object) implementation has the understanding, for the core infrastructure (zval/hashtable/ GC) with in-depth learning, ability to perform basic PHP extension development, understanding of some advanced knowledge of extended development (minit/rinit, etc.), familiarity with PHP and apache/nginx different communication interaction details (MOD_PHP/FASTCGI) In addition to developing PHP extensions, consider learning to develop Zend extensions to understand PHP from a lower level.   6. c/c++:    in the second stage of the foundation, can have a more in-C + + language learning to understand, to complete the development of small and medium-sized C + + systems;The basic second stage of the base C + + syntax and data structure, but also to learn some special data structures (B-tree/rb-tree/skiplist/lsm-tree/trie-tree, etc.) to facilitate the needs of special work, in system programming, familiar with multi-process, Multi-threaded programming, many processes under the understanding of the majority of multi-process communication, the flexibility to choose the means of communication (shared memory/semaphore/pipeline, etc.); Multithreaded programming can solve the problem of lock conflict, and be able to develop and debug multi-thread program, and familiar with the network programming, understand the multi-process model /multithreaded model/asynchronous Network IO Model for differentiation and selection, familiarity with the principles and differences of different asynchronous network IO models (SELECT/POLL/EPOLL/IOCP, etc.), and familiarity with common asynchronous frameworks (ace/ice/libev/libevent/libuv/ Boost.asio, etc.) and use, if leisure can also look at some of the domestic development of the library (such as Muduo), but also can design a high concurrent program architecture (Leader-follow/master-worker, etc.); Problems in Backend server development (memory management, log printing, high concurrency, front-end communication Protocol, service monitoring), knowledge of each backend service RPC communication problem (STRUCT/HTTP/THIRFT/PROTOBUF, etc.) , can be more familiar with the use of GCC and GDB to develop the compilation of debugging procedures, the online program core can be quickly traced after the tracking problem; Common module development, can accumulate or develop some common tools or libraries (such as asynchronous network framework, log library, memory pool, thread pool, etc.), However, the development of whether to use caution, the province of the buried pit to chase bug;  7. Front-end:    in-depth understanding of the HTTP protocol (including the Special Protocol code and the reasons behind the detailed protocol, such as 302 static file cache, 502 is the nginx behind the PHP hang), in addition to the previous front-end aspects of the various framework application integration capabilities, Front-end Learning if you are interested in a deeper, expressive form, you can develop some kind of jquery-like front-end framework, or develop a rich text editor and other trivial test JavaScript skill;   8. Other areas of language learning:    basic accumulation of php/c/c++ language, it is suggested that in the current stage can try to learn different programming languages, see personal interests, scripting language can learn Python/ruby and the like, Functional programming language you can try Lisp/haskell/scala/erlang and the like, staticState language can try Java/golang, data statistical analysis can understand the R language, if you want to change perspective to do back-end business, you can try node. js and the previous mentioned with the Nginx combination of Nginx_lua and so on. Learning different languages is mainly about raising your horizons and solving the differences between the methods, such as understanding the process/thread, as well as the lightweight association, for example, under the cross-machine communication scenario, Erlang's solution is surprisingly simple, for example, if you do not want to choose C + +, there are similar efficient erlang/ Golang can be used, etc., mainly to enhance the field of vision.   9. Other professional Direction learning:    in this stage, in addition to the basic LNMP skills, will consider some other areas of knowledge learning, these are available, look at personal interests and long-term goal direction. At present, the situation can choose more areas, such as cloud computing (distributed storage, distributed computing, virtual machines, etc.), machine learning (data mining, pattern recognition, application to statistics, personalized recommendations), Natural language processing (Chinese word segmentation, etc.), search engine technology, graphic images, speech recognition and so on. In addition to these tall, there are many partial engineering aspects can be learned, such as high-performance systems, mobile development (Android/ios), computer security, embedded systems, hardware and other directions.   10. System Design:    system design on the basis of the second stage, can apply the mastered experience and skills, design a more complex medium and large system, can solve most of the problems of complex systems on the line, complete similar browser-like CDN-load balancer- Complex backend RPC interaction (storage backend, logical back end, anti-cheating backend, external service) and more back-end Jiangzi complexity services, database---nginx+php, service cache, Access layer Normal development and maintenance work.

Transfer from http://blog.csdn.net/heiyeshuwu/article/details/40041601

PHP Programmer Route Development Plan

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.