I’ve asked many programmers who say they love code about their career plans, and most of them say they want to be an architect. On the hiring side, some teams filter out resumes that mention the word “architecture” multiple times without mentioning anything specific. It can be seen that while architects are sacred in the eyes of most programmers, the fact remains that “architecture” and “architect” are the most frequently abused. People who write powerpoint but not code, who are peacemakers and don’t care about fast, stable, and convenient software, are not “architects” let alone “architects.”

So what kind of person is an architect?

It is said that the term architecture originated in the construction industry, and that the role of architect is the same whether it is front-end or back-end. Planning a home renovation is an appropriate description of the role of an architect.

Building a Web API is like deciding on a decorating style. Choose between a RESTFul CRUD style, a GraphQL style that requires more customization, or a simple JSON-RPC style. It’s like choosing a simple Japanese style, rough American style, or luxurious European style. Direction and selection are ubiquitous, and the architect must make decisions based on actual needs to lay the groundwork for the integration of the following parts.

Lighting, walls, furniture and other parts need to be carefully designed, executed and constantly revised according to the style to achieve the original goal, and the architecture is the same. Take light control, for example. Builders may miss some of the details you care about: the warm colors of the study; A bright living room that cuts to the cinema; Background light installed in the right position so as not to glare. In the execution of each link, the architect should both design and ensure that each role is fully understood, not preclating the ability to write important links by hand when necessary, and quickly adjust when problems arise at points of experience or lack of consideration. It’s a shame to have a good design without good execution.

It’s worth noting that choosing the best bathroom product or the most expensive filter isn’t the key to getting the best bathroom experience. Similarly, software architecture is not about making the best of every piece and then piecing it together. The key to the best bathroom experience is compromise. For example, when the water pressure is not particularly high, a filter installed in the main gate, while providing the healthiest use of water, can lead to a lack of water pressure in the shower, which in turn undermines the experience. Installing a filter at the kitchen outlet may be the best balance, maintaining pressure while keeping the water healthy. Splitting into parts is decoupling, while the balance of collaboration is cohesion. Low coupling, high cohesion is the architect’s ultimate goal in dealing with the collaboration of various parts of software.

Decoration has a lot of details, for example, if you do not like to hang clothes and live in “Yellow plum day” In Shanghai, optional washing and drying machine; The house is small in size, with optional extendable furniture; The ventilation quality requirements are relatively high, can be installed fresh air system. Software architecture also needs to consider many details, such as customer requirements, actual environment, technology availability, security, reuse, extension, etc. And these details of consideration, is not a new person can do.

In general, an architect must be a designer and decision maker who has extensive experience in system design and can ensure that the design is implemented. Must be involved in design, development execution, and testing but not limited to one role. Perhaps not all architects are like this, and this is just my opinion and expectation.

Java architects need skills

Since you are a Java architect, you must first be an advanced Java siege zombie, familiar with various frameworks and understand how they are implemented. JVM virtual machine principles, tuning, understanding the JVM allows you to write better performance code; Pooling technology, what object pooling, connection pooling, thread pooling… :; Java reflection technology, a necessary technology for writing frameworks, but with serious performance problems, alternative Java bytecode technology; Nio, there’s nothing to say, but it’s worth noting the “direct memory” features, usage scenarios; Java multithreading synchronous asynchronous; Java various collection object implementation principle, understand these can let you choose the appropriate data structure when solving the problem, efficiently solve the problem, such as the implementation principle of hashMap, many people with more than five years of experience are not clear, and why the expansion of performance problems? If you don’t understand these principles, you can’t write efficient code, and you think you’re doing it right; In a word, the more basic things are more important. Many people think they can write code with them, but in fact they only know how to call API, far from being able to use them.

Familiar with various data structures and algorithms, arrays, hashes, linked lists, sorting trees… In a word, either time for space or space for time, here can be extended to say a lot of, need to have certain application experience, used to solve a variety of performance or business problems; I’ll fill in when I have time.

Familiar with Linux operating system, a must, nothing to say.

Familiar with TCP protocol, the whole process of creating a connection three-way handshake and disconnecting a connection four-way handshake, without understanding, can not optimize high concurrency network applications; Familiar with HTTP protocol, especially HTTP headers, I found that many people who worked for more than five years could not understand the life cycle of session and cookie and their correlation.

System clustering, load balancing, reverse proxy, static and static separation, website static.

Distributed storage systems NFS, FASTDFS, TFS, and Hadoop learn about their advantages and disadvantages and application scenarios.

Memcached distributed cache technology,redis, is essential for improving system performance. In short, put the contents of the hard disk into memory to speed up, by the way, algorithmic consistency hash.

Nginx tools super easy to use, high performance, basic will not hang the server, many features, solve a variety of problems.

Database design ability, mysql necessary, the most basic database tools, free to use, its basic parameters optimization, slow query log analysis, master and slave replication configuration, at least to become half of the mysql DBA. Other NoSQL databases include mongodb.

There is also queue middleware. If the message delivery, the message could be written to the database, push put a queue on the server, by the push server to queue for processing, so that you can put in the database and queue the message directly to the user feedback, after push process is completed by push and queue server, benefits asynchronous processing, alleviate the pressure of the server, the decoupled system.

Want to learn the above technology can join my private reply
Information architectureThere are Ali, Baidu, comments, architects live guidance, for job 1–5 Java programmers to improve themselves, and architecture learning materials, JVM, handwriting SpringMVC, distributed, high availability, high performance, data structure, SpringCloud, SpringBoot acquisition.

The above is purely common technology, there are a lot of their own slowly to explore it; Because there is so much to know, being a qualified architect requires a strong self-learning ability. No one is going to teach you everything by hand.

To become an architect, you need to know more than a bunch of techniques. These are the foundation and tools for solving problems. How can you propose solutions if you don’t know them? This is essential to being an architect.

Architects also according to the characteristics of the business, the performance of the system requirements put forward the design scheme can solve the problem of the lowest cost to qualified, the somebody else a few hundred people the user’s system, traffic is not big, small amount of data and you give somebody else on clusters, distributed storage, high-end servers, to architecture and architecture, this is the bull, the role of the architect is the first meet the needs of the business, The second lowest hardware network costs and technical maintenance costs.

According to the business development stage, the architect should foresee the solution to the system architecture of the next stage in advance, and take the upgrade and expansion of the architecture into consideration when designing the current architecture, so as to make it easy to upgrade; Otherwise, when the system bottleneck comes, problems go out again, or the existing architecture can not be extended directly throw away redo, or expand a lot of trouble, which will cause losses to the enterprise