STAGE 1. Training
I came to JavaRush consciously: an adequate monthly price list, a clear structure of the material, a lot of practice and the presence of my own community. The first point is all clear, but learning a language without structure is quite difficult, and such training will certainly leave a person with serious gaps in Java Core. The experience of interviews and technical specifications shows that questions about the “core” can be used for everything: from bitwise shifting and casting of generics to IO and serialization. Practice is a must-have; I still can only understand and remember half of the things if I wrote them myself. Well, the community: you solved the problem - brag about it in the comments; If you haven’t decided, you’re welcome to ask questions, but most likely no one will give you a ready-made solution. And I returned to custom articles on free topics even after finishing the course, there is a lot of good stuff there to start with (especially the first experience with frameworks using step-by-step examples + questions for interviews). In general, I am grateful to this project for the base I received, but I would not rely only on JavaRush - the same Shildt best of all goes “overlapping” on the topic being studied, and often reveals some points. A lot has already been said in the reviews about tasks that sometimes go ahead of theory and force you to Google. For me, this is more of a plus than a minus - and it’s not a fact that now the situation is the same as when I was studying. Immediate advice to those who, like me, enter Java “from scratch” : at some stage you may become bored or difficult:-
It’s hard for everyone starting from scratch; God forbid, only 5% of people reach the end of the course. Your task is to become one of them.
-
I became interested after a month or two, when the tasks became more difficult and interesting. Be patient.
- The main thing is weekly progress. After two weeks of rest, it’s already difficult to return, and not everyone can write every day for several months in a row. Give yourself a limit of hours for the week - for example, 15. You can code for 1.5 hours every weekday and another 3-4 hours on both weekends, or you can take a couple of evenings off, but the “weekend limit” will increase. This way, the schedule will be flexible, but regular. Of course, then it will be possible to measure work by tasks and projects, but at the syntax and kernel level, hours will do.
STAGE 2. Self-education
So, I didn’t get the internship: I only left a couple of days on the technical requirements until the end of recruitment into the group and didn’t have time to figure out the requirements - there were too many unfamiliar words. Because I didn’t want to wait another three months, I decided to move on myself. Fortunately, there are guides and video tutorials for all popular frameworks. Over the next few months, I dealt with Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS, mastered SQL and tried to put it all together into a single whole. Six months later, I had projects that are scary to look at now, but I gained practical experience in using “adult” frameworks and a GitHub that could be shown at the request of a potential employer. Adviсe :-
The sooner you learn about .gitignore, the better. ;)
-
Many guides include several frameworks at once; use this and add your own. We wrote an online store using Maven + Spring Boot + Data - add authorization, unit tests and logging.
-
For web projects, you can take free frontend templates from the Internet - they are more pleasant to work with, they look better as screenshots in the README on Git. At the same time, you will be able to remember HTML and CSS - you will probably want to correct the styles and layout.
What I was missing (later I got burned during an interview)
-
Algorithms. To avoid my mistakes, I immediately recommend a short book in Russian, “Grocking Algorithms.” What is the complexity of algorithms, what does it consist of, why quicksort is not enough, an introduction to graph theory - everything is there and in the most understandable language.
-
Collections "under the hood". I don't remember if this was in JavaRush, but it's useful to know how HashMap.get() works or why a HashSet is not guaranteed to preserve element order. Again, which collections are thread safe and why.
-
SQL. You need at least up to JOINs - what they are, how they work, the ability to write a SELECT on two tables on paper on the fly. I recommend www.sql-ex.ru: it will take you to the desired level in a day or two.
-
Spring Core: what annotations are there, what is a context, how beans are created, which Bean Scope is thread safe, and how to solve mutual injection - all interview questions. How to return a page, how to return JSON, etc. I’m currently reading “Spring 5 for Professionals” in Russian, but in general they recommend “Spring in Action”.
STAGE 3. Job search
Actually, in the first couple of months after completing home projects, I sent about 30 responses to various Junior\Trainee vacancies (through HH, LinkedIn, recruitment agencies), with near-zero results. I focused only on vacancies without experience, honestly indicated a stack familiar to me and wrote about my high learning ability in cover letters. The result is two calls (one of which immediately ended in my pre-intermediate English), two more companies sent technical specifications, there was only one “meeting”, and then I was there alone solving problems on algorithms on a piece of paper, after which HR simply took away the papers and "We'll call you." I tried to get a couple of internships (unpaid and conditionally paid): I did the technical specification, but did not go beyond the final social security; but now I can say that trainees are definitely recruited by T-Systems, CFT, Andersen and EPAM (they have mixed reviews, decide for yourself). As for me, it’s a good way to enter the field if you have the opportunity to sit without income for several months and not die =) In general, after this experience I became somewhat depressed, and put the whole story with the search on pause for almost six months - I continued to work on the previous profile , wrote some applications just for fun, but didn’t even post them on Git. Until I met one acquaintance, to whom I casually told about the failures with vacancies: at that time he was already working as a middle developer, but he started in the same way - with self-study. An acquaintance gave me a couple of recommendations , which he used himself and which greatly helped me with my job search in the future. Whether you follow them or not is up to you, because... they are, in some way, not entirely honest. So, further quotes:-
In any way, provide yourself with 6+ months of commercial experience in your resume: internships, graduation projects, freelancing, remote work - whatever. This will greatly help at the stage of initial screening of resumes by HR;
-
remove the word Junior and expected salary from your resume; just leave it as Java Developer, and discuss the money individually with each company;
-
try to have HR name the “fork” of the proposed salary before you name your expectations. If a company offers 80-120k, and you are looking for 40k or more, some selectors will treat you with disdain;
-
Apply to all vacancies that suit your stack, even if they require 1-3 years of commercial experience.
-
Include in your resume the entire stack of languages, technologies, and frameworks you have worked with.
-
Register on LinkedIn - there are really a lot of HR people from different companies there. Fill out your profile carefully - in fact, this is also your resume. To develop your network of contacts, add LIONs relevant to your profile; they accept requests from all users.
-
Try yourself in free Java tests - they are often given on paper before the Junior interview. It's better to prepare in advance.
-
They always ask about the collections: which ones are there, how they differ, when is the best time to use them.
-
Always on abstract classes and interfaces - can they have methods, fields, which ones, can they be inherited, etc.
-
Almost always on multithreading - what you used in your work, keywords, methods, are you familiar with util.concurrent.
-
Often when working with memory - the heap, the stack, and will these strings be equal, and these objects, why.
-
Sometimes about algorithms - which ones do you know, what complexity, why, can you write an algorithm now.
-
Sometimes based on patterns - which ones you know, which ones you use, write a singleton or factory.
-
Sometimes in SQL - types of JOINs, what a transaction is, how to conduct it in JDBC, write a short query.
-
Salesforce profile business contacts page with editing and adding new records;
-
simulation of an elevator in a multi-story building using the Spring State Machine with console control;
-
Android application based on the LibGDX library with character-by-character text output when a button is pressed;
-
REST imitation of car sharing, with adding clients via HTTP request and returning JSON;
-
problem of sorting an undirected graph through a free cell;
-
search for isosceles triangles using coordinates from a file;
-
refactoring of finished code using Stream API;
-
UI calculator with support for ternary expressions;
-
race of threads with writing the results to a file.
-
Try not only to complete the task, but also to ensure that the code complies with OOP principles.
-
Check your code for efficiency - I was once rejected because, among other things, I used PrintStream instead of BufferedWriter.
-
Plan your execution time with a 50% margin - it’s better to start and finish earlier than to do a git push at eight o’clock in the morning of the deadline.
GO TO FULL VERSION