seniorjavist | Unsorted

Telegram-канал seniorjavist - Senior Java Developer

22676

№ 4931127152 Изучаем Java. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorjavist

Subscribe to a channel

Senior Java Developer

#вопросы_с_собеседований
Даны 3 потока: Т1, Т2 и Т3. Как реализовать выполнение в последовательности Т1, Т2, Т3?

Такой последовательности выполнения можно достичь многими способами, например, просто воспользоваться методом join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.

Читать полностью…

Senior Java Developer

Большой гайд. Пишем микросервисы на Java и Spring Boot, заворачиваем в Docker, запускаем на EKS, мониторим на Grafana

В этой статье вы увидите пошаговое создание cloud-native микросервиса на Amazon AWS, пригодное для "чтения с листа". Чтобы понять, что здесь происходит, не нужно разворачивать проект - достаточно обладать живым воображением и прочитать текст по диагонали. Если же вы всё-таки захотите повторить шаги, вам будут жизненно нужны знания вида, как создавать классы в IDE и что такое Spring.

Смотреть статью

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Какое исключение выбрасывается при возникновении ошибки в блоке инициализации класса?

Если возникшее исключение - наследник RuntimeException:

• для статических блоков инициализации будет выброшено java.lang.ExceptionInInitializerError;
• для нестатических будет проброшено исключение-источник.
Если возникшее исключение - наследник Error, то в обоих случаях будет выброшено java.lang.Error. Исключение: java.lang.ThreadDeath - смерть потока. В этом случае никакое исключение выброшено не будет.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?

Ключевое слово interface используется для создания полностью абстрактных классов. Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как public.

Начиная с Java 8 в интерфейсах разрешается размещать реализацию методов по умолчанию default и статических static методов.

Интерфейс также может содержать и поля. В этом случае они автоматически являются публичными public, статическими static и неизменяемыми final.

Читать полностью…

Senior Java Developer

👩‍💻 31 июля стартует курс «Java-разработчик» от OTUS — это то, что нужно, если вы хотите успешно вкатиться в разработку в 2025

🦾 Вас ждет огромное количество практики и реальные кейсы: настройка окружения, базовые алгоритмы, синтаксис Java, Spring и Docker. Мы покажем, почему диплом OTUS ценят HR в крупных компаниях.

Если вы сисадмин, тестировщик, аналитик или просто хотите освоить программирование с нуля — этот курс для вас.
Мы научим создавать серверные веб-приложения, работать с PostgreSQL, Kafka и Kubernetes, формировать портфолио и готовить резюме под Middle-Java-Dev.

🎁 Дарим промокод, который дает скидку на обучение - JAVA7

👉 Оставьте заявку и и присоединяйтесь к группе: https://otus.pw/PIMG/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Java Developer

👩‍💻 Ищем Java разработчиков. Удалёнка, релокейт платим много!

Специально для Вас, собираем лучшие вакансии для Java разработчиков с прямыми контактами в Telegram на канале @it_match_java

Подпишись чтобы не упустить свой шанс получить лучший оффер!

➡️ Посмотреть вакансии

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Дайте определение понятию «конструктор»

Конструктор — это специальный метод, у которого отсутствует возвращаемый тип и который имеет то же имя, что и класс, в котором он используется. Конструктор вызывается при создании нового объекта класса и определяет действия необходимые для его инициализации.

Читать полностью…

Senior Java Developer

Какие планы на 30 августа? Есть возможность попасть на JVM Day — профильную конференцию для разработчиков.

В планах:
— обсудить кейсы, нестандартные решения и инженерные практики;
— послушать доклады специалистов из Сбера, Т-Банка, Яндекса, 2ГИС, Squad, 01.⁢ tech;
— проводить сезон на афтепати в компании единомышленников.

Часть вырученных на мероприятии средств пойдет на поддержку региональных вузов.
Встреча пройдет в штаб-квартире Т-Банка, а узнать подробности и купить билеты можно тут.

Читать полностью…

Senior Java Developer

Сжатие указателей в Java

В статье речь пойдет о реализации сжатия указателей в Java Virtual Machine 64-bit, которое контролируется опцией UseCompressedOops и включено по-умолчанию для 64 битных систем начиная с Java SE 6u23.

Смотреть статью

Читать полностью…

Senior Java Developer

🎉 Большой розыгрыш от крупнейшего IT-медиа 1337, легендарного паблика Рифмы и Панчи, канала Техно.

Победителей будет много, а для участия нужны лишь пара кликов:

1. Подписаться на Рифмы и Панчи, 1337 и на Техно.

2. Нажать «Участвовать» под этим постом

Что по призам:

1 место - Iphone 16 Pro
2 место - PS5 Slim
3 место - Nintendo Switch 2
4-10 места - 10 000 рублей на карту


Победителей определим 21 июля в 18:00 МСК. Всем удачи!

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Swing: рассказать про EDT, как им пользоваться

EDT — тред в котором производится обработка пользовательских действий на UI: движение курсора, нажатие клавиш, скролл, drag'n'drop и.т.д. Соотвественно, все «тяжелые» по времени и ресурсам операции нужно выносить в отдельный worker-тред (SwingUtils.invokeLater(...)), чтобы не фризить EDT.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Generics: В чем преимущество, как работают? Что такое type-erasure? В чем отличие от шаблонов C++?

🔸Типы дженерики обеспечивают параметрический полиморфизм, т.е выполнение идентичного кода для различных типов. Типичный пример — коллекции, итераторы
🔸type-erasure — это стирание информации о типе-параметре в runtime. Таким образом, в байт-коде мы увидим List, Set вместо List<Integer>, Set<Integer>, ну и type-cast'ы при необходимости
🔸В отличие от дженериков в Java, в С++ шаблоны в итоге приводят к компиляции метода или типа для каждого специфицированного типа параметра (специализация шаблона). Да простят меня здесь адепты С++.

Читать полностью…

Senior Java Developer

Countdown Latch/Cyclic Barrier

CountdownLatch («защелка») — примитив синхронизации, с помощью которого, например, основной thread может ожидать выполнения работы остальных N тредов. Треды, выполняющие работу, выполняют countDown() на защелке, основной тред ожидает на операции await(). Когда счетчик достигает нуля, основной тред продолжает работу.

Для синхронизации N тредов (все ждут всех) и переиспользования используется CyclicBarrier, ему также можно указывать действие (через Runnable), выполняемое после синхронизации всех-со-всеми

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
В чем разница между execute, executeQuery, executeUpdate?

🔸Выполнение инструкции(строковый запрос) используется для выполнения любого SQL-запроса и возвращает TRUE, если результатом является ResultSet, такой как выполнение запросов Select. Выходные данные – ЛОЖЬ, если нет объекта ResultSet, такого как выполняющиеся запросы Insert или Update. Мы можем использовать getResultSet(), чтобы получить ResultSet, и метод getUpdateCount(), чтобы получить счетчик обновлений.
🔸Оператор executeQuery(строковый запрос) используется для выполнения запросов Select и возвращает ResultSet. Возвращаемый ResultSet никогда не является нулевым, даже если нет записей, соответствующих запросу. При выполнении запросов select мы должны использовать метод executeQuery, чтобы, если кто-то попытается выполнить оператор вставки / обновления, он выбросит java.sql.SQLException с сообщением «Метод executeQuery не может использоваться для обновления».
🔸Оператор executeUpdate (строковый запрос ) используется для выполнения операторов Insert / Update / Delete (DML) или операторов DDL, которые ничего не возвращают. Результат – int и равен количеству строк для операторов языка манипулирования данными SQL (DML). Для операторов DDL на выходе будет 0.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Как файлы cookie работают в сервлетах?

🔸Файлы cookie – это текстовые данные, отправляемые сервером клиенту и сохраняемые на локальном компьютере клиента.
🔸Servlet API обеспечивает поддержку файлов cookie через класс javax.servlet.http.Cookie, который реализует интерфейсы Serializable и Cloneable.
🔸Метод HttpServletRequest getCookies() предоставляется для получения массива файлов cookie из запроса, поскольку нет смысла добавлять файлы cookie в запрос, нет методов для установки или добавления файлов cookie в запрос.
🔸Аналогичным образом предоставляется метод HttpServletResponse addCookie(Cookie c) для прикрепления файла cookie в заголовке ответа, методы получения для cookie отсутствуют.

Читать полностью…

Senior Java Developer

⁉️👩‍💻Разрабатываете на Java, но проект на Spring превращается в черный ящик? Бины ведут себя непредсказуемо, конфигурация разрастается, а ошибка в одном модуле рушит всю систему.

Интервью на позицию Middle неудачно — не хватает уверенности в Spring.

🤝 Тем временем рынок требует специалистов, которые не просто знают Spring, а умеют строить продакшен-приложения с его помощью. Компании ищут разработчиков, которые понимают, как работают Spring Boot, Spring Security, Spring MVC и могут строить микросервисную архитектуру.

⚡️ На курсе «Разработчик на Spring Framework» мы закроем пробелы и дадим актуальные навыки. Практика на реальных кейсах, ревью заданий, тестовое собеседование — вы освоите Spring так, чтобы уверенно применять его в работе.

➡️ Пройдите вступительное тестирование и получите скидку на обучение: https://otus.pw/XFvn/

🎁 Дарим промокод, который дает скидку на обучение - SRING7

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Java Developer

Tapestry

Tapestry — объектно-ориентированный Java фреймворк для создания веб-приложений, реализующих модель MVC. Tapestry был создан Howard Lewis Ship и продолжает активно развиваться. Фреймворк является проектом верхнего уровня в организации Apache Software Foundation.

Посмотреть документацию можно здесь.

Читать полностью…

Senior Java Developer



16 августа — на ИТ-пикник

Событие месяца — семейный фестиваль для опытных ИТ-специалистов. Что в программе:
— Лекции топов индустрии.
— Интерактивы, квесты, мастер-классы.
— Общение, знакомства.
— Выступления известных музыкантов: «тима ищет свет», Тося Чайкина, «Второй Ка» и секретного артиста.

Фестиваль пройдет в музее-заповеднике «Коломенское»

Время отжигать, пока лето не закончилось. Подробности и билеты — на сайте ИТ-пикника

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Что будет, если переопределить equals() не переопределяя hashCode()? Какие могут возникнуть проблемы?

Классы и методы, которые используют правила этого контракта могут работать некорректно. Так для HashMap это может привести к тому, что пара «ключ-значение», которая была в неё помещена при использовании нового экземпляра ключа не будет в ней найдена.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Что не так с кодом?

Он не скомпилируется. Это вопрос на знание иерархии исключений: FileNotFoundException унаследован от IOException, первый catch будет перехватывать все исключения, а в следующий блок catch управление передано не будет. Поэтому возникнет ошибка: exception FileNotFoundException has already been caught.

Читать полностью…

Senior Java Developer

Обработка исключений в Java в функциональном стиле

В данной статье автор предоставит информацию о собственной библиотеке для обработки исключений (Exception) в функциональном стиле.

Смотреть статью

Читать полностью…

Senior Java Developer

Enum vs String

Используйте Enum для предопределенных состояний модели там, где это возможно. Это не только упрощает понимание кода, но и ускоряет процесс сравнения этих состояний. Сравнение по ссылке, определенно, на порядок быстрее стравнения строк или других обьектов.

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

Но в случае если это неизменные свойства, как месяц года, то смело используйте перечисление.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
В чем разница между композицией и агрегацией?

Ассоциация
обозначает связь между объектами. Композиция и агрегация — частные случаи ассоциации «часть-целое».

Агрегация предполагает, что объекты связаны взаимоотношением «part-of» (часть). Композиция более строгий вариант агрегации. Дополнительно к требованию «part-of» накладывается условие, что экземпляр «части» может входить только в одно целое (или никуда не входить), в то время как в случае агрегации экземпляр «части» может входить в несколько целых.

Например, книга состоит из страниц, и мы не можем вырвать страницу из книги и вложить в другую книгу. Страницы четко привязаны к конкретной книге, поэтому это композиция. В тоже время мы можем взять и перенести книгу из одной библиотеки в другую - это уже агрегация.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Что такое string-pool? В чем отличие cоздания строки через new от литерала? Что такое String.intern()?

string-pool — структура в памяти, хранящая массив всех строк-литералов программы.
String.intern(), соответственно, вернет строку из пула, при наличии таковой. Полезно при сравнениях вида:

new String("hello").intern() == new String("hello").intern()

Т.к. без интернирования пришлось бы сравнивать строки через equals, что может быть медленнее при наличии длинных строк. В данном случае возвращается ссылка на один и тот же объект строки из пула, и проверка проходит с true.

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Как в Java сделать утечку памяти? 

Используя самописный класс стека, при выполнении операции pop() не присваивать предыдущей ссылке значение null.
Также можно неверно использовать HashMap вместо WeakHashMap для кэширования чего-нибудь большого, например картинок ваших товаров, пользователей и т.д в. Т.к ссылки на ключи сильные (strong references), значения по этим ключам будут висеть в хипе до следующей перезагрузки jvm процесса или удаления ключа из мапы и обнуления ссылки на него.

Читать полностью…

Senior Java Developer

👩‍💻 Ваши Java-приложения под нагрузкой едва дышат? Профилирование и оптимизация кода остаются за скобками?

Курс «Java Developer. Advanced» от OTUS — это глубокое погружение в устройство JVM, байткод, сборщики мусора, профилирование и оптимизацию в облаке.
Наши эксперты-практики покажут, как выбрать GC, снять дамп памяти и обнаружить утечки, как профилировать “горячие” места, настраивать интеграцию с Prometheus & Grafana и деплоить сервисы в Kubernetes.

🦾 Вы научитесь обосновывать выбор JVM-имплементации, анализировать heap-дампы, синхронизировать потоки, использовать Reactor и неблокирующие I/O, проектировать метрики и трассировку.

➡️ Пройдите короткий тест и присоединяйтесь к группе: https://otus.pw/jvfb/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Java Developer

📢 Выходцы из Jetbrains запилили годноту для Java/Kotlin-разработчиков.
 
Стартап называется ❇️ Explyt.
Они только что выкатили мощный релиз. 
Вкратце: это плагин в IDE, который сам генерирует тесты с интересными возможностями
✔️ Vibe debugging. За счет интеграции с IDE, плагин собирает данные по исполнению программы и генерирует тест по этим данным, что экономит время на тестировании и отлавливает ошибки на 80-90% (!) 
✔️ Агентский режим. Ассистент, который живёт в проекте и следит за покрытием, сам находит незакрытые места и предлагает тесты. Работает в фоне, как часть команды. 

👉 Кому интересно - вот ссылка на релиз и установку плагина

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
ThreadPoolExecutor — описать механизм работы, св-ва, частности (fixed threadpool, scheduled, single thread executor)

ThreadPoolExecutor — средство контроля исполнения параллельных задач, задействует один из свободных тредов в общем пуле, или ставит задание в очередь, если таковых нет, или достигнуты определенные условия (ниже)

Основными св-вами ThreadPoolExecutor являются corePoolSize и maxPoolSize. Если текущее количество тредов в пуле < corePoolSize — новый тред будет создаваться в независимости от того, есть ли в пуле незанятые треды. В промежутке между corePoolSize и maxPoolSize тред будет создаваться в том случае, если заполнена очередь задач, и удаляться спустя keepAliveTime. Если кол-во тредов стало >= maxPoolSize — новые треды не создаются, а задачи ставятся в очередь.

Есть возможность регулировать поведение очереди:
🔸Direct handoffs: немедленная передача задачи тредпулу. Нет понятия очереди задачи. Если свободных тредов нет — кидается exception. Применимо при неограниченных maxPoolSize, но нужно понимать проблему при быстрых записях и медленных чтениях, что может спровоцировать непомерное потребление ресурсов
🔸Unbounded queues: очередь без ограничений. Задачи будут добавляться в нее при превышении corePoolSize, при этом maxPoolSize будет игнорироваться. Unbounded queues имеют проблемы потребления ресурсов при больших нагрузках, но сглаживают рост тредов при пиках.
🔸Bounded queues: очередь с ограничениями. Задачи будут добавляться в очередь до достижения некоего capacity. Для достижения наилучшей производительности нужно понимать размеры corePoolSize и самой очереди и чем можно пожертвовать — перфомансом (малый corePoolSize и большая очередь), или же памятью (ограниченная очередь, большой corePoolSize)


Частности ThreadPoolExecutor:
ScheduleThreadPoolExecutor — применяется для периодичных по времени задач
fixed thread pool — частность ScheduleThreadPoolExecutor'а с настроенным corePoolSize и unbounded queue
single thread executor — тредпулл, c сorePoolSize = 1, гарантирующий последовательное выполнение задач из очереди

Читать полностью…

Senior Java Developer

👩‍💻Открытый урок «Как победить кодировки и стать Гуру Unicode?».

🗓 17 июля в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java-разработчик».

Ошибки в кодировках ломают приложения, превращая текст в «абракадабру». Понимание таблиц кодировок — must-have навык для работы с данными, файлами и международными проектами.

О чём поговорим:
✔️ ASCII, UTF-8, Unicode — WTF? Разберём, как Java хранит и обрабатывает текст.
✔️ Почему файлы «ломаются»? Как избежать ошибок при чтении/записи данных.
✔️ Лайфхаки для юникода: работа с иероглифами и русским языком.
✔️ Секреты JVM: как настроить кодировку в проекте.

Кому будет интересно:
Начинающим Java-разработчикам и тестировщикам, сталкивающимся с международными данными и проблемами кодировки.

🔗 Ссылка на регистрацию: https://otus.pw/v8np/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Java Developer

#вопросы_с_собеседований
Что такое Local Variable?

Популярный вопрос на собеседовании Java-разработчика. Local variable — это переменная, которая определена внутри метода и существует вплоть до того момента, пока выполняется этот метод. Как только выполнение закончится, локальная переменная перестанет существовать.

Вот программа, которая использует локальную переменную helloMessage в методе main()

Читать полностью…
Subscribe to a channel