Задать вопрос
  • Почему вместо 100, по проводу 95?

    @ElxkoT
    Потому что 100 мегабит у вас на канальном уровне. С учётом размера заголовков пакетов и прочих технических накладных расходов в 100мб линк как раз можно впихнуть в районе 94-95мб реальной полезной нагрузки
    Ответ написан
    16 комментариев
  • Возможна ли работа одновременно 3х туннелей Mikrotik с IPSEC шифрованием на 1 провайдере?

    CityCat4
    @CityCat4 Куратор тега VPN
    //COPY01 EXEC PGM=IEBGENER
    Все вот это умножить на нуль. IPSec прекрасно работает без городушек - и в режиме микротик-микротик и в режиме микротик-линух и в режиме roadwarrior (виндовый обычно, хотя можно и андроид и линух и микротик клиент с произвольного ip).
    Главное тут будет настроить политики, потому что трафик разруливается политиками (это такой аналог таблицы маршрутизации) - как напишете политики - так и будет.

    Одновременно может работать столько, сколько тянет микротик - у меня вот сейчас четыре поднято - два сеть-сеть, два точка-сеть, 3% загрузки...
    Ответ написан
    4 комментария
  • Почему пакеты дропаются правилом forward drop invalid?

    @agpecam
    У вас асимметричная маршрутизация - принтер идет к 172.31.31.152 через микротик, а 172.31.31.152 идет к принтеру непосредственно с WAN кинетика. Поэтому микротик видит какие-то левые SYN,ACK. Левые потому, что он не видел изначального SYN и, следовательно, SYN,ACKи не принадлежат к какому либо существующему соединению и они invalid
    Ответ написан
    Комментировать
  • Как импортировать модули в Java?

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

    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 комментариев