After working for two years after I graduated from school, I didn’t know what I did specifically, and I didn’t learn any technical skills. Later, I learned about the position of programmer from my friends, and they told me that the salary was so high, so I I went online to learn about it, and I was very excited and wanted to join the big family of programmers. It really paid off. After half a year of hard study, I found a so-called job as a Java programmer. After that, I slowly accumulated experience, and now Only then can I share my experience and insights with you here, hehe~ I won’t go into details about the nonsense, let’s get to the key points quickly. apache php mysql
begin!
Let’s first talk about what Alibaba’s social recruitment interviews ask. In fact, this topic is not a secret. All students who have interviewed at Alibaba can answer one or two questions.
The first stage is the main language, and the second stage is the project.
I believe many people have already experienced this during the interview process. Most interviews are divided into two stages, but for different companies and positions, each The level of difficulty of stage interviews will vary, and the range of questions asked will naturally vary.
Speaking of the difficulty of the interview, I have to gossip. According to a comment I saw somewhere online, in terms of the technical difficulty of the interview, the order of BAT is as follows , Alibaba>Baidu>Tencent.
Regarding this, the author’s actual feelings are consistent with the above, because I have participated in interviews with Baidu and Alibaba. In terms of personal feeling, Alibaba is more difficult than Baidu.
However, the author said that Alibaba is more difficult than Baidu. In fact, it is limited to the author's specific interview. In fact, the specific difficulty of interviews between the two companies cannot be compared so simply.
The difficulty of the interview depends on the position (such as low-level engineer or senior), the department (such as business department or pure R&D department), the difference in employment needs (such as urgent need or talent reserve), the interviewer Depending on your preferences (such as whether you are a show-off type or a gentle type) and other factors, even in the same company, the difficulty will be different, so you cannot simply compare the difficulty of interviews between two companies.
Whether it is difficult or not, you will only know if you try it!
Therefore, the Alibaba middleware team welcomes you! (Ahem, don’t ask me why I added this sentence, I can’t tell, 0-0)
LZ will discuss this issue in four parts. Since LZ himself is from Java, the questions about the main language are all related to Java, and students in other languages can selectively ignore it. In addition, during the interview, the interviewer's questions are generally interlocking and gradually deepened. This can be more clearly felt below.
1. The main language itself and its advanced features.
Of course, the main language is what you use to make money on weekdays. Don't tell LZ that you don't have a main language, that you know N multiple languages, or that you are proficient in N multiple languages. If you insist on saying that, you can come to Hangzhou and give it a try. LZ promises not to beat you to death, but at most to cripple you.
LZ’s main language is obviously Java, so for Java, its language itself and its advanced features, which are easier to ask in the interview? Woolen cloth?
Under normal circumstances, the following main knowledge points are easy to be asked. (PS: The following are some relatively advanced knowledge points of Java, because we are talking about social recruitment, not school recruitment)
1) Java data structure Relevant class implementation principles, such as LinkedList, ArrayList, HashMap, and TreeMap. The following simply simulates a serial cannon of a data structure.
For example, the interviewer first asks you whether the HashMap is in order?
You must answer that it is not in order. Then the interviewer will continue to ask you, is there a sequential Map implementation class?
If you say you don’t know at this time, then this question will end here. If you say there is TreeMap and LinkedHashMap.
Then the interviewer may ask you next, how do TreeMap and LinkedHashMap ensure their order?
If you can’t answer, then stop here. If you still answer, the interviewer will continue to ask you, which one of the two do you think has better orderly implementation?
If you can still answer, the interviewer will continue to ask you, do you think there is a better or more efficient way to implement it?
If you can still say it, then I can definitely still ask you a lot of questions about the implementation method you mentioned.
The above is an example of the interviewer asking questions step by step. Therefore, if you don’t know much, don’t be perfunctory, because you may be exposed to the next question. It is better to just say no, end the problem, and quickly switch to a field you are familiar with.
2) The classes in the Java concurrent package, what their functions are, and their implementation principles. These classes are under the java.concurrent package. As above, we also simply simulate a serial cannon of concurrent packages.
For example, the interviewer may ask you first, if you want to realize that all threads wait for an event to occur together, and when an event occurs, all threads start executing together, what is the problem? Is it a good idea?
At this time you may say that you can use a barrier (CyclicBarrier in Java's concurrency package), then the interviewer will continue to ask you, do you know its implementation principle?
If you continue to answer, the interviewer may continue to ask you, do you know other implementation methods?
If you can still name many ways to achieve it, then continue to ask you, which one of these ways do you think is better?
If you say that a certain way is better, the interviewer can still continue to ask you. If you are asked to write it, do you think there is a better way to achieve it?
If you can still tell your own better implementation method at this time, then the interviewer will definitely continue to ask you about this.
This is the reason why you should guide the interviewer during the interview. Because the interviewer's questions are often traceable. If you catch his trajectory and can guess what he is likely to ask next, then you can go in the direction you want to talk when answering. Go talk. In this way, you will appear more calm and at ease during the interview.
3) Contents in IO packages and NIO packages. NIO will be the focus of this part. Most of the IO packages will be familiar to you, so you may skip it and ask you directly about the content of NIO.
The contents of the IO package and the NIO package are relatively small. First, you must be familiar with the NIO model. In particular, the selector must be very clear about its responsibilities and implementation principles. In fact, the core of NIO is the IO thread pool. This key point must be remembered. Sometimes, the interviewer may also ask you about the design pattern of the IO package (decorator pattern). Why is it designed like this?
Some interviewers will also ask you if you have a better design. At this time, if you don’t know, please decisively say that your current level is limited and you can’t think of a better design. Don’t talk casually. YY.
4) Contents of Java virtual machine. This part mainly includes three parts, GC, class loading mechanism, and memory.
A simple serial cannon with the GC part.
The interviewer can first ask you when an object will be GC?
Then continue to ask you why the object will be GCed at this time?
Then continue to ask you what are the classifications of GC strategies?
If you tell me, continue to ask you what are the advantages and disadvantages of each of these strategies? What scenarios are they applicable to?
After you continue to speak out, give you a practical scenario and let you choose a GC strategy?
If you have chosen it, let me continue to ask you, why did you choose this strategy?
The following is a simple series of shots about the class loading mechanism.
First of all, I must ask you what are the class loaders of Java?
After answering these, you may be asked which classes are loaded by each class loader?
After finishing talking, you may be asked what is the parent-child relationship between these class loadings?
You may mention the parent delegation model when answering, so you can continue to ask you what is the parent delegation model?
After you have finished explaining, you may continue to ask, why does Java’s class loader use the parent delegation model?
After you answer, you may continue to ask how to customize your own class loader, and how to deal with the relationship between your own class loader and the class loader that comes with Java?
Another serial bomb about memory.
First of all, I must ask you what parts the memory is divided into, and what data are stored in these parts?
Then continue to ask you how an object survives and is transferred in these parts from creation to destruction?
Next, you may be asked, which parts of the memory will participate in GC recycling?
After finishing, I may ask you how Java’s memory model is designed?
After you answer, they will continue to ask you why you designed it this way?
After asking, you may also be asked to talk about the role of the volatile keyword in conjunction with the design of the memory model?
When you are talking, you will definitely mention visibility, so after the three words visibility, you can continue to ask about concurrent content.
Basically, the Java language itself and the slightly more advanced content of the language are the above parts. If you can understand the above four parts thoroughly, then basically there will be no problem with this part of Java, because The above content alone is enough for you to chat with the interviewer for a long time. If you talk about these things for a long time, the time for asking you other questions will naturally be shorter.
You should also be able to feel it from the process of LZ writing these questions. Many times, the interviewer will ask questions along the same line. If you feel that you are not familiar with this line, you should ask it in time. Turn around and guide the interviewer to ask other questions. Don't keep digging in until you can't jump out anymore, otherwise you'll be embarrassed.
2. Tell about your project and intersperse questions
This part is the interview You must ask during the process, and it is also the stage where you spend the longest time chatting. Unless your previous language part is very solid, so solid that the interviewer has been asking for an hour or two and still hasn’t found out how deep you understand the language itself. Otherwise, you will definitely not be able to escape the hurdle of your own project, and generally the chat will not be too short.
The general pattern for this part is that you talk about the projects you have done, and then the interviewer will suddenly ask you to explain a certain part of it, such as asking you to explain why you did what you did at that time. , or ask if you think there is a better way now. Most of these interspersed questions are related to the technology used in your project. What you need to do is to fully and fully summarize the projects you have done (especially the recent one or two projects), and dig out one or even N highlights, so that you can make the interviewer have a special impression when the time comes. Bright feeling. If you can achieve this effect, you are basically not far from success.
Because this part of the content is closely related to everyone’s own experience, it is impossible to list the questions that may be asked here. This article "Programmer Interview Experience: Should you answer questions before the interview and how to prepare before the interview" was written by LZ before. It briefly discusses how to summarize before the interview. If you are interested, you can check it out.
3. Additional bonus points
The above two stages are basically required questions, and there are some bonus points. Among these bonus points, the interviewer will also ask you about some of the content (such as TCP/IP protocol, algorithm), but most of them will ask you if you understand it first. If you understand it, continue the conversation. If you don’t understand it, just skip it. If you pass it, you won’t be thrown directly into hell because of this kind of problem.
Below, LZ lists these bonus points. If possible, these bonus points should still be fought for.
1. Principles of computer systems.
2. Network communication protocol (TCP/IP, HTTP, etc.).
3. Data structure and algorithm.
4. Source code of famous open source projects.
5. You have a great open source project of your own.
6. Your personal blog.
7. To be added in the comment area.
Among these items, for the first 1-3 items, if you knew it well before but forgot it due to time issues, you can still do it temporarily. As for the next 4-6 items, they require daily accumulation and cannot be accomplished in a short while. If you don’t accumulate money on a daily basis, then the next three bonus points can only be discarded.
4. Content related to your position
In fact, this last item is a supplement to the first three items. You should try to focus on it. Content relevant to the position you are interviewing for. For example, if you are interviewing for a real-time computing position, then your algorithm must be powerful, you must be familiar with famous real-time computing open source projects, it is best to have read the source code, and you must have certain insights into distributed systems.
Therefore, this part 4 has no specific content. It just reminds you that if you are very clear about your interview position, it is best to try your best to move closer to the needs of the position when preparing before the interview. This way, you can be successful. More likely.
After reading this, I would like to add a few simple words about the serial cannon part. The reason why there are so many examples of serial cannons above is not actually to make everyone memorize it. But I want you to experience the interview routine of social recruitment.
After all, these examples of serial cannons are to test how deeply you understand a certain knowledge point. As far as the author's personal experience is concerned, in fact, you don't need to understand each of the above-mentioned serial cannons very deeply. You only need to have one or two points that are relatively deep, even beyond the interviewer's understanding. The requirements have been met.
Many times, the interviewer does not need you to be in-depth on every knowledge point. He is just testing your understanding ability and whether you have accumulated some skills.
If an interviewer rejects you just because of one or two technical knowledge points, then there are only two possibilities. The first is that this point may indeed be the position you are interviewing for. Very important knowledge points. For example, if you are interviewing for algorithmic positions, it will not work if you do not have good algorithms. Or if you are interviewing for technical positions that favor operation and maintenance, you will not be able to play Linux well.
The second possibility is - he is showing off, -_-.
Programmers have many commonalities that the "regular army" of programmers do not have. One of the most typical commonalities is that programmers will go through a learning and entry-level stage after entering society.
It is precisely because of this that a large number of training institutions have appeared in society, so the first question that "wild" programmers often face when they first enter the industry is whether to study by themselves or choose a training institution?
The author has received countless questions of this kind. In fact, this problem cannot be generalized. It requires a specific analysis of the specific situation. But if you want to put it simply and crudely, assuming that your family does not lack the training fee, then go Training institutions, otherwise don't go.
After all, after spending money, there will always be more learning resources, which is at least better than nothing.
Therefore, to put this question in layman’s terms, if you have money, go and study on your own if you don’t have money. Just like the classic joke, students who say they have a phobia when buying things do not really have a phobia. The only reason is-poor, hahaha.
Is the algorithm important?
Privately, countless classmates have asked me the same question: Is the algorithm important? Will the algorithm be tested in the Alibaba interview?
In fact, the first question, about whether algorithms are important or not, I have two answers here. If the students who come to ask this question confront each other, they may find that the author’s answer to everyone is slightly different. different.
If a student asks, the author will tell him that algorithms are very important and he must study hard.
If asked by someone who has been in the workplace for many years, the author will usually tell him that he can just study as needed. If the work you do has a lot to do with algorithms, then naturally you should study hard. For example, if you are an algorithm engineer, tell me whether algorithms are important? Of course it’s important!
If you write additions, deletions, modifications, and queries every day and pay more attention to business, then don’t spend that energy. Save it. If you have the energy to learn algorithms, study more business and think more about technology and business. Combining this kind of problem may be more effective than learning algorithms.
As for the second question, whether algorithms will be tested in the Alibaba interview, the author clearly remembers that the interviewer asked such a question, "How much do you know about algorithms?"
And the author The answer at that time was, "Sorry, I don't know how to do this."
Seeing this, some students may have questions, "Author, it's not good for you to do this. You don't mean to tell Everyone, algorithms are not important. Can I get into Alibaba without learning algorithms?”
Students who have this question have not thought about such a thing: whether algorithms are important and whether they must spend energy to learn them. , there is no direct egg relationship.
What’s more, it’s normal for people who don’t know algorithms to get into Alibaba. Do you think that Alibaba’s thousands of engineers are familiar with algorithms? I dare to say it, do you dare to believe it?
There is also a misunderstanding that many people have, that is, "people with good algorithms have much higher wages."
Regarding this, the author just wants to say that if this person himself If he is engaged in algorithmic work, there is nothing wrong with that. But if he is engaged in addition, deletion, modification, and checking, the author can say with certainty that if he learns something else during the time he is studying algorithms, his salary may be higher.
Therefore, don’t be fooled by this appearance. His high salary is essentially because he studies in his spare time, not because he studies algorithms.
As the saying goes, apply what you have learned. Not only should you spend money wisely, but you should also learn wisely, because time is more precious than money
. Of course, the above argument that algorithms should be learned on demand is only suitable for students who have graduated many years ago and have entered the workplace. If you are a school student, then there is only one word for algorithm - -study! Learn from death!
How Java programmers learn
Regarding this topic, the author will quote the content in the previous article, but after two years, the author will make some additions to it.
This part is actually the focus of today. This part is used to answer questions that many friends in the group have asked, that is, LZ, how did you learn Java? Can you give me some suggestions?Today LZ is going to get some useful information, so let’s not talk about some learning methods and techniques, but directly talk about the content to be learned at each stage and even some books. The content of this part is also applicable to some students who want to switch careers to Java.
Before everyone reads it, LZ would like to make two points.
1. Since LZ himself is a Java back-end developer, the recommended learning content is the route of Java Web and Java back-end development. Students who are not involved in Java Web and Java back-end development should refer to his learning ideas appropriately. , do not copy them.
2. The following recommended content for [Part 1] is intended to help you become a Java developer who can work as soon as possible. It is more suitable for students who are unemployed and are preparing to switch to Java. If you are a student at school, be sure to learn the basics (such as computer systems, algorithms, compilation principles, etc.) before considering the following studies.
1. Java basics
First find a Java programmer Learn the basic tutorial. You can recommend an address here, or you can refer to this address to find the corresponding video. The address is http://www.php.cn/course/884.html.
When learning the basics of Java, you should try to do as much as possible. Many times, when you write out and run the things you take for granted, you will find that it is not the case. If you don’t believe it, just try it.
After learning the above content, you should have a basic understanding of Java. You can write some simple programs in Java language, and you use the simplest editor, such as Notepad.
At this time, don’t rush to the next part. Leave a few days to write some programs and become as familiar with these basic contents as possible.
2. Web Development
After you write programs for a few days, you will often feel confused because what you write seems useless, such as Implement a simple calculator, read a file, etc. At this time you should learn to write something that you find interesting, so you should learn more knowledge.
These contents are mainly related to Web development, including HTML/CSS/JS (front-end page), Servlet/JSP (J2EE) and Mysql (database) related knowledge.
The order of learning them should be from front to back, so the first thing to learn should be HTML/CSS/JS (front-end page). You can find this part on the runoob website above. You can try to write some pages yourself, and of course, you can try your best to make it the most beautiful. This part of the content is not particularly important in theory for back-end Java, but it must at least reach a level where you can write some simple pages by yourself.
Next, what you need to learn is the Servlet/JSP (J2EE) part. This part is the part that Java back-end development must be very proficient in, so this part requires the most energy among the three parts, and At this time, you need to learn to use development tools instead of using Notepad. You can choose eclipse.
After you download and install eclipse, please follow the tutorial in the video step by step, and be sure to do it more. Regarding the selection of Servlet/Jsp videos, the industry recognizes Ma Soldier’s videos, so we recommend them to everyone. Of course, LZ himself has not watched his videos, so it’s hard to say too absolutely. If you have a better choice, you can stick to your own and don’t be interfered by LZ.
Originally, LZ also planned to publish a teaching video, but due to time issues, he decided to give up. But if you encounter problems while watching the video, you are welcome to come to LZ’s communication group to ask questions, or go to Douyu to watch LZ’s live broadcast and ask your questions. The live broadcast address and group number are on the left side of LZ’s personal blog.
The last step is to learn how to use a database. MySQL is a good entry choice, and the mainstream relational database in the Java field is MySQL. This part is usually exposed when you learn Servlet/Jsp. The JDBC part is the database-related part. You must not only learn to use JDBC to operate the database, but also learn to use database client tools, such as navicat and sqlyog. Just choose one of the two.
3. Development Framework
After you learn the above content, you are not enough to participate in the work at this time, you still need to continue to study. In order to improve development efficiency, companies will use some Java Web frameworks, so you also need to learn some development frameworks.
At present, the more mainstream ones are the SSM framework, namely spring, springmvc, and mybatis. You need to learn how to build these three frameworks and use them to make a simple add, delete, modify, and query Web project. You don’t have to understand what those configurations mean and why you need to do them. You can learn these later. But you must be able to quickly use these three to build a Web framework. You can record your first construction process. Trust me, you will definitely use it.
I would also like to mention that in the process of building SSM, you may often come into contact with a tool called maven. This tool is also a tool that you will almost have to use in your future work, so you can also learn about maven while building SSM. At your current stage, you only need to learn about the basic usage of maven on the Internet. As your work experience increases, you will gradually come into contact with some high-end usage.
I would like to recommend an address for you to learn the SSM framework. There is a video in it. You can watch it. The address is http://edu.51cto.com/lesson/id-76468.html.
4. Find a job
After you finish studying the development framework, you should look for a job. Those who are in school will look for internships, and those who have graduated will look for full-time jobs. At the same time, you should not stop studying while looking for a job. To be precise, you should not stop studying in the future.
You have just learned how to use the above content. You can gradually try to learn more. The Internet is your most important teacher.
Two years have passed. In fact, this learning route has not changed much. The only change is the popularity of spring-boot, which saves a lot of previous framework integration work.
Thinking back to the author's training in 2011, if I wanted to build an SSH framework, I had to sort out the jar packages myself and integrate a lot of configurations. If I was not careful, I would get various errors, and the exceptions were often not simple. NPE, not to mention how miserable it is.
So, classmates, cherish your current life, hahaha.
This stage is a stage that everyone will go through. Programmers at this stage are often very complicated in their hearts. When you find a job and sit in a bright office, you will feel as if you have become the protagonist in a TV series. You will inevitably feel high-spirited, but at the same time you will inevitably feel a little fear in your heart, fearing that you will be knocked back to your original shape again if you are not careful.
If you feel like this, don’t be nervous. This is what everyone has to experience. All you have to do is to completely immerse yourself in work and study. The reason is very simple, because at this time ——You are still single, -_-.
Congratulations, at this time, you already have a Java job. This stage is when you grow extremely fast, and you may often work overtime.
But working overtime does not mean you can relax. Always remember what LZ said, from the moment you enter the industry, you must keep learning. During this year, you need to at least read the book "Java Programming Thoughts". The content of this book is to help you have a deeper understanding of Java. It is an upgraded version of Java basics.
This book is very thick. It took LZ three full months to read this book. At normal speed, I should be able to finish it in about half a year. LZ doesn’t have too high requirements here, as long as you finish reading this book within one year. Of course, what LZ said after reading is to fully absorb it, rather than reading it once, so you may read some content more than once.
In short, the core learning idea at this stage is to practice at work and have a deeper understanding of the basics of Java.
I would like to add that when reading a book, don’t just read the book, you must always think about it, for example, think about whether the code you wrote is related to the content in the book.
To give a practical example, when you see the static part, will you look through the project you are currently developing to see if there is any place where static is used? What is the purpose of using it? Is it used in the correct way?
Only by reading in this way can you really take in the book. You must pay attention to the fact that the ultimate purpose of reading is to trigger your own thinking. If you only read without thinking, it is called endorsement, not reading. .
Speaking of this, many students have asked the author this question, "What should I do if I can't read the book? Is there any good way?"
The author can be very helpful here. I will tell you responsibly, there is no such thing as quiet time, it’s just that someone is carrying the load for you.
Therefore, don’t expect to be happy and read the book happily. What you think is quite beautiful, hahaha.
There is no good way to do this, just rely on your inner belief and force yourself to see it. Especially at the beginning, it is the most difficult. After that period of time, it will look better later. It will be relatively smooth.
Everything is difficult at the beginning, and it is also applicable to reading and studying.
At this stage, you have generally been doing additions, deletions, modifications, and reviews for a year. It is different from the high-spiritedness when you first joined the job. You will start to think about the path you want to take in the future, but usually at this time, it is difficult for you to see the road ahead clearly, so you may be a little anxious.
If you have such anxiety, don’t worry, just remember that on the road of being a programmer, learning can make you more fulfilling, and continue to immerse yourself in the ocean of learning.
Students during this period have already had a deeper understanding of Java. However, the experience of object-oriented may not be deep enough. When programming, it still stays at the level of completing functions, and rarely considers design issues.
So at this time, the design pattern comes. At that time, LZ was reading the book "Dahua Design Patterns" and wrote a complete version of the design pattern blog. Therefore, LZ requires everyone to start blogging when you have been working for one year at most, and design pattern is the beginning of your blog.
Please remember that what LZ puts forward are basically the minimum requirements, so don’t have any lax mentality. Otherwise, after five years, you should not envy others whose salary is higher than yours, and don’t envy others who have entered the industry. a certain company.
In addition, design patterns are not your only task this year. You also need to read some books on code writing optimization. For example, "Refactoring to Improve the Design of Existing Code" and "Effective Java".
In short, at this stage, your core task is to improve your coding capabilities and be able to write elegant code.
At this stage, the three books recommended by the author are actually teaching you how to write and design your code better. In addition, the design pattern series is also training you. Ability to abstract problems.
Using an object-oriented language like Java, abstraction ability is a very important ability. As above, the author recommends that after you read the books on design patterns, refactoring and Effective Java, You must think deeply about it based on your own projects.
A life without thinking is incomplete. People who only work without thinking may seem diligent, but in fact they are just machines. Since they are machines, they will be replaced sooner or later.
Only those who keep thinking, summarizing the past, and guiding the future will eventually become the leaders of this society.
This stage is a very important stage for programmers. In the author's learning path plan, the purpose of this stage of learning is to allow you to move from a junior and intermediate engineer to a senior level and achieve qualitative improvement. Therefore, this part of the learning will be more difficult than the previous two years.
But now that you have set foot on this road, there is no room for maneuver and you can only move forward.
So, be mentally prepared and face the challenge.
Some students feel that they are already very good at this time, so they can’t help but start to relax. Remember, you are still much younger.
At this stage, there is a book you must read. It is called "In-depth Understanding of Java Virtual Machine". This book is definitely the most important book for Java developers, bar none. In LZ's eyes, this book is more important than "Java Programming Thoughts".
In addition, in the past two years of work, you must have been exposed to concurrency more or less. At this time, you should have a deeper understanding of concurrency-related knowledge, and for this part, LZ recommends the book "Java Concurrent Programming in Practice". As long as you read this book, you will basically understand the concurrency part.
At the same time, there is much more you have to do at this stage. At this time, you should have a deeper understanding of the framework you are using, and a deeper understanding of the Java class library. Therefore, you need to look at the source code of some classes in the JDK, including the source code of the framework you are using.
The prerequisite for understanding these source codes is that you must have a good understanding of design patterns. Otherwise, when you look at the source code, you will always have questions like, why is this code written like this? Why define this interface, it seems redundant?
It can also be seen from this that these learning processes are interlocking. If you fail at any stage, then you really can’t keep up, or you can say that you are taking one step at a time. slow. And LZ is very responsible to tell you that at this stage, LZ has learned far more than what is listed here. Therefore, don’t feel that you have learned a lot. What LZ said are only the minimum requirements. Not only LZ, many people have learned much more during this period than the scope of this article.
If you can’t keep up with the pace, after a few years, if the programmer market is not good, you may not only have a lower salary than others, the company is not as good as others, but you will not be able to find anyone at all. Work.
In short, at this stage, what you need to do is to have a deep understanding of the underlying Java and Java class libraries (for example, the book on concurrency is the content of the Java concurrent package java.concurrent), that is, the related content of the JVM and JDK. And you need to have a deeper understanding of the framework you are using. It is recommended to read the source code or read the official documentation.
In addition, there is another way of learning that should also be used at the 2-year stage, that is, making wheels.
Don’t listen to the argument of “don’t reinvent the wheel”. It is made up by companies to save time and cost. Reinventing the wheel may not be of value to others, because the wheel you create may have already existed, and generally the wheel you create is not as good as the existing one. But having no value to others doesn’t mean it has no value to yourself.
The process of making a wheel is a process of making something from scratch. This process can give you a systematic exercise. It not only tests your coding ability, but also your framework design ability. You need to make your wheel scalable and robust enough.
And in the process of making wheels, you will encounter various problems, and these problems are often opportunities for you to learn. When you build the wheel, you will definitely find that you have actually gained a lot.
Therefore, at this stage, in addition to understanding the JVM, JDK and framework source code mentioned above, you are also asked to build any wheel you can imagine based on other people's excellent source code.
As you can see, the author has a lot of tasks listed at this stage. Not only must he understand JVM, concurrency, and JDK class libraries, but he must also try to build the wheel himself.
If you read this article carefully, you will find that most of the serial guns used by the author in the Alibaba recruitment interview were learned at this stage. Basically, those serial guns are JVM. , concurrency and the contents of some JDK class libraries.
Coincidentally, most of Alibaba’s recruitment requirements are 3 years or more.
what does that mean?
I believe that students who respond quickly have understood that if you can complete the author's study plan within 3 years, then when you reach 3 years, you can come to Alibaba to test your learning results.
So, Alibaba middleware welcomes you! (I have been implanted twice without any sense of disobedience. This year I will be 3.75, -_-)
Students at this stage, Many have hit the ceiling. Before that, as long as you studied step by step and had no flaws in your IQ, more than 90% of the students (someone asked, where are the remaining 10%? I just want to say, how do I know? / Embarrassing ), after working for 3 years, the annual salary can reach the range of around 30W (only refers to first-tier cities in Beijing, Shanghai and Shenzhen in 2015 or later).
If you want to take your annual salary to a higher level (generally 10W is a level, such as 40W, 50W, etc.), it is not enough to rely on previous accumulation alone. You need to build your core competition. force.
It is already difficult for students at this stage to improve, and learning at this stage is often more diversified.
Because in the past three years, you must have been more or less exposed to other technologies, such as big data, distributed caching, distributed messaging services, distributed computing, soft load balancing, etc. . If you are proficient in any of these technologies, it will be a huge advantage for you in future interviews, so if you are interested in a certain technology, you can study it in depth at this time. The technology doesn’t have to be what you use in your work, but it must be relevant.
And when researching a new technology, be careful not to act haphazardly. Some students went to work on big data today, working on things like Hadoop and hbase. After a while, I felt it was boring and started to study distributed cache, such as redis. Then after a while, I started studying distributed computing again, such as MapReduce or Storm.
In the end, I felt like I knew everything, and I boasted on my resume that I knew about big data, distributed caching, and distributed computing, but in fact, any of them were just superficial. When the time comes, the interviewer will figure it out with just a casual question.
Be sure to remember that as a programmer, you may be exposed to many technologies in daily life, but if you want to make a technology your advantage, then you must have a better understanding of this technology. Most people can do it.
Therefore, at this stage, you can no longer simply study the content of the previous three years. Although the previous study still needs to be continued if it is not in-depth enough, at this time you should consider more about building your The advantages can also be called differences.
I believe that difference is not difficult to understand, it is to make yourself different. Your study in the first three years is enough for you to become a basically qualified Java developer, but you are still far away from becoming an excellent Java developer.
The so-called excellence means being able to do what others cannot. What you have learned in the first three years can be mastered by many who have been doing Java development for several years. So in order to differentiate yourself, you need to find another way and find a direction to study in depth, hoping that in the future, you can become an expert in this field, such as an expert in the field of distributed computing, an expert in the field of big data, and an expert in the field of concurrency. etc.
In addition, in addition to establishing your difference, you also need to make up for your basic deficiencies. Until now, LZ has not mentioned basic knowledge. The reason is that the basics are very boring. Learning it too early is not only easy to make you confused, but also easy to cause psychological shadow when you are confused, so that you don't want to study these basics in the future. But the basics are what you must master when you delve into some fields. For example, if you study distributed computing, if you don’t understand algorithms, why don’t you just play with it? For example, if you want to do distributed caching, but you don’t understand the memory of the computer system, how can you do caching?
If your foundation is already very strong, then congratulations, I believe you have fully realized the help of these foundations in your previous work. But LZ believes that most people's foundation is very weak. Even those who have graduated from majors, many people dare not say how strong their original basic knowledge is, such as algorithms, computer system principles, and compilation principles.
But everyone’s time is limited, and each of these basic books can’t be read for more than a year and a half, so you still have to make a choice. Although art is not a burden, the problem is that art comes with a price, which requires you to devote time and energy, and LZ personally prefers to obtain the maximum gain at the same cost.
First of all, there are three basic books that LZ highly recommends, namely "In-depth Understanding of Computer Systems", "Tcp/IP Detailed Explanation Volume 1, 2, and 3", and "Data Structure and Algorithm". Among them, there are three books on TCP/IP, but we regard these three books as one big book here.
These three books are suitable for three types of people respectively. "In-depth Understanding of Computer Systems" is more suitable for people who have been engaged in Java Web development and APP back-end development. "TCP/IP Detailed Explanation Volume 1, 2, and 3" is more suitable for people who do network programming. For example, if you use netty to develop, you need to have a deeper understanding of TCP/IP. The book "Data Structures and Algorithms" is more suitable for people doing computing research, such as the distributed computing mentioned just now.
In addition, LZ would like to emphasize that the suitability mentioned here does not mean that the other two books are useless to you. For example, if you are doing Java Web and APP back-end development, the book "Tcp/IP Detailed Explanation Volume 1, 2, and 3" will also be of great use to you. This is just a ranking of priorities. If you have enough time, it would be best to read all three books intensively. But if time is limited, then pick the book that will help you the most and read it first.
Theoretically speaking, if you can intensively read one of these three books this year, you will be very powerful. With the foundation and previous work experience, you can explore your own field.
During this year, you must plan your own field, establish your own advantages, and create differences. If you are not clear enough about your field, as you work longer and longer, you will be exposed to more and more technologies. At this time, you can easily be drowned in the ocean of technology. It seems that the more technologies you are exposed to, the more technology you are exposed to. The more you come, the more you will use, but you have no advantage.
Some students may ask, "LZ, I don't know what my field is? What should I do?"
For such people, LZ just wants to say, "Fuck Oh, why don’t you ask me? How about I learn for you?"
As you can see, at this stage, the author mentioned three basic books (operating system principles, network Protocols, algorithms), these three books will bring you closer to the bottom layer.
If you carefully taste the learning route mentioned in this article, you will notice that the author has been letting you learn from the shallower to the deeper, that is, I have been letting you improve the depth of knowledge rather than the breadth of knowledge. .
This answers the question that many students have asked the author, "Is it better to have breadth first and then depth, or is it better to have depth first and then breadth?"
First of all, many When people think about this problem, there is a misunderstanding, that is, they have been struggling with the problem itself. Some people say that you must first learn deeply before you can improve your breadth, while others say that you must first learn more about it. Only by broadening your horizons can you better improve your depth.
In fact, this discussion has put the cart before the horse. The answer to this question is very simple. Which one is better depends on what type is needed in the market.
So, if you change the question above, you can easily get the answer, "If you are asked to interview a programmer with less than 5 years of experience, you would like someone who has done deep research in a certain field. Or is it everyone who knows something?"
The answer is obvious. I believe that most people will choose people who have in-depth research in a certain field, especially some first- and second-tier Internet companies.
Maybe some students will use the concept of "full stack engineer" to try to refute this. After all, the concept of full stack engineer has been very popular for a while, and many companies have included it in their recruitment. Here’s one thing – full-stack engineers are given priority.
The concept of full-stack engineer is actually a beautiful fabrication made by small companies (or small departments of large companies) in order to save labor costs and want programmers to do chores, but are embarrassed to say so. What is ridiculous and sad is that some programmers who do not know the true meaning of full stack are still proud of being full stack and feel that they have kept up with the trend. They are really being sold and still helping people make money.
The author can responsibly say here that in the first few years of entering the workplace, the right way is to focus on improving depth. The trend of full-stack engineers is just like Recently, some Internet celebrities who have adopted unconventional means to become famous are destined to be short-lived. Only one skill can be a long-term solution.
The 4 to 5 years is actually a relatively important stage.
After the previous year’s experience, I believe you already have certain insights in the field you are studying. At this time, you should have encountered a technical bottleneck.
Don’t rush to improve your skills at this time. It’s time to improve your influence. You can try to go to some well-known companies to improve your background. You can publish some articles to influence more people. . Of course, you can also go to Github to create an open source project of your own to build your own products. This open source project is different from the previous wheel-making. At this time, you really have to try your best to create a wheel that is truly valuable to others.
At this stage of technical learning, it is easy to encounter bottlenecks, and often after reaching a certain level, the effect of further deepening is really minimal, unless you are specialized in academic research. Unfortunately, most programmers cannot do this. That is what scientists do.
At this time, improving influence is not only because it is easy to encounter technical bottlenecks, but also because influence can create more opportunities for you. Programmers are similar to celebrities to a certain extent. A good TV series or movie can create a group of stars. Programmers sometimes do the same. A good project can create a group of programmers.
For example, there are several popular projects in China, such as Taobao, Alipay, QQ, Baidu, WeChat, etc. Each of these projects has created a group of programmers. LZ dares to say that if you are the core developer of any project here, just having such a Title is already a huge advantage for you. What's more, it's not just that. Title is just a title after all. More importantly, when doing this kind of project, it must be very powerful for your experience.
If you want to participate in such a project, in addition to relying on luck, influence is also a very important means. For example, if you have a certain influence in the field of distributed computing, if there are any good projects related to distributed computing, the other party is likely to invite you. Even if someone doesn't invite you and you take the initiative to go for an interview, if the other party knows your influence in this field, it will definitely play a big role, and this role may even exceed your current technical ability.
Therefore, at this stage, your biggest task is to improve your influence and prepare for that day in your working career for the next ten years. If you can rely on your influence and the skills you have accumulated in the past to participate in a great project, then you will be successful in the next five years.
Of course, LZ is now fully prepared and has only been a programmer for less than 4 and a half years. Therefore, regarding the 4 to 5 years part, LZ’s opinion is not necessarily correct. Even if it is correct, it will not be correct. There must be something for everyone. Therefore, I hope that everyone can use their own judgment to decide how to spend this year.
Among the suggestions given by the author, there are already choices, such as the three books on Operating System Principles, Network Protocols, and Algorithms, as well as the fields you plan to study, all of which are for you to choose. , instead of the author telling you directly which book you should read and which field you should study.
This is actually in line with the conventional learning path. When you are a junior and intermediate engineer, everyone learns the same thing. After three years, after you advance to a senior engineer, everyone will naturally move into different fields.
It’s just like going to school. When I was young, I learned the same things. In high school, I started to take liberal arts classes. In college, I started to choose a major. When I got to graduate school...
Um, Suddenly I remembered that I had never been to a graduate school, so I didn’t know for sure, but the path of study must have been more subdivided, right?
Therefore, at this stage of 4 to 5 years, there is actually no fixed path to follow. The reason why I suggested that everyone improve their “influence” before is actually, in retrospect, the deep-seated reason is I hope everyone will go to some well-known companies, such as...ahem...you know (this is a perfect hint, I feel that a 4 is not too much).
In fact, during the 3rd to 5th years, the best choice is to improve your core competitiveness while starting to enter a company that can "whitewash", or in other words, improve " influential" company.
What is "whitewashing"?
But when you want to climb up, that is, when you become a senior technical manager, you don’t have a certain background. No matter how powerful you are, it won’t help. This is what the author calls “ Influence" can actually be called "convincibility".
Have you ever heard of a company where the CTO or technical director is a poor scholar with no academic qualifications and has never entered any big company?
Some people may raise their hands to speak at this time, "Author, you are wrong. I have seen such a person! He has no academic qualifications and has never been in a big company, but he is the CTO. It’s so awesome.”
There are only two situations. The first one is that the person you are talking about is too powerful and is not within the scope of this article. Hahaha. The second one is that the CTO is a project manager who manages ten people. There are twenty fake CTOs, because there are only so many people in the company, -_-.
In short, in a word, after saying so much, "whitewashing" means that if your academic qualifications are not outstanding enough, try to find ways to improve your company background.
At the very least, if one day you really take the position of CTO, you can add this sentence to your profile, "I once worked for a famous XXXX company and held the position of XXX."
Does it feel more convincing?
So, again, Alibaba middleware welcomes you! It’s been 5 years, classmate, it’s time for you to go home! (Boss, I want to be 5 this year, -_-)
For students at this stage, it is different from when they first entered the workplace 5 years ago. In comparison, in addition to differences in work, the biggest possibility is from changes in life.
Therefore, at this stage, let’s not talk about work or study path, let’s talk about life.
5 years ago, you may have been single, you were free, you worked hard, you changed jobs, you wandered around, but 5 years have passed, you may have been married and even had children. At this time You have to consider some practical issues.
Buying a car? Buy a house? Settled?
Each of these items is like a big mountain, weighing on office workers struggling in first-tier cities.
Especially when it comes to buying a house, even if you already have an annual salary of 50W, it is still very difficult to buy a house in first-tier cities.
Since 50W is deducted from all kinds of random things, it is estimated that it will be reduced by 15W, which means that you will only get about 35W. Add in your expenses, and you can save 20W a year. It is very good, and a first-line set For a house, the minimum down payment is basically one million (that is, the total price is 300W, which is already a first-line cabbage price). This requires saving for 5 years, not to mention how many people at this time have less than an annual salary. to 50W.
Furthermore, can you guarantee that housing prices will not rise in the next five years? Can you guarantee that you won’t have any big expenses in the past five years?
Some students may want to raise their hands and say, "My parents have bought me a house in the 2nd Ring Road of Beijing."
Then the author can only say, "This classmate, Please get out! Hehe..."
What we are discussing here are mainly non-second-generation students. Regarding the second-generation students, the author has only one suggestion for you. Just eat and have fun. Stop trying to grab jobs, -_-.
Okay, let’s get back to the subject. Buying a house is actually only the first difficulty. I don’t know about other cities, but in Beijing, settling in is more difficult than buying a house. It can basically be said that there is no way out. Although there has been a recent The points are settled, but no matter how you look at them, they are both attractive and useless.
Speaking of this, the author has to mention an article I wrote before, titled "Programmers, it will be too late if you don't take action!" 》, in fact, it talks about how programmers can settle down.
I won’t go into details here. Interested students can read it by themselves. Here is just a quote from the article - First-tier cities strive to save money, second-tier cities live and work in peace and contentment.
One sentence already tells the final destination of programmers, and among the second-tier cities, Hangzhou is currently the most suitable one.
The Internet industry in Hangzhou is quite developed. The wages are not much lower than those in the first tier, and may even be higher. However, the average house price is less than half of that in the first tier. In addition, Hangzhou has beautiful scenery. The city is definitely the most suitable place for "wild" programmers who work hard outside to live and work in peace and contentment.
When moving from the front line to Hangzhou, you always need a company to make the transition. Needless to say, this is the most suitable company, ahem...you know... (Implantation without any sense of violation, -_-)
As for other well-known Internet companies, most of them are located in Beijing, Shanghai and Shenzhen. Even if the salary is higher, in terms of life pressure and happiness, I believe that It cannot be compared with a livable city like Hangzhou.
It’s been 5 years, what are the 5 years of struggle for? Maybe when you first entered the workplace, you were high-spirited and wanted to change the world, but after you get married and have children, you will find that before you can change the world, you must first live and work in peace and contentment, -_-.
So, again, ahem...
Alibaba middleware welcomes you!
In fact, looking at what the author is talking about today, it is how the "wild" Java programmers, through study and hard work, entered Alibaba and bought a house in Hangzhou. the way.
Yes, the end of this learning path is not to help you become a technical expert, but to teach you to live and work in peace and contentment.
After all, when we work outside, don’t we just want to take root and settle down in a big city?
As for your original dream of changing the world, it’s not too late to talk about changing the world after you have settled your life.
Of course, one thing should be emphasized. The part about learning (that is, the first 4 years) is relatively common. Basically, all Java learners can refer to the author’s study at that time. The route, even in extreme cases, is not impossible to copy. (Disclaimer: The author is not responsible for what you will learn, -_-)
However, for this part of settling down (that is, after 4 years), it may not apply to everyone, such as some Since my hometown is in a first-tier city like Shenzhen, there is no need to come to Hangzhou. After all, there is also an Ali Center in Shenzhen, -_-.
Therefore, in the first few years of work, you can follow the author's learning path, but when you work to the stage of 3-4 years (or when you find a wife, - _-), while you are working and studying, you also need to plan which city you will settle down in the future and which company you will join.
After you have identified your target, you must carefully study the city’s housing prices, home purchase policies, settlement policies, etc., and also study the company’s interviews and which aspects they tend to prefer (such as the content in the first part of this article, -_-), and then wait until the money is almost saved...
Okay, the reason why I use the ellipsis after it is because I am afraid that your current boss will come to Hangzhou to fight me after seeing it, but I believe you understand, -_-.
#end:
#Finally, I am going to say a few words. Learning itself is a very hard thing, and learning Java is even more difficult. It is a painful thing, but since you have chosen this path, grit your teeth and persevere. In the end, you will find that the future is really bright.
Related articles:
Related videos:
JAVA Elementary Introduction Video Tutorial
The above is the detailed content of What are the questions asked in Alibaba recruitment interviews? Several points to note for self-study of Java programmers. For more information, please follow other related articles on the PHP Chinese website!