Author: geek Xiaojun, a post-80s generation who focuses on Web Technology
I don't have to spell smart people, I just need to spell those lazy people, and I will surpass most people!
CSDN @ geek Xiaojun, original article, technology sharing at station B
Back end PHP + MySQL + Linux technology exchange group: 855256321
Combined with my personal experience, I can summarize the development track of many PHP programmers, the confusion of small partners about the future, especially the blindness and confusion of technical learning. I simply combed the technical requirements of PHP programmers at each stage, and helped you make a comparison, so as to set learning and growth goals.
First of all, I feel that before learning any new technology, it is necessary to get through the old technology first, and then take the route of the current mainstream technology! Personal opinions are for reference only
Phase I: basic phase (basic PHP Programmer)
a keyMaster LNMP (the core is the basic operation of installation and configuration)
The full name of LNMP means: Linux, nginx, mysql, PHP
targetBe able to complete basic LNMP system installation, simple configuration and maintenance; Be able to do basic and simple system PHP development; It can support the development of a PHP function module in PHP medium-sized system.
Time calculation: the time to complete this stage varies from person to person. Some guys grow fast, half a year passes, and two or three years slow!
Basic commands, operations, startup and basic service configuration (including RPM installation files, various service configurations, etc.) will write simple shell scripts and awk / sed script commands.
Be able to install and configure nginx + PHP, know the basic nginx core configuration options, and know server / fastcgi_ pass/access_ Log and other basic configurations. The goal is to enable nginx + PHP_ FPM works smoothly.
Be able to build MySQL by yourself and know the basic MySQL configuration options; Know the difference between InnoDB and MyISAM and the different configuration options for InnoDB and MyISAM engines; Know the basic differences between the two engines and the differences in selection; Be able to compile and build a MySQL database by hand, and configure the coding to run normally and stably; The core theme is to build a running MySQL database.
Basic syntax array, string, database, XML, socket, Gd / imagemgk image processing, etc; Be familiar with various APIs linked to MySQL operation (MySQL / mysqli / PDO), and know how to solve various coding problems; Know the PHP framework (ThinkPHP, zendframework, Yii, YAF, etc.) that you are familiar with
Understand the operation mechanism of basic MVC and why, and slightly know 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 basic good code structure and style, and be able to complete the development of small system and a module in medium-sized system.
5. Front end development
6. System design
Be able to complete the basic design of small system, including simple database design, and be able to complete the basic design and development of browser – > nginx + PHP – > database architecture;
It can support the development and maintenance of websites with hundreds of thousands to millions of traffic every day, at least 50000-60000 people!
The above is what I think a php programmer should master in the first stage
Stage 2: technical stage of improving ability (intermediate PHP Programmer)
Key points of this stage:It is to improve the skills for LNMP and be able to apply LNMP more comprehensively.
LNMP refers to Linux, nginx, MySQL and PHP mentioned earlier
Of course, some people now use lamp: Linux, Apache, MySQL and PHP are also OK
LNMP environment can be built anytime, anywhere,
It can quickly complete the routine configuration, trace and solve most of the problems encountered in the development and online environment,
Able to independently undertake the architecture and development of medium-sized systems
Be able to undertake the development of a medium-sized module in a large-scale system
Next, let me elaborate on the key parts of LNMP
1. Improvement of Linux
Note that on the basis of the first stage:
Be able to use shell script smoothly to complete a lot of automation work; Awk / sed / Perl also works well,
Able to complete a lot of text processing and data statistics;
It can basically install most non-special Linux programs (including various libraries, packages, third-party dependencies, etc., such as mongodb / redis / Sphinx / luncene / SVN);
Understand the basic Linux services, know how to view the performance index data of Linux, and know the problem tracking under the basic Linux.
2. Improvement of nginx
Note that on the basis of the first stage:
Understand the more complex nginx configuration; Including multi-core configuration, events and proxy_ pass，sendfile/tcp_* Configuration, know the timeout and other related configuration and performance impact;
Know that nginx can undertake the configuration of proxy server and reverse static server in addition to web server; Know the basic nginx configuration tuning; Know how to configure permissions and compile an nginx extension to nginx;
Know the basic operating principle of nginx (Master / worker mechanism, epoll), and know why the performance of nginx is better than that of Apache;
3. Mysql/mongodb improvement
Note that on the basis of the first stage:
In MySQL development, master many small skills, including conventional SQL optimization (group by / order by / Rand optimization, etc.); Besides being able to build mysql, it can also back up MySQL data cold and hot. It also knows the configuration options that affect the performance of InnoDB / MyISAM (such as key_buffer / query_cache / sort_buffer / innodb_buffer_pool_size / innodb_flush_log_at_trx_commit, etc.). It also knows the appropriate value of these options;
In addition, learn about some special configuration options,
Know how to build MySQL master-slave synchronization environment,
Know each binlog_ The difference of format;
Know the performance tracking of MySQL, including slow_ Log / explain, etc,
Also be able to know the basic knowledge of index establishment and processing;
Understand the basic MySQL architecture (server + storage engine) in terms of principle,
Know the basic InnoDB / MyISAM index storage structure and differences (clustered index, B-tree);
Know the basic InnoDB transaction processing mechanism; Understand the handling scheme of most MySQL exceptions (or know where to find the handling scheme).
If conditions permit, it is recommended to learn about the representative mongodb database of NoSQL and compare it with MySQL. At the same time, we can use mongodb safely and carefully in appropriate application scenarios and know the combined development of basic PHP and mongodb.
In most medium-sized systems, cache processing must be involved, so we must understand the basic cache;
Know the similarities and differences and application scenarios between memcached and redis,
Redis / memcached can be installed independently,
Understand some basic features and limitations of memcached, such as the maximum value and the combination of PHP and their use;
Redis understands the basic working principle and usage, the general data types, the application types in different scenarios, and the transactions of redis.
In the principle part, you can roughly understand the memory structure (slab mechanism) of memcached,
Redis knows the underlying implementation storage structure (sds/ linked list /skiplist/hashtable) of common data types. By the way, redis has a better understanding of transaction, RDB, AOF and other mechanisms
In addition to the PHP capability in the first stage, the installation and configuration can install PHP and the compilation and installation configuration of various third-party extensions at will
Understand most configuration options and meanings of PHP FPM (such as configuration affecting performance such as max_requests / max_children / request_terminate_timeout),
Know Mod_ The difference between PHP and fastcgi;
In terms of PHP, I have been proficient in various basic technologies, including various in-depth PHP, including in-depth understanding of PHP object-oriented / SPL / special features at the syntax level, such as reflection;
In terms of framework, I have read the code of at least one conventional PHP MVC framework,
Know the internal implementation mechanism and design idea of the basic PHP framework; In PHP development, I have been able to skillfully use the conventional design patterns for application development (Abstract Factory / singleton / observer / command chain / strategy / adapter and other patterns);
It is suggested to develop your own PHP MVC framework to fully liberalize the development, enable yourself to deeply understand the MVC mode, and enable yourself to quickly upgrade in business project development;
Be familiar with various code optimization methods of PHP and the solution of most PHP security problems; Familiar with basic PHP execution mechanism (Zend engine / extended basic working mechanism);
Began to dabble in a certain C / C + + language,
Be able to write basic C / C + + code, and be familiar with basic C / C + + syntax (pointer, array operation, string, general standard API) and data structure (linked list, tree, hash, queue);
Have a basic understanding of C language development under Linux, be able to write simple makefile files, and be able to compile and debug simple GCC / GDB programs;
Have a general understanding of basic network programming. (this item is to lay a foundation for a higher level) it is also a technology stack that a real PHP God level person must be equipped with!
7. Front end development
On the basis of the first stage,
Familiar with basic HTTP protocol (protocol code 200 / 300 / 400 / 500, basic HTTP message);
Many people think that as a php programmer, the front-end can not focus on learning, but I personally think the front-end is also the focus. As mentioned earlier, this has something to do with the current company’s demand for talents, which varies from person to person, and should not be to learn whether the front-end is interested or not!
8. System design
It can design the website architecture and database of most medium-sized systems, and select the basic PHP framework for business;
Performance test, troubleshooting, etc;
Be able to complete the basic design, development and maintenance of websites like browser – > CDN (SQUID) – > nginx + PHP – > cache – > database structure;
It can support the development and maintenance of basic websites with millions to tens of millions of traffic every day
Phase 3: Advanced PHP Programmer
Focus:In addition to the basic LNMP program, you can also have in-depth study in a certain direction or field. (development in depth)
In addition to completing the basic PHP business development, it can also solve most in-depth and complex technical problems, and can independently design and complete the design and development of medium and large-scale systems;
I can independently hold in-depth in a certain technical direction, and I am more professional in this area. (for example, conduct in-depth research in mysql, nginx, PHP, redis, etc.)
1. Linux Advanced
In addition to the capability of the second stage, under Linux, in addition to conventional operation and performance monitoring and tracking, many advanced and complex commands can be used to complete the work (watch / tcpdump / starce / LDD / AR, etc.);
In terms of shell scripts, we have been able to write more complex shell scripts (more than 500 lines) to assist in completing many shells, including backup, automatic processing, monitoring and so on;
Awk / sed / Perl and other applications have been as popular as pure green, which can operate, control and process text at will, and statistically analyze various complex format data;
Have some understanding of the internal mechanism of Linux, and have a detailed understanding of kernel module loading, startup error handling, etc;
At the same time, I also know some other related things, such as NFS, disk management, etc,
Of course, when you read here, you may think that you are not a professional operation and maintenance personnel, and there is really no need to understand the low-level professional level of Linux, but personally, I think it is indispensable to become a professional technician. Don’t be afraid, it’s the truth!
2. Nginx advanced
On the basis of the second stage, I have been able to operate nginx skillfully,
Be able to carry out more in-depth operation and maintenance of nginx, such as monitoring, performance optimization, complex problem handling, etc;
Depending on your personal interests, you can consider focusing on the in-depth study of the working principle of nginx, which is mainly reflected in 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 understanding of nginx + Lua to see if a better model can be combined and applied;
The requirement of this stage is to have an in-depth understanding of the principle of nginx, and you can consider becoming an in-depth professional in the direction of nginx.
Of course, if you are really not interested in skipping it!
3. MySQL / mongodb advanced
On the basis of the second stage, in terms of MySQL application, in addition to the previous basic SQL optimization, it can also complete some complex operations,
For example, high-risk operations such as importing and exporting mass data, changing table structure or adding or deleting index fields of online mass data. Note: I said it was a dangerous operation!!
In addition to installation and configuration, it has been able to handle more complex MySQL problems:
For example, the tracing of various problems, the solution of master-slave synchronization delay, cross machine room synchronization scheme, MySQL high availability architecture, etc
MySQL application level
Familiar with the core key technologies of MySQL, such as transaction mechanism (isolation level, lock, etc.), understanding and application of trigger, partition and other technologies;
On MySQL performance
Including disk optimization (SAS migrating to SSD), server optimization (memory, server configuration)
Other core performance optimization options (innodb_log_buffer_size / back_log / table_open_cache / thread_cache_size / innodb_lock_wait_timeout, etc.), connection pool software selection and application,
Have an in-depth understanding of the operation statements of the show * (show status / show profile) class, and be able to trace most performance problems;
Deep familiarity with MySQL backup technology, including catastrophic backup and restore, in-depth understanding of binlog, hot and cold backup, multi IDC backup, etc;
In terms of MySQL principle
Learn more about the source code of MySQL / InnoDB, or learn more about the synchronization engine of MySQL / InnoDB,
If conditions permit, you can refer to the CSV engine to 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 you write less and read more, or doing some online data analysis and processing operations. The specific scenarios can be based on the work, but the core is to better understand the applications under different scenarios of rmdbs and NoSQL. If conditions or interests allow, you can start to learn more about the working mechanism of mongodb.
Don’t like to skip directly!
4. Redis / memcached advanced
On the basis of the second stage, redis and memcached can be applied and learned more deeply. Because memcached is not particularly complex, it is recommended to read the source code, especially the memory management part,
Facilitate in-depth understanding
Redis can be used for more applications with complex data structures (Zset is used for ranking operation / transaction processing to ensure atomicity, such as applications in seckill scenarios);
It mostly involves learning applications with synchronization mechanisms such as AOF, and designs a highly available redis application architecture and cluster;
It is suggested that you can deeply study the source code of redis and apply the knowledge accumulated in the second stage. In particular, you can read it, including core event management, memory management and internal core data structure. If your interest allows, you can become a very professional user of redis.
5. PHP advanced in-depth
As the most basic core skills, we need more in-depth study and Application on the basis of the second stage.
From the basic code application, it can solve 95% of the problems encountered in PHP development, and understand most of the PHP skills;
For most PHP frameworks, they can be used quickly in one day (of course, it varies from person to person)
And understand the advantages and disadvantages of various mainstream PHP frameworks, which can quickly and conveniently make technical selection in project development;
In terms of configuration, in addition to the knowledge of the second phase of the general meeting, you will know some more eccentric configuration options (PHP auto_prepend_file / auto_append_file),
Including some complex advanced configurations and principles in the extension:
(for example, memcache.hash_strategy in memcached extension configuration and apc.mmap_file_mask / apc.slam_defense / apc.file_update_protection in APC extension configuration)
Have a good understanding of the working mechanism of PHP, including the working mechanism of PHP FPM (such as the calculation and principle of the number of processes started by PHP FPM under different configured machines),
Have a basic familiarity with Zend engine (VM / GC / stream processing), read the basic PHP kernel source code (or read relevant articles),
Understand the implementation of most core data structures (basic type / array / object) of PHP internal mechanism,
Have in-depth knowledge of core infrastructure (zval / hashtable / GC);
Be able to carry out PHP extension development and understand some medium and high-level knowledge of extension development (minit / rinit, etc.),
Be familiar with the details of different communication and interaction modes between PHP and Apache / nginx (mod_php / fastcgi);
In addition to developing PHP extensions, you can consider learning to develop Zend extensions to understand PHP from a lower level.
Note: C / C + + will!
6. C / C + + Advanced in-depth
On the basis of the second stage, I can have a deeper understanding of C / C + + language and complete the development of small and medium-sized C / C + + system;
In addition to the basic C / C + + syntax and data structure of the second stage, you can also learn some special data structures (B-tree / RB tree / skiplist / LSM tree / trie tree, etc.) to meet the needs of special work;
In system programming, familiar with multi process and multi thread programming; In the case of multiple processes, we understand the communication mode between most of the multiple processes and can flexibly choose the communication mode (shared memory / semaphore / pipeline, etc.);
Multithreaded programming can solve the problem of lock conflict, and can develop and debug multithreaded programs;
At the same time, be familiar with network programming, understand the differences and selection of multi process model / multi thread model / asynchronous network IO model, and be familiar with the principles and differences of different asynchronous network IO models (select / poll / epoll / IOCP, etc.),
And be familiar with common asynchronous frameworks (ACE / Ice / libev / libevent / libuv / boost. ASIO, etc.) and their use,
If you have leisure, you can also look at some domestic libraries developed by yourself (such as Muduo);
At the same time, it can design a good high concurrency program architecture (leader follow / master worker, etc.);
Understand most problems in the development of C / C + + back-end server (memory management, log printing, high concurrency, front and rear communication protocols, service monitoring),
Know the RPC communication problems of various back-end services (struct / HTTP / thirft / protobuf, etc.);
Be able to use GCC and GDB more familiar to develop, compile and debug programs, and quickly track and solve problems after the online program core is lost;
In terms of general module development, we can accumulate or develop some general tools or libraries (such as asynchronous network framework, log library, memory pool, thread pool, etc.)
7. Front end development
Deeply understand the HTTP protocol (including the detailed protocol, special protocol code and the reasons behind it, such as 302 static file caching, 502 PHP hanging behind nginx, etc.);
In addition to the application integration ability of various frameworks in the front-end, if you are interested, you can further study the front-end. The expression form is that you can develop some front-end frameworks similar to jQuery yourself,
Other areas of language learning
Scripting languages can learn Python / Ruby and so on,
Functional programming languages can try LISP / Haskell / Scala / Erlang and so on,
You can try Java / golang for static languages,
The R language can be understood through data statistical analysis,
If you want to do back-end business from a different perspective, you can try node JS and nginx combined with nginx mentioned earlier_ Lua et al.
Learning different languages is mainly to improve your vision and the difference of problem-solving methods. For example, you will understand that in addition to processes / threads, there are lightweight collaborative processes;
For example, when you don’t want to choose C / C + +, there are similar efficient Erlang / golang available, and so on; Mainly to improve the vision.
Study in other majors
In addition to the basic knowledge and skills that LNMP will study in the long term, it can be considered in other fields.
At present, there are many fields that can be selected, such as, cloud computing (distributed storage, distributed computing, virtual machine, etc.), machine learning (data mining, pattern recognition, etc., applied to statistics and personalized recommendation),
Natural language processing (Chinese word segmentation, etc.), search engine technology, graphics and images, speech recognition, etc. In addition to these tall ones, there are also many places to learn in engineering,
For example, high-performance systems, mobile development (Android / IOS), computer security, embedded systems, hardware and other directions.
Based on the second stage, the system design can apply the experience and skills to design more complex medium and large-scale systems,
It can solve the problems of various complex systems on most lines, and complete complex services such as browser – > CDN – > Load Balancing – > access layer – > nginx + PHP – > service cache – > Database – > various complex back-end RPC interactions (storage back-end, logical back-end, anti cheating back-end, external services) – > more back-end services; It can support the normal development and maintenance of websites with tens of millions to hundreds of millions of traffic every day.
The above is the summary of the analysis report on the technology promotion ladder planning scheme of an excellent php programmer in his career!
Personal opinions are for reference only! Thank you for your support!:
"Likes" "comments" "Favorites"
Everyone’s support is the driving force for me to stick to it!
If there are any mistakes or inaccuracies in the above content, please leave a message below, or you have better ideas. Welcome to communicate and study together
Focus on WeChat public official account for the free updating of dry cargo