What a Javaist needs to know to pass an interview
A short note with technologies and useful links that allowed me to pass an interview and work at Sberbank.
Javaist skills
Language
Basics:
Java Core (basic language mechanisms: data types, loops, etc.)
collections
exceptions
generics
annotations
functional interfaces and Stream API
A general understanding and ability to answer interviews is enough:
reflection
multithreading
garbage collector
JVM memory device
generic JDK device
Framework (Spring)
Basics:
Spring MVC
Spring Data JDBC
Spring Test
Spring basics: IoC, DI, beans, etc.
difference between Spring and Spring Boot
For general development: Spring Security
Assembly system
Backender skills
Databases and SQL
Basics:
relational database device
types of connections and keys
indexes and restrictions
transactions, their levels and ACID
ability to write SQL queries (ddl, dml)
For general development:
Base version control system (for Java this is Liquibase). It is quite easy to use and will come in handy in your work.
other types of SQL: dcl, tcl
PL/SQL: should not be used in pet projects, but may be encountered in work.
Interactive SQL course
More in-depth course from PostgresPro
SQL trainers: sql academy And sql exercises
Net
Basics:
For general development:
Video about client-server architecture and protocols
Details about REST
Docker
It is enough to use it in pet projects and have a superficial knowledge of the operating principle. Docker is a really convenient thing, but if you are on Windows, you will have to suffer a little with WSL.
Linux
It is enough to learn the basic commands (navigating in the terminal, changing rights, creating/deleting/moving files) and the general structure of the file system.
Kafka
Additionally. Kafka is complex, so don't get too hung up on it. But you can figure it out a little – it will be a plus in interviews and will help in your work.
General skills
Git
Basics:
creating repositories
commits, resets, reverts
branches (branch creation, rebase and merge)
working with a remote repository on GitHub
For general development: approaches to working with git (IMHO, the most useful is git flow)
Well on Git from Yandex Workshop
An article about approaches to working with git
Architecture
SOLID principles
OOP (or functional programming, if more relevant for your language)
Design Patterns
There is no need to go too deep into them, just read a couple of articles. Also, don't try to use them in your pet projects, it will only confuse you.
Good website with an explanation of the patterns (login from Russia using a VPN).
What not to learn
In my pets, I spent a lot of time studying the built-in Spring Security function for parsing JWT, searching for the ideal way to handle exceptions in Spring MVC, thoroughly studying the Spring Data JPA documentation and the plugin for generation from OpenAPI.
Yes, it was interesting to understand all this, but I could have completed the tasks that were in front of me much faster and in the future this knowledge was not even useful to me.
That's why:
try to prioritize correctly
put yourself within a time frame
remember that the best is the enemy of the good
remember the principles of KISS and YAGNI
and about one of the Agile principles: a working product is the main indicator of progress