Ali P8 architect takes you to java architect-how far are you from architect?

Software architects play an important role in the entire software development process, and their responsibilities or concerns are constantly changing as the development process progresses. Summarize the following points.

In the requirements phase, software architects are mainly responsible for understanding and managing non-functional system requirements, such as software maintainability, performance, reusability, reliability, validity, and testability, etc. In addition, architects often Review the requirements put forward by customers and marketing personnel, and confirm the design put forward by the development team;

After the requirements became more and more clear, the architect's focus began to shift to the organization's development team members and development process definition;

In the software design phase, the architect is responsible for the design of the entire software architecture, key components, interfaces and development policies;

In the coding stage, the architect becomes the consultant of the detailed designer and code writer, and regularly holds some technical seminars, technical training courses, etc.;

As the software begins to be tested, integrated and delivered, integration and testing support will become the focus of the software architect's work;

At the beginning of software maintenance, software architects start to make decisions about whether new functional modules should be added to the next version of the product.

There is no shortage of programmers in China, but senior architects. Let’s take a look at the salary comparison between the two to know the gap between the two:

 

 

But why is the number of architects so small under such a huge base, and what's the difference? For ordinary programmers, the main thresholds for becoming a senior architect are as follows:

1. Wrong learning method. In today's rapidly changing technology, whoever learns more knowledge per unit of time and whose learning method is more efficient will gain a stronger competitive advantage. Many programmers still use school learning methods in their work, which is very inefficient. The company is not a school, and the learning method of gnawing books is no longer effective.

2. Complete knowledge system. Without forming a systematic knowledge structure, the most important thing is not knowing which technologies need to be mastered, frequently stepping on pits when learning, and ultimately wasting a lot of time.

3. Awareness of programming. The essential difference between top programmers and mediocre programmers is the way they think when they encounter problems. This is the so-called top programmer thinking, a way of thinking that solves problems efficiently. This way of thinking is not something that can be learned by reading a few Java books, but it needs to be summarized and refined after a large number of actual projects.

4. Poor learning environment. Many programmers have a poor learning environment. They often work overtime in the company. After working for a few years, they find that apart from being more familiar with the company's business, they have not improved their abilities, or basically do not study on weekends, but go out to play. With such a poor self-control and learning environment, it is difficult to make a big improvement in ability.

Each of the above four points is very difficult to achieve, and it is precisely because of this that there are many mediocre programmers, but architects are rare.

So how can we overcome the above four points and become a qualified Java architect?

As the saying goes, "I haven't seen a good program, how can I write a good program?" Similarly, you can also say "How can you become an architect if you don't understand the ability and work of an architect". If you have not contacted a top architect, how can you? Know in which direction you want to work? Therefore, the best way is to find a top architect to teach you "efficient learning methods", "complete knowledge system" and "correct knowledge of programming", let him urge you to learn and create for you "Good learning environment".

But Daniel is very busy, it is impossible to open a small stove for you alone, let alone a small stove for you every day; and in a team, if Daniel often opens a small stove for you, it will inevitably cause other team members I personally think that if the big cows in the team are really interested, it is best to give the team more training. However, everyone who has undergone training knows that preparing for a training is very time-consuming. At least 2 hours of courseware and materials (not fragmented time), and 1 hour of explanation. It is very high for the big cows to do training once a month. Frequency.

Because of the first reason, when looking for a big cow, they always ask questions or discuss them. Because it doesn't take much time to answer or discuss questions, and it depends more on experience and accumulation. In this case, the big cows are very happy. After all, influence is an important indicator of big cows. But also pay special attention: if you often ask about knowledge that can be easily found in books or google, the big cows will be very impatient, after all, time is precious. Netizens often ask me questions such as "How to configure the -Xmn parameter of jvm". I always answer "Please go to google directly" because there are too many such questions. If you don't learn the system, each Asking all the time is a waste of time for yourself and others.

There are not many big cows, and it is unlikely that every team will have a technical big cow. It can only be said that there will be people in the team with a higher level than you. Even if he opens a small stove for you every day, you can only improve to his level in the end; However, if it is a cross-team technical expert, due to work arrangements and assignments, there are relatively few opportunities for direct consultation and counseling. It is unlikely that you will become a technical expert by participating in several trainings of the expert.

Therefore, if you want to become a technical expert, you must first understand the principle of "mainly relying on yourself". When appropriate, you can improve yourself by consulting or discussing with him, but most of the time you still have a systematic and targeted approach. Promote.

Since a java architect, you must first be a senior java engineer, proficient in using various frameworks, and know the principles of their implementation.

The principle and tuning of the jvm virtual machine, knowing the jvm allows you to write better-performing code;

Pool technology, what object pool, connection pool, thread pool, java reflection technology, technology necessary for writing framework, but there are serious performance problems, alternative java bytecode technology;

nio, it is worth noting the characteristics of "direct memory" and usage scenarios;

java multi-threaded synchronous and asynchronous;

Understanding the implementation principles of various collection objects in java will allow you to choose the appropriate data structure when solving problems and solve the problems efficiently. For example, the implementation principles of hashmap are not clear to people with more than five years of experience. What is the performance problem during expansion? If you don’t figure out these principles, you will not be able to write efficient code, and you will think that you are doing it right. In short, the more basic things are more important. Many people think that they will use them to write code, but they just know how to call them. It's just api, it's far from being able to use it.

Proficiency in using various data structures and algorithms, such as arrays, hashes, linked lists, sorting trees, etc., is either time for space or space for time. There are a lot of things to expand here, and some application experience is required. , Used to solve various performance or business problems.

Familiar with linux operating system, essential.

Familiar with the tcp protocol, the whole process of creating a three-way handshake for connection and a four-way handshake for disconnection. If you don't understand, you cannot 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 can't figure out the life cycle of session and cookie and the relationship between them.

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

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

Distributed caching technologies memcached and redis are necessary to improve system performance. In a word, put the content on the hard disk into the memory to speed up, and by the way, I will mention an algorithm consistency hash.

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

Database design ability, mysql essential, the most basic database tool, free and easy to use, its basic parameter optimization, slow query log analysis, master-slave replication configuration, at least half of mysqldba. Other nosql databases such as mongodb.

There are also queue middleware. For message push, you can first write the message to the database, push it to the queue server, and then the push server will go to the queue for processing, so that the message can be put in the database and queue and directly feedback to the user. The push process is performed by the push server and queue. Server completion, benefits of asynchronous processing, alleviating server pressure, and decoupling the system.

What skills do you need to become an architect?

Architects think about the overall situation, how to organize your system to meet business requirements, performance requirements, scalability, extendability, and compatibility. The things that may be involved include everything from hardware to software.

A qualified architect must be able to endure loneliness. When colleagues are constantly playing glory and you can only keep learning, you are stepping on the top position and overthrowing the "shit" architecture designed by yourself before countless times. It was made by working overtime the next day and night.

Architects must not only know the technical implementation details, but also have project management, design theory, performance optimization, and proficient use of various tools to provide technical support for the company's various businesses, from front-end to back-end to database, operation and maintenance, where Where do I need to go, I need a good mouthful to lead my colleagues in sleepwear.

If you need a more detailed map, click here to get it for free!

1. Multithreading and high concurrency

2. Case-based practical guidance for JVM tuning

3. Analysis of operating system principles that are often asked


4. Interpretation of network principles from the bottom up

5. Case-style in-depth analysis of 23 design patterns

6. Design a prototype


 

7. No dead angle analysis netty at the source code level


After learning this, you are not far from the architect!

Of course, if you want to become an architect, you don’t need to understand a lot of technologies. These are the basis and tools for solving problems. If you don’t know how to solve these technical problems, how can you find a solution? This is a necessary condition to become an architect.

The architect must also propose the lowest cost design solution to solve the problem according to the business characteristics and the performance requirements of the system to be qualified. A system with hundreds of users will have a small amount of access and a small amount of data. You can cluster and distribute it to others. It’s not advisable to build high-end servers for storage and high-end servers. So to summarize two points: The role of an architect is to meet business needs first, and the second lowest hardware network cost and technical maintenance cost.

If you want to become an excellent architect, you also need to foresee in advance the solution to the next stage of system architecture according to the business development situation, and take the upgrade and expansion of the architecture into consideration when designing the current architecture, so that it is easy to upgrade; otherwise, etc. The system bottleneck comes, if there is a problem, go to the solution, or the existing architecture cannot be expanded and thrown away and redo, or there are a lot of troublesome expansion problems, which will cause losses to the enterprise.

Dachang’s great god also has the following suggestions:

The first is to read more books, the most basic of which is similar to refactoring and design patterns. You need to know many small-scale problem-solving skills (if you are a director, you must first be able to Proficiency in translating a sentence into a set of shots), and the way these authors sort out the problem, in turn, ask yourself, if you are asked to write the book of design patterns, what knowledge points can you write? How do you organize these knowledge points? How to get everyone to accept your point of view.

After reading these two books, I highly recommend you to read "Enterprise Application Architecture Patterns" written by Martin Fowler and "Domain Driven Design" by Eric Evans. He can expand your horizons and focus on more meaningful issues. Rather than how many such meaningless questions there are in design patterns. There is a saying, "If you want to succeed, you must stay away from cheap entertainment." Similarly, for software engineers, if they want to make themselves stronger, they must stay away from cheap arguments (vim vs emacs, linux vs unix, redhat vs debian, these arguments are not of much value).

Secondly, you need to have an in-depth understanding of the actual characteristics of a large number of open source software. How big is the capacity? How to do high availability? How to expand? Is it easy to maintain? Part of this knowledge comes from various tests and experience articles on the Internet, and part of it comes from your own tests. As an architect, you are digging holes for each of your technical selections, digging holes for your development, testing, and operation and maintenance teams, and one of your roles is to ensure that your team can get out of the hole with your help Come out.

In addition, to solve many large-scale problems, you need to absorb experience from many peers. My personal experience is to read the slides related to the QCon and ArchSummit architecture twice a year. First, only look at the topic and the problem section, and think for yourself. What is the solution, and then look at the answers given by the speaker, in this way to refine your thinking and enrich your toolbox. One thing I want to remind is that because the software industry is far from mature, an architect will follow up on a project for a long time. This leads to an architect who can’t do several architectures in his lifetime if he doesn’t take the initiative to practice, at least relatively As far as structural engineers in the field of construction are concerned, we lack a lot of projects every year. The less structure you make, the easier it is for you to become complacent.

Finally, I hope you are a lifelong learner. No matter how busy you are, you must plan your study time. It may not be too much a week, just a few hours, but these few hours must be spent on the cutting edge, so it’s best What are the topics that take dozens of hours or more to figure out, and we must persist until the end of the topic. Don't just learn a little bit of this concept, and when you encounter new things, you will immediately change your direction. If you have such a habit, I suggest that you put your new ideas in a pool first, wait until you finish studying the topic at hand, and then go to the pool to find a new topic to continue learning. But regarding learning, this is a big topic, so I won’t elaborate on it here.

How to learn?

How to master effective learning methods? Refer to some good methods given by netizens to share. The effect is poor if you can't use them. What should I do?

E.g:

I learned the garbage collection of JVM, but there are relatively few stalling problems caused by FGC on the Internet. Even if it does, the restoration of the business is the first thing. It is unlikely that there will be problems on the Internet and then let everyone practice their hands. So how to practice these JVM knowledge and skills?

I also watched Netty and understood the principle of Reactor, but I can't participate in Netty development. How can I really master the asynchronous mode of Reactor?

I read "High Performance MySQL", but the online databases are all managed by DBA, and the database in the test environment feels like it is configured randomly. How can I verify these technologies?

The framework encapsulates the DAL layer. We don't need to worry about database access. How do we understand the implementation of sub-database and sub-table?

There are many other questions like this. I will share my personal experience here, which is actually three words: learning, trying, and teaching!

1)Learning

This is the first stage. You can read books, google, watch videos, or watch other people’s blogs, but you should pay attention to "systematization", especially some basic things, such as JVM principles, Java programming, network programming, and HTTP protocol. Wait, these basic technologies can’t be learned only through Google or blogs. My approach is generally to read a book and get a comprehensive understanding first, and then use Google, videos, and blogs to find some questions in a targeted manner. , Or some tricks.

2)Trying

This step is the key to answering the doubts of many of the students mentioned earlier. To put it in perspective, it means "doing yourself well", that is, trying to build some simulation environments and write some test programs by yourself. E.g:

Jvm garbage collection: You can write a simple test program by yourself, allocate memory and not release, then adjust various jvm startup parameters, and then use jstack, jstat and other commands to view the jvm heap memory distribution and garbage collection during the running process. This kind of program is very simple to write, the simpler is only a few lines, and the more complex is dozens of lines.

Reactor principle: Try to write a Reactor mode demo by yourself. Don't think it is difficult. The simplest Reactor mode code (including comments) does not exceed 200 lines (refer to Doug Lee's PPT). After I finish writing it myself, I will look at how Netty does it again, and my understanding becomes even more profound after comparison.

MySQL: Since the wired configuration can be referenced, you can directly ask the DBA to send us the online configuration (be careful to remove sensitive information), and learn directly; then build a MySQL environment by yourself and start it with the online configuration; you need to know many students I have used MySQL for many years, but I can't even set up a simple MySQL environment.

The framework encapsulates the DAL layer: you can use JDBC to try to write a simple implementation of sub-database and sub-table, and then compare it with the implementation of the framework to see where the differences are.

Use browser tools to view the implementation of HTTP caching, look at different types of websites, different types of resources, and how to control the cache; you can also write a simple HTTP server in Python and simulate returning various HTTP headers to observe and browse. The response of the device.

There are many other ways, I won’t list them all here. Simply put, you have to really try what you have learned in order to understand more deeply. The Indians have a proverb: I hear and I forget. I see and I remember. I do and I understand, and "try" can actually be relatively simple, many times we can do it ourselves.

Of course, if it can be used in actual work, the effect will be better. After all, the actual online environment and business complexity cannot be simulated by us by writing a simulation program, but such opportunities are hard to come by. In most cases, we still I really can only rely on my own simulation, and then when the real business needs to be used, I can do it at my fingertips.

3)Teaching

Generally speaking, after Learning and Trying, I can master about 70%, but to really master, I think we must be able to explain clearly to others. Because when we are speaking, we not only need to systematize a knowledge point, but also need to consider various details, which will prompt us to think and learn further. At the same time, people who watch or listen after speaking can have different understandings or have new supplements, which is equivalent to continuing to improve the entire knowledge and skill system.

There are many examples of this, including when I was writing a blog myself. I thought I had mastered it very comprehensively, but when I wrote it, I found many points that I didn’t take into account. I often saw it during the training in the group. Some students I wrote a PPT, but when you talk about it, when you ask or discuss it, you will find that many points have not been explained clearly, or some points are actually misunderstood. Writing PPT, speaking PPT, and discussing PPT, this process is all gone through, basically mastering a knowledge point is more comprehensive.

Finally, sprinkle some chicken soup. The so-called learning is to learn from the past, and to learn the new through reviewing the past. Even architects need to constantly learn and think. New technologies are emerging in endlessly, and the unwilling heart is the same.

Finally, share the learning materials with everyone, friends in need, click here to get it for free!


 


 

Guess you like

Origin blog.csdn.net/m0_46995061/article/details/114393080