Java-разработчики, этот пост для вас!
13 апреля, всего за один день, вы можете получить оффер и присоединиться к дружному коллективу AXENIX.
План действий такой:
— до 11 апреля отправьте нам свое резюме через этот сайт
— дождитесь звонка от нашего рекрутера, чтобы получить ответы на все вопросы
— 13 апреля пройдите онлайн-собеседование с экспертами AXENIX
— получите оффер в тот же день!
Вакансии по Java-разработке открыты для кандидатов из городов, где представлены офисы AXENIX (Москва, Тверь, Санкт-Петербург, Ростов-на-Дону, Воронеж, Краснодар), а также специалистов, готовых к переезду.
Подробнее здесь
До встречи!
Реклама. ООО "АКСТИМ". ИНН 7705476338.
13 апреля, всего за один день, вы можете получить оффер и присоединиться к дружному коллективу AXENIX.
План действий такой:
— до 11 апреля отправьте нам свое резюме через этот сайт
— дождитесь звонка от нашего рекрутера, чтобы получить ответы на все вопросы
— 13 апреля пройдите онлайн-собеседование с экспертами AXENIX
— получите оффер в тот же день!
Вакансии по Java-разработке открыты для кандидатов из городов, где представлены офисы AXENIX (Москва, Тверь, Санкт-Петербург, Ростов-на-Дону, Воронеж, Краснодар), а также специалистов, готовых к переезду.
Подробнее здесь
До встречи!
Реклама. ООО "АКСТИМ". ИНН 7705476338.
👍7❤4🔥2🎅1
Как ведут себя конфликтующие импорты?
• Классы текущего пакета доступны без импорта. Если импортируется другой класс, совпадающий с классом-соседом по пакету – сосед перекрывается. Будет использован импортированный класс, без ошибки.
• Если в class-файле существует несколько разных классов с одинаковыми именами, объявленных здесь же или импортированных – это приводит к ошибке компиляции.
• Импортировать один и тот же класс несколько раз допускается. Будет всего лишь warning о неиспользуемом импорте.
• Для статических импортов констант действуют те же правила. Обычные и статические импорты не конфликтуют друг с другом – для выбора достаточно контекста использования.
• Чтобы применять несколько классов/констант с одинаковыми именами в одном файле, придется обойтись без импортов. Нужно будет обращаться по их полным именам, с указанием пакета.
• Классы текущего пакета доступны без импорта. Если импортируется другой класс, совпадающий с классом-соседом по пакету – сосед перекрывается. Будет использован импортированный класс, без ошибки.
• Если в class-файле существует несколько разных классов с одинаковыми именами, объявленных здесь же или импортированных – это приводит к ошибке компиляции.
• Импортировать один и тот же класс несколько раз допускается. Будет всего лишь warning о неиспользуемом импорте.
• Для статических импортов констант действуют те же правила. Обычные и статические импорты не конфликтуют друг с другом – для выбора достаточно контекста использования.
• Чтобы применять несколько классов/констант с одинаковыми именами в одном файле, придется обойтись без импортов. Нужно будет обращаться по их полным именам, с указанием пакета.
👍14❤4
I like techno — подкаст о технологиях в сервисах Яндекса
Запустили подкаст, где специалисты Яндекса говорят о том, как устроены простые приложения в наших гаджетах.
Первый эпизод посвящен технологиям Фудтеха — узнайте, как алгоритмы Еды и Лавки помогают доставлять продукты пользователям, несмотря на погодные условия и другие неопределенности.
Слушать на Яндекс Музыке
Смотреть на Youtube
Запустили подкаст, где специалисты Яндекса говорят о том, как устроены простые приложения в наших гаджетах.
Первый эпизод посвящен технологиям Фудтеха — узнайте, как алгоритмы Еды и Лавки помогают доставлять продукты пользователям, несмотря на погодные условия и другие неопределенности.
Слушать на Яндекс Музыке
Смотреть на Youtube
❤6👍3
Класс LinkedList
Это структура данных в виде связанного списка. C помощью нее можно быстро добавлять элементы, но будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
addFirst() / offerFirst() — добавляет элемент в начало списка. addLast() / offerLast() — в конец.
removeFirst() / pollFirst() — удаляет первый элемент из начала списка. removeLast() / pollLast() — с конца списка.
getFirst() / peekFirst(); getLast() / peekLast() — возвращает первый/последний элемент списка.
Это структура данных в виде связанного списка. C помощью нее можно быстро добавлять элементы, но будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
addFirst() / offerFirst() — добавляет элемент в начало списка. addLast() / offerLast() — в конец.
removeFirst() / pollFirst() — удаляет первый элемент из начала списка. removeLast() / pollLast() — с конца списка.
getFirst() / peekFirst(); getLast() / peekLast() — возвращает первый/последний элемент списка.
👍23🔥4❤3
Готовы улучшить свое владение Java?
Присоединяйся к нашему каналу - https://news.1rj.ru/str/java_secrets 📲
Свежие советы, лучшие практики, примеры кода и обсуждения, чтобы стать настоящим профессионалом в программировании на Java.
Повышай свой уровень!
Присоединяйся к нашему каналу - https://news.1rj.ru/str/java_secrets 📲
Свежие советы, лучшие практики, примеры кода и обсуждения, чтобы стать настоящим профессионалом в программировании на Java.
Повышай свой уровень!
❤4👍3😁2
Что будет со ссылкой на метод, если заменить объект-владельца?
Ответ на этот вопрос будет очевиден, если вы уверенно понимаете, что скрывается за терминами ссылки вообще и ссылки на метод.
Для нестатических методов работает позднее связывание. По этой причине, когда мы обращаемся к такому методу по ссылке, то получаем метод экземпляра, а не типа переменной. На примере с изображения ниже метод класса A не будет затронут.
Факт позднего связывания в этом вопросе может ввести в заблуждение. Связывание случается в момент обращения, а не вызова. В результате в переменной хранится неизменяемая копия ссылки на метод. Она ведет на метод объекта, а не хранящей его переменной. Поэтому переприсвоение переменной позже не окажет на ссылку никакого эффекта.
Для достижения реального связывания в момент вызова в байткоде существует инструкция invokedynamic. Однако гораздо проще добиться того же результата, если использовать поведенческий паттерн ООП, например, посетителя.
Ответ на этот вопрос будет очевиден, если вы уверенно понимаете, что скрывается за терминами ссылки вообще и ссылки на метод.
Для нестатических методов работает позднее связывание. По этой причине, когда мы обращаемся к такому методу по ссылке, то получаем метод экземпляра, а не типа переменной. На примере с изображения ниже метод класса A не будет затронут.
Факт позднего связывания в этом вопросе может ввести в заблуждение. Связывание случается в момент обращения, а не вызова. В результате в переменной хранится неизменяемая копия ссылки на метод. Она ведет на метод объекта, а не хранящей его переменной. Поэтому переприсвоение переменной позже не окажет на ссылку никакого эффекта.
Для достижения реального связывания в момент вызова в байткоде существует инструкция invokedynamic. Однако гораздо проще добиться того же результата, если использовать поведенческий паттерн ООП, например, посетителя.
👍30🔥5❤2
В чем различие между приватным конструктором и финальным классом?
Ограничение области видимости конструктора до private не дает вызвать его из наследника, что приводит к невозможности наследоваться. Это свойство часто используется для утилитарных классов и синглтонов. Если применить порождающий паттерн, то можно вернуть возможность инстанцирования извне.
Если добавить объявлению класса модификатор final, это также запретит от него наследоваться, уже без излишнего ограничения на использование конструктора снаружи. Это основное применение этих двух подходов.
С точки зрения возможности наследования, ограничение через private конструктор более слабое. От такого класса, если он не финальный, можно наследовать внутренние и вложенные подклассы. Публичный вложенный класс может сработать как «паблик морозов» – дать внешним классам наследоваться через себя.
Ограничение области видимости конструктора до private не дает вызвать его из наследника, что приводит к невозможности наследоваться. Это свойство часто используется для утилитарных классов и синглтонов. Если применить порождающий паттерн, то можно вернуть возможность инстанцирования извне.
Если добавить объявлению класса модификатор final, это также запретит от него наследоваться, уже без излишнего ограничения на использование конструктора снаружи. Это основное применение этих двух подходов.
С точки зрения возможности наследования, ограничение через private конструктор более слабое. От такого класса, если он не финальный, можно наследовать внутренние и вложенные подклассы. Публичный вложенный класс может сработать как «паблик морозов» – дать внешним классам наследоваться через себя.
👍22❤2🔥1
Всё об опенсорсе: мастер-классы, круглый стол, задачки и призы
Когда: 23 апреля
Где: Москва, «Агломерат» + онлайн-трансляция
О чем: вы узнаете, как сделать документацию и лендинг, выбрать правильную лицензию для опенсорс-проекта и выйти в открытый доступ.
А еще познакомитесь с разработчиками из Яндекса и других компаний, победителями Программы грантов Yandex Open Source, порешаете задачки и получите за них призы.
Регистрация на Yandex Open Source Jam по ссылке.
Когда: 23 апреля
Где: Москва, «Агломерат» + онлайн-трансляция
О чем: вы узнаете, как сделать документацию и лендинг, выбрать правильную лицензию для опенсорс-проекта и выйти в открытый доступ.
А еще познакомитесь с разработчиками из Яндекса и других компаний, победителями Программы грантов Yandex Open Source, порешаете задачки и получите за них призы.
Регистрация на Yandex Open Source Jam по ссылке.
👍7❤3🔥2
Можно ли переопределить статический метод?
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
👍24❤4
❓Как разработчикам эффективно хранить данные в NoSQL?
Приходите на вебинар «Создание словаря» от OTUS и узнайте. На этом открытом уроке вы:
- реализуете популярную структуру данных «ассоциативный массив» для хранения пар (ключ, значение);
- рассмотрите два способа решения этой задачи;
- сравните их эффективность.
Занятие пройдёт 10 апреля в 20:00 мск в рамках набора на онлайн-курс «Алгоритмы и структуры данных». Спикер — опытный программист и преподаватель языка Java.
Для всех, кто запишется на бесплатный вебинар, будет доступна специальная цена — вы сможете обсудить свое обучение с менеджерами OTUS.
👉 Пройдите короткий тест прямо сейчас, чтобы посетить открытый урок: https://otus.pw/kbae/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приходите на вебинар «Создание словаря» от OTUS и узнайте. На этом открытом уроке вы:
- реализуете популярную структуру данных «ассоциативный массив» для хранения пар (ключ, значение);
- рассмотрите два способа решения этой задачи;
- сравните их эффективность.
Занятие пройдёт 10 апреля в 20:00 мск в рамках набора на онлайн-курс «Алгоритмы и структуры данных». Спикер — опытный программист и преподаватель языка Java.
Для всех, кто запишется на бесплатный вебинар, будет доступна специальная цена — вы сможете обсудить свое обучение с менеджерами OTUS.
👉 Пройдите короткий тест прямо сейчас, чтобы посетить открытый урок: https://otus.pw/kbae/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤3👍1🔥1
Привет. За 9 минут вы узнаете, как писать unit тесты с помощью библиотек junit и mockito.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
ТЕСТИРОВАНИЕ НА JAVA (JUNIT, MOCKITO)
Привет. За 9 минут вы узнаете, как писать unit тесты с помощью библиотек junit и mockito.
Код из видео:
https://github.com/dispikerton/testirovanie
Код из видео:
https://github.com/dispikerton/testirovanie
👍20🔥5❤4
Практический вебинар для веб-разработчиков — изучите основные подходы в обеспечении масштабируемости и отказоустойчивости микросервисов с помощью организации очереди сообщений
Приходите на бесплатный практический урок «Очереди и отложенное выполнение на примере RabbitMQ в .Net» от OTUS, где вы вместе с опытным экспертом разберете:
1. ситуации, когда приходится решать проблему отложенного выполнения и асинхронной обработки;
2. как брокеры сообщений позволяют организовать коммуникацию нескольких сервисов между собой;
3. основные инструменты построения очередей сообщений, их возможности и преимущества;
4. построение очередей сообщений с помощью RabbitMQ и .Net Web Api на практике.
Занятие пройдёт 16 апреля в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://otus.pw/g92Ap/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приходите на бесплатный практический урок «Очереди и отложенное выполнение на примере RabbitMQ в .Net» от OTUS, где вы вместе с опытным экспертом разберете:
1. ситуации, когда приходится решать проблему отложенного выполнения и асинхронной обработки;
2. как брокеры сообщений позволяют организовать коммуникацию нескольких сервисов между собой;
3. основные инструменты построения очередей сообщений, их возможности и преимущества;
4. построение очередей сообщений с помощью RabbitMQ и .Net Web Api на практике.
Занятие пройдёт 16 апреля в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://otus.pw/g92Ap/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍3❤2🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Приглашаем мобильных и бэкенд-разработчиков на Яндекс Go Day&Night
Конференция в двух частях: днём делимся докладами о мобильной и бэкенд-разработке, а после заката устраиваем тусовку.
Формат: Офлайн
Дата и время: 20 апреля, 14:00 - 02:00
Бесплатно. Регистрация обязательна. Заявки проходят модерацию, количество мест ограничено.
Подробнее
Реклама. ООО «Яндекс» ИНН 7736207543
Конференция в двух частях: днём делимся докладами о мобильной и бэкенд-разработке, а после заката устраиваем тусовку.
Формат: Офлайн
Дата и время: 20 апреля, 14:00 - 02:00
Бесплатно. Регистрация обязательна. Заявки проходят модерацию, количество мест ограничено.
Подробнее
Реклама. ООО «Яндекс» ИНН 7736207543
❤4👍2
Получаем наиболее распространенный элемент в списке
Сделать это можно с помощью следующего фрагмента кода, подробнее о котором можно почитать здесь.
Сделать это можно с помощью следующего фрагмента кода, подробнее о котором можно почитать здесь.
👍16🔥7❤1
⏰ Курс «Быстрый старт в DevOps» бесплатно. Как забрать?
Меня зовут Марсель Ибраев, и на своем канале я делюсь фишками, которые помогут вам начать путь в DevOps.
2 апреля стартует курс, созданный на основе ваших пожеланий. Мы с командой учебного центра Слёрм ответим на самые актуальные вопросы начинающих девопсеров:
⚡️ что такое DevOps, и как выстроить работу команды в рамках этой методологии;
⚡️ Kubernetes, Docker и т.д.: как базовые инструменты выстраивают работу в DevOps;
⚡️ DevOps и компания: как состыковать критерии успеха.
1 неделя = 1 открытый модуль. В первом модуле разберем как быстро и эффективно освоить профессию с высокой зарплатой, с каких инструментов начинать, и какую роль в девопсе играют софт-скиллы.
🔗 ЗАБРАТЬ КУРС
Меня зовут Марсель Ибраев, и на своем канале я делюсь фишками, которые помогут вам начать путь в DevOps.
2 апреля стартует курс, созданный на основе ваших пожеланий. Мы с командой учебного центра Слёрм ответим на самые актуальные вопросы начинающих девопсеров:
⚡️ что такое DevOps, и как выстроить работу команды в рамках этой методологии;
⚡️ Kubernetes, Docker и т.д.: как базовые инструменты выстраивают работу в DevOps;
⚡️ DevOps и компания: как состыковать критерии успеха.
1 неделя = 1 открытый модуль. В первом модуле разберем как быстро и эффективно освоить профессию с высокой зарплатой, с каких инструментов начинать, и какую роль в девопсе играют софт-скиллы.
🔗 ЗАБРАТЬ КУРС
👍4❤2🔥1
В тринадцатом ролике цикла автор продолжает тему мониторинга сервисов, но на этот раз предлагает рассмотреть более распространённую связку инструментов: Micrometer, VictoriaMetrics в качестве альтернативы Prometheus и Grafana. Примеры настройки инструментов мониторинга будут включать и OAuth 2.0.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
SC24EP13 Мониторинг сервисов с Micrometer и VictoriaMetrics - Разработка проектов со Spring
В тринадцатом ролике цикла я продолжаю тему мониторинга сервисов, но на этот раз предлагаю рассмотреть более распространённую связку инструментов: Micrometer, VictoriaMetrics в качестве альтернативы Prometheus и Grafana. Примеры настройки инструментов мониторинга…
👍17❤7🔥4
МТС приглашает на митап True Tech Java
Вы используете Hibernate? Какую модель предпочитаете: анемичную или богатую? Если вы рассматриваете ваши сущности как DTO с getters/setters, то вы сторонник анемичной. Семен Киреков, Team Lead в МТС Big Data на продукте МТС Аналитика покажет участникам митапа альтернативный вариант — богатую доменную модель.
Что обсудим:
1. Что есть Anemic Domain Model и в чем его проблема?
2. Rich Domain Model в действии;
3. Проблемы с производительностью Rich Domain Model и варианты решения.
Весь код будет доступен в репозитории на GitHub.
Митап пройдет 16 апреля, начало в 18:30.
Чтобы прийти очно или присоединиться онлайн, зарегистрируйтесь по ссылке.
Реклама. ООО "МТС ДИДЖИТАЛ". ИНН: 7707767501. erid: 2Vfnxy6n8eC
Вы используете Hibernate? Какую модель предпочитаете: анемичную или богатую? Если вы рассматриваете ваши сущности как DTO с getters/setters, то вы сторонник анемичной. Семен Киреков, Team Lead в МТС Big Data на продукте МТС Аналитика покажет участникам митапа альтернативный вариант — богатую доменную модель.
Что обсудим:
1. Что есть Anemic Domain Model и в чем его проблема?
2. Rich Domain Model в действии;
3. Проблемы с производительностью Rich Domain Model и варианты решения.
Весь код будет доступен в репозитории на GitHub.
Митап пройдет 16 апреля, начало в 18:30.
Чтобы прийти очно или присоединиться онлайн, зарегистрируйтесь по ссылке.
Реклама. ООО "МТС ДИДЖИТАЛ". ИНН: 7707767501. erid: 2Vfnxy6n8eC
👍5❤2🔥2
Что такое абстрактный метод в языке Java?
Абстрактный метод – это метод без тела. Вы просто объявляете метод, не определяя его, с использованием ключевого слова abstract в объявлении метода. Все объявленные внутри интерфейса в языке Java методы – по умолчанию абстрактные. Пример абстрактного метода в языке Java представлен на картинке.
Теперь для реализации этого метода необходимо расширить абстрактный класс и этот метод переопределить.
Абстрактный метод – это метод без тела. Вы просто объявляете метод, не определяя его, с использованием ключевого слова abstract в объявлении метода. Все объявленные внутри интерфейса в языке Java методы – по умолчанию абстрактные. Пример абстрактного метода в языке Java представлен на картинке.
Теперь для реализации этого метода необходимо расширить абстрактный класс и этот метод переопределить.
👍16🔥5❤3
⚡️ Тест по Java от OTUS
Проверь насколько хорошо ты знаешь Java
Ответишь — пройдешь на продвинутый курс «Java Developer. Professional» от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса🎁 .
👉 ПРОЙТИ ТЕСТ:
https://otus.pw/VD2z/?erid=LjN8K3Mnn
🎫 А ещё, сейчас действуют скидка на курс до 21.04. Возможна оплата в рассрочку! Предложение ограничено.
Хотите протестировать учебный процесс заранее? Регистрируйтесь на открытый урок «Знакомство с Micronaut» 11 апреля
Проверь насколько хорошо ты знаешь Java
Ответишь — пройдешь на продвинутый курс «Java Developer. Professional» от OTUS по специальной цене + получишь доступ к записям открытых уроков курса курса🎁 .
👉 ПРОЙТИ ТЕСТ:
https://otus.pw/VD2z/?erid=LjN8K3Mnn
🎫 А ещё, сейчас действуют скидка на курс до 21.04. Возможна оплата в рассрочку! Предложение ограничено.
Хотите протестировать учебный процесс заранее? Регистрируйтесь на открытый урок «Знакомство с Micronaut» 11 апреля
❤3👍3🔥2