По данным Минфин 32% граждан покинули своё место работы поскольку уже в первый месяц смогли заработать 250 000 рублей, а через 2-3 месяца с легкостью вышли на семизначные числа.
Самое смешное, что лишь 8% россиян что-то слышали об этой профессии хотя все инструкции бесплатно лежат на канале Арбитраж Криптовалют
Там объясняют, как имея телефон и доступ в интернет заработать свои первые $3000. Причём разжёвывают так доступно, что поймёт даже ребенок. Кстати, на канале сегодня вышла новая рабочая связка!
Ссылка для входа — https://t.me/+gL6CZ_b93PBhZGM6
Please open Telegram to view this post
VIEW IN TELEGRAM
👎7😁2
Почему equals у массивов в Java не сравнивает содержимое?
В Java массив выглядит как контейнер значений, поэтому легко ожидать, что equals сравнит элементы внутри.
Но массивы не переопределяют equals для содержимого. Обычный equals у массива работает почти как сравнение ссылок.
Например, два массива с одинаковыми числами не будут равны через equals:
Результат будет false, потому что это два разных объекта в памяти.
Для одномерных массивов нужно использовать Arrays.equals:
Теперь Java сравнит элементы по порядку и вернёт true.
С массивами объектов логика такая же:
Но для вложенных массивов Arrays.equals уже недостаточно. Он сравнит внутренние массивы как объекты.
Для двумерных структур нужен deepEquals:
То же самое касается вывода. Обычный toString у массива покажет служебное имя, а не элементы.
Для нормального вывода используют Arrays.toString:
Если массив вложенный, нужен deepToString:
Массивы в Java стоит сравнивать и выводить через Arrays. Иначе код может выглядеть логично, но проверять совсем не то.
👉 Java Ready | #совет
В Java массив выглядит как контейнер значений, поэтому легко ожидать, что equals сравнит элементы внутри.
Но массивы не переопределяют equals для содержимого. Обычный equals у массива работает почти как сравнение ссылок.
Например, два массива с одинаковыми числами не будут равны через equals:
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a.equals(b));Результат будет false, потому что это два разных объекта в памяти.
Для одномерных массивов нужно использовать Arrays.equals:
System.out.println(Arrays.equals(a, b));
Теперь Java сравнит элементы по порядку и вернёт true.
С массивами объектов логика такая же:
String[] left = {"java", "ready"};
String[] right = {"java", "ready"};
System.out.println(Arrays.equals(left, right));Но для вложенных массивов Arrays.equals уже недостаточно. Он сравнит внутренние массивы как объекты.
Для двумерных структур нужен deepEquals:
int[][] x = {{1, 2}, {3, 4}};
int[][] y = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepEquals(x, y));То же самое касается вывода. Обычный toString у массива покажет служебное имя, а не элементы.
Для нормального вывода используют Arrays.toString:
System.out.println(Arrays.toString(a));
Если массив вложенный, нужен deepToString:
System.out.println(Arrays.deepToString(x));
Массивы в Java стоит сравнивать и выводить через Arrays. Иначе код может выглядеть логично, но проверять совсем не то.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12❤3👍3
Шпаргалка по загрузчикам классов в Java!
На картинке показаны Bootstrap, Platform, Application и пользовательский ClassLoader. Для каждого отмечено, какие классы он обычно загружает и как связана их видимость.
Сохрани, чтобы не потерять!
👉 Java Ready | #ресурс
На картинке показаны Bootstrap, Platform, Application и пользовательский ClassLoader. Для каждого отмечено, какие классы он обычно загружает и как связана их видимость.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤3👍3
Вот отсортированная база с тонной материала (постепенно пополняется):
(363 видео, 87 книги) — Python
(117 видео, 53 книги) — ВАЙБКОД
(174 видео, 91 книги) — DevOps
(415 видео, 68 книги) — Frontend
(137 видео, 93 книги) — DS/ML
(143 видео, 33 книги) — ИБ/Хакинг
(352 видео, 89 книги) — С/С++/C
(343 видео, 87 книги) — Java/QA
(176 видео, 32 книги) — Git/Linux
(167 видео, 53 книги) — PHP/1С
(227 видео, 83 книги) — SQL/БД
(114 видео, 77 книги) — Сисадмин
(107 видео, 43 книги) — BA/SA
(181 видео, 32 книги) — Go/Rust
(167 видео, 43 книги) — Kotlin/Swift
(112 видео, 24 книги) — Flutter
(113 видео, 82 книги) — GameDev
(183 видео, 37 книги) — Дизайн
(136 видео, 33 книги) — PM/HR
Скачивать ничего не нужно — все выложили в Telegram
Please open Telegram to view this post
VIEW IN TELEGRAM
Знали, что Map.getOrDefault может вызвать загрузку, даже когда ключ уже есть?
Java сначала вычисляет аргументы метода, и только потом вызывает сам метод.
Поэтому дорогой вызов справа выполнится заранее:
Даже если users уже содержит id, loadUser(id) успеет выполниться. Если это запрос к базе, сеть или вычисление, приложение потратит время зря.
Для ленивого вычисления значения подойдёт computeIfAbsent:
Функция загрузки вызывается только тогда, когда ключ отсутствует или связан с null. Возвращённое ненулевое значение добавляется в map и дальше берётся из неё.
Проверь и семантику отсутствующего результата. Если загрузчик вернёт null, запись не появится, и следующий вызов снова попробует загрузить пользователя:
Ещё один нюанс касается конкурентного доступа. Для параллельных потоков выбирай подходящую concurrent map и не помещай в функцию долгую блокирующую работу без понимания гарантий конкретной реализации.
👉 Java Ready | #совет
Java сначала вычисляет аргументы метода, и только потом вызывает сам метод.
Поэтому дорогой вызов справа выполнится заранее:
User user = users.getOrDefault(id, loadUser(id));
Даже если users уже содержит id, loadUser(id) успеет выполниться. Если это запрос к базе, сеть или вычисление, приложение потратит время зря.
Для ленивого вычисления значения подойдёт computeIfAbsent:
User user = users.computeIfAbsent(id, this::loadUser);
Функция загрузки вызывается только тогда, когда ключ отсутствует или связан с null. Возвращённое ненулевое значение добавляется в map и дальше берётся из неё.
Проверь и семантику отсутствующего результата. Если загрузчик вернёт null, запись не появится, и следующий вызов снова попробует загрузить пользователя:
User user = users.computeIfAbsent(id, key -> findUser(key).orElse(null));
Ещё один нюанс касается конкурентного доступа. Для параллельных потоков выбирай подходящую concurrent map и не помещай в функцию долгую блокирующую работу без понимания гарантий конкретной реализации.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍3❤2