And I intentionally do not write for whom this training plan is intended: for a senior, middle or junior developer - it all depends on the specific vacancy and on the requirements of the employer. Therefore, rely on this plan, but filter and at the same time do not take it as an exhaustive guide.
- Java core . Here you can focus, for example, on the book “OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide: Exam 1Z0-809” to prepare for Java certification of the Professional level. There is a similar book “OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Exam 1Z0-808” for the Associate level - you can also look at it. Go through the table of contents and highlight for yourself what you can repeat. Of course, you should not go into all seriousness and read a book from cover to cover - many topics from this book can be bypassed, for example, date formatting. Highlight the most basic. For example, for me, these were the following topics: collections (the standard questions “How does the HashMap work?” Or “What is the difference between LinkedList and ArrayList?” Are also often asked at interviews), generics, functional interfaces, multithreading (filter here too - you don’t need cyclic barrier and fork join framework).
Also do not forget to project knowledge on your experience. For example, when did you use multithreaded programming? What problems did you solve? What locks did you use?
- Multithreading. I still highlight this topic in a separate paragraph - as the book above does not explain what volatile, locks and wait / notify are. If you have not worked with multi-threaded programming before - so be honest and speak at the interview. But some things that, for example, were listed above, it would be nice to know at least in theory (especially the question "What is volatile?" I had at almost every interview).
- Algorithms This topic is relevant not only for java developers. It is unlikely that you will be asked to write any sorting algorithm. The interviewer is not interested in knowing how wonderful you have learned the merge sort code (most likely he will just ask you to tell the general principle). But to solve an algorithmic problem, to evaluate the complexity of your decision, or for example to explain in words the principle of deep search, is a completely possible option.
- Data structures. How does a tree differ from a graph? What are AVL trees? How is the stack different from the queue?
Regarding java: what classes in java implement a stack or queue? How is LinkedList different from ArrayList? What is a hashset? How is it different from TreeSet? How does HashMap work?
These and similar questions are very likely to be interviewed. But it is worth noting that questions about trees and graphs are much less likely to appear in interviews - these structures are not used in practice so often. Rather, you are expected to have a good knowledge of what you used before. Do not know or did not use red-black wood? So tell me, you cannot know everything.
- Database. Relational and non-relational. What is the difference? What and when to use?
If we talk about relational ones, then repeat all the objects of such databases: tables, views, indexes. Repeat sql - how the query is built, what types of join exist, than having having differs from where. Also repeat transactions separately - isolation levels, ACID properties. Remember, have you ever had cases of query optimization? Did you have to look at the query execution plan?
Also do not forget to repeat jpa (if this specification is required in the vacancy). What is entity manager? What is persistence context? And so on, what I had to face.
- Frameworks Which frameworks you need to repeat depends on the specific vacancy. In most cases, Spring is required. Then do not forget to repeat how Spring generally works, the initialization stages of the bean. Recall which Spring frameworks you used (e.g. Spring mvc, Spring security, Spring data) and why. Repeat the main annotations (do not forget about Qualifier, Primary and Conditional - they like to ask about them especially often). And don't forget about bean scopes.
Separately, I want to touch on the Transactional annotation. How does she work? What can be additionally configured in it?
- Jvm device. What is a heap and a stack? How are objects stored in jvm? What is a string pool? What provides the principle happens before? How does the garbage collector work? Repeat as much as possible - it will not be superfluous.
- Patterns No need to drive - no one will need to list all existing patterns. But some, used in Java or Spring, need to be known (for example, Immutable, Singleton, Prototype, Builder, Proxy, Abstract factory, Wrapper).
- Algorithmic problems. Often at interviews they ask to solve a particular problem. Sometimes on a piece of paper, sometimes on a blackboard, sometimes on a specific site, if it's a Skype interview. Be prepared to write code without using your favorite development environment. Also practice solving puzzles, for example on Leetcode .
- Networks. Repeat the OSI model levels. And do not forget to repeat the main protocols in a little more detail: tcp, udp, http, https.
- Architecture. SOLID, service discovery, message queues. When to use microservices and when is a monolith? Have you used eureka or consul?
- Rest. Agile, Git and Gitflow, REST / SOAP, Linux (if you worked), Docker and Kubernetes (if you worked). And also tests - functional, integration and unit. What are the differences, which ones wrote, did they use TDD?
- English. Only if required. Of course, do not repeat the rules of the grammar of the English language. It is enough to train to tell about yourself, it is possible to remember some pre-prepared phrases.
- About myself. Be prepared to answer such questions: “What interesting problem did you have to solve at work?”, “Tell us what you are most proud of.”, “Tell us about your achievements.”, “Tell us about your failures.”, “How do you educate yourself?” , "Why did they leave their previous place of work?". If you have your own projects, articles or speeches, be sure to tell about them. They are very interested in these things and are sure to be asked to tell more.
Also, be sure to prepare your company questions. Highlight the main points that are important to you, right on points. On a habr there is a wonderful post about it .
And I will give some advice from myself.
Personally, I always put the first 2 interviews as training. That is, usually these are the companies that interest me the least. These interviews are needed just to get into the rhythm and not be afraid of subsequent ones.
Also be prepared to talk about your experience from a resume. What they did, why, what problems they solved.
Remember that you are not an encyclopedia, and should not immediately list, for example, all functional interfaces in Java. It will be quite normal if you tell only about what you worked with.
And remember that the interview is primarily a conversation. They do not interrogate you and do not want to shame you if you do not know anything. The employer will find out if you are a suitable candidate, and you will find out if this job is suitable for you.
Another good book is Cracking the Coding Interview . You can take a look, especially if you are going to undergo interviews in foreign companies such as Google, Facebook.
Useful resources that may be needed in preparation:
- Cracking the Coding Interview.
- OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide: Exam 1Z0-809.
- The post "I'll call you back . "
- Leetcode .
- Interviewbit Another site with algorithmic problems. Here, tasks are structured into categories.
Good luck