An in-depth thinking triggered by job requirements for recruiting technical experts

An in-depth thinking triggered by job requirements for recruiting technical experts

  • The greatest virtue of a good programmer is laziness
  • It's better to teach you to fish than to teach you to fish
  • Wang Zhai doesn t teach you skills, he only teaches you skills

Author: Wang fried | [adhere to 1000 Pian original]

2019.12.11 Article 58 original

Like first and then look at is the traditional virtue of technical people

About King Fried

A programmer who understands astronomy

With 8 years of experience in first-line major factories, and a wide range of interests, welcome to play and learn with me, and face the sea from today.

Our motto: " Study hard, otherwise others will just point to your nose and say, "Look at that person, there is nothing good but handsome." "

Closer to home

The pattern determines everything, thinking determines success or failure | Why did you write this article?

At 22:00 Beijing time, I never thought of the urge to leave work. I dedicated myself to the great project of programmers changing the world. I was in the most high-end office building of the Wangjing generation. The stars outside the window were dazzling, colorful, bright, bright, dazzling, radiant, and illuminated. Qi Ming, the twilight is full, I really can't find an accurate word to describe this beautiful city, I can only sigh: "Chicken you are so beautiful . "

I saw a job posting in the company's highest-end 1,000-person technology group. This job posting aroused my attention, so I came up with the article "In-depth thinking triggered by a technical expert recruitment requirement".

Recruitment requirements reduction:

Join us, you will participate:

  1. Build a large-scale distributed system and create a new generation of infrastructure platform in the Internet development field based on cloud native and serverless technology
  2. Create a complete set of development frameworks that can support various complex business scenarios, have high availability, high performance, and high scalability, from software design to online operation and maintenance, throughout the entire development life cycle;
  3. Provide product solutions with all-round three-dimensional monitoring, high-availability disaster tolerance, and software development best practices;

job requirements:

  1. Familiar with the Java language, and have experience in the design and development of large-scale distributed, high-concurrency, high-performance, and high-availability systems;
  2. Familiar with Spring, Spring Boot and other architecture designs, core functions, code-level understanding of the main process, and the ability to modify the framework;
  3. Familiar with CNCF ecological technology, such as Service Mesh, Prometheus, Service Catalog, Knative, etc.;
  4. Familiar with the architecture design and core logic of mainstream web containers such as Tomcat, Jetty, GlassFish, etc., and have code-level understanding and modification capabilities for some components;
  5. Familiar with the basic knowledge of Jvm, such as class loading, concurrency principles, etc.;
  6. Proficient in design patterns, can write elegant code, and can perform efficient refactoring;
  7. Pay attention to code quality and have a good Test Driven habit;
  8. Possess the research ability of complex requirements and technologies, be good at demand decomposition and technological breakthroughs, be good at team communication and collaboration, and have affinity.

Thinking determines success or failure:

Regarding the content of the job requirements , I will share my thoughts, taking only the simplest Article 1 and Article 2 as an example.

Article 1: Familiar with the Java language and experience in the development of large-scale distributed systems. Needless to say, this requires a solid foundation and nothing to say. As for the experience of distributed system development, 5 years ago, I could find a job with only one Java/SSH/M. Now the world is very different. If you don t understand distributed system, I m afraid you will switch to food delivery in 2020 , brother. , Is the battery car resold?

Article 2: Have a code-level understanding of Spring xxx. Why do you want to read the Spring source code? Do you really need to modify the Spring source code in your work? What are the benefits of reading the source code.

From the analysis of the job level range (p2-2 to p3-2), after all, this is a post with an annual salary of 30w. This requirement is not excessive. It cannot be lower, and no offer can be made even if it is lower.

What did I learn from the Spring source code, Wang Zhi teaches you how to fish

1. Learn design ideas from Spring:

Spring uses the concept of inversion of control to solve the problem of strong coding dependence. I don t want to change a class, and the classes that depend on it also need to be changed. Furthermore, I understand why microservices are popular. The answer is decoupling . Spring can solve the decoupling so perfectly.

Through dependency injection and AOP, I learned the idea of being lazy, such as logging, authentication, and many places need to use code. In the era when I didn t understand spring, I could only copy and paste these disgusting codes everywhere, and now I don t anymore. You need to copy and paste, and aspect-oriented programming will help you get it all done.

2. Learn design concepts from Spring:

Interview use Interviewers always like to ask: What design patterns do you know? Does SOLID understand?

SOLID are: Single Responsibility Principle, Open and Closed Principle, Richter Replacement Principle, Interface Segregation Principle, and Dependency Inversion Principle. What is this mess? If you understand these design concepts, you will find these principles everywhere in the spring source code. Reading the Spring source code, it is the first time to truly understand SOLID.

For example, inversion of control, dependency injection, and AOP correspond to three spring jar packages: spring-beans, spring-context, and spring-aop. Each package is independently responsible for the realization of a core function, and it is the first time to understand the single responsibility principle.

3. Learn design patterns from Spring:

Spring in BeanFactoryor ApplicationContextused to create bean object used to manage objects Bean factory model used in the program, for the first time to know how to write code with the Factory pattern.

Through the BeanFactorysource code, I got what delayed injection is. It will only be injected when the program uses a certain bean. Compared with BeanFactorythat, it will take up less memory and the program will start faster. I want to make the system faster. Designed this way.

Through the annotation: @Scope(value = "singleton")I got what is called the singleton mode ,

##Interview car accident scene

I still remember that in the first few years I interviewed a company called , the first question the interviewer asked me was to write a double-check singleton mode.

public class SingletonClass {
private static SingletonClass INSTANCE = null;

private SingletonClass() {}

public static SingletonClass getInstance() {
if (INSTANCE == null) {
synchronized (SingletonClass.class) {
if (INSTANCE == null) {
return INSTANCE;

I wrote to him in less than a minute. This is what I learned from the Spring source code. I also asked me why the synchronized package is SingletonClass.class instead of a method. I explained to the interviewer what an atomic operation is and: new SingletonClass()in virtual What exactly did it do in the machine.

I also told the interviewer about the application of double-check singleton mode in Spring. Srping cleverly realized the singleton registration form through ConcurrentHashMap.

Having said this, the interviewer will not ask me any questions about Spring anymore. As soon as the interviewer turns to ask the JVM source code, which is the fifth requirement of the above post : Familiar with the basic knowledge of Jvm, will you lose too much? I dug a hole for myself?

Do you think the JVM source code can stump me? My king has n't played yet.

Don't digress, continue to talk about the Spring source code

Through AOP (Aspect-Oriented Programming: Aspect-Oriented Programming) I learned the proxy model .

I learned the observer pattern through ApplicationListener .

I learned the adapter pattern through AdvisorAdapter .

There is also how Spring solves the transaction problem, and how Bean solves the circular dependency problem.

There are many more.....

Dear knights who read my article, if you don t click a like and forward it to the circle of friends , I m afraid I won t be able to write it anymore.


Have an attitude, and be in awe of the code.

Next preview

More than 2000 reads I wrote the JVM source code? You have the final say. If you don t understand the job requirements above, you can ask questions. Backgammon lighters, where they won t be.

After all, the beginning of the article is a post with an annual salary of 30w

Great God also read these articles

  1. IT elites who have not been eliminated in 2020 will look at these 14 world-renowned websites
  2. Wang Zhi vomits blood to sort out 60 Redis interview questions, the most complete in the entire network
  3. A code farmer with a monthly salary of 30,000: What's wrong with screwing at work?