Interview perception: 3 years of work experience programmers should have skills

Because I have an agreement with my colleagues and LZ himself likes to summarize after doing one thing, so I have this article. Most of the content of this article is aimed at the entire programmer group. Of course, because LZ itself is developed in Java, part of the content is also aimed at us Java programmers.

Let me briefly mention that LZ is located in Hangzhou, and graduated in the 13th year of undergraduate education. Including the interview in Alibaba's B2B business department a year ago, there were a total of 6 companies interviewed (because LZ did not want to take leave, so he just went to other companies for interviews every night. , so there are fewer companies for interviews), 4 of them were successful, and the other two failed because:

1. In the interview of Alibaba B2B business department, two rounds of technical interviews were passed, and the last round of interviews was with the supervisor of the other party. , because I heard that basically 90% of the technical interviews were successful, so LZ also had no scruples in the conversation with the supervisor. He was speechless when asked by the other party many times. In hindsight, ambiguous answers are the most taboo in interviews. This failure also made LZ take every subsequent interview seriously.

2. Another failure was a small company, maybe 20 people, and the entire team was Alipay. It's amazing to come out and start a business. After the interview, LZ got to know more about it. The other party thinks that my basic skills are good, but the actual project experience is still lacking. Because the other party is a start-up company and needs people to get started, I am not particularly suitable for them at this time. Team

As for the other four successful companies, the interview evaluation of LZ seems to be quite high, but LZ also does not want to keep a running account, so I will not list the interview process of each company one by one. LZ mainly talks about being a job. Some skills that a Java programmer of about three years should have and some other personal insights.

About several stages of programmers

Every programmer, or every worker should have his own career plan. If you see that friends here do not have their own career plan, I hope you can think about your future.
LZ often thinks about his future, and sums up some things from his own thinking, as the first part to talk about. LZ believes that a programmer should have several stages (the following time is counted as an internship):

The first stage: three years
I think three years is the first threshold for programmers, and this stage will eliminate a batch of Not for people who write code. At this stage, we stepped out of the campus, entered the society, became a programmer, and officially moved from the content of books to real enterprise-level development. We know how to work in teams, how to use project management tools, how to control project versions, how to test and run the code we write online, etc. We have accumulated a certain amount of development experience and have a certain in-depth understanding of the code. It is a comparison The stage of pure Coder The

second stage: five years Five
years are the second threshold for distinguishing programmers. Some people will not study anything in their spare time except to finish their work in three years. These people will always be Coders, and those who are older are bound to be replaced by younger people ; some people in three years, in addition to writing In addition to code, he is also keen to study the details of various technical implementations, read many good books, write some blogs, and share technologies on Github. After five years, these people must have the ability to be technically independent and know their future. Development direction, from a Coder to a system analyst or an architect, becoming an indispensable figure in the project

team Stage 3: Ten years Ten
years is another threshold, changing careers or continuing to be a programmer on this node. If in the past few years, you have been determined not to change careers and worked hard for it, then at this point in ten years, some people will inevitably grow into a person who has a deep understanding of the industry and technology, and can start from scratch. A programmer who analyzes a product, such a person basically holds the most critical positions in the company, such as CTO, technical expert, chief architect, etc. This is definitely a glorious thing for him, of course, the boss is also financially. I will never treat you badly

To sum up the first part, I think that with the increase of your working years and your in-depth understanding of life and life, you should keep thinking about three questions:
1. Is it suitable for me to be a programmer?
2. Should I be a programmer all my life?
3. What kind of attitude do I have towards programming? Is it enough to use it or keep researching?
Ultimately, be clear about your career plan, take responsibility for your own plan and work hard for it.

About project experience
LZ often sees some other friends asking questions about project experience on the Internet. According to the feeling of LZ's interview, the interview mainly looks at a few points: project experience + basic technology + personal potential (that is, whether it is worth cultivating) .

Regarding the project experience, I think that the founder of Concurrent Programming Network, Mr. Fang Tengfei, said a very good sentence:
When introducing the product, the interviewer will examine the communication ability and thinking ability of the candidate. Most of our cases are a function of the product or A module, but even so, have you figured out the entire system architecture or product, and can introduce it clearly, why do you make this system? What is the value of this system? What are the functions of this system? What are the advantages and disadvantages? If you were asked to redesign this system, how would you design it?

I think that's enough of a generalization. Maybe you only work for one year, maybe you are doing insignificant modules in the project, of course, these must be your disadvantages and cannot be changed, but how to make up for this disadvantage, I will summarize a few points from the words of Mr. Fang:
1. Clear your What exactly does the project do and what functions does the project have
2. Clarify the overall structure of your project, and clearly draw it to the interviewer during the interview and clearly point out where to call from and how to use it
3. Make it clear that you The position and role of the module in the whole project
4. Make clear which technologies are used in your modules, and better, you can learn more about which technologies are used in the whole project
In the case that you can't change your working years, your own less convincing project experience (this must be a deduction item), you can make up for and improve the interviewer's goodwill to you to a certain extent in this way Sensitivity.

About professional skills After
writing the project, write the skills that a Java programmer with 3 years of work experience should have, which may be the content that Java programmers are more concerned about. I want to explain here that the content listed below is not something that everyone knows - but the more you master, the higher the evaluation and salary you can get in the end.

1. Basic grammar
This includes the role of static, final, transient and other keywords, the principle of foreach loop, and so on. In today's interview, I asked you what the static keyword does. If you answer static modified variables and modified methods, I will think you are qualified. If you answer static blocks, I will think you are good. If you answer static inner classes, I will think you are very good. , I will be very satisfied with the static guide package, because I can see that you are very keen on researching technology.

The most in-depth time, LZ remembers that the interviewer asked me directly about the underlying implementation principle of the Volatile keyword (by the way, interviewing and being interviewed are relative, and the interviewer asking this question also makes the interviewer feel that the interviewer is also a People who like to research technology increase the interviewer's goodwill towards the company. LZ finally chose the company that asked this question), don't think it's too picky - the simpler the question, the better you can see a person's level, others The vast majority of your technical considerations are based on depth first and breadth second, remember.

2. Collection
is very important and must be asked. Basically it is List, Map, Set. It asks about the underlying implementation principles of various implementation classes, and the advantages and disadvantages of implementation classes.

Collections need to master the implementation principles of ArrayList, LinkedList, Hashtable, HashMap, ConcurrentHashMap, and HashSet. If you can answer fluently, of course, it is better to master the CopyOnWrite container and Queue. Another thing to say, ConcurrentHashMap was asked a lot in the interview, probably because this class can generate a lot of questions. Regarding ConcurrentHashMap, I provide three answers or research directions for netizens and friends:
(1) ConcurrentHashMap (2) Whether the reading of ConcurrentHashMap needs to be locked
, and why
(3) Is the iterator of ConcurrentHashMap a strongly consistent iterator or a weakly consistent iterator

3. The design pattern
was originally considered a very important piece of content, It turned out that I was only asked once during an interview with Alibaba's B2B division, and it was about the decorator pattern.
Of course, we can’t be so utilitarian. We learn for interviews. Design patterns are still very important and useful in our work. Among the 23 design patterns, we can focus on the ten or so commonly used ones. The questions and answers about design patterns in the interview are mainly three. Directions:
(1) Which design patterns are used in your project, and how to use them
(2) Know the advantages and disadvantages of common design patterns
(3) Can draw UML diagrams of common design patterns


4. Multithreading
This is also a must-ask . Because of three years of work experience, I basically won't ask you how to implement multi-threading. I will ask in-depth questions such as the difference and connection between Thread and Runnable, what happens when a thread is started multiple times, and the status of the thread. Of course, this is only the most basic. Unexpectedly, the same question was asked almost at the same time in several interviews. The way of asking is different. It is summed up as follows:
If there are four threads Thread1, Thread2, ThreadD3, and Thread4 to count the sizes of the four disks C, D, E, and F respectively, and all the threads are counted and handed over to the Thread5 thread for summarization, how should it be implemented?
Do smart netizens have an answer to this question? Not difficult, there are ready-made classes available under java.util.concurrent.

In addition, the thread pool is also a frequently asked question. How many types of thread pools are commonly used? What are the differences and connections between these types of thread pools? What is the implementation principle of the thread pool? In practice, it will give you some specific scenarios and let you answer what kind of thread pool is appropriate for this scenario.
Finally, although there are not many questions in this interview, multi-threaded synchronization and locking are also the key points. The difference between synchronized and ReentrantLock, the common method of synchronized lock and the static method of lock, the principle and troubleshooting method of deadlock, etc. Regarding multi-threading, I have summarized 40 problems of multi-threading in some previous articles, you can refer to 40 Java and more Summary of threading issues.

5. If you want to get a high salary from the JDK source code, you must read the JDK source code .
The above content may also be related to specific scenarios. The JDK source code is to see if you usually like to study. During the LZ interview, I was asked a lot of questions about the JDK source code. The most tricky one asked LZ, how the hashCode() method of String is implemented. Fortunately, LZ usually sees a lot of String source code and gave a general answer. The JDK source code is actually nothing to summarize. It depends purely on the individual and summarizes the more important source code:
(1) Source code of List, Map, Set implementation classes
(2) Source code of ReentrantLock, AQS
(3) The implementation principle of AtomicInteger, mainly Can explain clearly the CAS mechanism and how AtomicInteger is implemented using the CAS mechanism
(4) The implementation principle of the thread pool
(5) The methods in the Object class and the function of each method

are actually quite demanding. LZ basically studied the source code of the important classes in the JDK for the whole year last year. It really took time and energy. Of course, I went back Look, it's worth it -- not just for interviews.

6. The framework is
a commonplace, something that must be asked in an interview. Generally speaking, you will be asked about the framework you use in your project, and then you will be given some scenarios to ask you how to use the framework. For example, I want to do something when Spring initializes the bean, and I want to do it when the bean is destroyed. How to do some things, the difference between $ and # in MyBatis, etc., these are more practical, and it is not a problem to accumulate well and learn the details of the use of the framework.
If you answered the above questions well, the interviewer will often ask in-depth how the framework is implemented. The most asked is the implementation principle of Spring AOP. Of course, this is very simple. It can be done in two sentences, even if you don't know how to prepare it. The most perverted thing that LZ encountered was to ask LZ to draw the UML diagram implemented by Spring's Bean factory. Of course, facing such a deep question, LZ could never answer it/(ㄒoㄒ)/~~

7. Database
Nine times out of ten, the database will also ask. Some basics like the difference between union and union all, left join, several indexes and their differences will not be discussed. The more important thing is the optimization of database performance. Before the interview, take a day or two to prepare the content of SQL basics and SQL optimization.
But don't worry about the database. A company often has many departments. If you are not familiar with the database and the basic technology is very good, 90% of them will want you. It is estimated that you will be placed in a department that does not require very high database usage. Get some exercise.

8. Data structure and algorithm analysis
Data structures and algorithm analysis, for a programmer, are better than bad and definitely come in handy at work. Arrays and linked lists are the foundation. Stacks and queues are a little deeper but not difficult. Trees are very important. The more important trees are AVL trees and red-black trees. What is the difference between balanced tree, AVL tree and red-black tree. I remember an interview, an interviewer and I talked about the index of the database, he asked me:
Do you know which data structure is used for the index?
LZ answer the Hash table used, wrong answer. He asked again, do you know why trees are used? LZ replied that because there may be more conflicts in the Hash table, in the face of tens of millions or even hundreds of millions of data, it will greatly increase the time complexity of search. The tree is relatively stable, and it is basically guaranteed that the desired data can be found at most 20 or 30 times. Why do we think the index should be implemented using a tree?
As for the algorithm analysis, I don't know if I don't want to study it. I remember an interview where the other party asked me which sorting method the Collections.sort method used. Of course, in order to show LZ's erudition, there is also some research on algorithm analysis (⊙﹏⊙)b, LZ still bite the bullet and said that it might be bubble sort. Of course, the answer is definitely not. Interested netizens and friends can take a look at the source code of the Collections.sort method, which uses a sorting method called TimSort, which is an enhanced merge sort method.

9. The Java virtual machine is
beyond LZ's expectations. The Java virtual machine should be a very important piece of content. As a result, the probability of being asked by these companies is almost 0. You know, LZ spent a lot of time studying Java virtual machine last year. Mr. Guang Zhou Zhiming's "In-depth Understanding of Java Virtual Machine: Advanced Features and Best Practices of JVM", LZ has read it no less than five times.
Closer to home, although I didn't ask about the Java virtual machine, I think it is still necessary to study it. LZ will simply make an outline and talk about the more important content in the Java virtual machine:
(1) Memory layout of Java virtual machine
(2) GC algorithm and several garbage collectors
(3) Class loading mechanism, that is, parent delegation model
(4) Java memory model
(5) happens-before rule
(6) volatile key Word usage rules
Maybe the interview is useless, but on the way to the big cow, it must be.

10. Some questions
on the web Java is mainly for the web side, so some questions on the web must be asked. The two most frequently asked questions that LZ has encountered are:
talk about several implementations of distributed sessions. The four
commonly used ones can naturally make the interviewer very satisfied. Another frequently asked question is:
talk about Session and The difference and connection of cookies and the implementation principle of Session In addition to
these two issues, the content in web.xml is the key point, Filter, Servlet, Listener, not to mention the implementation principle of them, at least they can be used. Know the roots. In addition, some details such as the difference between get/post, the difference between forward/redirect, and the implementation principle of HTTPS may also be examined.
Oh, come to think of it, the consistent Hash algorithm seems to have been asked a few times. This LZ has done in-depth research and wrote two blog posts before, so when asked this question, LZ naturally answered it effortlessly. The article is an ultra-detailed interpretation of MemCache and an in-depth study of the consistent Hash algorithm and Java code implementation. In particular, LZ is really not advertising the articles he wrote before.
Finally, if you are interested and have time, it is recommended to study and study SOA and RPC. Service-oriented systems are necessary for large-scale distributed architectures.

About HR interviews
If you have passed all the technical aspects successfully, then congratulations, you are one step closer to a promotion and salary increase, becoming a CEO, marrying Bai Fumei, and reaching the pinnacle of life. But before it's time to talk about salary and benefits, there is still a final test: HR interview. Basically, all large companies have this round of interviews. Don't underestimate HR interviews. Many companies' HRs have a veto power for interviewers - no matter how high the previous interviews are.
Therefore, this round of interviews must also be taken seriously. The HR interview mainly asks a few points:
1. The reason for leaving the past work experience written in the resume
2. The current company salary
3. What kind of company do you expect to be in?
4. Personal The future direction of development
I specifically mention the second point. Some people may be more repulsive and don’t want to say this. I personally keep an open state and say it when I ask. Of course, some exaggeration is still necessary. The current company salary is no problem to report an extra 1,000 yuan (after all, it is an Internet company. There are always more or less subsidies.) Because it has little to do with the salary you can get in the new company, the determining factor of the salary you can get in the new company is the salary of the whole company and the position in the company according to your interview situation, there is a fixed salary range of. The main reason for HR to ask this is to have a number in mind and see if you are honest - some companies will ask you to provide the bank serial number of the nearest unit when you join.
That's it for the HR interview. To sum it up, it's actually just four words: no leaks. The whole interview process has a positive attitude, don't have any pessimistic and negative attitude (especially when talking about the previous company situation, even if there are more dissatisfaction), there will be no problem.

Regarding
the , LZ has actually interviewed several people in the company, and more than half of the interviewees belonged to the type with trembling legs and trembling voices when answering questions. In LZ's view, this is not necessary and it is still a deduction item. The two most basic requirements when answering questions:
1. Be calm and calm
2. Be clear and organized
The ability to express is definitely an important test item during an interview. What we do is programmers, and we focus on teamwork, not writing or drawing. A pen and one person are enough. What is the use of a programmer who is not good at expressing?
Other than that, keep a good attitude. As the old saying goes, as long as you work hard and grind an iron pestle into a needle, the success of an interview depends on your usual accumulation. It is useless to crawl and look at two interview questions. As long as you work hard enough, success is a matter of course. , I don't usually study technology, that is a matter of fate, as long as I fully demonstrate what I usually learn.
Therefore, in my opinion, don't treat the interview as an interview, but as a technical exchange, and change the mentality of the interview from that I want to find a job to that I want to find my shortcomings and improve myself through the interview. This will be much more peaceful, even if There is not much disappointment in failure.

In addition, if you are a friend who is always keen on researching technology, you should really have self-confidence, and don't think that others are better than you when interviewing you. The interviewer may not be better than you. The questions he asks are often questions that he usually researches more. You also have a lot of your own research. The interviewer may not know. There is often a saying on the Internet
about Java : Java is relatively simple.
To a certain extent, this will undermine the confidence of Java programmers - it turns out that we usually use this kind of pediatric stuff. In my opinion, this kind of thinking is unnecessary. In this part, I will talk about my views on this topic. .

This statement is a bit one-sided. It has to be divided into two parts. I can summarize it in four parts: easy to learn but difficult to master.
1. Easy to learn
Java I think there are two reasons for it:
(1) Many training companies, including senior students, will learn Java when they are looking for a job. Most of them are because of easy learning. Java is developed from C/C++, thanks to the wisdom of predecessors, it eliminates the most complex and confusing syntax in C/C++, it eliminates platform differences, it does not require users to manually free memory space, it avoids The interaction between Java programmers and the native language allows programmers to only focus on the syntax level and application level.
(2) Java, as an object-oriented language, reflects its unparalleled characteristics in enterprise-level development. The entire development process is relatively fixed and modular, and it is relatively easy to analyze requirements. Let me give an example from my past. When I was studying C language in my freshman year, I wrote a library management system in C language and wrote 2000+ codes. After I learned C++ in my senior year, I replaced the object-oriented language C++ with the object-oriented language. The procedural language C language has rewritten a book management system with similar functions, and only wrote 1100 lines. This is the advantage of object-oriented.

2. The Difficult Parts
Next let's talk about the difficult parts.
The designers of the Java language have helped Java programmers do so many things, which have pros and cons. The good part has been said before, making Java easy to learn, but the bad part is also obvious. What should I do if I encounter errors at the syntax level and outside the application level during the running of the application? For example, what should I do if there is a memory overflow in the online environment? What should I do if the GC time is too long? What should I do if IO does not respond for a long time? What if a method throws an inexplicable exception?
All of these things cannot be solved by a Java programmer who can only write a few if...else..., which requires a lot of experience, a lot of practice, and a lot of research on the details of the underlying implementation of Java, which is often the most The most difficult and most challenging part of Java programmers, some people don't want to study in depth, and some people can't study it after a little research.
Why is Java difficult to master? That's why. Unless you're very high-level, it's absolutely stupid to write "proficient in Java" on your resume for a Java programmer with less than five years of work experience.
Conclusion The
article is written here, it feels a bit like chicken soup, so let's end with the last chicken soup.
In a previous blog post, I talked about the confusion of Bensan programmers, roughly saying that programmers will change careers after the age of 30. LZ left the following comments in the blog post:


Just use this Let’s encourage ourselves and share. The harder you work, the luckier you are. If you are not the second generation of officials, the second generation of rich, or the second generation of red, then please remember: hard work is the only shortcut to change your destiny.


Original address: http://developer.51cto.com/art/201603/507320.htm My
own summary: I marked
my feelings in red font in the text. This article is very detailed, and I feel that I have a long way to go! come on

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326978083&siteId=291194637