uz
Feedback
Секреты Java

Секреты Java

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish
7 991
Obunachilar
Ma'lumot yo'q24 soatlar
Ma'lumot yo'q7 kunlar
Ma'lumot yo'q30 kunlar
Postlar arxiv
✅ Pattern Matching для instanceof В Java 14 в рамках JEP 305 был представлен Pattern Matching для instanceof. Эта функциональ
Pattern Matching для instanceof В Java 14 в рамках JEP 305 был представлен Pattern Matching для instanceof. Эта функциональность добавляет краткую и удобную возможность проверки типов объектов и условий и привязки нужного типа к переменной. До этого нам приходилось делать проверку типа, а после присваивать этот тип переменной:
if (o instanceof String) {
    String str = (String) o;
    // use str as String
}
И каждый раз добавляя проверку нового типа приходилось добавлять привидение к типу, что усложняло код. После улучшения в Java 14 мы можем записать то же выражение более простым способом:
if (o instanceof String str) {
    // use str as String
}
Область видимости объявленной переменной определяется семантикой выражений и утверждений. Например:
if (!(o instanceof String str)) {
    // can't use str
} else
    // can use str
Или мы можем записать такое вырfжание:
if (obj instanceof String str && str.length() > 8) // use str
Но НЕ такое:
if (obj instanceof String str || str.length() > 8) // use str
В правой части if переменная str не будет определена! Pattern Matching приятно упрощает код, делая его более читаемым и понятным. Также это позволяет избежать дублирования кода и ошибок, связанных с неправильным приведением типов. 🫡 Секреты Java #java #java14

Большинство разработчиков стремится повысить свой грейд, но как и куда расти, если ты амбициозный мидл или уже синьор? Откуда
Большинство разработчиков стремится повысить свой грейд, но как и куда расти, если ты амбициозный мидл или уже синьор? Откуда брать насмотренность и опыт, если ты ограничен задачами своей компании, а одними статьями на Хабре проблему не решить? Чтобы расти в профессии и получать крутые офферы, разработчик может прокачать навык построения архитектуры. Он может собрать библиотеку из каналов, статей и видео или пройти полноценный курс. Курс «Архитектор ПО» от Практикума поможет развить навык решения архитектурных задач. Техлиды Яндекса и других компаний покажут противоположные архитектурные подходы. Благодаря этому разработчику не придётся учиться на своих ошибках — он научится на опыте коллег. За 6 месяцев курса он разработает и добавит в портфолио 5 архитектур. Курс подойдёт бэкенд-разработчикам, которые: — работают 2+ лет; — хотят развиваться на текущей позиции и повышать свой грейд; — хотят получить должность лида или архитектора ПО. Успейте записаться на ближайший поток по ссылке

Большинство разработчиков стремится повысить свой грейд, но как и куда расти, если ты амбициозный мидл или уже синьор? Откуда
Большинство разработчиков стремится повысить свой грейд, но как и куда расти, если ты амбициозный мидл или уже синьор? Откуда брать насмотренность и опыт, если ты ограничен задачами своей компании, а одними статьями на Хабре проблему не решить? Чтобы расти в профессии и получать крутые офферы, разработчик может прокачать навык построения архитектуры. Он может собрать библиотеку из каналов, статей и видео или пройти полноценный курс. Курс «Архитектор ПО» от Практикума поможет развить навык решения архитектурных задач. Техлиды Яндекса и других компаний покажут противоположные архитектурные подходы. Благодаря этому разработчику не придётся учиться на своих ошибках — он научится на опыте коллег. За 6 месяцев курса он разработает и добавит в портфолио 5 архитектур. Курс подойдёт бэкенд-разработчикам, которые: — работают 2+ лет; — хотят развиваться на текущей позиции и повышать свой грейд; — хотят получить должность лида или архитектора ПО. Успейте записаться на ближайший поток по ссылке

Поле @author комментария javadoc говорит о том, кто мы такие. Мы — авторы. А как известно, у каждого автора имеются свои читатели. Автор несет ответственность за то, чтобы хорошо изложить свои мысли читателям. Когда вы в следующий раз напишете строку кода, вспомните, что вы — автор, и пишете для читателей, которые будут оценивать плоды вашей работы. ... На самом деле соотношение времени чтения и написания кода превышает 10:1. Мы постоянно читаем свой старый код, поскольку это необходимо для написания нового кода.
© Р. Мартин "Чистый код" Не устану цитировать классиков и отмечать необходимость содержать код в чистоте. Когда вы пишите код, знайте, что его обязательно будут читать. И не раз, и не два. К нему будут возвращаться снова и снова и перечитывать на протяжении всей жизни проекта. Если не другие разработчики, то это будете делать вы. Думаете, когда вернетесь к своему коду через несколько недель или месяцев, то легко вспомните, что в нем происходит? Как бы не так! Сколько раз я натыкался на не самый приятный код, ругал про себя разработчика написавшего его, а потом через историю гита с удивлением обнаруживал, что сам был его автором. Пожалейте себя в будущем! Ведь как это классно работать с простым и элегантным кодом! 🫡 Секреты Java #quotes

Как java-разработчику стать мидлом в бигтехе? Приходи на интенсив в Открытые школы Т1! 🎓Открытые школы Т1 — это бесплатная к
Как java-разработчику стать мидлом в бигтехе? Приходи на интенсив в Открытые школы Т1! 🎓Открытые школы Т1 — это бесплатная карьерная программа для IТ-специалистов с опытом от года, объединяющая обучение без отрыва от работы и offer weeks. Лучшие выпускники Открытых школ получают оффер в команду Т1 и присоединяются к командам финтех-разработки, разработки ИТ-продуктов, облачных сервисов, развития ИИ-решений, интеграции и консалтинга.  ⌛️ Длительность: 1 месяц. 💻 Формат: онлайн по вечерам (от 8 часов в неделю на вебинары и практику). Готов к вызову? Тогда подавай заявку до 21 июня! Т1 — крупнейшая ИТ-компания в России по версии RAEX 2023 и партнёр ключевых производителей и разработчиков в сфере IT. Реклама. ООО "Т1". ИНН 7720484492.

✅ Жизненный цикл потока Thread (Нить/Поток) является фундаментальным элементом выполнения программы, и у него есть жизненный
Жизненный цикл потока Thread (Нить/Поток) является фундаментальным элементом выполнения программы, и у него есть жизненный цикл, который определяется несколькими состояниями. Эти состояния перечислены в енаме Thread.State, а состояние потока в настоящий момент может быть получено с помощью метода объекта Thread .getState(). Давайте разберемся в них: ▫️NEW: В этом состоянии поток находится, когда мы его создали, но еще не запустили с помощью start(). Например код ниже выведет это состояние -
Runnable runnable = () -> doNothing();
Thread t = new Thread(runnable);
System.out.println(t.getState());
▫️RUNNABLE: В это состояние поток приходит после вызова метода start() и он запущен, либо! готов к запуску и находится в ожидании выделения ресурсов от системы (В многопоточной системе JVM распределяет ресурсы между активными потоками) ▫️BLOCKED: В этом состоянии поток не выполняется и происходит это когда он пытается захватить уже занятый другим потоком monitor lock. Например, попытка зайти в блок synchronized пока он занят другим потоком. В этом состоянии тред будет находится пока monitor не освободится. ▫️WAITING: В этом состоянии поток находится, когда ожидает выполнения какого-либо действия от другого потока. Например если он вызовет Object.wait(), то перейдет в это состояние и будет ждать пока другой поток вызовет Object.notify() (notifyAll()) на том же объекте. Либо вызовет Thread.join() и будет ожидать завершения этого потока. Java доки описывают третий кейс - это вызов LockSupport.park, но про него не расскажу. ▫️TIMED_WAITING: Поток находится в ожидании, как и с предыдущим состоянием, с той разницей, что в данном случае задано время ожидания. Когда мы вызываем Thread.sleep(..), Object.wait(..) или Thread.join(..) поток будет в состоянии TIMED_WAITING. ▫️TERMINATED: Поток завершил свою работу или выполнение было прервано. Тут все понятно. 🫡 Секреты Java #java #multithreading #thread

🚀 Готовься к переменам в мире IT с нашим практическим курсом по Domain Driven Design! 😰 Устал от запутанной инфраструктуры,
🚀 Готовься к переменам в мире IT с нашим практическим курсом по Domain Driven Design! 😰 Устал от запутанной инфраструктуры, вперемешку с бизнес логикой? Мы знаем, как это тяжело. Писать тесты становится неприятно и больно, приходится много мокать, тесты получаются огромными, хрупкими.. Но есть решение! Присоединяйся к нашему курсу, где мы разложим все по полочкам за 10 вебинаров, начиная с 17 июня. 🔝 Прими вызов и стань частью передовой волны технологического прогресса. Успей зарегистрироваться сейчас https://microarch.ru/courses/hexagonal-architecture?utm_source=posev&utm_medium=erid:2VtzqxRjeES&utm_campaign=4 🎓 На нашем курсе ты изучишь: ✅ Основы Domain-Driven Design и его важность для разработчиков. ✅ Создание эффективных и масштабируемых сервисов с использованием DDD. ✅ Применение шаблонов проектирования и принципов DDD для оптимизации кода и повышения производительности. 💡 Зачем тебе этот курс? 🌟 Плюс, ты получишь: — Новые подходы к разработке, в том числе и использование подходов ядра и слоев в онион-архитектуре. — Шанс быть первым внедрившим новые методы в отделе. — Стань Senior Developer или Team Lead. — Пиши код как профессионал, а не как в учебниках. — Получи признание в компании и увеличь свою заработную плату. 🌟 Присоединяйся к нам прямо сейчас и стань экспертом в разработке успешных проектов: https://microarch.ru/courses/hexagonal-architecture?utm_source=posev&utm_medium=erid:2VtzqxRjeES&utm_campaign=4 Реклама. ИП Ветчинкин К.Е. ИНН: 773376451099 Erid: 2VtzqxRjeES

❓Обявление переменной на какой строчке является корректным?
Anonymous voting

#java #test
#java #test

Изучи алгоритмы, чтобы работать в Яндекс или Google Приходи на бесплатное обучение от FAANG School. Там ты узнаешь: – Как исп
Изучи алгоритмы, чтобы работать в Яндекс или Google Приходи на бесплатное обучение от FAANG School. Там ты узнаешь: – Как использовать разные структуры данных при решении задач – Какие 20% усилий дают 80% результата при подготовке к алгоритмам – Prefix Sum и Sliding Window. 2 подхода, которые закрывают задачи на 200к$ во время собесов в Google – Как научиться решать алгоритмы без матана Спикер – Разработчик из BigTech. За 7 лет решил 500 задач на LeetCode, прошел 30 собеседований в компаниях уровня Google и Meta, а сейчас работает в одной из крупных IT-гигантов в мире. Переходи и жми на кнопку «Принять участие», чтобы начать обучение.

✅ Как прочитать файл из classpath? Часто в коде бывает необходимо прочесть файл из classpath, например с конфигами или какими
Как прочитать файл из classpath? Часто в коде бывает необходимо прочесть файл из classpath, например с конфигами или какими-либо ресурсами. Предположим у нас есть файл demo.txt, который лежит в
src/main/resources/config.
Рассмотрим варианты, как можно прочитать этот файл. ▫️Загрузка через ClassLoader:
InputStream in = this.getClass().getClassLoader()
    .getResourceAsStream("config/demo.txt");
System.out.println(new String(in.readAllBytes()));
В ClassLoader все пути абсолютные, поэтому вам не нужен слеш в начале. ▫️Загрузка через класс:
InputStream in = this.getClass()
    .getResourceAsStream("/config/demo.txt");
System.out.println(new String(in.readAllBytes()));
А вот через класс путь будет относительным, поэтому потребуется слеш в начале для пути к файлу, лежащем в другой директории. ▫️Еще вариант - получить ClassLoader из текущего потока:
ClassLoader loader = Thread.currentThread()
    .getContextClassLoader();
InputStream in = loader
    .getResourceAsStream("config/demo.txt");
System.out.println(new String(in.readAllBytes()));
Так же путь абсолютный. 🫡 Секреты Java #java #classpath #file

❓На какой строчке компиляция выдаст ошибку?
Anonymous voting

#test
#test

📌 Составили список лучших каналов для любого айтишника: Java Developer — советы и практики от действующего Senior-разработчи
📌 Составили список лучших каналов для любого айтишника: Java Developer — советы и практики от действующего Senior-разработчика Python Developer — секреты и тонкости программирования на Python Frontend Developer — готовый код и полезные ресурсы для любого фронтендера

✅ final и effectively final Java 8 ввела интересное понятие - effectively final, которое отличается от обычного final. Когда
final и effectively final Java 8 ввела интересное понятие - effectively final, которое отличается от обычного final. Когда переменная объявлена с ключевым словом final, это означает, что ее значение не может быть изменено после инициализации. Согласно JLS 8.1.3 анонимные классы не могут получить доступ к не final или не effectively final переменным или изменять их. То же ограничение применимо и к лямбда-выражениям, поскольку доступ может потенциально вызвать проблемы с параллельным выполнением. Если мы напишем что-то вроде:
final int finalVar = 1;
finalVar = 2;
компилятор скажет нам:
error: cannot assign a value to final variable
Однако, в случае effectively final, переменная не объявлена как final, но ее значение не изменяется после первого присвоения.
Переменная или параметр, значение которого никогда не меняется после инициализации, является effectively final.
(с) Java доки Такой код успешно скомпилируется:
int y = 5;
Runnable r = () -> System.out.println(y);
Но если мы присвоим y новое значение:
int y = 5;
y = 10;
Runnable r = () -> System.out.println(y);
то переменная перестанет быть effectively final и компилятор будет ругаться. Это нововведение из Java 8 позволяет нам упускать слово final (например в случаях, когда мы используем переменную в анонимном классе) и экономить нам несколько нажатий клавиш :) 🫡 Секреты Java #java #java8 #final

♨️ Прокачивай свои навыки вместе с Java | Фишки и трюки Ежедневные порции Java-фишек, полезные советы и трюки от опытных разр
♨️ Прокачивай свои навыки вместе с Java | Фишки и трюки Ежедневные порции Java-фишек, полезные советы и трюки от опытных разработчиков. 👉🏼 Присоединиться

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

#test
#test

Расширьте свои навыки в программировании с бесплатным мини-курсом по Java! Научитесь создавать Telegram-ботов, разрабатывать
Расширьте свои навыки в программировании с бесплатным мини-курсом по Java! Научитесь создавать Telegram-ботов, разрабатывать программы для обработки данных и строить чаты на фреймворке Spring. Не упустите шанс изучить основы Java-разработки — начните обучение уже сегодня: 👉 https://epic.st/IpP19?erid=2Vtzqw59Y1L Формат мини-курса отлично подойдёт для обучения из любой точки мира: смотрите видео в удобное время и закрепляйте навыки на практике. 🎁 За время обучения вы получите 5 полезных материалов в подарок, сертификат на скидку 10 000 рублей на любой курс, персональную карьерную консультацию и доступ к изучению английского языка в Skillbox на год. До встречи на мини-курсе. Старт после регистрации! Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880

Простота является необходимым условием надёжности.
© Эдсгер Вибе Дейкстра Помню "по молодости" я старался украсить свой код как можно большим количеством паттернов, фреймворков и других изученных фишек думая, что от этого он станет безупречным и что это покажет мой профессионализм. Я писал код и думал что-то вроде - "какой паттерн можно засунуть суда?", "ага, а тут можно прикрутить тот сторонний инструмент". Прошло время, и как вы догадались, мнение изменилось на противоположное. Сейчас я всегда исхожу из принципа "Если можно обойтись без чего-то в коде, значит это не нужно". И когда пишу код и когда делаю ревью у меня всегда в голове, фоном (в демон потоке, ага) висит вопрос - "Можно ли еще проще?" Это не призыв писать самому низкоуровневые вычисления, для чего уже написано куча хороших библиотек. Они написаны как раз для упрощения. Но если вы пишете класс и думаете о чем то вроде "Вот тут неплохо бы смотрелся тот паттерн!" - подумайте еще раз, так уж он тут необходим? Действительно он упростит код? Помимо читаемости, расширяемости, обслуживаемости простой код обладает еще одним, возможно даже самым важным качеством - надежностью. В простом коде вы просто оставляете себе гораздо меньше места для ошибки. И оставляете себе гораздо больше времени для других задач (или отдыха). Поверьте, нет ничего хуже в нашей работе, чем постоянно ломающийся проект и необходимость только и делать, что поддерживать его жизнеспособность фиксом каскадно возникающих багов в сложном коде. Так же слова Э. Дейкстра:
Если мы посчитаем количество строк кода, то стоит рассматривать их не как “произведённые строки”, а как “строки потраченные”
Будьте "ленивыми" в написании кода, не тратьте свои строки на усложнение. Вы не сделаете лучше никому. 🫡 Секреты Java #quotes