Get answers and suggestions for various questions from here

Ali P8 architect talks: Java programmers advanced architects three levels, which one are you in?


In this age of Internet traffic, Java is the most widely used language for back-end services, and a number of new frameworks have been created, including HBase, Hadoop, MQ, Netty, SpringCloud, and so on.

Some unicorn companies and well-known big manufacturers such as BAT have increased their demand for Java talents year after year, but at the same time , the requirements for talents are getting higher and higher. Interviewers often look at the following questions:

  1. Talk about your principle of the JVM, how to reduce the situation of Full GC?
  2. What techniques are used to optimize for high-concurrency scenarios?
  3. Compared to relational databases, where is the advantage of NoSQL, and in what scenarios do you use it?

It can be seen that for developers with 2~5 years of work experience, more attention is paid to some projects with in-depth practical experience. However, many students are immersed in business development in the first few years of their technical career, ignoring the combing of system knowledge and the expansion of technical horizons. Day after day, many students thought that this was the whole of technology, and also lost the in-depth discussion of technical details in repeated manual labor.

Every programmer is pursuing a sense of accomplishment, and the best way to achieve a sense of accomplishment is to make a breakthrough in technology.

Take the plan of 5 years before work as an example, at least three levels must be broken:

Keep improving the code

When we first started working, we complained that business needs didn't challenge technology. I felt that so much knowledge I learned at school didn't work.

In essence, this ignores the essence of technology development. Technology development is an engineering project, and the most important aspect of engineering project is the detail control, which is the quality of the code, such as:

  1. Does the code follow the statute? Is the interface design free? Are the test cases all passed?
  2. Can a full screen if-else be replaced with a reasonable design pattern? Have you followed the SOLID principle, the KISS principle?
  3. Have you considered changing the complexity of the code with more reasonable data structures and algorithms to improve the performance of the operation?
  4. How likely is the code to issue a bug, can it be reduced?

This is the foundation of the programmer, basically the work to be achieved in about 1 year. Reading at this stage is a better way to improve, such as: "Java programming ideas", "effective java" and so on. However, it should be noted that in the process of reading, you must think about whether you can use the experience in the book to improve the code you write, and apply it to the real thing, such as seeing final and static, and think about whether it is reasonable in your own code.

In addition, you can also look at some common open source frameworks, if you are using the Spring framework, etc., then a good knowledge structure:

Jump out and take the initiative to understand the whole picture

After the foundation is firmly established, it is necessary to actively break through the comfort zone and constantly expand its technical vision to achieve a breadth.

This step is more difficult because many students will be led by the company's technology and business. For example, the company's current business scale determines that technology does not require distributed technology, so many students will not think about how large if it is large. Use distributed technology to solve this problem.

how to solve this problem? In addition to finding a larger business, always keep a habit of thinking out of the current level and environment. For example, if you only use a relational database, have you ever thought that the data will always be generated? How to quickly retrieve and save when you reach the TB level?

In addition, the whole picture of technology also includes the relationship between various technologies, you use Dubbo, then what is the relationship between Duboo and Netty, why use Zookeeper, what is the relationship with Spring Cloud? If you can rationalize the complicated technical relationship while learning new technologies, you will have a small sense of the mountains.

To reach this level within 2 to 3 years of work, the 30w annual salary is not far from you. If you are interested in high concurrency and distributed technology, the following picture will help:

Do not build the wheel, provided that you know the internal structure of the wheel

If you say that the second step is to increase the breadth of your knowledge, then building a wheel is to increase your technical depth. By building a wheel, you can truly grasp the ins and outs of technology. Many people believe in "do not make wheels", seemingly cost-effective words, but do not know that this sentence has a premise, that is, "you have to know the internal structure of the wheel", otherwise it is self-paralysis. Next, we need to select one or several aspects to study in depth and build our core competitiveness.

For example, Message Queuing is an important component of a high-concurrency distributed system that functions as a peak-filling and system decoupling. We use how fast consumers can get data to see how thinking is step by step:

  1. First, if the consumer wants to get the data in time, is it necessary to establish a long connection? How is the implementation of long connections?
  2. Is the data sent to the consumer through push or pull, and what are the drawbacks?
  3. If the consumption fails, what could be the cause? If it is caused by network reasons, how to solve it?

These problems will be exposed in the process of making your own wheels, thus deepening your understanding and technical depth. A programmer with technical depth is a soul . The big factory is also willing to pay for the interesting soul. At this time, it is not only the salary level, but also the broadness of the promotion and development prospects.

Developers who have made a difference in the Java language have experienced the above three levels. But unfortunately, due to the external environment and its own limits, most Java developers have only stayed in the first level, losing the in-depth discussion of technical details in day-to-day physical labor. Lost the bargaining in the promotion and salary negotiations.

How to transition to the second and third levels? In addition to the above, I would like to give you two personal suggestions:

1. Broaden your horizons, learn to look at the problem from a global perspective, and be brave enough to challenge the problems in others' eyes.

2. Continuously improve your learning ability. Although many people leave their jobs on the grounds of "can't learn anything in the company", you must know that the company's purpose is to make a profit. Under the premise of profit, the company will try its best to train you, but more often, it will depend on itself. People with weak learning ability are useless everywhere.

If you still feel a bit stunned, it is better to talk to a senior architect with years of Java development experience.

Enhancing architectural cognition is not a one-time process, it is inseparable from deliberate learning and thinking. This has a video from the level of structural philosophy to share with everyone. It is the six tutors in the Tencent classroom to enjoy the classroom, combing their years of architectural experience, preparing for the latest recording in the past one year, I believe this video can Bringing you different inspiration and gains.

(The video contains the following)

Reader sharing

Friends who feel good can like the thumbs down in the lower left corner, and share some free information (including videos, courseware, interview topics, study notes, etc.) on the official WeChat public account, where there will be technical dry goods every day. , technology trends, careers, industry hotspots, workplace fun, and so on, all about programmers' content sharing. More massive Java architecture, mobile Internet architecture related source video, interview materials, e-books will be released free of charge on April 28. The learning resources are rich and practical, and friends in need can pay attention to it. Scan the QR code below to pay attention to the wx public number for free.

Resource base camp

Java architecture data

Java source code analysis, to a variety of framework learning, and then to the actual project, including but not limited to: Spring, Mybatis and other source code, Java advanced, Java architect, virtual machine, performance optimization, concurrent programming, data structure and algorithm.

Mobile Internet Architecture Information

Android advanced, Android architecture, APP development, NDK module development, small program development, WeChat development.