Задать вопрос
  • Что такое asyncio и в чём реальное отличие от многопоточности?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Один человек ставит кастрюлю на плиту, ждёт пока она закипит, закидывает пельмени, ждёт пока сварятся, снимает, ставит вторую, ждёт пока закипит... - последовательное однопоточное выполнение.

    Один человек ставит две кастрюли на плиту, как только одна из них закипела, забрасывает пельмени и т.д. - асинхронное выполнение.

    Два человека ставят две кастрюли... - многопоточное выполнение.

    Очевидно, что при асинхронном выполнении ресурсов требуется меньше, а скорость та же, что и при многопоточном. Именно поэтому проблема c10k могут решать только асинхронные сервера. Минусы в том, что асинхронный код сложнее и не всё можно выполнять асинхронно.
    Ответ написан
    3 комментария
  • Чем отличаются Конкурентность, Многопоточность, Асинхронность и Параллелилизм?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    С терминами из этой области очень много путаницы. Например, в Java очень часто многопоточное выполнение называют асинхронным, хотя это не во всех контекстах верно. Проще всего разбираться на аналогиях. Процитирую самого себя:
    • Один человек ставит кастрюлю на плиту, ждёт пока она закипит, закидывает пельмени, ждёт пока сварятся, снимает, ставит вторую, ждёт пока закипит... - последовательное однопоточное выполнение.
    • Один человек ставит две кастрюли на плиту, как только одна из них закипела, забрасывает пельмени и т.д. - асинхронное выполнение.
    • Два человека ставят две кастрюли на одну плиту... - многопоточное конкурентное выполнение.
    • Два человека ставят две кастрюли на две плиты... - многопоточное параллельное выполнение.

    И для всех случаев, кроме первого, есть общий термин - многозадачность.
    Ответ написан
    1 комментарий
  • Бэкенд или фронтенд должен объединять таблицы по FK?

    Aetae
    @Aetae
    Тлен
    Если работа идёт всегда со всеми данными - отдельный бэк api не нужен.
    Если работа идёт с какой-то определённой выборкой(как бывает в 99% случаев), то запрос в любом случае нужен, потому что, чтобы получить соответствующие выборке значения из соседней таблицы, клиенту потребуется посылать уже массив id, что, внезапно, увеличит накладные расходы бэка, по сравнению с простеньким join'ом потребным для спец-api.
    Ответ написан
    Комментировать
  • Бэкенд или фронтенд должен объединять таблицы по FK?

    @alexalexes
    Дело в количестве записей.
    Если пересылка запросов отдельно для данных table1 и table2 стоит дороже, и объединение записей на клиенте работает хуже чем индекс в базе данных по FK, то вам нужен отдельный запрос с объединенными данными.
    Если результирующих записей мало, что они никак не влияют на производительность, то делайте как угодно.
    Есть еще аспект стоимости нагрузки сервера и клиента. Нагрузка сервера - это ваши издержки, нагрузка клиента - пользователя. Ваши возможности - конечны, а у пользователя - как правило с запасом. Если клиентов много у вашей системы, то с этой точки зрения тоже нужно искать баланс.
    Ответ написан
    Комментировать
  • В поле какого типа передавать на фронтенд расшифровку статуса: строка или enum?

    Aetae
    @Aetae
    Тлен
    Делают как на душу положит.
    Но по-хорошему надо исходить из того, чтобы минимизировать переплетённость и дублирование кода. Т.е. всё что может отдать бэк текстом - должен отдавать текстом, чтоб при каких-либо изменениях менять надо было только в одном месте - на бэке. Остальное, дублирование чего не избежать(к чему привязывается дополнительная логика на фронте, типа Status) - то минимизировать, задокументировать и ограничить возможность изменений.:)
    Ответ написан
    Комментировать
  • В поле какого типа передавать на фронтенд расшифровку статуса: строка или enum?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    Я за первый вариант
    Ответ написан
    Комментировать
  • Чем создание нового объекта лучше изменения существующего?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Первая функция не имеет побочных эффектов, код на чистых функциях легче сопровождать и распараллеливать.
    Ответ написан
    Комментировать
  • Для чего нужен слой сервиса без логики?

    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 комментария
  • Существует ли понятие исключения для клиента при получении ошибки в вызовах REST, gRPC?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Исключения - это семантика обработки исключительных ситуаций в языках программирования и механизмы реализации этой семантики в рантаймах. Статус 400 - это соглашение протокола передачи данных. Является ли для вашего программы возникновение такого статуса исключительной ситуацией - это вам лучше знать. И нет, на уровне операционной системы исключений не существует и их обработкой операционная система не занимается.
    Ответ написан
    Комментировать
  • Для чего в микросервисе задается порт 8080 если не используется http?

    xez
    @xez
    TL Junior Roo
    Например, для обслуживания миксросервисной инфраструктуры (типичные эндпоинты /actuator/; /actuator/health; /actuator/info)
    Ответ написан
    1 комментарий