#вопросы_с_собеседований
Где разрешена инициализация статических/нестатических полей?
☕️ Статические поля можно инициализировать при объявлении, в статическом или нестатическом блоке инициализации.
☕️ Нестатические поля можно инициализировать при объявлении, в нестатическом блоке инициализации или в конструкторе.
Разбираем как решать задачи на LeetCode
✅ Примеры решений
✅ Пояснения
Выбери своё направление:
1. Python
2. JavaScript
3. Java
4. C#
5. Golang
6. С/C++
7. PHP
8. Kotlin
9. Swift
Java-разработчики, встречаемся 4 июля в Рязани! 📆
Эксперты Сбера из разных команд и городов расскажут о технологиях и инструментах, которые позволяют увеличивать эффективность работы разработчика и всей команды.
Спикеры и темы:
✔️ Егор Курилов, Head of PerfTesting, и Назар Грехов, HT Lead, «Решение проблем производительности Java-приложений»
✔️ Павел Кислов, Senior Java-разработчик, «Spring Security: повседневное и неочевидное»
✔️ Глеб Борисов и Валерия Тихонова, Middle Java-разработчики, «Использование машины конечных состояний в Сбербанк Онлайн».
Место встречи: Рязань, лофт-пространство «Свобода», Соборная площадь, д. 21.
Регистрируйтесь и приходите 4 июля в 17:30 👌
Как пройти собеседование на позицию Java-разработчика
В статье автор разбирает вопросы и задачи, которые могут попасться на интервью.
Смотреть статью
Сборщик мусора (Garbage Collector) должен делать всего две вещи:
☕️ Находить мусор - неиспользуемые объекты. (Объект считается неиспользуемым, если ни одна из сущностей в коде, выполняемом в данный момент, не содержит ссылок на него, либо цепочка ссылок, которая могла бы связать объект с некоторой сущностью приложения, обрывается);
☕️ Освобождать память от мусора.
Существуют два подхода к обнаружению мусора:
☕️ Reference counting;
☕️ Tracing.
Reference counting (подсчёт ссылок). Суть этого подхода состоит в том, что каждый объект имеет счетчик. Счетчик хранит информацию о том, сколько ссылок указывает на объект. Когда ссылка уничтожается, счетчик уменьшается. Если значение счетчика равно нулю, - объект можно считать мусором. Главным минусом такого подхода является сложность обеспечения точности счетчика. Также при таком подходе сложно выявлять циклические зависимости (когда два объекта указывают друг на друга, но ни один живой объект на них не ссылается), что приводит к утечкам памяти.
Главная идея подхода Tracing (трассировка) состоит в утверждении, что живыми могут считаться только те объекты, до которых мы можем добраться из корневых точек (GC Root) и те объекты, которые доступны с живого объекта. Всё остальное - мусор.
Существует 4 типа корневых точки:
☕️ Локальные переменные и параметры методов;
☕️ Потоки;
☕️ Статические переменные;
☕️ Ссылки из JNI.
Самое простое java приложение будет иметь корневые точки:
☕️ Локальные переменные внутри main() метода и параметры main() метода;
☕️ Поток, который выполняет main();
☕️ Статические переменные класса, внутри которого находится main() метод.
Таким образом, если мы представим все объекты и ссылки между ними как дерево, то нам нужно будет пройти с корневых узлов (точек) по всем рёбрам. При этом узлы, до которых мы сможем добраться - не мусор, все остальные - мусор. При таком подходе циклические зависимости легко выявляются. HotSpot VM использует именно такой подход.
Существует ли возможность перенаправить потоки стандартного ввода/вывода?
Класс System позволяет вам перенаправлять стандартный ввод, вывод и поток вывода ошибок, используя простой вызов статического метода:
• setIn(InputStream)
- для ввода;
• setOut(PrintStream)
- для вывода;
• setErr(PrintStream)
- для вывода ошибок.
#вопросы_с_собеседований
Что такое «абстракция»?
Абстрагирование – это способ выделить набор общих характеристик объекта, исключая из рассмотрения частные и незначимые. Соответственно, абстракция – это набор всех таких характеристик.
Представьте, что водитель едет в автомобиле по оживлённому участку движения. Понятно, что в этот момент он не будет задумываться о химическом составе краски автомобиля, особенностях взаимодействия шестерёнок в коробке передач или влияния формы кузова на скорость (разве что, автомобиль стоит в глухой пробке и водителю абсолютно нечем заняться). Однако, руль, педали, указатель поворота он будет использовать регулярно.
🔥 Время прокачивать навыки в проектировании и расти!
💥 Проверь себя – пройди тест по архитектуре и шаблонам проектирования!
Ответишь успешно — пройдешь на курс «Архитектура и шаблоны проектирования» от OTUS по специальной цене со скидкой.
❗️На курсе ты научишься применять шаблоны проектирования и SOLID в разработке всего за 4 месяца под руководством опытных экспертов.
Именно эти навыки дадут мощное конкурентное преимущество IT-специалистам и повысят твою востребованность и доход!
➡️ ПРОЙТИ ТЕСТ:
https://clck.ru/3BYMrG?erid=LjN8K4gf1
💥 Пройдете тест и бонусом получишь:
– Доступ к записям лучших вебинаров курса
– Скидку на онлайн-курс «Архитектура и шаблоны проектирования»
🎁 А при покупке курса индивидуальную консультацию с преподавателем!
👩💻 Интеграционные тесты с контекстом. Тестирование слоя репозиториев и сервисов.
Ждём вас на втором занятии серии открытых практических уроков по тестированию Spring-приложений от OTUS: https://otus.pw/9EOF/
На вебинаре мы:
- обсудим особенности тестирования компонентов Spring-приложения с подъемом тестового контекста;- рассмотрим, как можно протестировать слой репозиториев на базе JDBC и JPA, а также работу с транзакциями на сервисном слое;- ответим на все возникающие вопросы.
Спикер — Senior Software Engineer и опытный преподаватель.
Встречаемся 1 июля в 20:00 мск в преддверии старта курса «Разработчик на Spring Framework». Все участники вебинара получат специальную цену на обучение!
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок и получить запись предыдущего вебинара серии.
#вопросы_с_собеседований
Что такое ViewResolver в Spring?
Реализации ViewResolver используются для разрешения страниц просмотра по имени. Мы настраиваем его в файле конфигурации bean-компонента spring. Пример на картинке.
InternalResourceViewResolver — это одна из реализаций интерфейса ViewResolver, и мы предоставляем каталог страниц просмотра и местоположение через свойства компонента. Таким образом, если метод обработчика контроллера возвращает «home», view resolver будет использовать страницу представления, расположенную по адресу /WEB-INF/views/home.jsp.
Cамый простой способ изучить Java — залезть в голову профи
Один из лучших айтишников России учит базе кодинга в Telegram. Даже гуманитарий поймёт, как создавать приложения, сайты, игры и чат-боты.
Достаточно подписаться на «Секреты Java», где каждый день появляются гайды, готовые примеры кода и лучших практик.
И всё это бесплатно — вместо сотен тысяч рублей за курсы. Стартовать в прибыльной профессии с нуля вы сможете гораздо проще!
Теперь обучиться Java может каждый: @java_secrets
Разработка простого VPN-приложения на Java с использованием библиотеки SSLSocket
Сегодня мы рассмотрим разработку простого VPN-приложения на Java с использованием SSLSocket из пакета javax.net.ssl для обеспечения безопасного обмена данными между клиентом и сервером.
Создание SSL-соединения между клиентом и сервером
1. Создайте класс SimpleSSLServer, который будет принимать входящие SSL-соединения и перенаправлять трафик
2. Создайте класс SimpleSSLClient, который будет подключаться к SimpleSSLServer и отправлять данные через безопасное соединение
3. Запустите SimpleSSLServer и подключитесь к нему с помощью SimpleSSLClient
Данный пример демонстрирует простейшую реализацию VPN-приложения на Java с использованием SSL-соединений для обеспечения безопасности данных. Однако в реальном VPN-приложении потребуется реализовать более сложную логику, такую как аутентификация пользователей, управление доступом, поддержка различных протоколов.
Что такое абстрактные классы и методы в Java
Абстрагирование – это процесс, в ходе которого от пользователя скрываются многие детали реализации, а предоставляются только те детали, которые действительно важны.
Смотреть статью
#вопросы_с_собеседований Spring
Что подразумевается под конфигурацией контейнера на основе аннотаций?
Вместо использования XML для описания связывания компонента разработчик перемещает конфигурацию в сам класс компонента, используя аннотации в соответствующем объявлении класса, метода или поля. Это работает как альтернатива настройкам XML. Пример на картинке.
#вопросы_с_собеседований
Какие типы ключевых слов используются в обработке исключений Java?
☕ try
☕catch
☕finally
☕throw
☕throws
В чём заключается различие между методами submit() и execute() у пула потоков?
Оба метода являются способами подачи задачи в пул потоков, но между ними есть небольшая разница.execute(Runnable command)
определён в интерфейсе Executor
и выполняет поданную задачу и ничего не возвращает.submit()
– перегруженный метод, определённый в интерфейсе ExecutorService
. Способен принимать задачи типов Runnable
и Callable
и возвращать объект Future
, который можно использовать для контроля и управления процессом выполнения, получения его результата.
#вопросы_с_собеседований
Если кодите на Java больше 4 лет, залетайте на мероприятие Java от T-Банка, так проще познакомиться с командой. Вот что вас ждет:
17 июля — встречи, доклады и открытый микрофон от экспертов. Узнаете, как устроена Java-разработка в Т-Банке.
27 и 28 июля — Weekend offer. Сможете пройти собеседование и познакомиться с командой на неделе. Если все понравится — оффер ваш.
Узнайте больше и оставьте заявку на Weekend offer до 24 июля
erid:2Vtzquct4CY
Реклама. АО "Тинькофф Банк", ИНН 7710140679, лицензия ЦБ РФ № 2673
Переверни игру за день в офисе Финтеха и Фантеха Яндекса 🙃
Зовём бэкенд-разработчиков на вечеринку JavaKotDay, чтобы поменяться ролями и почувствовать себя яндексоидом ещё до того, как примешь оффер.
Приходи к нам в гости 14 июля, чтобы порулить на встречах по планированию, поважничать в переговорке и приложить руку к сервисам, которыми пользуются миллионы!
А между делом вкусно поедим, посплетничаем у кулера и обсудим планы с нашими CTO. Кто мы? 😜 Фантех — это Кинопоиск, Плюс, Музыка, Афиша и Букмейт. 🤑 Финтех — Пэй, Сплит, Сейвы, ID.
Хочешь на JavaKotDay? Подтверди свои скиллы и реши задачку на сайте →
Приглашаем на митап от Платформы Сфера — «Создание платформы от архитектуры до релиза»
📆 3 июля в 17:00 (МСК, GMT+3)
🌐 Онлайн на сайте Платформы Сфера
Будет полезно всем, кто отвечает за работу команд разработки, рассматривает или уже создает свою платформу — для технологической независимости компании.
В программе:
✔ История Платформы Сфера. Как и зачем компаниям делать платформы для производства, какую роль в этом играет open source.
✔ Хранение артефактов. Доклад о разработке собственного хранилища артефактов и его интеграции в платформу.
✔ Процессы и инструменты тестирования. Уровни качества ПО и выбор подходов в зависимости от уровня зрелости компании.
Спикеры поделятся успешными кейсами, а также расскажут о трудностях в процессе. Вы сможете получить ценные инсайты и задать вопросы, а после митапа — поучаствовать в онлайн-дискуссии.
❗️Регистрация — на сайте Платформы Сфера.
Реклама. ООО "Т1 Диджитал". ИНН 9731079549
Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?ArrayList
это список, реализованный на основе массива, а LinkedList
— это классический двусвязный список, основанный на объектах с ссылками между ними.
ArrayList:
• доступ к произвольному элементу по индексу за константное время O(1)
;
• доступ к элементам по значению за линейное время O(N)
;
• вставка в конец в среднем производится за константное время O(1)
;
• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (capacity
) не изменяется);
• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.
LinkedList:
• на получение элемента по индексу или значению потребуется линейное время O(N)
;
• на добавление и удаление в начало или конец списка потребуется константное O(1)
;
• вставка или удаление в/из произвольного место константное O(1)
;
• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
В целом, LinkedList
в абсолютных величинах проигрывает ArrayList
и по потребляемой памяти, и по скорости выполнения операций. LinkedList
предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.
Метод Math.pow()
Возводит значение первого аргумента в степень второго аргумента, тем самым позволяет осуществить быстрое возведение в степень любых значений.
Выше рассмотрен пример возведение числа в квадрат и куб.
Заметьте, для вывода на экран целого значения используется "%.0f", так как метод возвращает double значение.
#код
#вопросы_с_собеседований
В чём заключаются различия между java.util.concurrent.Atomic*.compareAndSwap() и java.util.concurrent.Atomic*.weakCompareAndSwap()?
☕️ weakCompareAndSwap() не создает memory barrier и не дает гарантии happens-before;
☕️ weakCompareAndSwap() сильно зависит от кэша/CPU, и может возвращать false без видимых причин;
☕️ weakCompareAndSwap(), более легкая, но поддерживаемая далеко не всеми архитектурами и не всегда эффективная операция.
#вопросы_с_собеседований
Что такое классы-оболочки? Что такое автоупаковка?
Для каждого из восьми примитивных типов в Java существует класс-оболочка, который можно использовать для обертывания примитивного значения и использования его как объекта. Эти классы, соответственно, Boolean, Byte, Short, Character, Integer, Float, Long и Double. Эти оболочки могут быть полезны, например, когда вам нужно поместить примитивное значение в общую коллекцию, которая принимает только объекты.List<Integer> list = new ArrayList<>();
Чтобы избежать необходимости вручную преобразовывать примитивы туда и обратно, компилятор Java обеспечивает автоматическое преобразование, известное как автоупаковка/автораспаковка.
list.add(new Integer(5));List<Integer> list = new ArrayList<>();
list.add(5);
int value = list.get(0);
Архитектурный митап от билайна: нагрузка, фреймворки, автоматизация организации
📆 11 июля, 18:30 (Новосибирск, GMT+7)
📍 Офлайн в Новосибирске в офисе билайна
🌐 онлайн на YouTube
В программе:
✔ Balance Manager – как и зачем изменять «балансы» абонентов пятьдесят тысяч раз в секунду.
✔ ArchOps 2.0 – еще один архитектурный фреймворк. Концепция «Архитектура как код».
✔ AccountOps — автоматизируем операционную деятельность компании
Начало митапа — 11 июля в 18:30 по новосибирскому времени. Офлайн-участников ждем к 18:00❗️
Регистрация — на сайте.
Реклама. ПАО Вымпелком. ИНН 7713076301
Что выведет код сверху?
Ответ:
Compilation error
Null не является объектом в Java.
Компилятор Java предпочитает метод, который имеет более конкретные параметры.
Строка - это объект класса java.lang.String. Следовательно, строка более специфична, чем класс Object, но она в равной степени специфична и для класса Integer. Следовательно, значение null не может соответствовать какой-либо функции, поскольку оно не может выбирать между строкой и целым числом.
Многопоточность в мобильной разработке
В этой статье я хочу рассмотреть один из важнейших аспектов мобильной разработки — многопоточность. Многопоточность позволяет выполнять несколько задач одновременно и повышать производительность приложения.
Смотреть статью
Курс «Анализ защищенности приложений Андроид» стартует 8 июля!
Рассматривается устройство приложений под ОС Android, этапы создания мобильного приложения, приемы реверса и изменения кода. Подробно рассмотрен поиск и эксплуатация уязвимостей.
Курс создан для:
- Сотрудников подразделений ИБ для повышения квалификации, новичков в сфере анализа мобильных приложений, реверс-инженеров для повышения квалификации в области мобильных приложений
🏆 Сертификат / удостоверение о повышении квалификации
@Codeby_Academy
Узнаем количество цифр в строке
В этом примере мы объявляем строку str
и устанавливаем ее значение на "abc123def456". Затем мы создаем переменную count
, которая будет использоваться для подсчета количества цифр в строке.