Ape Creation Call for Papers|Abandoning papers to work, from Xiaobai to Ant engineer, my Java growth road

image.png

I. Introduction

1.1 Background

Recently, CSDN launched the ape creation essay, hoping that bloggers will write articles about their technological growth in a certain field.
Before, I also wanted to find an opportunity to write an article to record my growth process.
So, take this opportunity to write this article.
My Java Growth Road.png
While reviewing my own growth process, I hope to have some inspiration and help for some students' study and work.

1.2 Main content

After reading this article, you can learn the following:
unnamed.png

At the beginning, I made some important choices, such as the reasons for abandoning rationale for literature and abandoning literature for work.
My school and social recruitment experience, as well as some experience and experience as a job seeker and interviewer.
Share the working experience of pig farms, Youzan and Ants.
own writing experience and experience.
own game experience and experience.
Your own work experience and experience, such as how to quickly familiarize yourself with new projects, how to do projects better, and how to learn source code better.
Various activities outside of work.

2. Abandoning Li and Congwen - Youth Without Regrets

When I was in high school, I was recognized as the "little prince of mathematics" in the class. Many problems could be given a variety of solutions. English is also good.
At that time, the scores of science subjects were quite high (mathematics, physics, biology), and the scores of liberal arts subjects (English, geography, history) were also good.

Later, when I was divided into arts and sciences, most of my classmates, including my class teacher, believed that I would choose science without any controversy.
However, at that time, I had a crush on a girl. Although she could not say that she was very beautiful, she was very good-looking in writing, and her grades in some subjects (such as geography and English) were very good. Later, I learned that she chose liberal arts.
At that time, I always felt that if I chose science, it would be difficult to see each other again in the future (it's ridiculous to think about it now). In order to have a greater probability of being assigned to a class or an adjacent class, I resolutely chose the liberal arts.
jessica-ruscello-OQSCtabGkSY-unsplash.jpg
In the end, it was embarrassing that they were not in the same class or on the same floor.
Occasionally, I will have a physical education class on the same day, and thousands of people can recognize her at a glance, only her in their eyes, just like the portrait mode in a mobile phone camera, and then watch it silently, maybe this is what I like.
Later, I asked her for a copy of her handwritten English copybook. I made many copies and copied it repeatedly. As a result, my English font was very "delicate" and almost identical to hers. Although not together, I can still think of her when I write English words later, maybe this is youth.
Every note and every photo she sent are treasured.
Later, there were fewer and fewer interactions, and I always felt that she was very good, her appearance was not outstanding, her family background was also very ordinary, and she was not worthy of others.
In fact, sometimes if you like someone too much, you will feel that you are not worthy of others; if you like someone, it may not be perfect to be together, and sometimes you will feel very satisfied knowing that she is doing well.
Youth may have many regrets, but no regrets. It is these regrets that make youth more memorable.
So, yes, abandon the rationale and follow the text, because of a girl I once liked.

3. Abandoning literature to work - love can last a long time

3.1 Professional choice

At that time, there was no computer at home, and parents were not allowed to go to Internet cafes when they were in high school. When they saw other people using computers, they watched movies and played games, and thought that those who "played on computers" were bad kids.
chang-qing-8oPubUm97Cc-unsplash.jpg
After the college entrance examination, I secretly went to the Internet cafe and found that my classmates in the Internet cafe were watching movies and playing games.
In Internet cafes, I prefer to do some unusual things, such as listening to some sad songs, changing wallpapers for the computer, practicing Jinshan typing skills, etc.
Also heard about some hackers and thought they were cool.

When choosing a major in college, I really wanted to choose computer, but because of misunderstanding about computer, I still didn't choose computer major.
Due to my good English grades, I finally chose to major in English.

3.2 The fate in the dark

Our dormitory for English majors used to be the dormitory of the School of Computer Science. When we first moved in, we saw a CD with "Qilu Software Design Competition Works".
Soon after the start of the university, various clubs were recruited. The president of the IT Elite Association of the School of Computer Science brought some ministers to publicize it. They demonstrated on the spot how to "crack" computer passwords, and promoted the ability to enter the academic system to modify grades. The president took Shandong Province's The first prize of the software competition (at the time our school had at most one provincial first prize in this competition a year), etc., I was very envious and admired.
markus-spiske-gcgves5H_Ac-unsplash.jpg

Later, in the spare time of daily study, I often go to the library to read computer-related books and take computer-related courses as electives.
The deepest impression is that in "Computer Intrusion and Defense", the teacher demonstrated a pigeon intrusion software that could operate other people's computers, which was quite shocking.
I took "Java Fundamentals" as an elective. Most of the students who chose this course were students from the School of Computer Science. They thought it was too simple, and many people would not complete the homework seriously, but because I was more interested in it, I would complete it very carefully every time.
After buying a computer, I also taught myself CMD, easy language and C language.

I used one of Ali's products during college, and there was an activity called "Write to Myself in Ten Years".
One of the wishes I wrote at the time was to "enter Alibaba in ten years", and it finally came true.
insert image description here

3.3 A chance encounter with a mentor

Once the teacher of the Java elective class fell ill and asked my later mentor, Mr. Chen, to take the class for a day.
There were a lot of questions at that time, and I asked the teacher for advice. There was one problem that could not be solved on the spot, so I added QQ to communicate later.
Teacher Chen found out that I have a strong interest in computers and decided to guide me for free.
Now that I think about it, I admire the courage of the teacher. It is really hard to say whether an English major can learn programming well.
Since then, Java learning has gradually been on the right track.

The teacher will introduce what content you need to learn, how to learn it, and if you encounter problems, you will also help to solve them in time.
The computer I bought at that time had a very low configuration. There was only one 1G memory stick. It was very difficult to use Eclipse. The teacher gave me a few memory sticks and helped me install them.
I had no place to stay during the summer vacation, so the teacher let me live for free in the teacher's apartment house he bought near the school.
Of course, the teacher helped me far more than that.

After work, I will visit the teacher when I have time during the New Years and holidays, get together with the teacher, have a chat, and send the teacher some dolls from the company.
insert image description here

3.4 Forgetting to eat and sleep

There are many English courses during the day, such as English grammar, English listening, English reading, English writing, English translation, English speaking, and second foreign language Japanese classes.
I remember that in the evening after school, I would rush back to the dormitory as soon as possible, turn on the computer, watch the video of Mr. Bi Xiangdong on the Chuanzhi Podcast, and type the code while watching. Often unknowingly, it will be twelve o'clock in the evening or even one in the morning.
For some classes that may or may not be taken, they will choose not to attend and go back to the dormitory to learn programming.
glenn-carstens-peters-npxXWgQ33ZQ-unsplash.jpg

In the summer vacation, I wrote code in the teacher's apartment. At the beginning, it was still a rough house (similar to the picture below). The whole building has not been occupied by many people. On average, only one house is occupied on two or three floors. Fortunately, there is electricity and an elevator.
insert image description here

At that time, I slept with the quilt and mat on the ground, and I was a little timid.

If you encounter a problem, analyze it yourself. If you can't solve it, use Baidu. If you can't solve it, go to the technical group to ask some big guys for advice.
Sometimes I get stuck when I encounter a problem, ask everyone in the technical group, and some big guys will give some advice and help solve a lot of problems.

This is also an important reason why I keep sharing the solutions to the problems I often encounter in the blog.
Sometimes an article, an answer, may be able to help a student like me to avoid a lot of detours.

3.5 Questioning

There were also some skeptical voices in the middle. A high school classmate learned that I was studying computer and said, "There are so many students in the computer school. You, an English major, can learn computer, no matter how you learn it, you can't compare to others, what's the point? What? Waste of time!" and so on.

I also had a little self-doubt, can I really learn computer well? Actually I don't know.

But the computer makes me feel more "practical" and can feel "happy". Perhaps this is the so-called "for nothing" insistence.

Such as computer poisoning, know how to antivirus. The computer system of my classmates is broken, and they often ask me to install the system. During the English class, the teacher's USB flash drive was often poisoned, and the real files were hidden, which made it impossible to open the PPT lecture. I took the initiative to ask for a CMD command to restore and open the hidden files. Self-taught Android development, developed a simple text message sending software, using my girlfriend's photo as the background, I was very excited to be able to send text messages.

I also had a conversation with my other mentor, Mr. Shao, on this issue. He supported me to learn computer science. Many people did not find their own professional jobs after graduation, which also strengthened my confidence.

3.6 Small test

Later, I learned that there is a "Qilu Software Design Contest" (now renamed "Shandong College Student Software Design Contest") through the students of the School of Computer Science, and they signed up for it by chance.
image.png
At that time, as the captain, I formed a group with 3 computer students to register for the competition.
The school has arranged a special laboratory for the students participating in this competition. Most teams either do not come, or come back late and return early. Most teams do not come to the laboratory until a week after the competition ends.

In the middle of it, there was something that impressed me a lot. The classmates on duty had never seen me. They asked about the situation and found out that I was an English major. Although it was explained that I had signed up for the competition, I was still not allowed to enter the laboratory. Finally, other students in the team were allowed to enter the laboratory only after the coordination with the teachers of the college.

Most of the works in this competition, from the idea to the writing and testing of the core code, were completed by myself. Later, I went to Jinan Shandong Architecture University to defend, and finally won the only provincial first prize in the competition that year. And this competition is exactly the competition involved in the dormitory CD at the time of enrollment, and it is also the award received by the president of the IT Elite Association of the enrollment club.

3.7 Inter-professional postgraduate entrance examination

Although I have learned a lot of programming and won awards in some competitions, I am not confident enough and I am worried about employment.
Most of the requirements for computer-related positions are "computer and related majors", and they also want to accept formal computer majors.
Therefore, it was decided to take an inter-professional postgraduate study.

The advantage of inter-professional postgraduate entrance examination is that English is better, but the biggest difficulty lies in mathematics. Because English majors do not offer mathematics courses, they need to spend a lot of experience to learn mathematics, and they have not taken computer courses.
image.png
I mainly learned by watching New Oriental's videos and offline postgraduate training courses, and finally got a master's degree in software engineering from Hangzhou Dianzi University, completed the transition from English major to software major, and officially became a full-time computer college student. .

Fortunately, although I spent a lot of time learning programming in the university, I was able to learn in professional courses. I passed the fourth grade of English major and the eighth grade of English major. Passed CET 8). At the postgraduate level, you can get first-class scholarships every year, and the comprehensive score has always been in the top 5 of the grade.

Therefore, I quit writing to work because I am very obsessed with programming, the software is more "practical", and it can also bring me a certain sense of accomplishment.

4. My road to the game

4.1 Competition experience

Undergraduates mainly participated in the Shandong University Student Software Competition (provincial first prize), and graduate students participated in the "Challenge Cup" National Competition (National Third Prize), "National Postgraduate Mobile Terminal Application Design Innovation Competition" (National Second Prize), "National Postgraduate Smart City Technology and Creative Design Competition" (National Third Prize), etc.

When I participated in the Smart City Competition, I was fortunate to stay in the dormitory of Peking University for two nights, and I traveled many times on the campuses of Peking University and Tsinghua University, and I was very impressed.
image.png
One of the impressions: the food in the canteen of Peking University is very cheap.
image.png

4.2 Competition experience

The following is a summary of my own and my friends' experience in the competition, and I hope it will be helpful to everyone.

image.png

4.2.1 Reading and understanding requirements

Many students did not read the requirements of the competition carefully when participating in the competition, and finally got eliminated because of wrong questions or were given low marks because of ignoring the scoring rules.
Therefore, it is a very important premise that you must understand the "meaning of the question" to participate in the competition.

4.2.2 Analysis of the characteristics of previous outstanding works

Focus on the analysis of the characteristics of the previous first prize and special prize works.pexels-tima-miroshnichenko-5380642.jpg

For example, for some software competitions, especially undergraduate software competitions, the works of the first prize and the special prize have some commonalities:
(1) The creativity usually conforms to the current background of the era, such as energy conservation and emission reduction, environmental protection, all things interconnection, common prosperity, etc.
(2) There is a certain degree of innovation, algorithm innovation, gameplay innovation, business model innovation, etc.
(3) The code is highly readable, robust, and expandable
(4) The documentation is detailed, and the design documentation, test documentation, etc. are very professional and Detailed
(5) The supporting PPT is very structured
(6) The supporting video is well produced, which can highlight its own design highlights and technical depth

4.2.3 Select good teammates and join forces

In many competitions, there will be a phenomenon of "rubbing prizes". Only one or two people in a team are the most attentive, and other students are either not good at their level or careless.
Everyone participates in the game and try to choose good teammates to avoid the above situation from happening.
If you have the opportunity, you can choose to cooperate with students whose strength is equal to or even better than yourself. pexels-fauxels-3183150.jpg
This will not only have a higher probability of winning, but also the participation experience will be much better.

4.2.4 Frequently asked questions well prepared

What is the main innovation of your work?
What recognition or verification has your work received?
What is the monetization model for your work?
What are the highlights of your work?
What are the imperfections in your work? What are the future directions for improvement?
What if XXX? (Think of at least 5 "unexpected" situations)

4.2.5 Repeated polishing of PPT and repeated practice of defense

PPT needs to be repaired repeatedly and practiced constantly.
More pictures and fewer words; the content should be very structured and focused; the lectures should be tried and tested repeatedly in the audience, and the time should be set, and the connection should be smooth.
If you have the opportunity, you can ask the teacher to organize a mock defense and feel the atmosphere of the defense.

4.2.6 The attitude should be correct and the time should be guaranteed

Many students participated in the competition with an unorthodox attitude. They just wanted to claim the prize. When they needed to pay, they couldn’t find anyone. They were very positive when they received the prize.
Many students have good ideas, but they didn't invest enough time, and they didn't make them or they did it very crudely.

5. My way of writing

5.1 Why write?

thought-catalog-505eectW54k-unsplash.jpg

5.1.1 Teacher Recommendation

At first, the teacher Chen mentioned earlier recommended me to write a technical blog. It is recommended to write some learning experiences, record some problem-solving methods, and write about the understanding of a certain knowledge point, etc., and stick to it until now.

5.1.2 Programmer's Spirit

In fact, I mentioned earlier that in the process of learning Java, some articles on the Internet and a few reliable technical groups have helped me a lot.
Therefore, I prefer to summarize some of the pits I have encountered in the blog to help others take less detours. Sometimes my classmates and colleagues find my blog to solve a problem and tell me, I will be very happy too. Sometimes there are netizens who leave a message under the article and get stuck for several hours to see that my blog has been resolved, which also makes me a little gratified.

5.1.3 Teaching is learning

In many cases, you can teach others through easy-to-understand language, which means you truly understand the knowledge. When writing, you will check some references, and your understanding will be more in-depth.
image.png
Sometimes writing articles is not rigorous enough, and reading some friends' comments, you will find that your understanding of a certain knowledge point is not deep enough, and you can check and fill in the gaps.

5.1.4 Record the growth process

Sometimes I look through my blog to know what I am learning in each period. Blog is a good testimony to growth.
stairs-ga3bd200c4_1920.jpg

5.1.5 Meet more friends

Many good friends met through CSDN blog.

5.2 Main works

Now he is an expert blogger of CSDN, Alibaba Cloud developer community, and 51CTO blog.
insert image description here

Wrote "Unlocking the Thinking of Big Factory: Analysis of "Alibaba Java Development Manual", "Rereading the Classics: Exclusive Analysis of "Effective Java", two technical columns.
It mainly describes the underlying principles behind some regulations of "Alibaba Java Development Manual" and "Effective Java" from the perspective of methodology.

I have written the column "How to Get Big Factory Offers in Java School Recruitment Jobs" to help school recruiters understand the underlying logic of school recruiting, grasp the key points of school recruiting review, and share some interview skills.

Wrote the "Performance Optimization Methodology" technical e-book (directly search for "Performance Optimization Methodology Cangjingge"). This book shares its own thoughts on performance optimization; describes optimization ideas at technical and non-technical levels; technical aspects such as upgrading software and upgrading hardware; changing space to time, improving resource utilization, serial-to-parallel, utilizing space-time locality, etc. ; Describe the application of performance optimization in common technologies. Non-technical aspects such as cutting demand and improving user experience.

Many technical articles have also been published on Alibaba's internal ATA technical blog.

5.3 Writing Experience

insert image description here

5.3.1 The article should be structured

Articles should be able to be written in a certain order to make it easier for readers to understand.
It can be written in chronological, spatial and logical order.
unnamed(1).png
If you can use the 3W method to write, that is, first write what the knowledge point is? Then talk about why? Finally tell me how to do it.

Reference article:
"Structured Thinking, Keeping Your Work Organized"
"My Understanding of "Structured Thinking"

5.3.2 Articles should be differentiated

Now the articles on the Internet are the same. If the articles we write are almost the same as others, what is the point of our writing?
It can be a witty and humorous language style; it can be a beautiful and appropriate picture; it can be your own unique interpretation of the issue.

5.3.3 Pay attention to typography

Some classmates' articles are so messed up that they don't want to read them.
Some students bring a mind map at the beginning of the article, there will be appropriate pictures in the middle of the article, and the end of the article is a picture to guide attention and like.

5.3.4 In-depth principles and teaching people how to fish

When you write articles, don't just follow others' opinions, and don't just talk about phenomena but not principles.
Write an article, try to explain the principle as clearly as possible, let the people who read it know that they are willing, and be able to solve a class of problems by drawing inferences from one case.

5.3.5 Specialization

Try to cover a topic or a series as much as possible, so that readers can systematically grasp a certain technology by reading your article.

5.3.6 Kung fu in peacetime

I'm not a big fan of writing articles for the sake of writing articles.
When everyone solves a certain intractable disease in their study and work, they can write down their own analysis ideas and solution process.
In the usual work, if you see some bugs or failures, and a good solution to a problem, you can accumulate these experiences.
Usually there are some topics that I want to write about, which can be accumulated as the content of the material, and when I write, I will have a lot of thoughts.

6. My career path

6.1 School Recruitment and Social Recruitment

Over the years, I have experienced school recruitment and social recruitment.
The school recruited got offers from Meituan, NetEase, etc., and the company recruited Youzan and Ant Group.
pexels-andrea-piacquadio-3760067.jpg
The essence of school recruitment is to select students who are smart, have strong learning ability, and have strong communication and expression skills.
School recruitment focuses on schools, internship experience in famous companies, awards in large-scale competitions, high-level papers, etc.
For students from non-famous schools, if they want to enter a large factory, it is best to have a good internship experience or win awards in large-scale competitions.
The school recruits focus on examining the professional foundation.
The questions of the school recruitment meeting should be answered comprehensively and deeply. If you have no ideas, you will answer your own ideas. If you have no ideas, you will directly say no.
For more details, please participate in my CSDN school recruitment column: "How to get a big factory offer for Java school recruitment"

Social recruitment focuses on work experience, and usually select students with strong technical ability, rich project experience, understanding of principles, able to quickly do projects and solve problems, and have strong communication skills.
Social recruitment is ready for project-related issues, and you must understand the principles of common middleware, and be clear about your own highlights and shortcomings.

6.2 Candidates and interviewers

Worked as a job seeker and as an interviewer for a while.
The mentality of a job seeker and an interviewer is completely different.

I have also worked as an interviewer for a period of time before, and the interviewers selected candidates according to the company's interview standards.
After getting the resume, circle the resume, mainly look at the school, company, technology stack and project experience, ask some basic questions to ensure that the foundation is solid enough, also ask some middleware principles, and also ask about the highlights and difficulties of the project , how some places are designed, why they are designed this way, and what limitations are there.
Some common questions cannot be answered, and are usually labeled as "not solid enough"; if some functions can only be used and do not understand the principle, they are easily labeled as "insufficient technical depth". Many designs in the project are unclear, many designs cannot give convincing reasons, and are easily labeled as "inexperienced".

6.3 Pig Farm, Youzan, Ants

Next, let’s talk about the feelings of being in the pig farm, Youzan and Ant.
The most impressive thing about the pig farm is that the APP is more exquisite, the restaurant is free and there are many choices, and the food is very good. But the work is only equipped with a desktop computer, not a MacBook Pro, and everyone buys it by themselves.
IMG_20180407_115058R (1).jpg

You like it , the e-commerce-related technologies are very mature, and the microservices and the middle platform are all very good. "Family Days" (no overtime on Wednesdays, running at 6:00, usually most teams can run at 6:00 on Fridays) are also a feature. Java programmers will find that the MacBookPro is very convenient to carry around.

PS: I am also honored to be selected as the "senior representative" of the official website of Youzan School.
insert image description here

Ants , Java programmers will send MacBookPro, and you can also choose models with M1 chips. Like Ali, Ant has strict control over data security.
What impressed me most was that the technical atmosphere is very good, there are ATA technical forums, ant's own technical community, etc.; there are live broadcasts and video tutorials for various technology sharing; there are various code evaluation competitions, various code refactoring competitions, etc.; Unit testing and code review; there are various self-developed tools and platforms; Ant has many self-designed dolls that are very beautiful, and there are various customized gifts for holidays.
image.png

7. My work experience

7.1 Ability to work

7.1.1 About doing projects

About getting familiar with the project
Internship, school recruitment, and social recruitment, you need to get started with the project, so how to get started with the new project better?
(1) Look at the requirements documents, technical solutions and test documents, etc. If there are relevant documents, you must first understand them clearly, which will greatly help you understand the logic of the project later.
(2) Scroll down from the function entrance. Familiarize yourself with features. Find the UI interface corresponding to the project to be modified, which may be a WEB page, a mobile APP interface, or a small program interface, trigger related functions, and familiarize yourself with the core logic by viewing the core log, remote DEBUG, etc.
(3) Ask your classmates for advice. Some places are really unfamiliar, you can ask the people who participated in the test before or the corresponding test students. Usually you can share some snacks, please ask for some milk tea and the like, it will be easier to ask for advice later.

How to do projects better and reduce the probability of mistakes?
(1) Start with the end in mind and think about business value. Before starting a project, you must be deeply familiar with the requirements, and more importantly, think about the value of the project, and think about the problem with the end in mind. You may find that some designs can be optimized, and it is easier to target the project.
(2) Sharpening knives does not accidentally chop woodworkers. When working on a project, we must pay attention to design. When designing a plan, we should first focus on the whole and then the part, and fully consider all kinds of abnormal situations and expandability, which will reduce the probability of rework.
(3) When coding, try to follow various classic design principles, such as high cohesion, weak coupling, and the principle of reducing complexity. The six principles of design patterns, etc., and flexible use of design patterns to solve problems.
(4) Improve single test coverage and fully self-test. Be sure to fully self-test and make self-test records, covering not only normal use cases, but also various abnormal use cases. Pay attention to code review and try to find hidden bugs in the coding stage.
(5) Pay attention to the error log. When self-testing or testers are testing our functions, be sure to read more error and WARN logs. In some scenarios, the performance of the error page will be "as expected".
(6) Compare with the Master branch. By comparing with master, accidental modification can be avoided, code review can be done well, and change points can be better evaluated.
(7) Do a good job of code review. You can self-review your own code from the perspectives of functionality, performance, readability, scalability, and maintainability, and dialectically adopt it when you receive review suggestions from other students. For details, please refer to: "CodeReview's Correct Posture"
(8) Make a release plan. The various configurations required for publishing, the dependencies between services, and the order of publishing and rolling back should be clearly written.

7.1.2 About source code learning

image.png

[1] Many people do not gain much from reading the source code. What are the reasons?

  • Lack of overall thinking, lost in the details (such as jumping around while debugging the source code, and finally fainting)
  • Lack of thinking (learning without thinking is useless, thinking without learning is perilous!)
  • I don't know what to read when reading the source code (such as the design idea of ​​the source code)
  • Single perspective (such as problem solving, performance optimization, design pattern, each commit, unit testing, comments, etc.)
  • A single method (such as advanced debugging skills that you do not understand, timing diagram plug-ins that you do not understand)
  • Lack of output (will not be output as an article, cannot be told to others)

[2] What exactly does reading the source code read?

Purpose of reading : What problem is the framework designed to solve? What are the advantages and disadvantages compared to similar frameworks? This is very important to understand the framework.
**Reading comments:**Many people read source code and ignore comments. It is recommended that you pay attention to comments when reading the source code. Because of excellent open source projects, usually the purpose of a class, a function, the explanation of core logic, core parameters, and abnormal occurrence scenarios are written in the comments, which is of great help for us to learn the source code and analyze the problem.
**Reading logic:** The so-called logic here refers to the order of statements or sub-functions. We should pay attention to the order of the author's coding, understand why write A first and then write B, and what is the reason behind it.
**Reading ideas:** The so-called ideas refer to what design principles are reflected behind the source code, such as whether they are consistent with the six principles of design patterns? Is it consistent with high cohesion and low coupling? Does it reflect some kind of performance optimization idea?
Reading principle : Read the core implementation steps instead of memorizing each line of code. The core principles and steps are the most important.
Reading coding style : Generally speaking, the coding style of good source code is more elegant. We can learn coding conventions through source code.
Read programming skills : Whether the author has adopted a design pattern, or a programming skill that achieves unexpected results.
Read the design scheme : Reading the source code not only contains the specific code, but more importantly, the design scheme. For example, if we download the code of a seckill system/mall system, we can learn the password encryption scheme, the distributed transaction processing scheme, the idempotent design scheme, the solution to the oversold problem, etc. Because mastering these programs is very helpful to improve our own work experience, we can refer to the programs of these excellent projects when we make technical solutions at work.

[3] There are also many misunderstandings in reading the source code:

  • If you try a large open source project framework from the beginning, it is easy to lose confidence and give up.
  • There is no plan to read the source code, you can do whatever you want.
  • Looking directly at the analysis of the source code, directly at the writing method of the source code, lacks key pre-steps, that is, think for yourself first and then compare the source code.

[4] How to read the source code better?

  • I will use it first and then read the source code. If you can't use it at all, reading the source code will become empty talk. At least write some demos. If it takes a lot of time to write demos, you can go to GitHub and search for some examples to get started quickly.
  • Easy first and then difficult, step by step.
  • Look at the architecture first and then read the source code. You can first understand its overall architecture and its core principles through the framework's official documentation, and then look at the specific source code.
  • See the list of functions of the core class.
  • First look at the whole and then look at the specific details. For example, when learning the Spring life cycle, focus on org.springframework.context.support.AbstractApplicationContext the core functions refreshof , grasp the whole and then study the details.
  • To learn the source code from the designer's point of view. Reading the source code from the designer's point of view is an extremely important idea. It embodies the idea of ​​"guess first and then verify". When learning the source code, whether it is the overall structure of the framework, a specific class or a function, you must imagine how to design the framework, how to write the code of a certain class, and a certain function if you are the author. Then compare it with the final source code, and find the difference between your own ideas and the other party's, so that you will be more impressed with the source code and understand the author's intentions more in place.
  • Learn source code from the perspective of design patterns.

[5] What are some good tips for reading source code?

  • Learn the source code by commenting. Excellent open source project comments are very clear, which greatly helps us understand usage and understand design concepts.
  • Learn the source code through unit testing. Excellent open source projects usually have extremely high single-test coverage. If we want to learn a certain class, we can learn by running a single test and debugging a single test, and the effect will be very good.
  • Learn the source code from the entry.
  • Learn the source code with IDEA plugins. You can learn the source code better by generating class diagrams, sequence diagrams, etc. from the code.
  • Learn the source code based on issues. The source code is usually complex, you can start small, each issue usually only focuses on one problem, you can view the resolved issues to understand the cause and solution of the problem.
  • Learn the source code according to the submission record. You can see what this commit has done, how new features have been added or what problems have been fixed.
  • Follow the column to learn the source code. Some source code interpretation columns are of high quality, step by step, and follow the column to learn more systematically.

The space is limited. If you want to have a more comprehensive understanding of reading the source code, you can refer to a GitChat: "Do you really know how to read the source code?

7.1.3 Views on some issues

【1】About new technology

Some classmates want me to talk about my views on new technologies.
Many underlying principles are common. If we can have a solid professional foundation, such as operating systems, data structures and algorithms, computer networks, and databases, it is very solid. All kinds of middleware principles and common framework source code are all hated to read. Learning new technologies will be much easier.
It is necessary to evaluate whether a new technology needs to be learned. Even if you don’t study in depth, you will probably know what problem it solves and what the general principle is. When you really need to master it at work, you can learn it quickly.

【2】About DDD

DDD as a whole is a solution to reduce coupling by increasing the domain layer.
Any problem in computer science can be solved by adding an indirect intermediate layer.png
Among them, DDD includes two parts: strategy and tactics. Strategy is the understanding of various concepts and the division of domain models. Tactics focus more on the implementation of the domain model.
Due to the many concepts involved in DDD, various problems will be encountered when landing. Different people will handle some problems differently, and the cost of getting started is slightly higher.
Due to space reasons, the specific concepts and practices are not expanded here.
If you want to know more about the content, you can read related books and columns. Such as "Domain-Driven Design", "Achieving Domain-Driven Design" (Zhang Yi), "Deconstructing Domain-Driven Design", "Domain-Driven Design Essence", "Domain-Driven Design Practice" column (Zhang Yi), etc.

7.1.4 Other capabilities

Ability to troubleshoot problems . For example, use the dichotomy method to locate the front-end or back-end problem; restore the master code to determine whether it is a previous problem or a newly introduced problem; use source code analysis, code debugging, log analysis, Arthas and other methods to locate the problem.

Also master the ability to do PPT . It is necessary to be able to design the skeleton of PPT in a structured way, to be able to highlight the key points, to put the conclusion first, to have more graphics and less text, to clarify the highlights, key points, and difficulties, and to reflect one's own thinking and value.
To master good communication skills , you can read "Nonviolent Communication".
Also have good project management skills . Identify and resolve project risks in a timely manner.

7.2 Outside of work

7.2.1 DIY class

I have participated in the DIY class of the author of "Alibaba Java Development Manual" and "Code Efficiency" before.

The meaning of the DIY class:
First, Deeply Inspire Yourself
deeply inspires yourself
Second, Do It Yourself
practice to bring out true knowledge

image.png
In the first few assignments of the DIY class, the teacher emphasized that everyone should pay attention to "the ability to learn quickly", "the ability to learn how to learn", and "the ability to infer other things".
Lonely teacher mentioned the four parts of learning: remembering, understanding, expressing and integrating .
DIY is very rewarding, one of which is to learn technology and to go deep into the principle and know why.

For details, see: "The Lonely Teacher of Java Daniel in My Eyes"

7.2.2 Coding Competition

There will be many competitions for code refactoring and code bug discovery within the company.
I have been a contestant as well as a question maker.
binary-g144126b08_1920.jpg
I will actively participate in such competitions when I have time, which can improve the robustness of my code, and some competitions can also get good results.
As a contestant, I will carefully look for the hidden bugs of each question, and as a question maker, I will carefully examine each point, hoping to help everyone avoid similar problems at work through the design of the question.

7.2.3 Think Tanks

For many important technical courses within the company, think tanks are sometimes recruited, and they will actively participate when they have time.
When the think tank can learn the courses earlier, there are more opportunities to communicate with the bigwigs.

7.2.4 Code Evaluation

Participated in the company's first season code evaluation and won TOP50.
insert image description here

He also served as the public reviewer of the second season of code evaluation to score the codes of other students, and was rated as an excellent public review.
ANT9053_w4954.JPG
Comparing recognition: "Writing code is a work of conscience", "Excellent code has some commonalities".
Tweelet.png

7.2.5 Instructors

You will also participate in some lecturer training courses and learn some lecture skills. laptop-gbcc9464ab_1280.jpg
Now I have become a preparatory lecturer, and I will strive to become a formal lecturer as soon as possible.

7.2.6 Bling

Because of the relatively good job in mentoring newcomers and sharing technology, he also won two companies' "bling" awards.
insert image description here

8. Summary

Love can withstand long years, gentleness can withstand hard times.
If you love programming, you will try to improve in every way, and it will be easier to be tireless.
I hope this article can be of some help to your study and work.
If you have any questions, please feel free to communicate with me in the comment area.
I will also make further optimizations and modifications to the article in the near future.


It is not easy to create. If this article is helpful to you, please like, favorite and follow. Your support and encouragement are the biggest motivation for my creation.

This article is participating in the CSDN Ape Creation Call for Papers. If this article is helpful to you, you can like and comment to support me, thank you.


insert image description here
Welcome everyone to join my CSDN community: The road to becoming a Java engineer

Guess you like

Origin blog.csdn.net/w605283073/article/details/126825269