ch
Feedback
Секреты Java

Секреты Java

前往频道在 Telegram

Обсуждаем Java, архитектуру, фреймворки и всё, о чем должны говорить разработчики. Владелец: @Alexey_Morl Реклама на бирже: https://telega.in/c/java_secrets

显示更多
7 991
订阅者
无数据24 小时
无数据7
无数据30
帖子存档
Псс… свободы н-н-нада? Освойте профессию разработчика на Java — и можете работать хоть с вершины Эвереста. Лишь бы интернет л
Псс… свободы н-н-нада? Освойте профессию разработчика на Java — и можете работать хоть с вершины Эвереста. Лишь бы интернет ловил ツ А если не уверены, что именно язык Java «ваш», то добро пожаловать на подготовительный курс «Java-разработчик» от онлайн-школы Хекслет. Здесь вам и 62 онлайн-урока, и 4 живых вебинара, и море практики (пока только практики, теплое Средиземное будет позже). На все это вам будет отведено 2 недели и 1 наставник-эксперт, который поможет справиться с трудностями. Цена вопроса — 990 рублей. ⏰ Cтарт уже 6 августа!

✅ Either как замена выбрасыванию исключений Either из библиотеки с открытым исходным кодом Vavr, представляет из себя контейн
Either как замена выбрасыванию исключений Either из библиотеки с открытым исходным кодом Vavr, представляет из себя контейнер, который может содержать одно из двух значений: либо "левое", либо "правое". Существует общепринятая практика, согласно которой правое значение соответствует какому-либо значению, а левое - ошибке/исключению. Either похож на Optional, но только если Optional содержит или не содержит значение, то Either содержит либо значение либо ошибку. Давайте посмотрим на простой пример:
public Either<String, Integer> parseInt(String input) {
    try {
        return Either.right(Integer.parseInt(input));
    } catch (NumberFormatException e) {
        return Either.left("Invalid number format: " + input);
    }
}
Данным метод принимает строку и пытается преобразовать ее в Integer. В случае успеха мы записываем значение в правую часть Either (Either.right). Если входная строка не может быть преобразована в число, то метод вернет информацию об ошибке в левой части Either (Either.left). Таким образом, мы заменили выбрасывание исключения на кастомное представление об ошибке. Самое интересное - как можно обрабатывать результат подобного метода:
Either<String, Integer> result = parseInt("123");
result
    .peek(value -> System.out.println("Success: " + value))
    .peekLeft(error -> System.err.println("Error: " + error));
Принято сначала обрабатывать положительные результаты, а затем ошибочные. В данном примере peek выполнит команду для вывода успешного результата, а в случае ошибки выполнится peekLeft. Операции, которые часто используются с Either: 1) фильтрации .filter(...); 2) преобразования .map(...), .mapLeft(...); 3) проверять наличие значения в левой или правой части .isLeft(), .isRight(). И это только малая часть функционала! Either хорошо сочетается с функциональным стилем программированием. Если вы любите использовать в своих программах Stream и Optional, то попробуйте Either. Интегрировав этот паттерн в свою программу, вы заметите, как ваш код станет более чистым и структурированным. Вы избавитесь от необходимости бесконечного пробрасывания и отлавливания Exception, постоянных try-catch и пр, заменив их на понятную цепочку вызовов. 🫡 Секреты Java #java #vavr #either

Привет! Ты сейчас ищешь работу? Если да, то у меня для тебя классные новости. Мы с Максом решили провести вебинар на тему пои
Привет! Ты сейчас ищешь работу? Если да, то у меня для тебя классные новости. Мы с Максом решили провести вебинар на тему поиска работы и того, как быстрее получить оффер. Зачем? Да потому что найти работу просто откликаясь на вакансии теперь практически нереально. На Junior вакансии откликаются по 1500 кандидатов. 1500 человек, Карл... Вопрос: Как искать работу в таких условиях? Ответ: Нужно менять подходы, и использовать новые способы поиска работы. А вот какие способы, и как искать работу в 2024 году, расскажет мой товарищ - Макс, который помогает разработчикам с трудоустройством. Он расскажет тебе как ПРАВИЛЬНО откликаться на вакансии, на что смотрят рекрутеры, и как ты должен быть упакован, чтобы получить работу в это непростое время. 🗓 Когда? Во вторник – 30 июля, в 18:00 по мск. 🎁 После регистрации он также обещал прислать: 1) Анализ рынка труда. 2) Разбор кейсов тех, кто сейчас находит работу. 3) Пошаговый план, что нужно делать, чтобы прийти к оферу. 👉 Записаться на вебинар по поиску работы.

❓Что выведет код на изображении выше?
Anonymous voting

#test
#test

Начните свою карьеру Java-разработчика с Hexlet! Хотите стать профессионалом в Java? Пройдите обучение и за 10 месяцев освоит
Начните свою карьеру Java-разработчика с Hexlet! Хотите стать профессионалом в Java? Пройдите обучение и за 10 месяцев освоите все ключевые навыки, от основ до продвинутого уровня. 🎁🌴 А до 31 июля вас ждет специальное предложение - скидка 35 000 р. и второй курс в подарок! Вас ждут сотни практических упражнений, реальные проекты для портфолио и поддержка опытных менторов. Освойте язык крупного бизнеса и финансовых технологий и научитесь разрабатывать веб-приложения на фреймворке Spring. А во время обучения вы также поучаствуете в Карьерном треке! Пройдите 5 бесплатных уроков, чтобы понять, насколько интересен этот путь, и получите скидку на дальнейшее обучение.

✅ Варианты использования аннотации @OneToOne Аннотация JPA @OneToOne необходима нам для установления связи один-к-одному для
Варианты использования аннотации @OneToOne Аннотация JPA @OneToOne необходима нам для установления связи один-к-одному для записей из двух таблиц. Пример: у нас есть человек-гражданин (пусть это будет Person) и у него есть один действующий паспорт (Passport). Существует несколько вариантов использования этой аннотации, о которых следует знать. Рассмотрим на примере Person и Passport: ▫️Внешний ключ В первом варианте таблица Person имеет внешний ключ passport_id:
@Entity
@Table(name = "persons")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "passport_id", referencedColumnName = "id")
    private Passport passport;
}

@Entity
@Table(name = "passports")
public class Passport {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String number;

    @OneToOne(mappedBy = "passport")
    private Person person;
}
Параметр name в аннотации @JoinColumn служит для указания внешнего ключа в таблице persons, а referencedColumnName - для определения первичного ключа таблицы passports, на который будет ссылаться внешний ключ passport_id. ▫️Общий первичный ключ В данном варианте у нас нет дополнительного столбца для связи таблиц. Эту роль взял на себе первичный ключ person_id из таблицы passports, который так же является и внешним ключом.
@Entity
@Table(name = "persons")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    @OneToOne(mappedBy = "person", cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private Passport passport;
}

@Entity
@Table(name = "passports")
public class Passport {
    @Id
    @Column(name = "person_id")
    private Long id;

    private String number;

    @OneToOne
    @MapsId
    @JoinColumn(name = "person_id")
    private Person person;
}
Аннотация @PrimaryKeyJoinColumn указывает на то, что первичный ключ из таблицы persons будет использоваться в качестве внешнего ключа в passports. А аннотация @MapsId говорит о том, что обе таблицы используют один первичный ключ и он будет скопирован из "родительской" таблицы persons в в таблицу passports. 🫡 Секреты Java #java #jpa #hibernate #oneToOne

Почему тебя не зовут на интервью? Исправь это в своем резюме… Получить приглашение на интервью сейчас сложнее, чем с нуля обу
Почему тебя не зовут на интервью? Исправь это в своем резюме… Получить приглашение на интервью сейчас сложнее, чем с нуля обучиться разработке. И к сожалению, это не шутка. Скорее всего только 1-2% работодателей сейчас позовут тебя на интервью. Это статистика, которую мы собирали по 10.000 откликам. Но над этой цифрой можно и нужно работать. Если правильно оформить свое резюме, и поменять свою стратегию с откликами, то конверсию можно увеличить до 10%. Т.е почти в 10 раз! Как это сделать? 1. Проверить свое резюме по нашему чек листу, и внести в него то, чего будет не хватать. 2. Поменять свой подход к поиску работы, ведь одними откликами на hh.ru сыт не будешь. 30 июля, в 18:00 по москве, Макс из CodeReview проведет вебинар на тему эффективного поиска работы в 2024 году. На нем Макс покажет как сейчас нужно искать работу. В прямом эфире. А также раскроет что именно нужно писать в свое резюме, чтобы оно ПРОДАВАЛО. Получить чек лист по составлению резюме, а также зарегистрироваться на вебинар можно по этой ссылке. Регистрируйся сейчас и увидимся 30 июля, в 18:00 по мск. 👉 Зарегистрироваться и получить чек-лист по резюме.

✅ @Embeddable и @EmbeddedId Часто в процессе работы с БД необходимо использовать составной первичный ключ. Составной первичны
@Embeddable и @EmbeddedId Часто в процессе работы с БД необходимо использовать составной первичный ключ. Составной первичный ключ - это ключ который имеет более одного поля. В решении данной задачи помогают аннотации @Embeddable и @EmbeddedId. Аннотация @Embeddable используется для обозначения класса, поля которого могут быть включены в другой класс. Проще говоря, этот класс не будет отдельной таблицей в базе данных, а его поля станут колонками в таблице, которая использует этот класс:
@Embeddable
public class EmployeeId  {
    private String firstName;
    private String lastName;
}
Аннотация @EmbeddedId используется для создания составного первичного ключа. Класс, помеченный как @Embeddable, будет использоваться в качестве ключа:
@Entity
public class Employee  {
    @EmbeddedId
    private EmployeeId id;
    
    private String department;
    ...
}
В данном примере составным ключом в таблице employee будут два поля - first_name, last_name. JPA поддерживает встраиваемые классы не только для определения составного первичного ключа. Большие классы можно разбивать на логические группы с помощь @Embeddable:
@Embeddable
public class Address {
    private String city;
    private String street;
    private String house;
}
Подобные класс встраиваются в другие сущности с помощью аннотации @Embedded
@Entity
public class Employee  {
    @EmbeddedId
    private EmployeeId id;

    @Embedded
    private Address address;
    
    private String department;
    ...
}
Используя @Embeddable и @EmbeddedId, мы можем создавать более гибкие и сложные модели данных, которые легко интегрируются с реляционными базами данных. Это позволяет более точно отражать бизнес-логику и упрощает работу с составными ключами. 🫡 Секреты Java #java #jpa #hibernate #embedded

❓Что выведет код на изображении выше?
Anonymous voting

#test
#test

Недавно Сбер выпустил GigaIDE – новую IDE для Java, Kotlin и не только. Это событие вызвало бурные обсуждения среди разработчиков. Чаще всего звучали вопросы:  1. Это просто пересобранная версия IntelliJ IDEA CE? 2. Что нового предлагает GigaIDE? 3. Поддерживает ли она работу с базами данных и Spring? 4. Как установить Amplicode в GigaIDE?  Записали для вас видео с подробным разбором особенностей и фич GigaIDE, а заодно рассказали, как легко добавить поддержку Spring в GigaIDE!  Реклама. ООО "ХОУЛМОНТ". ИНН 6316134393.

❓Что выведет код на изображении выше?
Anonymous voting

#test
#test

Бесплатный однодневный интенсив по искусственному интеллекту! За 1 день научим тебя писать нейронные сети. Напишешь 9 нейроно
Бесплатный однодневный интенсив по искусственному интеллекту! За 1 день научим тебя писать нейронные сети. Напишешь 9 нейронок с нуля, без опыта программирования! На интенсиве ты создашь: - 3 нейронки из области компьютерного зрения - 3 нейронки по распознаванию и обработке текста - 3 нейронки по сегментации, временным рядам и аудио Регистрируйся прямо сейчас, исследуй футуристичный мир нейросетей с нами! Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395. erid: LjN8K21Qv

✅ Чем отличаются команды git pull от git fetch? Команды git pull и git fetch часто используются при работе с репозиториями Gi
Чем отличаются команды git pull от git fetch? Команды git pull и git fetch часто используются при работе с репозиториями Git. Pull чаще, fetch гораздо реже, тем не менее рассмотрим их различия, т.к. обе команды по своему полезны. Команда git pull выполняет две операции сразу: git fetch для загрузки информации из удаленного репозитория и git merge для объединения изменений из этого репозитория с текущей веткой. Таким образом, при использовании git pull, вы загружаете и объединяете изменения одновременно. С другой стороны, команда git fetch просто загружает изменения из удаленного репозитория, но не объединяет их с текущей веткой. Это позволяет вам просмотреть полученные изменения и решить, как и когда их объединить с вашей веткой. Простая формула, чтобы запомнить:
git pull = git fetch + git merge
Из документации Git для git pull:
git pull выполняет git fetch с заданными параметрами, а затем, в зависимости от параметров конфигурации или флагов командной строки, вызывает либо git rebase, либо git merge для согласования различия в ветках.
Выбор между git pull и git fetch зависит от конкретной ситуации - если вы уверены в том, что хотите быстро получить и объединить изменения, используйте git pull. Если же вам нужно просмотреть изменения и решить, как и когда их объединить, выберите git fetch. 🫡 Секреты Java #git

Надоело писать код, который тормозит? Хочешь стать востребованным middle или senior разработчиком и получать предложения о ра
Надоело писать код, который тормозит? Хочешь стать востребованным middle или senior разработчиком и получать предложения о работе от топов российского и международного рынка? Тогда курс «Алгоритмы и структуры данных» — то, что тебе нужно! На обучении ты: - освоишь самые актуальные алгоритмы (жадные алгоритмы, бинарный поиск и др.), которые нужны для решения реальных задач и прохождения собеседований в крупные IT-компании; - научишься оптимизировать свой код так, чтобы он летал, как ракета, а не ползал, как улитка; - прокачаешь алгоритмическое мышление и сможешь создавать свои собственные алгоритмы для решения любых задач; - получишь опыт реализации классических алгоритмов: твой GitHub будет сиять; - разберёшься в сложных структурах данных: деревья поиска, хеш-таблицы, графы и всё, что нужно настоящему профи.   ⏰ Только до 21 июля действует 10% скидка на обучение! С 22 июля скидка — 5%. 💚 Действуй сегодня, записывайся в группу: https://otus.pw/EwBh/?erid=LjN8KVY4j

✅ Unit тесты с Hamcrest В посте хочу рассказать про довольно полезную либу. Hamcrest - это часто используемая библиотека для
Unit тесты с Hamcrest В посте хочу рассказать про довольно полезную либу. Hamcrest - это часто используемая библиотека для написания модульных тестов в Java в помощь JUnit. В замен использования многочисленных методов assert JUnit, Hamcrest предоставляет единственный оператор assertThat и стандартный набор сопоставителей (Matcher), которые закрывают большую часть необходимых кейсов. Примеры тестирования строковых значений:
String str = "Hello";

assertThat(str, equalToIgnoringCase("hello"));
assertThat(str, startsWith("H"));
assertThat(str, containsString("elo"));
В принципе из названий методов явно понятно, что они проверяют. Этот фреймворк поддерживает работу со всеми типами данных и коллекций. Но основное его преимущество это возможность написания лаконичных проверок для произвольных Java объектов. Помимо проверки определенных полей, мы можем сравнивать объекты целиком. Вам не нужно писать пошаговое сравнение всех полей объектов, за вас это сделает Hamcrest:
public class Book {
    String author;
    String title;
    ...
}

@Test
public void test() {
  Book book1 = new Book("Robert Martin", "Clean Code");
  Book book2 = new Book("Joshua Bloch", "Effective Java");

  assertThat(book1, instanceOf(Book.class));
  assertThat(book1, hasProperty("title"));
  assertThat(book1, samePropertyValuesAs(book2));
}
Третий assertThat провалит проверку, т.к. значения полей у объектов book1 и book2 разные, при этом он покажет детализированную информацию об ошибках:
Expected: same property values as Book [author: "Joshua Bloch", title: "Effective Java"]
     but: author was "Robert Martin"
Используя подобные механизмы вы значительно сократите время написания тестов, а так же улучшите их читаемость. 🫡 Секреты Java #java #junit #hamcrest

Вы архитектор ПО и хотите выстроить всё как следует? Присоединяйтесь к экспертной команде Яндекс Практикума! Сервис онлайн-об
Вы архитектор ПО и хотите выстроить всё как следует? Присоединяйтесь к экспертной команде Яндекс Практикума! Сервис онлайн-образования Яндекс Практикум закладывает стандарты цифровых профессий и приглашает авторов контента, наставников и ревьюеров для курса «Архитектура ПО». Интересно? Тогда коротко: • что делать – в роли автора разрабатывать уроки, тесты, схемы, иллюстрировать своими кейсами, подавать знания так, чтобы они увлекали студентов; – в роли наставника проводить вебинары и помогать студентам осваивать новую профессию; – в роли ревьюера проверять работы студентов и давать обратную связь; • какие условия — удалёнка, нагрузка от 10 часов в неделю, гибкий график; • кто нужен — практик, который участвовал в крупных проектах, например, занимался редизайном систем, а также руководил командами и знает, как переводить бизнес-требования в ТЗ. Посмотреть детали и откликнуться: → роль авторароль наставникароль ревьюера

❓Что выведет код на изображении выше?
Anonymous voting