Forwarded from Mobile Developer (Алексей Гладков)
Избегайте преждевременной оптимизации. Сначала выполните программную задачу правильно, затем слелайте ее быстрой - если она ещё недостаточно быстра.
Java concurrency in practice
Java concurrency in practice
Тинькофф приглашает на One Day Offer
Ищем Java- и Kotlin-разработчиков с опытом от трех лет, чтобы сделать им оффер за день. В течение дня вы общаетесь с командой, а после получаете оффер, если вам понравится команда, работа подойдет по условиям, а задачи — по скиллам.
Встречаемся 28 мая онлайн. Успейте подать заявку до 26 мая. В течение трех дней вернемся с обратной связью: https://l.tinkoff.ru/java-one-day-offer-2022
Ищем Java- и Kotlin-разработчиков с опытом от трех лет, чтобы сделать им оффер за день. В течение дня вы общаетесь с командой, а после получаете оффер, если вам понравится команда, работа подойдет по условиям, а задачи — по скиллам.
Встречаемся 28 мая онлайн. Успейте подать заявку до 26 мая. В течение трех дней вернемся с обратной связью: https://l.tinkoff.ru/java-one-day-offer-2022
Forwarded from Devcoach
JetBrains открыли регистрацию на тестирование нового UI в их IDE. Визуально похоже на VS Code, но с отголосками классического дизайна. Судя по скрину выглядит модно-молодежно. Я уже подал заявку и жду одобрения. Если вдруг тут есть кто-то из JetBrains, то посодействуйте😂 Хочу быстрее потестить.
Если кто-то уже юзает новый UI поскидывайте скринов в комменты.
А если вы тоже хотите потестить, то вот ссылка на регистрацию: https://www.jetbrains.com/lp/intellij-new-ui-preview/
Если кто-то уже юзает новый UI поскидывайте скринов в комменты.
А если вы тоже хотите потестить, то вот ссылка на регистрацию: https://www.jetbrains.com/lp/intellij-new-ui-preview/
Если отладка — это процесс устранения ошибок, то программирование — это процесс добавления этих ошибок
Эдсгер Вибе Дейкстра
Эдсгер Вибе Дейкстра
https://habr.com/ru/post/674858/
https://habr.com/ru/post/674882/
Владимир Мальзам сделал обзор походу вообще всех существующих компонентов Спринг.
https://habr.com/ru/post/674882/
Владимир Мальзам сделал обзор походу вообще всех существующих компонентов Спринг.
Хабр
Обзор Spring-компонентов. Часть 1 – Spring Boot и фреймворк интеграции
В обзоре собраны краткие описания каждого компонента экосистемы, чтобы дать понимание – как выглядит мир Spring, и ориентиры – что из этого стоит изучить глубже и применять в проекте. Вторая часть...
4 часа годноты. не пугайтесь объема, оно того стоит. ну и благо есть таймкоды и ускорение видео
https://youtu.be/lq4TKfc-Ot4
https://youtu.be/lq4TKfc-Ot4
Forwarded from 23derevo (18+)
JIRA —> ДЖЫРА
Так вышло, что в нашей лавке я крайний за JIRA. На мне все апдейты, автоматизация бизнес-процессов, тысячи строк кода на Groovy и все прочие удовольствия. Сейчас у нас лицензия действующая, но в апреле 2023 года она протухнет, и её наверняка нам не продлят. Поэтому я вчера пошёл у разных ребят выяснять, кто как эту проблему решает, кто на что переезжает.
Выяснилось, что в основном, проблему не решают никак. Хрен с вами, подумал я. Пойду поспрашиваю, что там у больших российских банков. Уж эти-то точно что-то придумали: написали своё, взяли оперсорс или перешли на что-то отечественное типа Яндекс.Трекера.
В общем, за сутки я пообщался с людьми из трёх крупных (Топ 10) российских банков. И знаете что?
1. Те, у кого серверная лицензия истекает в 2023 году (On Premise — JIRA Server или JIRA Data Center), — пока ничего не делают. Всё равно в феврале 2023 года у JIRA Server наступит End Of Life, там и будут думать. Мы, кстати, тоже из таких.
2. У кого лицензия на JIRA Server или JIRA Data Center уже закончилась или вот-вот закончится — просто нашли в интернете кряк, хакнули джиру, и теперь у них бессрочная лицензия.
3. У кого джира была в клауде — перенесли всё на свои сервера. Лицензию на эти сервера поставили крякнутую.
Такое вот нынче импортозамещение.
Так вышло, что в нашей лавке я крайний за JIRA. На мне все апдейты, автоматизация бизнес-процессов, тысячи строк кода на Groovy и все прочие удовольствия. Сейчас у нас лицензия действующая, но в апреле 2023 года она протухнет, и её наверняка нам не продлят. Поэтому я вчера пошёл у разных ребят выяснять, кто как эту проблему решает, кто на что переезжает.
Выяснилось, что в основном, проблему не решают никак. Хрен с вами, подумал я. Пойду поспрашиваю, что там у больших российских банков. Уж эти-то точно что-то придумали: написали своё, взяли оперсорс или перешли на что-то отечественное типа Яндекс.Трекера.
В общем, за сутки я пообщался с людьми из трёх крупных (Топ 10) российских банков. И знаете что?
1. Те, у кого серверная лицензия истекает в 2023 году (On Premise — JIRA Server или JIRA Data Center), — пока ничего не делают. Всё равно в феврале 2023 года у JIRA Server наступит End Of Life, там и будут думать. Мы, кстати, тоже из таких.
2. У кого лицензия на JIRA Server или JIRA Data Center уже закончилась или вот-вот закончится — просто нашли в интернете кряк, хакнули джиру, и теперь у них бессрочная лицензия.
3. У кого джира была в клауде — перенесли всё на свои сервера. Лицензию на эти сервера поставили крякнутую.
Такое вот нынче импортозамещение.
Какой таск менеджер используете?
Anonymous Poll
71%
Jira
5%
Trello
5%
Yandex Tracker
4%
Redmine
15%
Другой
рубрика "нерегулярные заметки"
Как удалить все локальные ветки #Git
Как удалить все локальные ветки #Git
git branch --merged | grep -v \* | xargs git branch -D
Forwarded from microJUG (Zheka Kozlov)
🤯 Данный код является валидным кодом на Java 19+ и компилируется.
Почему так:
1. Первый When – это имя класса.
2. Второй when – имя переменной (имеет тип When).
3. Третий when – это новое ключевое слово в Java 19, которое является контекстно-зависимым.
4. Четвёртый when – это имя переменной, которая была объявлена (см. пункт 2).
5. Пятый when() – метод класса When, возвращающий boolean.
6. Шестой when() – метод текущего класса.
#java19
Почему так:
2. Второй when – имя переменной (имеет тип When).
3. Третий when – это новое ключевое слово в Java 19, которое является контекстно-зависимым.
4. Четвёртый when – это имя переменной, которая была объявлена (см. пункт 2).
5. Пятый when() – метод класса When, возвращающий boolean.
6. Шестой when() – метод текущего класса.
Forwarded from Java Memes → АйТи мемес
Анонимная джава-перепись. Кто где?
Anonymous Poll
53%
В РФ
20%
В СНГ
15%
В Европе
12%
В других странах
https://www.youtube.com/watch?v=Au3z_kQd9QY
Предложения Брайана Гётца, которые упростят вход для начинающих джавистов.
1. Безымянные классы (весь файл кроме импортов по сути описание некого класса)
2. Упрощение сигнатуры метода main. модификаторы (public static), входные аргументы (String[] args) - опциональны
3. Автоматический импорт некоторых статических методов из jdk (println, readln).
Все это приведет к тому, что ребята, которые только учатся программировать, не офигеют от написания самой простой программы на Java, а постепенно смогут изучать концепты.
Предложения Брайана Гётца, которые упростят вход для начинающих джавистов.
1. Безымянные классы (весь файл кроме импортов по сути описание некого класса)
2. Упрощение сигнатуры метода main. модификаторы (public static), входные аргументы (String[] args) - опциональны
3. Автоматический импорт некоторых статических методов из jdk (println, readln).
Все это приведет к тому, что ребята, которые только учатся программировать, не офигеют от написания самой простой программы на Java, а постепенно смогут изучать концепты.
Параметризированные тесты в JUnit 5
https://www.arhohuttunen.com/junit-5-parameterized-tests/
#junit #tests
https://www.arhohuttunen.com/junit-5-parameterized-tests/
#junit #tests
Code With Arho
A More Practical Guide to JUnit 5 Parameterized Tests | Code With Arho
Learn how to write JUnit 5 parameterized tests. Learn answers to some of the most asked questions about parameterized tests.
Что выведет код ниже?
Anonymous Quiz
20%
null
44%
test
11%
С вероятностью 1/16 выведет test, с 15/16 - null
16%
Вылетит ConcurrentModificationException
8%
Зависит от конкретной JDK
Ответ: "test"
Способ вычисления хэша map, set, list - это часть контракта соответствующих интерфейсов. Каждая реализация должна использовать формулу, указанную в контракте. Поэтому поведение будет общим для всех JDK.
Посмотрим теперь, какой же контракт и конкретные формулы для подсчета хеша у мапы.
"The hash code of a map is defined to be the sum of the hash codes of each entry in the map's entrySet() view."
Посмотрим, как вычисляется хешкод у Map.Entry:
"The hash code of a map entry e is defined to be:
(e.getKey()==null ? 0 : e.getKey().hashCode()) ^
(e.getValue()==null ? 0 : e.getValue().hashCode())"
Зная это, мы можем посчитать хешкод нашей мапы: он будет равен 0. Почему? Так как у единственной Map.Entry совпадают значения ключа и значения, то их хешкоды будут совпадать, а значит хешкод Map.Entry будет равен 0 (XOR двух одинаковых чисел дает всегда 0).
После добавления второго Map.Entry хешкод останется равным 0, так как там тоже совпадают значения ключа и значения. Повезло, повезло.
В итоге при вызове метод get будет искать Map.Entry в нужном бакете и, встретив нужную ноду, вызовет equals, который вернет true, так как при вставке значение ключа не копируется, и он будет отображать все изменения, которые с ним происходили.
Естественно, изменять ключ после вставки в HashMap крайне не рекомендуется, иначе потом можно его не найти. Но в данном конкретном случае нам повезло, что хешкод не изменился.
Способ вычисления хэша map, set, list - это часть контракта соответствующих интерфейсов. Каждая реализация должна использовать формулу, указанную в контракте. Поэтому поведение будет общим для всех JDK.
Посмотрим теперь, какой же контракт и конкретные формулы для подсчета хеша у мапы.
"The hash code of a map is defined to be the sum of the hash codes of each entry in the map's entrySet() view."
Посмотрим, как вычисляется хешкод у Map.Entry:
"The hash code of a map entry e is defined to be:
(e.getKey()==null ? 0 : e.getKey().hashCode()) ^
(e.getValue()==null ? 0 : e.getValue().hashCode())"
Зная это, мы можем посчитать хешкод нашей мапы: он будет равен 0. Почему? Так как у единственной Map.Entry совпадают значения ключа и значения, то их хешкоды будут совпадать, а значит хешкод Map.Entry будет равен 0 (XOR двух одинаковых чисел дает всегда 0).
После добавления второго Map.Entry хешкод останется равным 0, так как там тоже совпадают значения ключа и значения. Повезло, повезло.
В итоге при вызове метод get будет искать Map.Entry в нужном бакете и, встретив нужную ноду, вызовет equals, который вернет true, так как при вставке значение ключа не копируется, и он будет отображать все изменения, которые с ним происходили.
Естественно, изменять ключ после вставки в HashMap крайне не рекомендуется, иначе потом можно его не найти. Но в данном конкретном случае нам повезло, что хешкод не изменился.