Библиотека Java разработчика
前往频道在 Telegram
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
显示更多9 988
订阅者
+124 小时
-157 天
-5730 天
帖子存档
👨🏼💻 Теперь official. Сегодня начала действовать IT-ипотека. И в Банке ДОМ.PФ одни из самых выгодных условий!
✅ ставка — от 4,3%,
✅ первоначальный взнос — от 15%,
✅ MAX сумма кредита в регионах-миллионниках — 18 млн рублей, в остальных — до 9 млн рублей.
Кстати, за счет ипотеки можно купить не только строящуюся квартиру, но и готовую от юрлица, а еще построить дом или купить готовый жилой дом с земельным участком 🔥
Подробности можно чекнуть здесь
Как ограничивается тип generic параметра?
В объявлении дженерик-параметра класса или метода может быть указана его верхняя граница (bound):
class Foo<T extends Number>
Ключевое слово extends применяется как для классов, так и для интерфейсов. Фактическим параметром такого класса Foo может быть или сам Number, или его наследники.
Помимо ограничения возможных применяемых типов, bounded-параметр дает право использовать в реализации методы и поля типа-ограничителя – он будет как минимум предком фактического типа. Это достигается стиранием типа-параметра до верхней границы.
Тип-параметр может иметь несколько верхних границ, то есть границу-пересечение типов: <T extends Comparable & Serializable>. Стирание произойдет до первой из границ, остальные послужат только ограничением вариантов фактического типа. Поэтому граница-класс, при наличии, должна быть указана раньше границ-интерфейсов.
При указании значения дженерик-параметра переменной может быть использован вайлдкард – символ ?. Вайлдкард значит, что мы не собираемся использовать информацию о конкретном типе, этот тип может быть любым. Это не то же самое, что не указать дженерик параметр совсем.
Для вайлдкарда также как и для объявления типа-параметра можно обозначить верхнюю границу. Но в отличие от объявления, здесь нельзя использовать пересечение типов, по крайней мере пока.
Кроме того, в случае вайлдкарда можно задать нижнюю границу:
Foo<? super Number> foo;
Означает, что мы не будем использовать информацию о конкретном типе, но будем знать что это предок класса Number. То есть или сам Number, или Object.
В объявлении класса или метода использование super запрещено, так как не имеет смысла.
Лучше разобраться в механике использования ограниченных вайлдкардов поможет это видео.
Хороший API должен уметь эффективно работать с классами-наследниками, то есть быть ко- или контравариантным где это необходимо. При этом без bounded вайлдкардов не обойтись. Чтобы запомнить, какая граница нужна в каких случаях, Joshua Bloch предложил мнемонику PECS: Producer-extends, Consumer-super.
#Дженерики🤖Решаешь однотипные задачи на Java?
🚀Не стой на месте, джавист! Расширь возможности использования языка Java и открой для себя подходы к написанию чистого кода. Вырасти до мидл-разработчика на онлайн-курсе «Java Developer. Professional» в OTUS.
Полгода ты будешь практиковаться решать сложные задачи на Java, а опытные разработчики проведут для тебя подробное код-ревью.
🗣Тебя ждут живые вебинары, обмен опытом, интересные домашние задания и создание своего серверного приложения в качестве выпускного проекта.
📌Пройди вступительный тест, чтобы присоединиться к закрытому сообществу и занять место по спец.цене: https://otus.pw/13QP/
Что такое Type Erasure?
Компилятор удаляет из байткода класс-файла информацию о типах-дженериках. Этот процесс и называется стирание типов (type erasure). Он появился в Java 5 вместе с самими дженериками. Такое решение позволило сохранить обратную совместимость без перекомпилляции кода Java 4.
Стирание состоит из трех действий:
🔘 Если параметры ограничены (bounded), вместо типа-параметра в местах использования подставляется верхняя граница, иначе
Object;
🔘 В местах присвоения значения типа-параметра в переменную обычного типа добавляется каст к этому типу;
🔘 Генерируются bridge-методы.
Подробнее о границах дженериков и bridge-методах поговорим в следующих постах.
Информация о типах стирается только из методов и полей, но остается в метаинформации самого класса. Получить эту информацию в рантайме можно с помощью рефлекшна, методом Field#getGenericType.
Тип со стертой информацией о дженериках называется «Non-reifiable».
Стирание типов позволяет не создавать при применении дженериков новые классы, в отличие от, например, шаблонов C++.
#ДженерикиRepost from Академия Кода
Как создать папку на java?
Используйте
File() объект в Java чтобы создать папку или директорию на Java, ниже пример кода как пример:
import java.io.File;
public class Main {
public static void main(String args[]) {
// Путь к папке или название папкм
String path = "/tmp/test";
File directory = new File(path);
boolean res = false;
// Проверяем если папка уже существует
if (!directory.exists()) {
// Создать новую папку
res = directory.mkdirs();
}
if (res) {
// Вывод: Директория: /tmp/test создана
System.out.println("Директория: " + path + " создана");
}
}
}
#java
Подписывайтесь на канал 👉@coddy_academyНеадекватное Java-интервью
Обсудим, какие вопросы нам задают на интервью при найме на работу, и адекватны ли эти вопросы вообще.
Тинькофф приглашает на One Day Offer
Ищем Java- и Kotlin-разработчиков с опытом от трех лет, чтобы сделать им оффер за день. В течение дня вы общаетесь с командой, а после получаете оффер, если вам понравится команда, работа подойдет по условиям, а задачи — по скиллам.
Встречаемся 28 мая онлайн. Успейте подать заявку до 26 мая. В течение трех дней вернемся с обратной связью: https://l.tinkoff.ru/onedayoffer_java
Как узнать, является ли A подтипом B?
В Java доступны три способа проверки совместимости типов. Функционально они ничем не отличаются, применяются для разных наборов аргументов. В порядке убывания быстродействия:
instanceof – бинарный оператор, самый быстрый и самый используемый. Если есть экземпляр A и можно указать B явно, выбирать надо его. Если A (точнее тип хранящей экземпляр A переменной) и B не из одной цепочки наследования – экземпляр точно не может быть подтипом B и компиляция упадет с ошибкой inconvertible types.
Class::isInstance – метод принимает параметром объект типа A. Его стоит выбрать, когда экземпляр A в наличии, но B – неизвестный на этапе компиляции тип. То есть, для переменных A a и Class bClass, можем проверить bClass.isInstance(a).
Class::isAssignableFrom – принимает Class<A>. Единственное, что остается, если экземпляра A нет. bClass.isAssignableFrom(aClass).
Есть еще четвертый способ – имея экземпляр типа A привести его к B. Если типы были несовместимы, приведение выбросит ClassCastException. Это во всех смыслах плохой способ, построению логики программы на исключениях нет оправдания. Подробная аргументация описана в Effective Java Item 57.
Подборка каналов для IT специалистов 🎯
Системное администрирование 📌
https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.me/sysadminof Книги для админов, полезные материалы
https://t.me/i_odmin Все для системного администратора
https://t.me/i_odmin_book Библиотека Системного Администратора
https://t.me/i_odmin_chat Чат системных администраторов
https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
Excel лайфхак📌
https://t.me/Excel_lifehack
GitHub Сообщество 📌
https://t.me/Githublib Интересное из GitHub
CodePen 📌
https://t.me/codepen_1 Сообщество пользователей CodePen
Базы данных (Data Base) 📌
https://t.me/database_info Все про базы данных
Вакансии для программистов 📌
https://t.me/progjob
Программирование Python 📌
https://t.me/pythonofff Python академия. Учи Python быстро и легко🐍
https://t.me/BookPython Библиотека Python разработчика
https://t.me/python_real Python подборки на русском и английском
Мобильная разработка: iOS, Android 📌
https://t.me/developer_mobila Мобильная разработка
Фронтенд разработка 📌
https://t.me/frontend_1 Подборки для frontend разработчиков
Java разработка 📌
https://t.me/BookJava Библиотека Java разработчика
Разработка игр 📌
https://t.me/game_devv Все о разработке игр
Библиотеки 📌
https://t.me/book_for_dev Книги для программистов Rus
https://t.me/java_360 Книги по Java Rus
https://t.me/python_360 Книги по Python Rus
https://t.me/programmist_of Книги по программированию
https://t.me/proglb Библиотека программиста
https://t.me/bfbook Книги для программистов
БигДата, машинное обучение 📌
https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.me/coddy_academy Полезные советы по программированию
QA, тестирование 📌
https://t.me/testlab_qa Библиотека тестировщика
Шутки программистов 📌
https://t.me/itumor Шутки программистов
Защита, взлом, безопасность 📌
https://t.me/thehaking Канал о кибербезопасности
Книги, статьи для дизайнеров 📌
https://t.me/ux_web Статьи, книги для дизайнеров
https://t.me/arhitekturamira World Architecture
Английский 📌
https://t.me/UchuEnglish Английский с нуля
Математика 📌
https://t.me/Pomatematike Канал по математике
Арбитраж трафика 📌
https://t.me/partnerochkin CPA и арбитраж трафика
Крипта 📌
https://t.me/bitkoinoff Новости криптовалют
DeepFake 📌
https://t.me/deepfakenow Публикуем deepfake видео
Мир технологий 📌
https://t.me/mir_teh Видео из мира технологий
Repost from Сёрф Технологии
Привет!
Давно кодишь на Java/Kotlin и устал от долгих собеседований?
Тогда читай то, что написано ниже👇
Приглашаем Middle, Senior разработчиков в Surf.
✅Back-end оффер в Surf за 1 день
✅З/П до 400к
✅ДМС с психологом, юристом и стоматологом
✅Без бюрократии и пафоса
✅Все подробности здесь
👉Успей подать заявку до 18.05
Repost from Сёрф Технологии
Привет!
Давно кодишь на Java/Kotlin и устал от долгих собеседований?
Тогда читай то, что написано ниже👇
Приглашаем Middle, Senior разработчиков в Surf.
✅Back-end оффер в Surf за 1 день
✅З/П от 400к
✅ДМС с психологом, юристом и стоматологом
✅Без бюрократии и пафоса
✅Все подробности здесь
👉Успей подать заявку до 18.05
DevOps Tools for Java Developers: Best Practices from Source Code to Production Containers
Stephen Chin, Melissa McKay, Ixchel Ruiz, and Baruch Sadogursky (2022)
With the rise of DevOps, low-cost cloud computing, and container technologies, the way Java developers approach development today has changed dramatically. This practical guide helps you take advantage of microservices, serverless, and cloud native technologies using the latest DevOps techniques to simplify your build process and create hyperproductive teams.
The list includes source control with Git, build declaration with Maven and Gradle, CI/CD with CircleCI, package management with Artifactory, containerization with Docker and Kubernetes, and much more. Whether you're building applications with Jakarta EE, Spring Boot, Dropwizard, MicroProfile, Micronaut, or Quarkus, this comprehensive guide has you covered.
Скачать
❓Давно хотите разобраться в теме Agile?
Тогда ждем вас 19 мая в 20:00 на открытом уроке в OTUS.
Начнем с темы «Техники оценки Agile-проектов для различных контекстов».
🔥Что вас ждет на уроке?
- Узнаете, какие бывают виды оценок проектов и задач в зависимости от срочности, размера и сложности объёма работ.
- Научитесь выбирать к ситуации и применять различные способы оценки: «размеры футболок», человеко-часы, story points, PERT и другие
- Познакомитесь с классическим инструментом critical path.
👍Спикер: преподаватель Юлия Белозерова, Technical Program Manager.
Вебинар пройдет в рамках онлайн-курса «Agile Project Manager» и будет полезен инженерам, тимлидам и проектным менеджерам.
⚡️Чтобы попасть на мероприятие, нужно зарегистрироваться:
https://otus.pw/zK7H
Лучшие практики Unit-тестирования на Java
Unit-тестирование - важный шаг в разработке и внедрении программного обеспечения. Оно не только повышает эффективность и результативность кода, но также делает его более надежным.
В этом руководстве мы обсудим несколько лучших практик Unit-тестирования на Java, а именно:
- именование пакетов
- размещение кода с тестами
- именование методов
и многое другое
Читать статью
Repost from Академия Кода
Как найти количество отрицательных элементов массива в java?
Вы можете использовать цикл и условие для проверки, отрицательное ли число.
class Main {
public static void main(String[] args) throws Exception {
int[] array = new int[]{23, -31, 89, 14, -115, 11, -3};
int negatives = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] < 0) negatives++;
}
System.out.println(negatives); // Вывод : 3
}
}
#java
Подписывайтесь на канал 👉@coddy_academyЧто может быть лучше хорошей книги? Только хорошая книга по веб-разработке.
Но есть одно но. Мы все здесь люди занятые, время на обстоятельное изучение литературы не всегда бывает.
Возьмем Apache Kafka. Хочешь изучить этот инструмент? Есть парочка отличных книг! А вот если изучить нужно быстро, но качественно, то есть 3-дневный интенсив.
Переходи по ссылке, чтобы пройти углубленный экспресс-курс от Слёрма по Apache Kafka для разработчиков. Всего 3 дня, и ты спец в Кафке:
https://slurm.club/3FyZv9D
Как найти максимальное число в наборе?
Stream
.of(5, 3, 4, 55, 2)
.mapToInt(a -> a)
.max()
.getAsInt(); //55Выбрать первый язык программирования непросто. Особенно когда ещё не определились, чем хотите заниматься: делать сайты, разрабатывать мобильные приложения или погрузиться в data science.
Java — отличный вариант для старта в программировании.
На Java вы сможете:
- создавать бэкенд для сайтов
- писать игры и мобильные приложения на Android
- работать с big data
- создавать VR-приложения
- писать десктопные программы для бизнеса и государства
- программировать системы для умного дома и интернета-вещей
Зарплата Java-разработчика стартует от 90 000 рублей, а чтобы войти в профессию нужно не так много времени. Например, на курсе «Профессия Java-разработчик» вы уже через 4 месяца станете junior-специалистом и сможете устроиться на работу.
Переходите по ссылке: https://clc.to/OwPl7w и бронируйте место на курсе со скидкой!
