JAVA

Проработать

  1. Вопросы для собеседования на Java Developer
  2. Вопросы для собеседования на Java Developer
  3. Дорожная карта Java-разработчика в 2022 году
  4. Собеседование Java Middle | Реальное собеседование | Jetbulb
  5. Java. Web API | Марафон ІТ- технології 3.0
  6. oauth vs oauth2
  7. jwt
  8. Amazon Web Services(AWS)
  9. Современная серверная разработка на языке Java: 1. Инструменты разработчика
  10. Современная серверная разработка на языке Java: 2. Архитектура серверного приложения
  11. Java Middle Interview
  12. Гриша Скобелев, Саша Бармин: Публичное собеседование Senior Software Engineer
  13. How Senior Programmers ACTUALLY Write Code
  14. Тесты:

  15. Как наконец-то начать писать тесты и не пожалеть об этом
  16. Mocking Void Methods with Mockito
  17. Александр Баглай "Как работать с Mockito"
  18. Шесть простых примеров по Mockito (перевод)
  19. Java Servlets 10 Mockito тестирование
  20. Разное:

  21. Классы BigInteger и BigDecimal
  22. Как использовать BigDecimal в Java
  23. Перегрузка методов equals() и hashCode() в Java
  24. Разбираемся с hashCode() и equals()
  25. 1000+ часов видео по Java на русском
  26. Собеседование по Java — ООП (вопросы и ответы). Часть 2
  27. Внутренние классы
  28. Урок 1. Java — Самоучитель по программированию с нуля
  29. Метод compareTo
  30. Загрузка классов, ClassLoader
  31. Кратко об аннотациях в Java
  32. Java @Аннотации. Что это и как этим пользоваться?
  33. Ответы на вопросы на собеседование Java core (часть 1).
  34. Heroku

  35. Начало работы с Heroku на языке Java
  36. Heroku и React: деплоим свое первое приложение
  37. Вопросы для собеседования на Java Developer
  38. Современные требования к Java-разработчику: о чём вас спросят на собеседовании
  39. Java Message Service (JMS)
  40. Основы Java-программирования
  41. 123 задачи с IT-собеседований с разбором решений
  42. Размер Java объектов
  43. Микросервисы

  44. MicroNaut framework for java для микросервисов
  45. JAVA 21

  46. Java 21 новые возможности: Виртуальные потоки. Перевод.li>

Что это:

JAVA - объектно ориентированный, компилирующийся(javac), интерпретирующийся(JVM, JIT), мультиплатформенный язык программирования.

Основные разделы:

  1. Конвенция
  2. Java core
  3. Frameworks
  4. Immutable Class
  5. Jvm
  6. Библиотеки
  7. Память
  8. Системы сборок проектов
  9. Рефакторинг
  10. Web
  11. VisualVM
  12. Code review

Как работает JAVA

Создание, Компиляция:

  1. Пишем JAVA код(исходный код) в файлы .java.
  2. Через javac(.java -> .class) - компилируем в байт-код. Название байт-код было выбрано потому, что для кодирования каждой операции используется ровно один байт.

Запуск, Интерпретация(JVM):

  1. JIT - оптимизирует код и компилирует его в машинный код.
  2. Выполнение машинного кода.

Just-in-time

Just-in-time компилятор - кеширует код, который выполняется часто. Но это дополнительная память.

Есть 4 уровня JIT компиляции байт-кода в машинный код. Чем выше уровень компиляции, тем он сложнее, но и одновременно выполнение такого участка будет быстрее, чем участка с меньшим уровнем. JIT — компилятор самостоятельно решает, какой уровень компиляции задать для каждого фрагмента программы на основе того, как часто выполняется этот фрагмент.

Под капотом JVM использует 2 JIT-компилятора — C1 и C2. C1 компилятор так же называется клиентским компилятором и способен скомпилировать код только до 3-его уровня. За 4-ый, самый сложны и быстрый уровень компиляции отвечает компилятор C2.

Из вышесказанного можно сделать вывод о том, что для простых, клиентских приложений, выгоднее использовать компилятор C1, так как в этом случае нам важно как быстро стартует приложение. Серверные, долгоживущие приложения могут стартовать большее количество времени, однако в дальнейшем должны работать и выполнять свою функцию быстро — тут нам подойдет компилятор C2.

При запуске Java — программы на x32 версии JVM мы в ручную можем указать, какой режим мы хотим использовать, при помощи флагов -client и -server. При указании флага -client JVM не будет производить сложные оптимизации с байт-кодом, что ускорит время старта приложения и уменьшит количество потребляемой памяти. При указании флага -server приложение будет стартовать большее количество времени из-за сложных оптимизаций байт-кода и будет использовать больше памяти для хранения машинного кода, однако в дальнейшем работать такая программа будет быстрее.

В x64 версии JVM флаг -client игнорируется и по умолчанию используется серверная конфигурация приложения.

Java roadmap

JAVA 21

Virtual threads

Потоки которые не требуют маппинга на реальные потоки процессора.

Тестовые задачи

Реализовать методы класса LinkedList

class Node {
    Integer value;
    Node next;
}

class LinkedList {
    private Node head;

    public void remove(Integer value) {
    }

    public void add(Integer prev, Integer next, Integer value) {
    }
}