☕️ Загрузка, проверка и исполнение байт кода;
☕️ Предоставление среды выполнения для выполнения байт-кода;
☕️ Управление памятью и очисткой мусора (Garbage collection).
Виртуальная машина Java (Java Virtual Machine) - это механизм, предоставляющий среду выполнения для управления Java-кодом или приложениями. Виртуальная машина является независимой оболочкой исполнения кода, благодаря которой возможен её запуск на любой ОС, без влияния ОС на выполняемую программу.
JVM работает с 2мя типами данных: примитивные типы (primitive types) и ссылочные типы (reference types).
Примитивы
JVM работает с примитивными значениями (целыми числами и числами с плавающей точкой). По сути, JVM - это 32-битная машина. Типы long и double, которые являются 64-битными, поддерживаются изначально, но занимают две единицы памяти в frame's local или стеке операндов, поскольку каждая единица составляет 32 бита. Типы boolean, byte, short и char имеют расширенный знак (кроме char с нулевым расширением) и работают как 32-разрядные целые числа, так же, как и типы int. Меньшие типы имеют только несколько специфических для типа инструкций для загрузки, хранения и преобразования типов. boolean значение работает как 8-битное byte значения, где 0 представляет значение false, а 1 - значение true.
Типы ссылок и значения
Существует три типа ссылочных типов: типы классов, типы массивов и типы интерфейсов. Их значения являются ссылками на динамически создаваемые экземпляры классов, массивы или экземпляры классов, которые реализуют интерфейсы соответственно.
☕️ Предоставление среды выполнения для выполнения байт-кода;
☕️ Управление памятью и очисткой мусора (Garbage collection).
Виртуальная машина Java (Java Virtual Machine) - это механизм, предоставляющий среду выполнения для управления Java-кодом или приложениями. Виртуальная машина является независимой оболочкой исполнения кода, благодаря которой возможен её запуск на любой ОС, без влияния ОС на выполняемую программу.
JVM работает с 2мя типами данных: примитивные типы (primitive types) и ссылочные типы (reference types).
Примитивы
JVM работает с примитивными значениями (целыми числами и числами с плавающей точкой). По сути, JVM - это 32-битная машина. Типы long и double, которые являются 64-битными, поддерживаются изначально, но занимают две единицы памяти в frame's local или стеке операндов, поскольку каждая единица составляет 32 бита. Типы boolean, byte, short и char имеют расширенный знак (кроме char с нулевым расширением) и работают как 32-разрядные целые числа, так же, как и типы int. Меньшие типы имеют только несколько специфических для типа инструкций для загрузки, хранения и преобразования типов. boolean значение работает как 8-битное byte значения, где 0 представляет значение false, а 1 - значение true.
Типы ссылок и значения
Существует три типа ссылочных типов: типы классов, типы массивов и типы интерфейсов. Их значения являются ссылками на динамически создаваемые экземпляры классов, массивы или экземпляры классов, которые реализуют интерфейсы соответственно.
#вопросы_с_собеседований
Как не допустить сериализацию?
Как не допустить сериализацию?
Java Hiring Marathon, 30 ноября - 4 декабря
Сокращаем время от интервью до оффера в проект по разработке медицинских веб-порталов. Если ты пишешь на Java SE 11 и разбираешься в CI/CD, скорее выполняй тестовое задание и подключайся к онлайн-интервью с командой проекта. Мы подготовим интересное предложение и дадим обратную связь в день собеседования:
📌Задача проекта: мы разрабатываем медицинские веб-порталы для компании, которая занимается генетическим тестированием для ранней диагностики заболеваний. Наша задача - улучшить систему взаимодействия между пациентами и специалистами лабораторий и увеличить скорость предоставления результатов тестов пациентам за счет автоматизации всех процессов.
👬 Команда: опытные и талантливые frontend и backend разработчики, QA и test automation инженеры, UX/UI дизайнеры, менеджеры и аналитик. За год программа выросла с 7 до 40+ человек и продолжает расширяться.
🚀 Технологии: Java 11+, Spring, Kafka, React, Typescript, Scala, Python, React, Docker, AWS.
👍🏻 Особенности проекта: мы разрабатываем фичи, которые уже через 1-2 недели попадают в production, помогают лечить людей и спасать их жизни.
📍Ждем кандидатов из Н. Новгорода, Казани и других городов России (есть возможность удаленной работы).
🌟 Регистрируйся на сайте career.orioninc.ru/java-hiring-marathon.
Сокращаем время от интервью до оффера в проект по разработке медицинских веб-порталов. Если ты пишешь на Java SE 11 и разбираешься в CI/CD, скорее выполняй тестовое задание и подключайся к онлайн-интервью с командой проекта. Мы подготовим интересное предложение и дадим обратную связь в день собеседования:
📌Задача проекта: мы разрабатываем медицинские веб-порталы для компании, которая занимается генетическим тестированием для ранней диагностики заболеваний. Наша задача - улучшить систему взаимодействия между пациентами и специалистами лабораторий и увеличить скорость предоставления результатов тестов пациентам за счет автоматизации всех процессов.
👬 Команда: опытные и талантливые frontend и backend разработчики, QA и test automation инженеры, UX/UI дизайнеры, менеджеры и аналитик. За год программа выросла с 7 до 40+ человек и продолжает расширяться.
🚀 Технологии: Java 11+, Spring, Kafka, React, Typescript, Scala, Python, React, Docker, AWS.
👍🏻 Особенности проекта: мы разрабатываем фичи, которые уже через 1-2 недели попадают в production, помогают лечить людей и спасать их жизни.
📍Ждем кандидатов из Н. Новгорода, Казани и других городов России (есть возможность удаленной работы).
🌟 Регистрируйся на сайте career.orioninc.ru/java-hiring-marathon.
Чтобы не допустить автоматическую сериализацию можно переопределить private методы для создания исключительной ситуации NotSerializableException.
private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException();
}
private void readObject(ObjectInputStream in) throws IOException {
throw new NotSerializableException();
}
Любая попытка записать или прочитать этот объект теперь приведет к возникновению исключительной ситуации.
private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException();
}
private void readObject(ObjectInputStream in) throws IOException {
throw new NotSerializableException();
}
Любая попытка записать или прочитать этот объект теперь приведет к возникновению исключительной ситуации.
🖥🛠❓Брендовый неттоп vs самосборный мини-ПК: выбираем компьютер для программиста
Собрать компактный компьютер для программирования самому или взять готовый? Наш сравнительный обзор поможет выбрать. В него вошли восемнадцать неттопов и комплектующие для системника Mini ATX.
https://proglib.io/sh/C2ncqG1Vh9
Собрать компактный компьютер для программирования самому или взять готовый? Наш сравнительный обзор поможет выбрать. В него вошли восемнадцать неттопов и комплектующие для системника Mini ATX.
https://proglib.io/sh/C2ncqG1Vh9
Как научиться правильно разрабатывать и запускать приложения в K8s? Есть несколько путей, но, пожалуй, самый быстрый — это пройти трёхдневный онлайн-интенсив «Kubernetes для разработчиков» от Слёрм.
Чем ещё хорош этот путь?
– Материал курса основан на практическом опыте. Учим тому, что делаем на своих проектах.
– Никаких админских штучек и историй про обслуживание кластера. Только инструментарий и знания, которые требуются разработчикам.
– Никто не уйдёт без результата. Спикеры и техподдержка помогут каждому студенту справиться с заданиями.
Интенсив стартует 3 марта. Сейчас можно записаться по минимальной цене – 20 000 рублей.
Посмотреть программу и подать заявку.
Чем ещё хорош этот путь?
– Материал курса основан на практическом опыте. Учим тому, что делаем на своих проектах.
– Никаких админских штучек и историй про обслуживание кластера. Только инструментарий и знания, которые требуются разработчикам.
– Никто не уйдёт без результата. Спикеры и техподдержка помогут каждому студенту справиться с заданиями.
Интенсив стартует 3 марта. Сейчас можно записаться по минимальной цене – 20 000 рублей.
Посмотреть программу и подать заявку.
❹ ❌👨🎓4 мифа о профессии программиста, в которые вы почему-то еще верите
В этой статье эксперты SkillFactory опровергают расхожие мифы о профессии программиста и подсказывают, что делать дальше.
https://proglib.io/sh/TSlahZCnF7
В этой статье эксперты SkillFactory опровергают расхожие мифы о профессии программиста и подсказывают, что делать дальше.
https://proglib.io/sh/TSlahZCnF7
Напиши свою первую программу💻 на одном из самых востребованных языков программирования — Java. Занятия бесплатные, а опыт, который ты получишь, поможет понять, в каком направлении двигаться дальше.
Регистрация займёт меньше минуты: 👉 https://clc.to/L73zJQ
🔥 Углубишь знания о Java.
🔥 Попрактикуешься в разработке и создашь первый проект — программу для мониторинга рабочего стола.
🔥 Узнаешь о базовых инструментах, которые применяют программисты.
🔥 Сможешь общаться с преподавателем интенсива и другими участниками в закрытом чате в Telegram.
☝️ 3 дня тебя будет обучать профи в своём деле, директор центра SymbioWay, который уже более 15 лет работает в сфере Java и веб-разработки и находит IT-специалистов для крупнейших компаний России — Даниил Пилипенко.
⭐️ Пройди бесплатный онлайн-интенсив с 30 ноября по 2 декабря в 19:00 по московскому времени. Попади в тройку лучших участников и получи сертификат на 30 000 рублей для обучения в Skillbox!
Регистрация займёт меньше минуты: 👉 https://clc.to/L73zJQ
🔥 Углубишь знания о Java.
🔥 Попрактикуешься в разработке и создашь первый проект — программу для мониторинга рабочего стола.
🔥 Узнаешь о базовых инструментах, которые применяют программисты.
🔥 Сможешь общаться с преподавателем интенсива и другими участниками в закрытом чате в Telegram.
☝️ 3 дня тебя будет обучать профи в своём деле, директор центра SymbioWay, который уже более 15 лет работает в сфере Java и веб-разработки и находит IT-специалистов для крупнейших компаний России — Даниил Пилипенко.
⭐️ Пройди бесплатный онлайн-интенсив с 30 ноября по 2 декабря в 19:00 по московскому времени. Попади в тройку лучших участников и получи сертификат на 30 000 рублей для обучения в Skillbox!
#вопросы_с_собеседований
В чем разница между PrintWriter и ServletOutputStream?
В чем разница между PrintWriter и ServletOutputStream?
📌 Линейная алгебра для начинающих с примерами. Лекция преподавателя МГУ
Линейная алгебра: матрицы и операции над ними. Системы линейных уравнений — исследование и решение, метод Гаусса, геометрический подход.
https://youtu.be/ojJG1Kjy8tM
Присоединяйтесь к полному курсу по ссылке.
Линейная алгебра: матрицы и операции над ними. Системы линейных уравнений — исследование и решение, метод Гаусса, геометрический подход.
https://youtu.be/ojJG1Kjy8tM
Присоединяйтесь к полному курсу по ссылке.
YouTube
Линейная алгебра для начинающих с примерами. Лекция преподавателя МГУ
Линейная алгебра: матрицы и операции над ними. Системы линейных уравнений — исследование и решение, метод Гаусса, геометрический подход
Сайт издания «Библиотека программиста» — https://proglib.io
Оставить заявку на курс «Математика для Data Science» можно…
Сайт издания «Библиотека программиста» — https://proglib.io
Оставить заявку на курс «Математика для Data Science» можно…
PrintWriter — класс для работы с символьным потоком, экземпляр которого можно получить через метод ServletResponse getWriter();
ServletOutputStream — класс для работы байтовым потоком. Для получения его экземпляра используется метод ServletResponse getOutputStream().
ServletOutputStream — класс для работы байтовым потоком. Для получения его экземпляра используется метод ServletResponse getOutputStream().
#вопросы_с_собеседований
В каких состояниях может находиться поток?
В каких состояниях может находиться поток?
Потоки могут находиться в одном из следующих состояний:
Новый (New). После создания экземпляра потока, он находится в состоянии Новый до тех пор, пока не вызван метод start(). В этом состоянии поток не считается живым.
Работоспособный (Runnable). Поток переходит в состояние Работоспособный, когда вызывается метод start(). Поток может перейти в это состояние также из состояния Работающий или из состояния Блокирован. Когда поток находится в этом состоянии, он считается живым.
Работающий (Running). Поток переходит из состояния Работоспособный в состояние Работающий, когда Планировщик потоков выбирает его как работающий в данный момент.
Живой, но не работоспособный (Alive, but not runnable). Поток может быть живым, но не работоспособным по нескольким причинам:
Ожидание (Waiting). Поток переходит в состояние Ожидания, вызывая метод wait(). Вызов notify() или notifyAll() может перевести поток из состояния Ожидания в состояние Работоспособный.
Сон (Sleeping). Метод sleep() переводит поток в состояние Сна на заданный промежуток времени в миллисекундах.
Блокировка (Blocked). Поток может перейти в это состояние, в ожидании ресурса, такого как ввод/вывод или из-за блокировки другого объекта. В этом случае поток переходит в состояние Работоспособный, когда ресурс становится доступен.
Мёртвый (Dead). Поток считается мёртвым, когда его метод run() полностью выполнен. Мёртвый поток не может перейти ни в какое другое состояние, даже если для него вызван метод start().
Новый (New). После создания экземпляра потока, он находится в состоянии Новый до тех пор, пока не вызван метод start(). В этом состоянии поток не считается живым.
Работоспособный (Runnable). Поток переходит в состояние Работоспособный, когда вызывается метод start(). Поток может перейти в это состояние также из состояния Работающий или из состояния Блокирован. Когда поток находится в этом состоянии, он считается живым.
Работающий (Running). Поток переходит из состояния Работоспособный в состояние Работающий, когда Планировщик потоков выбирает его как работающий в данный момент.
Живой, но не работоспособный (Alive, but not runnable). Поток может быть живым, но не работоспособным по нескольким причинам:
Ожидание (Waiting). Поток переходит в состояние Ожидания, вызывая метод wait(). Вызов notify() или notifyAll() может перевести поток из состояния Ожидания в состояние Работоспособный.
Сон (Sleeping). Метод sleep() переводит поток в состояние Сна на заданный промежуток времени в миллисекундах.
Блокировка (Blocked). Поток может перейти в это состояние, в ожидании ресурса, такого как ввод/вывод или из-за блокировки другого объекта. В этом случае поток переходит в состояние Работоспособный, когда ресурс становится доступен.
Мёртвый (Dead). Поток считается мёртвым, когда его метод run() полностью выполнен. Мёртвый поток не может перейти ни в какое другое состояние, даже если для него вызван метод start().
#вопросы_с_собеседований
Назовите основные характеристики шаблонов.
Назовите основные характеристики шаблонов.
Имя - все шаблоны имеют уникальное имя, служащее для их идентификации;
Назначение данного шаблона;
Задача - задача, которую шаблон позволяет решить;
Способ решения - способ, предлагаемый в шаблоне для решения задачи в том контексте, где этот шаблон был найден;
Участники - сущности, принимающие участие в решении задачи;
Следствия - последствия от использования шаблона как результат действий, выполняемых в шаблоне;
Реализация - возможный вариант реализации шаблона.
Назначение данного шаблона;
Задача - задача, которую шаблон позволяет решить;
Способ решения - способ, предлагаемый в шаблоне для решения задачи в том контексте, где этот шаблон был найден;
Участники - сущности, принимающие участие в решении задачи;
Следствия - последствия от использования шаблона как результат действий, выполняемых в шаблоне;
Реализация - возможный вариант реализации шаблона.
#вопросы_с_собеседований
Какие типы классов бывают в java?
Какие типы классов бывают в java?
☕️ Top level class (Обычный класс):
Abstract class (Абстрактный класс);
Final class (Финализированный класс).
☕️ Interfaces (Интерфейс).
☕️ Enum (Перечисление).
☕️ Nested class (Вложенный класс):
Static nested class (Статический вложенный класс);
Member inner class (Простой внутренний класс);
Local inner class (Локальный класс);
Anonymous inner class (Анонимный класс).
Abstract class (Абстрактный класс);
Final class (Финализированный класс).
☕️ Interfaces (Интерфейс).
☕️ Enum (Перечисление).
☕️ Nested class (Вложенный класс):
Static nested class (Статический вложенный класс);
Member inner class (Простой внутренний класс);
Local inner class (Локальный класс);
Anonymous inner class (Анонимный класс).
#вопросы_с_собеседований
В чем разница между HashMap и WeakHashMap? Для чего используется WeakHashMap?
В чем разница между HashMap и WeakHashMap? Для чего используется WeakHashMap?
В Java существует 4 типа ссылок: сильные (strong reference), мягкие (SoftReference), слабые (WeakReference) и фантомные (PhantomReference). Особенности каждого типа ссылок связаны с работой Garbage Collector. Если объект можно достичь только с помощью цепочки WeakReference (то есть на него отсутствуют сильные и мягкие ссылки), то данный объект будет помечен на удаление.
WeakHashMap - это структура данных, реализующая интерфейс Map и основанная на использовании WeakReference для хранения ключей. Таким образом, пара «ключ-значение» будет удалена из WeakHashMap, если на объект-ключ более не имеется сильных ссылок.
В качестве примера использования такой структуры данных можно привести следующую ситуацию: допустим имеются объекты, которые необходимо расширить дополнительной информацией, при этом изменение класса этих объектов нежелательно либо невозможно. В этом случае добавляем каждый объект в WeakHashMap в качестве ключа, а в качестве значения - нужную информацию. Таким образом, пока на объект имеется сильная ссылка (либо мягкая), можно проверять хэш-таблицу и извлекать информацию. Как только объект будет удален, то WeakReference для этого ключа будет помещен в ReferenceQueue и затем соответствующая запись для этой слабой ссылки будет удалена из WeakHashMap.
WeakHashMap - это структура данных, реализующая интерфейс Map и основанная на использовании WeakReference для хранения ключей. Таким образом, пара «ключ-значение» будет удалена из WeakHashMap, если на объект-ключ более не имеется сильных ссылок.
В качестве примера использования такой структуры данных можно привести следующую ситуацию: допустим имеются объекты, которые необходимо расширить дополнительной информацией, при этом изменение класса этих объектов нежелательно либо невозможно. В этом случае добавляем каждый объект в WeakHashMap в качестве ключа, а в качестве значения - нужную информацию. Таким образом, пока на объект имеется сильная ссылка (либо мягкая), можно проверять хэш-таблицу и извлекать информацию. Как только объект будет удален, то WeakReference для этого ключа будет помещен в ReferenceQueue и затем соответствующая запись для этой слабой ссылки будет удалена из WeakHashMap.
#вопросы_с_собеседований
Даны 3 потока: Т1, Т2 и Т3. Как реализовать выполнение в последовательности Т1, Т2, Т3?
Даны 3 потока: Т1, Т2 и Т3. Как реализовать выполнение в последовательности Т1, Т2, Т3?