How Java programmers are promoted from code farmers to architects, come and see with me

1. How to define an architect

A Java architect, first and foremost a Java programmer, is proficient in using various frameworks and knows how they are implemented. The principle and tuning of the JVM virtual machine, and understanding the JVM allows you to write code with better performance; pool technology, what object pool, how to solve the concurrency, connection pool, thread pool.

Java reflection technology, a necessary technology for writing frameworks, but there are serious performance problems, the alternative is Java bytecode technology; nio, nothing to say, it is worth noting the characteristics of "direct memory", usage scenarios; java multi-thread synchronization Asynchronous; the implementation principles of various collection objects in java. Understanding these can help you choose the appropriate data structure when solving problems and solve problems efficiently. For example, the implementation principle of hashmap is unclear to many people with more than five years of experience. Why are there performance problems when expanding? If you don’t understand these principles, you will not be able to write efficient code, and you will think you are doing it right; in short, the more basic things are, the more important they are, and many people think they will use them to write Code, in fact, just know how to call the api, it is far from being able to use it.

Proficient in using various data structures and algorithms, arrays, hashes, linked lists, sorting trees.... In a word, it is either time for space or space for time. There is a lot to say here, and you need to have some application experience. Used to solve various performance or business problems.

2. Technical summary

Proficiency in using the linux operating system is a must, there is nothing to say.

Familiar with the tcp protocol, the entire process of creating a three-way handshake for connection and a four-way handshake for disconnection. If you don't understand it, you can't optimize high-concurrency network applications; familiar with the http protocol, especially the http header, I found that many people who have worked for more than five years have Can't figure out the life cycle of session and cookie and the relationship between them.

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

Distributed storage systems nfs, fastdfs, tfs, and Hadoop understand their advantages and disadvantages and apply to scenarios.

Distributed cache technology memcached, redis, is necessary to improve system performance, in a word, put the content on the hard disk into memory to speed up, by the way, mention the algorithm consistency hash.

The necessary skills of the tool nginx are super easy to use, high-performance, and basically a server that will not hang up. It has many functions and solves various problems.

Database design ability, mysql must, the most basic database tool, free and easy to use, optimization of its basic parameters, slow query log analysis, master-slave replication configuration, at least half of mysql dba. Other nosql databases like mongodb.

And queue middleware. For example, for message push, you can first write the message to the database, push it to the queue server, and the push server goes to the queue for processing. In this way, the message can be placed in the database and queue and then directly fed back to the user. The push process is performed by the push server and the queue. The server is completed, which benefits asynchronous processing, relieves server pressure, and decouples the system.

Third, the interview

Several aspects that system architects of enterprise applications should pay attention to (specific analysis of specific situations, the following may not be accurate, just for reference)

Here are some basic interview questions, can you answer them?

1. Talk about the principle of JVM? The difference between a memory leak and an overflow, when does a memory leak occur?

2. How to use java to realize DB storage with 100 million records per day? How to design a database with hundreds of millions of records in MySQL?

3. Does mysql support transactions? What are the DB storage engines?

4. The principle of mvc, the advantages and disadvantages of the mvc mode, if you were asked to design, how would you transform MVC?

5. Does hibernate support clustering? How to implement a cluster?

6. How many concurrent users can tomcat support at most?

7. The principle of map, how does it quickly find the key? What is the difference between map and set?

8. Descriptive algorithm, how to effectively merge two files: one is 100 million basic user information, and the other is the user's daily records of watching movies, series, etc., 50 million. Only 1G of memory? ? ?

9. In the 100 million user records, how to quickly query and count users who have watched more than 5 movies? ---- You can refer to the principle of bitmap index

10. How does Spring implement IOC and AOP, and how does it work?

The above are purely common techniques, and there are many more to explore by yourself; because there are many things to know, to become a qualified architect, you must have a strong self-learning ability, and no one will teach you hand-to-hand. everything.

If you want to become an architect, you don’t need to understand a lot of technologies. These are the foundation and tools for solving problems. How can you come up with solutions if you don’t know these? This is a necessary condition for becoming an architect.

The architect must propose the design scheme that can solve the problem with the lowest cost according to the business characteristics and the performance requirements of the system. To be qualified, a system with hundreds of users has a small amount of access and a small amount of data. Storage and high-end servers are built for the sake of architecture. This is the most nonsense. The role of the architect is to meet the business needs first, and the second lowest hardware network cost and technical maintenance cost.

The architect should also foresee the solution of the system architecture to the next stage according to the stage of business development, 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, there will be a problem when the system bottleneck comes. If the solution is out again, or the existing architecture cannot be expanded, it will be thrown away and redone, or there will be a lot of troublesome expansion problems, which will cause losses to the enterprise.

Here I share with you a learning roadmap for Java programmers who have worked for 2-5 years:

Recommend a few books to friends who are developing as architects

Books that Java system architects should read

Thinking in Java

Effective Java

UML foundation, case and application

UML introductory improvement

software artisan

Design Patterns - The Foundation of Reusable Object-Oriented Software

Refactoring - improving the design of existing code

Agile Software Development - Principles, Patterns, Practices

Enterprise Application Architecture Patterns

Expert One-on-One J2EE Development without EJB

Software Engineering - A Practitioner's Research Approach

Software Leadership - Guidelines for Successful Software Development

The latter two books are actually somewhat in the category of project managers, but they are not very in-depth, and it is very beneficial to see them as successful system architects.

Summary : In fact, the definition of architect is ambiguous. Some 7 or 8-year developers are not architects. Architects are generally beyond the understanding of ordinary people in a certain field. When the company encounters technical problems, if at this time, if You are skilled and can solve problems quickly.

In fact, it is not necessary to develop in the direction of architects. Programmers rely on technology to live. Only by constantly learning new technologies and new things can they keep up with the development of the Internet. These are just personal opinions. You are welcome to comment and pay attention, or tell us what the architect you understand is like.

If you are interested in Java distributed, high concurrency, JVM, high performance and other technologies, you can come to my Java exchange group: 675047716. There are Alibaba Daniels in the group and you can share your experience together. In addition, the author has some recorded Internet interview videos such as BAT, which can be shared with everyone for free.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325464115&siteId=291194637