• Как обрабатывать переполнение счетчиков и индексов?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Обычно берут тип данных с запасом так, чтобы переполнения не было.
    Если же переполнение действительно может произойти, то есть несколько подходов:
    - игнорировать переполнение. Иногда это подходящий вариант. Например какая-нибудь CRC сумма для проверки целостности.

    - определять переполнение и как-то его бросать исключение или завершать программу. Все операции идут с проверками.

    - Clamped типы. Максимальное значение типа считается бесконечностью. Прибавление к нему не меняет это значение. Переполнение выдаст это максимальное. Все операции с переменной, естественно, тоже сопровождаются проверками. Тут есть возможность потом какие-то выводы о значении счетчика потом даже делать. Вы будете видеть, что там больше или равно INT_MAX, но насколько больше - знать не будете.

    - Wraparound. Часто вам не важно абсолютное значение счетчика. Нужно лишь знать, какое из двух значений больше. При этом вы знаете, что сравниваемые значения не могут быть слишком большими. Тогда очень маленькое значение будет считаться больше очень большого. Два примерно одинаковых будут сравниваться как обычные числа. Так можно делать, например, с sequence number пакетов. Если вы получите пакет с номером 0x02 после покета с номером OxFFF1, Можно с спокойно считать, что это номер после переполнения. Ну не будет сеть задерживать перетасовывать 65 тысяч пакетов.
    Ответ написан
    1 комментарий
  • Как найти компоненты связности в графе в распределенной памяти?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Простой подход, если у вас есть выделенный лидер и по графу распространяется одна волна в каждый момент времени.

    Лидер опрашивает остальные сервера по очереди (включая себя), и справшивает их, есть ли у них еще непокрашенные вершины. Если есть, инструктирует их запустить волну. Когда волна закончится, справшивает опять. Когда сервер говорит, что больше непокрашенных вершин нет - лидер переходит к следующему серверу.

    Когда сервер запускает волну - он обходит все вершины у себя, если встречает призрачное ребро, то посылает сообщение другому серверу запустить обход у себя с присоеденненной вершины.
    Чтобы отследить конец волны, перед запуском обхода в другом сервере, каждый сервер отслывает лидеру сообщение, что вот тот сервер теперь будет работать. Когда волна в каком-то сервере заканчивается, он присылает лидеру сообщение, что все закончилось. Лидер поддерживает счетчик - сколько еще серверов работает. Когда счетчик достигает 0, надо еще подождать немного (скажем, пол секунды), на случай реордеринга сообщений. Если в течении этой пол секунды никаких сообщений не пришло, можно запускать новую волну.

    Более сложный вариант - когда у вас сразу запускаются все волны. Опять же, без лидера совсем сложно будет.
    Тут, наверно стоит сначала в каждом отдельном параграфе найти все компоненты связности отдельно. Это будут промежуточные варианты.

    Потом каждый сервер по призрачным ребрам отсылает сообщение, какой номер имеет торчащая наружу компонента. Номера должны быть глобально уникальные. Например, можно в старших битах хранить номер сервера, а в младших локально уникальный номер.

    Когда сервер получает сообщение о номере по призначному ребру, если этот номер меньше текущего у компоненты, она перекрашивается. И сообщение рассылается по всем остальным призрачным ребрам, торчащим из этой компоненты. Рано или поздно, все вершины одной компоненты по всем серверам будут помечены минимальным номером.

    Чтобы определить, что все закончилось, можно разбить процесс на фазы. В первой фазе все рассылают свои номера. Во второй фазе только те, у кого номера обновились. И т.д. Фаза на сервере начинается после сообщения от лидера. Каждый сервер отправляет на лидер сообщение, когда он закончил рассылать свои номера и были ли там вообще обновления. Сообщения надо делать по tcp с подтверждением. Когда лидер заметит, что никто никаких сообщений больше не рассылал в предыдущей фазе - все сошлось.
    Ответ написан
    1 комментарий
  • Как связать React + GoLang?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Так же, как бэкенд на любом языке и фронтенд на любом фреймворке - по протоколу http.
    Ответ написан
    Комментировать
  • Как отображать в HTML разметки ответы gRPC стрима в asp net core?

    В реальном времени ты в html так их не вставишь.
    У тебя два варианта:
    1. Если стрим конечный, то ты можешь собрать все айтемы в лист и вернуть его как обычно.

    2. Использовать websocket - тут надо будет подумать, как лучше это подружить со сложившейся у тебя архитектурой.
    Как минимум нужно будет добавить js на фронт и создавать долгоживущую задачу на бэке
    Ответ написан
    2 комментария
  • Какая ошибка в DOSBox команде допущена?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вам же английским по чёрному пишет - неверная инструкция в строке 1 файла hello_1.ASM.
    Учитесь читать.
    Ответ написан
    5 комментариев
  • Как собрать ядро linux которая развертывает C# приложение?

    Используй systemd для этого.

    Если приложение графическое, то используй какой-нибудь kiosk mode.
    Ответ написан
    6 комментариев
  • Как собрать ядро linux которая развертывает C# приложение?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Для автозапуска не нужно делать сборку ядра линукса. Достаточно поставить любимую версию линукса на малинку и далее просто настроить автозапуск вашего приложения. Про systemd уже сказали, если хочется чего-то особенного - есть и другие механизмы и особенности автозапуска. Все давно задокументировано, описано и пережевано.
    Ответ написан
    Комментировать
  • Разница GET и DELETE запроса при проверке, что удалилась корзина?

    В случае delete, если корзина отсутствует - вполне может вернуться и 200 код и это будет вполне нормальным поведением, тк идемпотентность.
    Так что лучше проверить через get
    Ответ написан
    2 комментария
  • Как работать с ArrayPool, Откуда утечки?

    Так в этом же и суть пула: выделить много памяти один раз и переиспользовать её много раз.
    Тем более что ты взял Shared пул, а не создал новый - вот он и не освобождает память
    Ответ написан
    Комментировать
  • Где и как можно найти сообщества для новичков в сфере языков программирования?

    axifive
    @axifive
    Software Engineer
    В телеграме есть чаты для любого ЯП. Список некоторых есть на github. В крупных чатах есть ссылки на отдельные для новичков
    Ответ написан
    Комментировать
  • Как захостить телеграм бота на yandex cloud используя .Net?

    Вариантов несколько:
    1. Создать виртуальную машину в Compute Cloud с какой-нибудь убунтой и дальше по обычной инструкции:
    https://learn.microsoft.com/ru-ru/aspnet/core/host...
    Если у тебя там нет вебхуки, то достаточно будет просто выпилить всё что связано с nginx

    2. Используя Serverless Containers - нужно будет внимательно прочитать руководство от яндекса:
    https://cloud.yandex.ru/docs/serverless-containers...
    Там примеры даны для nodejs, но в принципе всё почти 1-в-1 переносится на .NET
    Dockerfile и так автоматически будет тебе добавлен при создании проекта.
    В случае телеграм-ботов этот способ подойдёт только в случае вебхуков

    3. Cloud functions:
    https://cloud.yandex.ru/docs/functions/lang/csharp/
    Совсем специфичный вариант и тоже проще именно с вебхуками подружить

    4. Через managed k8s кластер:
    https://cloud.yandex.ru/docs/managed-kubernetes/
    Подход ничем не различается от использования k8s не в яндексе. Создаёшь образ своего контейнера и через kubectl поднимаешь под.

    Я бы выбрал вариант с Compute Cloud, тк он сравнительно не дорогой (если сравнивать с managed k8s), достаточно гибкий (в отличие от cloud functions и serverless containers), и при этом простой (опять же, в отличие от serverless containers)
    Ответ написан
    1 комментарий
  • Стоит ли углубленно изучать многопоточность, асинхронное и паралельное программирование?

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут есть два смысла. Первое - это "проскочить" на собеседовании. Если ты будешь его проходить
    на дот-нетчика то полюбому что-нибудь спросят. Может попросят написать какую-то задачу с двумя
    потоками где состояние потоков как-то разделяется или события от одного идут к другому.

    Из канонических задач на конкуренцию я припоминаю "спящий парикмахер" или официант. Не помню смысл - погугли сам. И задача об "обедающих философах" которая просто моделирует дедлок. И в этой
    же задаче дается разьяснение как дедлок убрать.

    Из параллелизма есть задача параллельного умножения двух больших матриц. Очень популярная
    и многократно обсужденная почти во всех It-ресурсах.

    И второй смысл - это просто знать способы распараллеливания медленно работающих задач.

    Современные фреймворки - тяготеют к тому чтобы разработчик не встречался с задачей конкуренции.
    Яркий пример - акторные фреймворки (Akka, Storm). А в задачах биг-даты - практически все
    сводятся к map-reduce и если ты хорошо сделал partitioning для своих таблиц или файлов то тебе вообще
    ничего делать не надо. Фреймворк сам позаботится. Добавляй только ему ресурсы (процессоры или ноды).

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

    Тоесть почитать на эту тему - надо. Но упарываться совсем я-бы не стал. Более того, синтетические
    задачи
    которые приводят в учебниках или форумах часто поражают своей убогостью и ненужностью
    постановки. Там просто, споря о постановке можно половину проблем выкинуть или переформатировать
    так что и мультипоточка будет не нужна.

    Тоесть если будешь решать практические задачи - бери настоящие а не высосанные из пальца.
    Ответ написан
    Комментировать
  • Как составить запросы postman?

    liaFcipE
    @liaFcipE
    Ну и дела, как же вас так учат? Неужели тебе просто дали задание и ранее не показывали как работать с Postman? Там же интерфейс, что справится даже моя бабуля.

    Давай, допустим, что ты уже разобрался с тем, как работает UI постмана, знаешь что такое collection и environment.
    Давай зайдем на нужную тебе страницу, так, добавить в корзину, имеется каталог и кнопка добавить товар в корзину.

    Давай откроем инструменты разработчика и зайдем во вкладку сеть, готово?
    Теперь нажмем на кнопку добавления товара и о чудо! В инструментах разрабочтика виден запрос add, его параметры и ответ:

    65064be46c94f492329084.png

    Теперь мы можем создать новый запрос в ранее созданой коллекции и понять следующее:

    - Запрос идет на адрес https://shop.mts.ru/api/v1/cart/add
    Можно сразу вынести https://shop.mts.ru - в переменные окружения (та самая environment), назовем ее base_url, теперь эндроинт запроса для нас - {{ base_url }}/api/v1/cart/add

    Что мы еще увидели в панели разработчика?
    - Тип запроса - POST
    - Тело запроса: {id: "677070"}, где 677070 - идентификатор добавляемого товара, его тоже можно вынести в переменные среды.

    На данный момент все, уже рабочий запрос на добавление товара в корзину, далее можно сделать тоже самое с удалением и изменением товара в корзине.

    Уловил примерно как это работает? Удачи.
    Ответ написан
    3 комментария
  • Как правильно переподключаться сокетом?

    Griboks
    @Griboks Куратор тега C#
    Всё правильно думаете. Рекомендую каждый раз создавать отдельный сокет на каждое соединение. Иначе вам придётся проводить полную реинициализацию, что немного быстрее, но слишком геморно.
    Ответ написан
    2 комментария
  • Портится ли монитор от того, что на него светит настольная лампа?

    @apppostol
    Нет, не портится. Поэтому вы ничего вменяемого и не нашли. Никто даже не задавался этим вопросом.
    Даже не могу предположить, почему он вдруг должен портиться, с технической точки зрения.
    Ответ написан
    1 комментарий
  • Как найти слагаемые числА, используя только слагаемые из списка?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для двух слагаемых всё элементарно.
    Сортируем массив, ставим указатели на первый и последний элементы.
    Если сумма элементов равна требуемой, то мы нашли нужную пару.
    Если меньше, то сдвигаем левый указатель вправо.
    Если больше, то сдвигаем правый указатель влево.
    Если указатели сошлись, то подходящей пары нет.
    Ответ написан
    Комментировать
  • Как попробовать IT-профессию и понять для тебя ли?

    @evgeniy_lm
    Часто слышу об IT и как важны обществу программисты или компьютерщики
    Программист - профессионал создающий интеллектуальный продукт; компьютерщик - не совсем здоровый психически индивидуум, который без всякой конечной цели и ощутимого результата собирает/разбирает ПК, устанавливает/удаляет ПО. Не путаете пожалуйста.

    Очень много внимания к ним государства
    Да, внимания так много, что они от этого государства разбегаются уже тысячами.

    И мне стало интересно, можно ли как-то взрослому познакомиться и понять IT-профессии?
    Можно.

    есть какие-то навыки из IT-сферы, которые можно было бы освоить и использовать в других профессиях?
    Вы удивитесь, но тот кто использует свои навыки "в других профессиях" называется "программистом", а тот кто не использует - "компютерщиком" . В принципе работа любого IT-специалиста заключается в том, чтобы решать проблемы специалистов из "других профессий"

    Если в целом профессию не получится или не захочется освоить, но какие-то элементы покажутся полезными?
    Никакие.

    И что важно в вашей профессии?
    Находить в различном общее, в общем различия

    Математический склад ума?
    В общем задача программиста заключается в математическом описании проблемы заказчика/работодателя.

    Ведь это же не о любви к цифрам?
    Это извращение какое-то, лично я люблю красивых женщин

    Наверное, это самый глупый вопрос на сайте
    Не самый, но глупый
    Ответ написан
    3 комментария
  • Можно ли просмотреть репосты записи в Telegram?

    Нельзя.
    Максимум что ты можешь - ответить на вопрос:
    1. репостил ли какой-то открытый канал твой пост.
    2. репостили ли в каком-то чате в рамках той истории, которую ты видишь, твой пост, не убирая ссылку на оригинал.

    В обоих случаях тебе нужно будет прочитать всю историю из соответствующих аккаунтов.
    Сам Telegram предоставляет только количественную статистику.
    Ответ написан
    3 комментария
  • Можно ли найти все варианты слагаемых числа,что бы слагаемых было ровно 20?

    Stalker_RED
    @Stalker_RED
    Можно. Двадцать единичек, и 445.
    Или 20 нулей и 465, под ваше описание задачи вполне подходит.
    Чётче описываете условие.
    Ответ написан
    Комментировать