JAVA

Проработать

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

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

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

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

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

  49. 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) {
    }
}