After five years of graduation, from a monthly salary of 3,000 to an annual salary of one million, what core skills have I mastered? (Recommended collection)

Hello everyone, I am Glacier~~

Many readers asked me in private messages that my time is not short, and as my working years continue to grow, I feel that my technical level is seriously inconsistent with my working years. I want to change jobs and change to a new environment. I feel that my abilities are not up to the standards of the company I like. Even if I submit my resume, no one will notify me of the interview. In this way, I was messing around with the original company day by day. After a long time, I felt that I was abolished. It was a vicious circle.

How to break the game?

First of all, if you think you are a genius programmer, then you can not do what I said, because you are a genius, you can reach or even exceed one million in minutes. If you think you are just an ordinary person, well, continue to look down, I believe it will help you.

Insert picture description here

How can we break the deadlock that is seriously inconsistent with our technical level and working years?

First of all, the most important thing is mentality . Why do you say that? Because of the Internet development work, the pressure on programmers is actually quite large. In the high-intensity daily work, we need to face our work with a good attitude. Secondly, it is to learn to release the pressure, release or relieve the pressure in one's heart in the right way.

Insert picture description here

Secondly, the key point is that you have to ask yourself from the bottom of your heart whether you are interested in your current job. In fact, we all know that as long as we are doing something we are interested in, we will get twice the result with half the effort. If it is necessary to do something for some reason, it will often be a lot of energy invested, and the effect is often not good. Great, this is what we often say about getting twice the result with half the effort.

There are often friends who send private messages to me on WeChat: Am I learning Java? Or learn Python? Which one is popular? Which one is better to find a job? How about learning big data? Is big data already saturated? This series of questions, in fact, I have seen these questions from my friends, but I don't know how to answer them. why? In fact, these problems should be clear to all my friends: as long as you continue to study hard enough, you can find a good job in everything you study.

In essence, for those of us who are engaged in technology, the increase in age is actually not as terrible as the outside world says. What is really terrifying is that your age does not match the depth of your technology. If your age does not match your technical depth, it is difficult for you to find a job that satisfies you. Just imagine, if you have been working for 5 or 6 years, and you can do the work you have done even for one or two years of work experience or even fresh graduates, why does the company require you to do it? Will you support you? The company wants to be profitable, and profitability means to make money. How to make money? Cost saving is a way to make money, so sorry, you will be eliminated.

Therefore, on the road of technology, you also need to choose a direction that interests you. For example: Java, Python, big data, cloud computing, cloud native and so on. The next step is to study in depth. You know: no matter how awesome the technology is, it can't be worth stupid persistence. As long as you persist, there will be no skills you can't learn.

In the process of learning, you must be clear about what you are learning, and remember not to half-hearted. Don't learn Java today, and want to learn Python tomorrow. Be sure to set a goal for yourself and split the goal into a daily learning plan.

What to learn?

After adjusting our mentality, let's take a look at what we need to learn.

Lay a solid foundation

First of all, we must consolidate our foundation. For example, you have an in-depth understanding of the Java collection framework, multithreading and concurrent packages, IO/NIO, JVM, memory model, generics, exceptions, reflection, etc. It is best to read the source code to understand the underlying design.

Insert picture description here

For example, general interviews will ask about knowledge points such as ConcurrentHashMap, CopyOnWrite, thread pool, CAS, AQS, virtual machine optimization, etc., because these are absolutely important to Internet companies. Moreover, most people can't pass this level, and they complain that these are useless, why do they have to interview.

Here, I will give you a real case of the project I have experienced. Before, when my company was working on a high-concurrent power generation project, a development classmate used the default method of creating a thread pool in the project, which led to the use of the default unbounded queue in the thread pool, which was used in the remote service. Under abnormal conditions, the memory soars. Finally, the problem was located by troubleshooting the source code, and the problem was solved by modifying it to a bounded queue.

Just imagine, if you don’t even know the thread pool, how do you play? To give another example, due to a misunderstanding of ThreadLocal and using it for thread-safe control, real thread-safety has not been achieved. At this point, how would you solve this problem?

Therefore, the foundation is very important, and we must have a solid foundation. The high-rise buildings rise on the ground, and the superstructure will be stronger only if the foundation is solidified.

In-depth knowledge of Internet technology

Regarding this point, we need to start from the bottom, at least you have to have a deep understanding of MySQL, Redis, MongoDB, Nginx, Tomcat, RPC, JMS, Dubbo, SpringCloud, SpringCloud Alibaba, performance tuning, Netty, service registration discovery, service governance, Knowledge of various middleware, Internet engineering, concurrent programming, distributed, microservices, cloud native, etc.

Insert picture description here

You have to ask how much you need to understand. Here, I can give you a few examples: First of all, for MySQL, you need to know the common parameter settings, how to choose the storage engine, and you also need to understand the common index engines and know how to choose. . Know how to design tables, how to optimize SQL, and how to tune according to the execution plan. Master how to do the design and optimization of sub-database and sub-table. Generally, the databases of Internet companies are separated from reading and writing, and they are also split vertically and horizontally, so you need to master more or less these.

Then Redis and Mongodb need to understand the principle and need to adjust the parameters.

Nginx and Tomcat are almost all the necessary web servers for JAVA Internet development. This may have something to do with the choice of Ali's technology stack.

As for RPC, there are more. You must understand various network protocols, serialization technologies, SOA, etc., and you must have an in-depth understanding. Now the widely used RPC framework is dubbo in China. Friends can go to Dubbo's official website to learn, or download the source code from github to learn.

As for the others, you need to study it by yourself. In short, mastering them will do no harm to you.

Cultivate hard core ability

The hard core ability I am talking about here refers to: programming ability, programming thinking, algorithm ability, architecture ability, design ability, communication ability, tuning ability, system control ability, industry influence.

Here, I will simply say that in addition to the basic parts and the skills that need to be mastered in Internet technology, there are a few more that must be mastered, that is: programming ability, programming thinking, algorithm ability, architecture ability, design ability, communication Ability, tuning ability, system control ability, industry influence.

Insert picture description here

I don’t think it’s good to evaluate programming ability, but it’s easy to sort a 5000W user by name and age. Ask you about AOP and IOC. At least you have to be clear. The design pattern does not say that you have used each of them, but you can understand a few. For algorithms, you need to master basic algorithm knowledge. In fact, when developing a system, many places need to consider the use of algorithms for implementation. Some friends think that they are doing business development, and they don’t need to use algorithms and don’t need to learn algorithms. In fact, this kind of thinking is wrong! !

Then there is the architectural ability. This kind of system does not mean that you are required to design a system that is more powerful and highly concurrent. At least it allows you to make a spike system. The design of anti-request can be quickly completed without pits.

Finally, we must improve our system design ability, communication ability, system tuning ability and system control ability, and gradually enhance our industry influence!

Okay, let’s stop here today. I’m Glacier. If you have any questions, you can leave a message below, share technology together, advance together, and enter the big factory together. I will recommend some book lists to everyone later. If you also want to have an annual salary of one million or more after graduation, please leave a message below and let me know what you think~~