Задать вопрос
  • Оптимально ли написана программа по слиянию строк и созданию новой строки?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Алгоритм, в общем-то оптимален. Но реализация допускает некоторые микро-оптимизации.

    Во-первых, StringBuilder можно указать итоговый размер в конструкторе. Тогда там не будет лишних выделений памяти. Вы же знаете, что там будет сумма двух длин в итоге.
    Во-вторых, основной цикл лучше гнать не до максимальной длины из двух, а до минимальной. Тогда в цикле не надо никаких проверок, что индекс не вышел за границы строки. После цикла надо будет добавить к собираемой строке кусок одной из двух входных строк. Проверьте, какая строка длиннее и добавьте ровно len1-len2 символов с конца. Используйте метод substring(), чтобы получить этот суффикс и сразу передавайте его в append().

    Вторую часть про символы на четных местах тоже можно соптимизировать. Вы знаете длину ответа заранее, инициализируйте StringBuilder с нужной вместимостью.
    На четных местах будет вторая строка. Ну и в конце только какие-то символы через один из второй строки или из первой, в зависимости, какая длинее. Если передавать в функцию не результат работы первой, а 2 строки, то можно сначала append в stringbuilder substring от второй строки, а потом циклом взять нужное количество символов через один из первой или второй строки. Нарисуйте на бумаге несколько случаев, первая строка длиннее второй или наоборот. Длина второй строки четная/нечетная, длина первой четная/нечетная. В каждом из этих случаев будет +-1 где-то в формулах для индексации. Можно это все удачно записать с помощью деления на 2 нацело и остатка от деления на 2.
    Ответ написан
    1 комментарий
  • Стоит ли изучать Java для разработки под Android или лучше сразу приступить к изучению Kotlin?

    @Nel_Bylin
    java джун , ученик
    Можно сразу начать с котлина, особо нечего не потеряешь
    Ответ написан
  • Из-за чего появляется ошибка создания бина Eureka при добавлении зивисимости telegrambots?

    @SuperiorAId Автор вопроса
    Проблема оказалась в том, что  telegrambots-spring-boot-starter использовал Spring Boot ниже 3 версии
    Ответ написан
    Комментировать
  • У меня есть 2 одинаковых сайта в разных точках мира, как мне сделать, чтобы пользователь заходит на тот сайт, который ближе к нему расположен?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    Чтобы это работало без посторонних лиц, вам сначала придётся заиметь provider-independent адреса и начать их анонсировать из разных мест.

    Самый простой способ - прикрыться CDN, который это умеет из коробки, например, Cloudflare.
    Ответ написан
  • Как восстановить конкретную папку на btrfs если нет снапшотов?

    @rPman
    Ты не пробовал гуглить? первый же ответ:
    btrfs restore -v -i /dev/sdaX /path/to/recovery/ --path /path/to/deleted/file
    Ответ написан
    2 комментария
  • Для чего нужен слой сервиса без логики?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Вообще-то тут должен быть маппинг доменной модели, но о нём, видимо, забыли и пытаются сохранить ее в бд непосредственно, и, самое ужасное, восстановить.
    То, что слой есть - похвально, то, что там ничего не происходит (хотя должно) - нет.
    Ответ написан
    8 комментариев
  • Правильно ли использовать Optional только для его map?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    0. Тернарного оператора что-то я тут не вижу.
    1. Ничего не мешает вам сделать промежуточную переменную it, если уж у вас такая сильная тоска по острову в Балтийском заливе:
    var it = getSomething();
    var a = new Class1(it, it, it);

    2. Optional.of - это какой-то исчезающе редкий, вымирающий вид. В нем нет никакого смысла. Используется только Optional.ofNullable.
    а. Конструкция Optional позволяет эффективно бороться с нуллабельными объектами, подразумевая что есть Объект и возможная альтернатива в виде нула.
    б. Если у вас железно, гарантированно объект "non-null", то и Optional не нужен и вообще не понятно, какая у него вторая альтернатива
    3. Неправильно использовать .get() без проверки на null у Optional. Это вывод из п2, вообще-то. Вроде в вашем примере Optional от ненулабельного значения, но смысл это теряет на этапе Optinal.of.
    4. В итоге Optional следует использовать как-то так:
    var a = Optional.ofNullable(getSomething())
                 .map(it -> new Class1(it, it, it))
                 .orElseGet(() -> {
                        // TODO :: implement me
                    });

    Если getSomething железно отдает non-null объект, то вариант 1 будет лучше.
    Ответ написан
    4 комментария
  • Правильно ли вынесение метода проверки в другой сервис для упрощения тестирования?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Рефакторинг должен происходить из соображений чистоты кода и архитектуры.
    Для «упрощения тестирования» ничего никуда переносить не стоит.
    Ответ написан
    2 комментария
  • Правильно ли вынесение метода проверки в другой сервис для упрощения тестирования?

    @Mercury13
    Программист на «си с крестами» и не только
    check1() иногда годится, если проверка многократно выполняется в разных функциях, по принципу «не повторяйся». Например, для const-корректности Си++, или для хитрых интерфейсов, когда есть objectId(i), objectName(i).

    А так зачем: тестирования с виду не упростит, ведь мы должны убедиться, что интерфейс верно реализован и действительно некорректные наборы данных (все или хотя бы некоторые) не проходят.

    UPD. Вынесение РАЗОВОЙ функциональности (если это реакция на некорректные данные, конечно) в отдельную функцию КРАЙНЕ РЕДКО делает код более тестопригодным: может быть, что реакция на некорректности так размыта, что вызов основной функции мало что даст. Может, реакция на некорректности так сложна, что стоило бы её проверить отдельно. Ну ХЗ, в большинстве случаев бессмысленно.

    UPD2. Тестируемость кода — это в первую очередь возможность выделить функциональность для тестирования и не тащить вместе с ней половину программы.
    Ответ написан
    Комментировать
  • Pxe установка AstraLinux нужен ли DHCP?

    @Drno
    DHCP нужен, потому что он должен указать нужный DHCP код и откуда грузиться PXE
    можете сделать это всё на своем уже имеющемся DHCP

    2DHCP не используется в сети, иначе могут быть проблемы
    Ответ написан
    1 комментарий
  • Каждый раз создается новый бин. Почему?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    У вас не синглтон.
    Аннотация @RequestScope как раз о том, что бин будет создаваться каждый раз новый в рамках запроса.
    Это, кстати, не отменяет замечание Сергея о прокси-объекте: при создании контроллера внедряется этот самый прокси-объект, а он уже внутри управляет экземплярами LoginProccesor
    Ответ написан
    1 комментарий
  • Почему в Map при добавлении в значение массива, при выводе результата не возвращается массив?

    al_gon
    @al_gon
    [Ljava.lang.String;@6fc7e828 это и есть вывод массива.

    Если хотите красиво, то надо Arrays.toString(permissionId.get("4"));

    Или дополнительно оборачивать объектом с переопределением toString()

    Массив это объект в Java, но у него нет возможности сделать переопределение toString()

    UPDATE:
    permissionId.forEach((k,v)-> System.out.println(String.format("%s:%s", k, Arrays.toString(v))));
    Ответ написан
    8 комментариев
  • Вызов drop в вызове drop?

    bingo347
    @bingo347
    Crazy on performance...
    Почему drop принимает ссылку, а не значение?

    Потому что метод drop трейта Drop вызывается компилятором, каждый раз когда переменная владеющая чем-либо выходит из области видимости. И сам метод drop тут не исключение. То есть если бы self тут был по значению, компилятор был бы обязан его дропнуть в конце функции, что вызвало бы бесконечную рекурсию.

    Причём если вызывать drop() руками
    Функция core::mem::drop никакого отношения к трейту Drop не имеет. Если Вы глянете на её реализацию, то это просто пустая функция, которая принимает аргумент по значению, а он уже дропается на общих основаниях, так как выходит из области видимости в ней.

    Почему сначала вызывается drop для A, а потом для B? По логике drop должен сначала вызываться для полей.
    У Вас неверная логика. В метод трейта Drop приходит ссылка, а значит должна быть гарантия того что данные по ней полностью валидные. Всегда дропается сначала внешняя структура,а затем её поля. Более того компилятор не даст Вам даже мувнуть части структуры имплиментирующей Drop.

    Если очень нужно, то владение из поля можно забрать через std::mem::swap/std::mem::replace/std::mem::take
    Хотя проще это сделать обернув такое поле в Option и забирая владение его методом take
    Ответ написан
    2 комментария
  • Крейт - это программа или библиотека на rust?

    vabka
    @vabka Куратор тега Rust

    Крейт — это программа или библиотека на rust?

    Да. Если крейт содержит функцию main, то это программа. Иначе - библиотека.


    Чем крейт отличается от пакета?

    Пакет - это то что публикуется на crates.io, например.

    Пакет может содержать в себе несколько крейтов.

    А крейт - это единица компиляции
    Ответ написан
    Комментировать
  • Как зарезервировать линки между коммутаторами и маршрутизатором?

    b1ora
    @b1ora Куратор тега MikroTik
    Контакты в профиле
    1. Собрать CRS в MLAG
    2. Подключить по lag к RB1100 в режиме LACP
    3. Подключить по lag к D-Link в режиме LACP
    Ответ написан
    4 комментария
  • Есть ли оборудование с данными функциями?

    @q2digger
    никого не трогаю, починяю примус
    Mikrotik
    Ответ написан
    6 комментариев
  • Почему не компилится мавен?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Unsupported class file major version 66
    Тут написано, что 22я джава не поддерживается.
    Попробуйте установить какую-нибудь предыдущую версию.
    Рекомендую пробовать lts версии по порядку: 8, 11, 17, 21
    Ответ написан
    1 комментарий
  • Чем бесплатно мониторить подозрительный трафик сети предприятия?

    @q2digger
    никого не трогаю, починяю примус
    Ответ написан
    Комментировать
  • Как запускать игры на Fedora?

    GavriKos
    @GavriKos
    и вылетает но при этом не какой ошибки не пишет

    Ну вот осваивайте первый навык линуксоида - как получить логи. Можно например из терминала запустить
    Ответ написан
    3 комментария
  • С чего начать создание сервиса бронирования на java?

    @Dementor
    программист, архитектор, аналитик
    Полистайте проекты на тему букинга на гитхабе - наверняка найдете несколько десятков образцов для вдохновения.
    Ответ написан
    Комментировать